import javax.xml.bind.JAXBException;\r
import javax.xml.bind.Unmarshaller;\r
\r
+import org.simantics.utils.datastructures.MapList;\r
import org.simantics.xml.sax.configuration.Configuration;\r
import org.w3._2001.xmlschema.Annotation;\r
import org.w3._2001.xmlschema.Import;\r
\r
private List<SchemaConverter> parent = new ArrayList<>();\r
private List<SchemaConverter> subConverters = new ArrayList<>();\r
- private Map<String,SchemaConverter> nameMap;\r
+ private Map<String,SchemaConverter> fileMap;\r
+ private MapList<String,SchemaConverter> schemaNSMap;\r
+ private MapList<String,SchemaConverter> shortNameMap;\r
\r
+ String schemaNs;\r
String ontologyUri;\r
String className;\r
String name;\r
this.parent.add(parent);\r
parent.subConverters.add(this);\r
} else {\r
- nameMap = new HashMap<>();\r
+ fileMap = new HashMap<>();\r
+ schemaNSMap = new MapList<>();\r
+ shortNameMap = new MapList<>();\r
}\r
- getRoot().nameMap.put(schemaFile.getAbsolutePath(), this);\r
+ getRoot().fileMap.put(schemaFile.getAbsolutePath(), this);\r
+ }\r
+ \r
+ public List<SchemaConverter> getConverter(String schemaNS) {\r
+ return getRoot().schemaNSMap.getValues(schemaNS);\r
}\r
\r
public void setFileImport(ManualSchemaFileImport fileImport) {\r
if (!schemaFile.exists())\r
throw new FileNotFoundException(schemaFile.getAbsolutePath());\r
}\r
- SchemaConverter subConverter = getRoot().nameMap.get((schemaFile.getAbsolutePath()));\r
+ SchemaConverter subConverter = getRoot().fileMap.get((schemaFile.getAbsolutePath()));\r
if (subConverter == null) {\r
subConverter = new SchemaConverter(this,schemaFile, conversionFile, outputPlugin);\r
subConverter.createPGraph = this.createPGraph;\r
\r
boolean init = false;\r
\r
+ protected void assignShortName() {\r
+ shortName = name.substring(0, 3).toUpperCase();\r
+ SchemaConverter root = getRoot();\r
+ if (!root.shortNameMap.containsKey(shortName)) {\r
+ root.shortNameMap.add(shortName, this);\r
+ return;\r
+ } else {\r
+ SchemaConverter sc = root.shortNameMap.getValues(shortName).get(0);\r
+ if (sc.schemaNs.equals(schemaNs)) {\r
+ root.shortNameMap.add(shortName, this);\r
+ return;\r
+ }\r
+ }\r
+ int i = 1;\r
+ while (true) {\r
+ String n = shortName+i;\r
+ if (!root.shortNameMap.containsKey(n)) {\r
+ shortName = n;\r
+ root.shortNameMap.add(shortName, this);\r
+ return;\r
+ } else {\r
+ SchemaConverter sc = root.shortNameMap.getValues(n).get(0);\r
+ if (sc.schemaNs.equals(schemaNs)) {\r
+ shortName = n;\r
+ root.shortNameMap.add(shortName, this);\r
+ return;\r
+ }\r
+ }\r
+ i++;\r
+ }\r
+ }\r
+ \r
protected void init() throws IOException, JAXBException {\r
if (init)\r
return;\r
header[2] = "File " + schemaFile.getAbsolutePath();\r
header[3] = "Date " + new Date().toString();\r
\r
- \r
- ontologyUri = schema.getTargetNamespace();\r
+ schemaNs = schema.getTargetNamespace();\r
+ ontologyUri = schemaNs;\r
if (ontologyUri == null) {\r
ontologyUri = getSchemaFile().getName();\r
\r
\r
\r
className = getPluginName() + "." + name;\r
- shortName = name.substring(0, 3).toUpperCase();\r
+ assignShortName();\r
+ if (schemaNs != null)\r
+ getRoot().schemaNSMap.add(schemaNs, this);\r
\r
\r
for (OpenAttrs attrs : schema.getIncludeOrImportOrRedefine()) {\r