In StarUML4 "navigable" attribute on relations was of type boolean (checkbox) and per default true.
Now with
StarUML5.0.1
sudenly the "navigable" attribute default is 'unspecified'.
This means that all relations which were defined navigable, now suddenly are 'unspecified'.
This is very annoying and I had to write following java-app for adapting our mdj.files
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class StarUmlMDJFileFixer {
public static void main(String[] args) {
try {
// read the Version 4 mdj file
FileReader reader = new FileReader(args[0]);
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
JSONArray models = (JSONArray) jsonObject.get("ownedElements");
JSONArray elements = (JSONArray) ((JSONObject) models.get(0)).get("ownedElements");
JSONObject businessclasses = (JSONObject) elements.get(0);
//System.out.println(businessclasses);
JSONArray classes = (JSONArray) businessclasses.get("ownedElements");
for (int i = 0, size = classes.size(); i < size; i++)
{
JSONObject clazz = (JSONObject) classes.get(i);
System.out.println(clazz.get("name"));
JSONArray roles = (JSONArray) clazz.get("ownedElements");
if (roles != null)
{
for (int j = 0; j < roles.size(); j++)
{
JSONObject role = (JSONObject) roles.get(j);
if ( "UMLAssociation".equals(role.get("_type")))
{
JSONObject end1 = (JSONObject) role.get("end1");
if (end1.get("navigable") == null)
end1.put("navigable", "navigable");
else
end1.put("navigable", "notNavigable");
JSONObject end2 = (JSONObject) role.get("end2");
if (end2.get("navigable") == null)
end2.put("navigable", "navigable");
else
end2.put("navigable", "notNavigable");
}
}
}
}
models.get(0).get("ownedElements");
OutputStream os = new FileOutputStream(new File("adaptedto501.mdj"));
PrintWriter p = new PrintWriter(os);
p.write(jsonObject.toString());
p.close();
System.out.println("FINISHED!");
} catch (Exception ex) {}
}