From: Dennis S. <dso...@us...> - 2010-07-07 02:39:40
|
Update of /cvsroot/jibx/core/build/src/org/jibx/schema/codegen In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv5112/build/src/org/jibx/schema/codegen Modified Files: CodeGen.java CodeGenCommandLine.java Added Files: CodeGenParameters.java Log Message: Restructure code generation interface for easier use by other tools, including adding an interface defining access methods for the parameters needed by code generation. --- NEW FILE: CodeGenParameters.java --- /* * Copyright (c) 2010, Dennis M. Sosnoski. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the * following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following * disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of * JiBX nor the names of its contributors may be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.jibx.schema.codegen; import java.io.File; import java.net.URL; import java.util.List; import org.jibx.schema.codegen.custom.SchemasetCustom; /** * Interface for code generation parameters. */ public interface CodeGenParameters { /** * Get binding name. * * @return name (<code>null</code> if not set) */ String getBindingName(); /** * Get customizations model root. * * @return customizations */ SchemasetCustom getCustomRoot(); /** * Get file to be used for finding differences in generated data model. * * @return difference file (<code>null</code> if none) */ File getDifferenceFile(); /** * Get the list of paths for bindings to be used for matching schema definitions. * * @return paths (empty if no paths specified) */ List getIncludePaths(); /** * Get file to be used for dumping generated data model. * * @return dump file (<code>null</code> if none) */ File getModelFile(); /** * Get default package for no-namespace schemas. * * @return package (<code>null</code> if not set) */ String getNonamespacePackage(); /** * Get root URL for schemas. * * @return directory */ URL getSchemaRoot(); /** * Get namespace to be used when no schemas with namespaces are being generated. * * @return namespace URI (<code>null</code> if unspecified) */ String getUsingNamespace(); /** * Get generate directory. * * @return directory */ File getGeneratePath(); /** * Check if verbose output requested. * * @return verbose */ boolean isVerbose(); } Index: CodeGen.java =================================================================== RCS file: /cvsroot/jibx/core/build/src/org/jibx/schema/codegen/CodeGen.java,v retrieving revision 1.51 retrieving revision 1.52 diff -C2 -d -r1.51 -r1.52 *** CodeGen.java 29 Apr 2010 12:34:30 -0000 1.51 --- CodeGen.java 7 Jul 2010 02:39:32 -0000 1.52 *************** *** 25,31 **** --- 25,33 ---- import java.io.BufferedWriter; import java.io.File; + import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; + import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; *************** *** 82,85 **** --- 84,91 ---- import org.jibx.schema.elements.UnionElement; import org.jibx.schema.support.SchemaTypes; + import org.jibx.schema.validation.ProblemConsoleLister; + import org.jibx.schema.validation.ProblemHandler; + import org.jibx.schema.validation.ProblemLogLister; + import org.jibx.schema.validation.ProblemMultiHandler; import org.jibx.schema.validation.ValidationContext; import org.jibx.schema.validation.ValidationProblem; *************** *** 268,274 **** * * @param pack package to be used by default for no-namespaced schemas (non-<code>null</code>) * @return <code>true</code> if successful, <code>false</code> if error */ ! public boolean customizeSchemas(String pack) { // TODO: remove this once list and union handling fully implemented --- 274,281 ---- * * @param pack package to be used by default for no-namespaced schemas (non-<code>null</code>) + * @param handler validation problem handler * @return <code>true</code> if successful, <code>false</code> if error */ ! public boolean customizeSchemas(String pack, ProblemHandler handler) { // TODO: remove this once list and union handling fully implemented *************** *** 373,377 **** // check all the customizations m_global.checkSchemas(m_validationContext); ! return !m_validationContext.reportProblems(); } --- 380,384 ---- // check all the customizations m_global.checkSchemas(m_validationContext); ! return !m_validationContext.reportProblems(handler); } *************** *** 1045,1049 **** if (exten.isInlined()) { if (def.isInlineBlocked()) { ! System.err.println("Cannot inline " + SchemaUtils.describeComponent(def.getSchemaComponent()) + " because of use as collection value, type for global element, or other usage"); } else { def.setInline(true); --- 1052,1056 ---- if (exten.isInlined()) { if (def.isInlineBlocked()) { ! s_logger.error("Cannot inline " + SchemaUtils.describeComponent(def.getSchemaComponent()) + " because of use as collection value, type for global element, or other usage"); } else { def.setInline(true); *************** *** 1471,1475 **** * @return root package for binding */ ! public String generate(boolean verbose, boolean usenns, Map elemmap, Map typemap) { // build the item structure for each definition and link to pregenerated classes --- 1478,1482 ---- * @return root package for binding */ ! public String buildDataModel(boolean verbose, boolean usenns, Map elemmap, Map typemap) { // build the item structure for each definition and link to pregenerated classes *************** *** 1582,1586 **** /** * Write the binding definitions file(s). This method can only be used after ! * {@link #generate(boolean, boolean, Map, Map)} is called. * * @param name root binding definition file name (use customization, or default, if <code>null</code>) --- 1589,1593 ---- /** * Write the binding definitions file(s). This method can only be used after ! * {@link #buildDataModel(boolean, boolean, Map, Map)} is called. * * @param name root binding definition file name (use customization, or default, if <code>null</code>) *************** *** 1664,1679 **** * @param schemas * @param vctx */ ! private static void listSchemas(SchemaElement[] schemas, ValidationContext vctx) { Set topset = new HashSet(); for (int i = 0; i < schemas.length; i++) { SchemaElement schema = schemas[i]; topset.add(schema); ! System.out.println(" " + "top-level schema " + schema.getResolver().getName()); } for (Iterator iter = vctx.iterateSchemas(); iter.hasNext();) { SchemaElement schema = (SchemaElement)iter.next(); if (!topset.contains(schema)) { ! System.out.println(" " + "referenced schema " + schema.getResolver().getName()); } } --- 1671,1687 ---- * @param schemas * @param vctx + * @param handler */ ! private static void listSchemas(SchemaElement[] schemas, ValidationContext vctx, ProblemHandler handler) { Set topset = new HashSet(); for (int i = 0; i < schemas.length; i++) { SchemaElement schema = schemas[i]; topset.add(schema); ! handler.report(" " + "top-level schema " + schema.getResolver().getName()); } for (Iterator iter = vctx.iterateSchemas(); iter.hasNext();) { SchemaElement schema = (SchemaElement)iter.next(); if (!topset.contains(schema)) { ! handler.report(" " + "referenced schema " + schema.getResolver().getName()); } } *************** *** 1684,1691 **** * * @param packages */ ! private static void listGeneratedPackages(List packages) { int top = 0; int total = 0; for (Iterator iter = packages.iterator(); iter.hasNext();) { PackageHolder hold = (PackageHolder)iter.next(); --- 1692,1701 ---- * * @param packages + * @param handler */ ! private static void listGeneratedPackages(List packages, ProblemHandler handler) { int top = 0; int total = 0; + StringBuffer buff = new StringBuffer(); for (Iterator iter = packages.iterator(); iter.hasNext();) { PackageHolder hold = (PackageHolder)iter.next(); *************** *** 1694,1710 **** int topcount = hold.getTopClassCount(); top += topcount; ! System.out.print("Generated " + topcount + " top-level classes "); if (count != topcount) { ! System.out.print("(plus " + (count-topcount) + " inner classes) "); } ! System.out.println("in package " + hold.getName()); total += count; } } if (total == top) { ! System.out.println("Total classes in model: " + top); } else { ! System.out.println("Total top-level classes in model: " + top); ! System.out.println("Total classes (including inner classes) in model: " + total); } } --- 1704,1722 ---- int topcount = hold.getTopClassCount(); top += topcount; ! buff.setLength(0); ! buff.append("Generated " + topcount + " top-level classes "); if (count != topcount) { ! buff.append("(plus " + (count-topcount) + " inner classes) "); } ! buff.append("in package " + hold.getName()); ! handler.report(buff.toString()); total += count; } } if (total == top) { ! handler.report("Total classes in model: " + top); } else { ! handler.report("Total top-level classes in model: " + top); ! handler.report("Total classes (including inner classes) in model: " + total); } } *************** *** 1788,1796 **** * @param elemmap map from element qualified name to class data * @param typemap map from type qualified name to class data * @return binding * @throws JiBXException * @throws IOException */ ! public static BindingElement processPregeneratedBinding(URL url, Map elemmap, Map typemap) throws JiBXException, IOException { --- 1800,1809 ---- * @param elemmap map from element qualified name to class data * @param typemap map from type qualified name to class data + * @param handler validation error and problem handler * @return binding * @throws JiBXException * @throws IOException */ ! public static BindingElement processPregeneratedBinding(URL url, Map elemmap, Map typemap, ProblemHandler handler) throws JiBXException, IOException { *************** *** 1822,1831 **** ArrayList probs = vctx.getProblems(); if (probs.size() > 0) { for (int i = 0; i < probs.size(); i++) { org.jibx.binding.model.ValidationProblem prob = (org.jibx.binding.model.ValidationProblem)probs.get(i); ! System.out.print(prob.getSeverity() >= ! ValidationProblem.ERROR_LEVEL ? "Error: " : "Warning: "); ! System.out.println(prob.getDescription()); } if (vctx.getErrorCount() > 0 || vctx.getFatalCount() > 0) { --- 1835,1847 ---- ArrayList probs = vctx.getProblems(); if (probs.size() > 0) { + StringBuffer buff = new StringBuffer(); for (int i = 0; i < probs.size(); i++) { org.jibx.binding.model.ValidationProblem prob = (org.jibx.binding.model.ValidationProblem)probs.get(i); ! buff.setLength(0); ! buff.append(prob.getSeverity() >= org.jibx.binding.model.ValidationProblem.ERROR_LEVEL ? ! "Error: " : "Warning: "); ! buff.append(prob.getDescription()); ! handler.report(buff.toString()); } if (vctx.getErrorCount() > 0 || vctx.getFatalCount() > 0) { *************** *** 1937,2112 **** if (errors.size() > 0) { for (Iterator iter = errors.iterator(); iter.hasNext();) { ! System.err.println(iter.next()); } System.exit(2); } ! // load the full set of schemas ! CodeGen inst = new CodeGen(parms.getCustomRoot(), parms.getSchemaRoot(), parms.getGeneratePath()); ! ValidationContext vctx = inst.m_validationContext; ! SchemaElement[] schemas = ValidationUtils.load(fileset.asList(), parms.getUsingNamespace(), vctx); ! boolean err = false; ! if (!vctx.reportProblems()) { ! String pack = parms.getNonamespacePackage(); ! if (pack == null) { ! pack = "dflt"; } ! if (inst.customizeSchemas(pack)) { ! ! // report on schemas loaded ! System.out.print("Loaded and validated " + fileset.size() + " specified schema(s)"); ! int refcount = vctx.getSchemaCount() - fileset.size(); ! if (refcount > 0) { ! System.out.print(" and " + refcount + " referenced schema(s)"); ! } ! if (parms.isVerbose()) { ! System.out.println(':'); ! listSchemas(schemas, vctx); ! } else { ! System.out.println(); ! } ! // apply the schema customizations and revalidate modified schema ! inst.applyAndNormalize(); ! inst.pruneDefinitions(); ! ValidationUtils.validateSchemas(schemas, inst.m_validationContext); ! if (!vctx.reportProblems()) { ! ! // load any precompiled bindings ! Map elemmap = new HashMap(); ! Map typemap = new HashMap(); ! List includes = new ArrayList(); ! boolean usenns = false; ! for (Iterator iter = parms.getIncludePaths().iterator(); iter.hasNext();) { ! String path = (String)iter.next(); ! URL url; ! File file = null; ! if (ClasspathUrlExtender.isClasspathUrl(path)) { ! url = ClasspathUrlExtender.buildURL(null, path); ! } else { ! file = new File(path); ! url = file.toURI().toURL(); } try { ! BindingElement binding = processPregeneratedBinding(url, elemmap, typemap); ! if (!usenns) { ! usenns = checkNoNamespace(binding); ! } ! try { ! org.jibx.binding.model.IncludeElement include = ! new org.jibx.binding.model.IncludeElement(); ! if (file == null) { ! include.setIncludePath(path); ! } else { ! include.setIncludePath(relativeFilePath(parms.getGeneratePath(), file)); ! } ! include.setPrecompiled(true); ! includes.add(include); ! } catch (IOException e) { ! System.err.println("Error processing path " + path + ": " + e.getMessage()); ! err = true; } } catch (IOException e) { ! System.err.println("Pregenerated binding not found with path: " + path); ! err = true; } } ! if (err) { ! System.exit(2); ! } ! ! // generate code and bindings, using any existing bindings supplied ! inst.generate(parms.isVerbose(), usenns, elemmap, typemap); ! List packages = inst.m_packageDirectory.getPackages(); ! PackageHolder top = null; ! for (Iterator iter = packages.iterator(); iter.hasNext();) { ! PackageHolder holder = (PackageHolder)iter.next(); ! if (holder.getClassCount() > 0) { ! if (top == null) { ! top = holder; ! } else { ! ! // find common parent package of all packages so far processed ! outer: while (true) { ! PackageHolder scan = holder; ! while (true) { ! if (scan == top) { ! break outer; ! } else if (scan.getName().length() < top.getName().length()) { ! top = top.getParent(); ! break; ! } else { ! scan = scan.getParent(); ! } } } - } } } ! String rootpack = top == null ? null : top.getName(); ! inst.writeBindings(parms.getBindingName(), rootpack, includes); ! ! // print the total number of classes generated ! listGeneratedPackages(packages); ! ! // check if prior data model dump file provided for comparison ! File model = parms.getDifferenceFile(); ! if (model != null) { ! if (model.exists()) { ! ! // read the data model file ! BufferedReader reader = new BufferedReader(new FileReader(model)); ! StringObjectPair[] image = DataModelUtils.readImage(reader); ! String diff = DataModelUtils.imageDiff(image, ! DataModelUtils.getImage(inst.m_packageDirectory)); ! if (diff == null) { ! System.out.println("No difference found from data model file " + model.getPath()); ! } else { ! System.out.println(diff); ! } ! } else { ! System.err.println("Difference data model file " + model.getPath() + " not found"); } } ! // check if dump file to be output ! model = parms.getModelFile(); ! if (model != null) { ! ! // delete the file if it already exists ! if (model.exists()) { ! model.delete(); ! } ! model.createNewFile(); ! ! // now print out the class details by package ! BufferedWriter writer = new BufferedWriter(new FileWriter(model)); ! DataModelUtils.writeImage(inst.m_packageDirectory, writer); ! writer.close(); ! } ! } else { ! System.err.println("Terminating due to errors in normalized schemas - please report the problem"); ! System.exit(2); } } else { ! System.err.println("Terminating due to errors in customized schemas"); ! System.exit(2); } } else { ! System.err.println("Terminating due to errors in input schemas"); ! System.exit(2); } - } else { ! if (args.length > 0) { ! System.err.println("Terminating due to command line or customization errors"); ! } else { ! parms.printUsage(); ! } ! System.exit(1); } } --- 1953,2149 ---- if (errors.size() > 0) { for (Iterator iter = errors.iterator(); iter.hasNext();) { ! s_logger.error(iter.next()); } System.exit(2); } ! // handle code generation from schemas ! ProblemMultiHandler handler = new ProblemMultiHandler(); ! handler.addHandler(new ProblemConsoleLister()); ! handler.addHandler(new ProblemLogLister(s_logger)); ! generate(parms, fileset.asList(), handler); ! ! } else { ! if (args.length > 0) { ! s_logger.error("Terminating due to command line or customization errors"); ! } else { ! parms.printUsage(); ! } ! System.exit(1); ! } ! } ! ! /** ! * Generate code from a list of schemas. ! * ! * @param parms ! * @param fileset ! * @param handler ! * @return <code>true</code> if successful, <code>false</code> if failure ! * @throws JiBXException ! * @throws IOException ! * @throws MalformedURLException ! * @throws FileNotFoundException ! */ ! private static boolean generate(CodeGenParameters parms, List fileset, ProblemHandler handler) throws JiBXException, ! IOException, MalformedURLException, FileNotFoundException { ! ! // load the full set of schemas ! CodeGen inst = new CodeGen(parms.getCustomRoot(), parms.getSchemaRoot(), parms.getGeneratePath()); ! ValidationContext vctx = inst.m_validationContext; ! SchemaElement[] schemas = ValidationUtils.load(fileset, parms.getUsingNamespace(), vctx); ! if (!vctx.reportProblems(handler)) { ! String pack = parms.getNonamespacePackage(); ! if (pack == null) { ! pack = "dflt"; ! } ! if (inst.customizeSchemas(pack, handler)) { ! ! // report on schemas loaded ! StringBuffer buff = new StringBuffer(); ! buff.append("Loaded and validated " + fileset.size() + " specified schema(s)"); ! int refcount = vctx.getSchemaCount() - fileset.size(); ! if (refcount > 0) { ! buff.append(" and " + refcount + " referenced schema(s)"); } ! if (parms.isVerbose()) { ! buff.append(':'); ! handler.report(buff.toString()); ! listSchemas(schemas, vctx, handler); ! } else { ! handler.report(buff.toString()); ! } ! ! // apply the schema customizations and revalidate modified schema ! inst.applyAndNormalize(); ! inst.pruneDefinitions(); ! ValidationUtils.validateSchemas(schemas, inst.m_validationContext); ! if (!vctx.reportProblems(handler)) { ! // load any precompiled bindings ! Map elemmap = new HashMap(); ! Map typemap = new HashMap(); ! List includes = new ArrayList(); ! boolean usenns = false; ! for (Iterator iter = parms.getIncludePaths().iterator(); iter.hasNext();) { ! String path = (String)iter.next(); ! URL url; ! File file = null; ! if (ClasspathUrlExtender.isClasspathUrl(path)) { ! url = ClasspathUrlExtender.buildURL(null, path); ! } else { ! file = new File(path); ! url = file.toURI().toURL(); ! } ! try { ! BindingElement binding = processPregeneratedBinding(url, elemmap, typemap, handler); ! if (!usenns) { ! usenns = checkNoNamespace(binding); } try { ! org.jibx.binding.model.IncludeElement include = ! new org.jibx.binding.model.IncludeElement(); ! if (file == null) { ! include.setIncludePath(path); ! } else { ! include.setIncludePath(relativeFilePath(parms.getGeneratePath(), file)); } + include.setPrecompiled(true); + includes.add(include); } catch (IOException e) { ! handler.terminate("Error processing path " + path, e); ! return false; } + } catch (IOException e) { + handler.terminate("Pregenerated binding not found with path: " + path); + return false; } ! } ! ! // generate code and bindings, using any existing bindings supplied ! inst.buildDataModel(parms.isVerbose(), usenns, elemmap, typemap); ! List packages = inst.m_packageDirectory.getPackages(); ! PackageHolder top = null; ! for (Iterator iter = packages.iterator(); iter.hasNext();) { ! PackageHolder holder = (PackageHolder)iter.next(); ! if (holder.getClassCount() > 0) { ! if (top == null) { ! top = holder; ! } else { ! ! // find common parent package of all packages so far processed ! outer: while (true) { ! PackageHolder scan = holder; ! while (true) { ! if (scan == top) { ! break outer; ! } else if (scan.getName().length() < top.getName().length()) { ! top = top.getParent(); ! break; ! } else { ! scan = scan.getParent(); } } } + } } ! } ! String rootpack = top == null ? null : top.getName(); ! inst.writeBindings(parms.getBindingName(), rootpack, includes); ! ! // print the total number of classes generated ! listGeneratedPackages(packages, handler); ! ! // check if prior data model dump file provided for comparison ! File model = parms.getDifferenceFile(); ! if (model != null) { ! if (model.exists()) { ! ! // read the data model file ! BufferedReader reader = new BufferedReader(new FileReader(model)); ! StringObjectPair[] image = DataModelUtils.readImage(reader); ! String diff = DataModelUtils.imageDiff(image, ! DataModelUtils.getImage(inst.m_packageDirectory)); ! if (diff == null) { ! handler.report("No difference found from data model file " + model.getPath()); } else { ! handler.report(diff); } + + } else { + handler.report("Difference data model file " + model.getPath() + " not found"); } + } + + // check if dump file to be output + model = parms.getModelFile(); + if (model != null) { ! // delete the file if it already exists ! if (model.exists()) { ! model.delete(); } ! model.createNewFile(); ! ! // now print out the class details by package ! BufferedWriter writer = new BufferedWriter(new FileWriter(model)); ! DataModelUtils.writeImage(inst.m_packageDirectory, writer); ! writer.close(); ! } } else { ! handler.terminate("Terminating due to errors in normalized schemas - please report the problem"); ! return false; } } else { ! handler.terminate("Terminating due to errors in customized schemas"); ! return false; } } else { ! handler.terminate("Terminating due to errors in input schemas"); ! return false; } + return true; } Index: CodeGenCommandLine.java =================================================================== RCS file: /cvsroot/jibx/core/build/src/org/jibx/schema/codegen/CodeGenCommandLine.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** CodeGenCommandLine.java 29 Apr 2010 07:46:45 -0000 1.13 --- CodeGenCommandLine.java 7 Jul 2010 02:39:32 -0000 1.14 *************** *** 23,27 **** import java.io.File; - import java.io.FileInputStream; import java.io.IOException; import java.net.MalformedURLException; --- 23,26 ---- *************** *** 31,43 **** import java.util.Map; import org.jibx.custom.CustomizationCommandLineBase; - import org.jibx.runtime.BindingDirectory; - import org.jibx.runtime.IBindingFactory; - import org.jibx.runtime.IUnmarshallingContext; import org.jibx.runtime.JiBXException; - import org.jibx.schema.codegen.custom.SchemaCustom; import org.jibx.schema.codegen.custom.SchemasetCustom; ! import org.jibx.schema.validation.ValidationContext; ! import org.jibx.schema.validation.ValidationProblem; import org.jibx.util.ReflectionUtilities; --- 30,40 ---- import java.util.Map; + import org.apache.log4j.Logger; import org.jibx.custom.CustomizationCommandLineBase; import org.jibx.runtime.JiBXException; import org.jibx.schema.codegen.custom.SchemasetCustom; ! import org.jibx.schema.validation.ProblemConsoleLister; ! import org.jibx.schema.validation.ProblemLogLister; ! import org.jibx.schema.validation.ProblemMultiHandler; import org.jibx.util.ReflectionUtilities; *************** *** 47,52 **** * @author Dennis M. Sosnoski */ ! public class CodeGenCommandLine extends CustomizationCommandLineBase { /** Ordered array of extra usage lines. */ private static final String[] EXTRA_USAGE_LINES = new String[] { --- 44,52 ---- * @author Dennis M. Sosnoski */ ! public class CodeGenCommandLine extends CustomizationCommandLineBase implements CodeGenParameters { + /** Logger for class. */ + private static final Logger s_logger = Logger.getLogger(CodeGenCommandLine.class.getName()); + /** Ordered array of extra usage lines. */ private static final String[] EXTRA_USAGE_LINES = new String[] { *************** *** 68,72 **** private String m_defaultPackage; ! /** Schema root URL path. */ private String m_rootPath; --- 68,72 ---- private String m_defaultPackage; ! /** Schema root path. */ private String m_rootPath; *************** *** 104,116 **** /** - * Get root path for schemas. - * - * @return root path from command line parameters, <code>null</code> if not specified - */ - public String getRootPath() { - return m_rootPath; - } - - /** * Get root URL for schemas. * --- 104,107 ---- *************** *** 142,146 **** * Get namespace to be used when no schemas with namespaces are being generated. * ! * @return namespace URI */ public String getUsingNamespace() { --- 133,137 ---- * Get namespace to be used when no schemas with namespaces are being generated. * ! * @return namespace URI (<code>null</code> if unspecified) */ public String getUsingNamespace() { *************** *** 167,179 **** /** - * Get default package for all schemas. - * - * @return package (<code>null</code> if not set) - */ - public String getDefaultPackage() { - return m_defaultPackage; - } - - /** * Get file to be used for dumping generated data model. * --- 158,161 ---- *************** *** 196,200 **** * Get the list of paths for bindings to be used for matching schema definitions. * ! * @return paths */ public List getIncludePaths() { --- 178,182 ---- * Get the list of paths for bindings to be used for matching schema definitions. * ! * @return paths (empty if no paths specified) */ public List getIncludePaths() { *************** *** 292,329 **** // load customizations and check for errors ! ValidationContext vctx = new ValidationContext(); ! if (path == null) { ! m_customRoot = new SchemasetCustom((SchemasetCustom)null); ! } else { ! ! // unmarshal either a <schema-set> or <schema> element ! IBindingFactory fact = BindingDirectory.getFactory(SchemasetCustom.class); ! IUnmarshallingContext ictx = fact.createUnmarshallingContext(); ! FileInputStream is = new FileInputStream(path); ! ictx.setDocument(is, null); ! ictx.setUserContext(vctx); ! Object obj = ictx.unmarshalElement(); ! if (obj instanceof SchemasetCustom) { ! m_customRoot = (SchemasetCustom)obj; ! } else if (obj instanceof SchemaCustom) { ! m_customRoot = new SchemasetCustom((SchemaCustom)obj); ! } else { ! System.out.println("Customization document root element must be 'schema-set' or 'schema'"); ! return false; ! } ! ! } ! ArrayList probs = vctx.getProblems(); ! if (probs.size() > 0) { ! for (int i = 0; i < probs.size(); i++) { ! ValidationProblem prob = (ValidationProblem)probs.get(i); ! System.out.print(prob.getSeverity() >= ! ValidationProblem.ERROR_LEVEL ? "Error: " : "Warning: "); ! System.out.println(prob.getDescription()); ! } ! if (vctx.getErrorCount() > 0 || vctx.getFatalCount() > 0) { ! return false; ! } ! } // set specified default package on root customization element --- 274,281 ---- // load customizations and check for errors ! ProblemMultiHandler handler = new ProblemMultiHandler(); ! handler.addHandler(new ProblemConsoleLister()); ! handler.addHandler(new ProblemLogLister(s_logger)); ! m_customRoot = SchemasetCustom.loadCustomizations(path, handler); // set specified default package on root customization element |