1 package org.simantics.xml.sax;
\r
4 import java.io.IOException;
\r
5 import java.io.PrintWriter;
\r
6 import java.util.ArrayList;
\r
7 import java.util.HashMap;
\r
8 import java.util.List;
\r
9 import java.util.Map;
\r
11 import javax.xml.namespace.QName;
\r
13 import org.simantics.xml.sax.configuration.Configuration;
\r
14 import org.w3._2001.xmlschema.AttributeGroupRef;
\r
15 import org.w3._2001.xmlschema.Element;
\r
16 import org.w3._2001.xmlschema.Schema;
\r
18 public abstract class JavaGenerator extends SchemaConversionBase{
\r
20 String commentTag = "//";
\r
23 String ontologyClassName;
\r
24 SchemaConverter converter;
\r
26 List<String> ruleClassNames = new ArrayList<String>();
\r
28 String ontShort = "ONT";
\r
30 File importParserDir;
\r
31 String elementPackageName;
\r
33 Map<SchemaObject, FileWriter> writers = new HashMap<SchemaObject, ImporterGenerator.FileWriter>();
\r
35 public JavaGenerator(Configuration configuration) {
\r
36 super(configuration);
\r
40 protected PrintWriter createFile(File file) throws IOException {
\r
42 file.createNewFile();
\r
43 PrintWriter writer = new PrintWriter(file);
\r
44 for (String s : converter.getHeader()) {
\r
45 writer.println(commentTag + " " + s);
\r
51 protected String getValueGetterMethod(TypeEntry binding,String name) {
\r
52 if (binding == null)
\r
53 return name+".getValue()";
\r
54 return binding.getValueGetterMethod(name);
\r
57 protected String getValueGetter(TypeEntry binding,String name) {
\r
58 if (binding == null)
\r
60 return binding.getValueGetter(name);
\r
62 protected String getValueGetter(TypeEntry binding) {
\r
63 if (binding == null)
\r
65 return binding.getValueGetter();
\r
68 public String getComplexTypePrefix() {
\r
69 return "ComplexTypes_";
\r
72 public String getAttributeGroupPrefix() {
\r
73 return "AttributeGroups_";
\r
77 protected void handle(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements) {
\r
78 if (indicator.getType() == SchemaElement.ElementType.SEQUENCE || (indicator.getType() == SchemaElement.ElementType.CHOICE && indicator.getRestriction().many())) {
\r
79 for (SchemaElement e : elements) {
\r
80 handle(parent, indicator, e);
\r
82 } else if (indicator.getType() == SchemaElement.ElementType.CHOICE) {
\r
83 String name = getChoiceName(elements);
\r
85 for (SchemaElement e : elements) {
\r
86 Element localElement = e.getElement();
\r
87 if (localElement.getName() != null) {
\r
88 QName refType = localElement.getType();
\r
89 if (refType != null)
\r
90 //handleIndicator(parent, indicator, e, false, name, refType);
\r
91 handleIndicator(parent, indicator, e, name, RefType.Type);
\r
92 } else if (localElement.getRef() != null) {
\r
93 //QName refType = localElement.getRef();
\r
94 //handleIndicator(parent, indicator, e, true, name, refType);
\r
95 handleIndicator(parent, indicator, e, name, RefType.Reference);
\r
102 protected String getOntologyImport() {
\r
103 return this.ontologyClassName+" " +ontShort.substring(0, 3)+" = "+this.ontologyClassName+".getInstance(graph);";
\r
106 protected static class FileWriter {
\r
107 public PrintWriter writer;
\r
109 public PrintWriter delayedWriter;
\r
110 public PrintWriter delayedWriter2;
\r
113 protected FileWriter getWriter(SchemaObject obj) {
\r
114 SchemaObject s = obj;
\r
115 while (s != null) {
\r
116 FileWriter fw = writers.get(s);
\r
125 public String getName(SchemaObject obj) {
\r
126 if (obj.getParent() == null) {
\r
127 switch (obj.getType()) {
\r
129 return getComplexTypePrefix()+obj.getName();
\r
131 return obj.getName();
\r
132 case ATTRIBUTE_GROUP:
\r
133 return getAttributeGroupPrefix()+obj.getName();
\r
135 return obj.getName();
\r
138 SchemaObject o = obj;
\r
139 SchemaObject prev = null;
\r
142 if (o.getName() != null)
\r
143 name = o.getName()+"_"+name;
\r
146 if (prev.getObj() instanceof AttributeGroupRef)
\r
149 name = name.substring(0, name.length()-1);
\r
150 switch (prev.getType()) {
\r
152 return getComplexTypePrefix()+name;
\r
155 case ATTRIBUTE_GROUP:
\r
156 return getAttributeGroupPrefix()+name;
\r
161 throw new RuntimeException();
\r
165 public String getName(SchemaObject obj, String rel) {
\r
166 if (obj.getParent() == null) {
\r
167 switch (obj.getType()) {
\r
169 return getComplexTypePrefix()+rel+obj.getName();
\r
171 return rel+obj.getName();
\r
172 case ATTRIBUTE_GROUP:
\r
173 return getAttributeGroupPrefix()+rel+obj.getName();
\r
175 return rel+obj.getName();
\r
178 SchemaObject o = obj;
\r
179 SchemaObject prev = null;
\r
182 if (o.getName() != null)
\r
183 name = o.getName()+"_"+name;
\r
187 name = name.substring(0, name.length()-1);
\r
188 switch (prev.getType()) {
\r
190 return getComplexTypePrefix()+rel+name;
\r
193 case ATTRIBUTE_GROUP:
\r
194 return getAttributeGroupPrefix()+rel+name;
\r
199 throw new RuntimeException();
\r
204 protected void writeClass(PrintWriter writer,boolean abst, String elementId, String className, String baseClass, List<String> interfaces) {
\r
205 writer.println("@SuppressWarnings(\"unused\")");
\r
206 writer.print("public " +(abst ? "abstract " : "") + "class " + className + " extends "+baseClass);
\r
207 if (interfaces.size() > 0) {
\r
208 writer.print(" implements ");
\r
209 for (int i = 0; i < interfaces.size(); i++) {
\r
210 writer.print(interfaces.get(i));
\r
211 if (i < interfaces.size() -1 )
\r
215 writer.println("{");
\r
217 writer.println(" @Override");
\r
218 writer.println(" public java.lang.String getElementId() {");
\r
219 if (elementId != null)
\r
220 writer.println(" return \""+elementId+"\";");
\r
221 else // complex types cannot be parsed directly with name/id reference.
\r
222 writer.println(" return null;");
\r
223 writer.println(" }");
\r