public static void main(String[] args) {
if (args==null || args.length == 0)
{
printHelp();
System.exit(0);
return;
}
Set flags = new HashSet();
flags.add("h");
flags.add("help");
flags.add("usage");
flags.add("license");
flags.add("version");
flags.add("verbose");
flags.add("validate");
Set opts = new HashSet();
opts.add("design");
opts.add("simple-content-types");
opts.add("enumerations");
opts.add("outDir");
opts.add("outPrefix");
CommandLine cl = new CommandLine(args, flags, opts);
Inst2XsdOptions inst2XsdOptions = new Inst2XsdOptions();
if (cl.getOpt("license") != null)
{
CommandLine.printLicense();
System.exit(0);
return;
}
if (cl.getOpt("version") != null)
{
CommandLine.printVersion();
System.exit(0);
return;
}
if (cl.getOpt("h") != null || cl.getOpt("help") != null || cl.getOpt("usage") != null)
{
printHelp();
System.exit(0);
return;
}
String[] badopts = cl.getBadOpts();
if (badopts.length > 0)
{
for (int i = 0; i < badopts.length; i++)
System.out.println("Unrecognized option: " + badopts[i]);
printHelp();
System.exit(0);
return;
}
String design = cl.getOpt("design");
if (design==null)
{
// default
}
else if (design.equals("vb"))
{
inst2XsdOptions.setDesign(Inst2XsdOptions.DESIGN_VENETIAN_BLIND);
}
else if (design.equals("rd"))
{
inst2XsdOptions.setDesign(Inst2XsdOptions.DESIGN_RUSSIAN_DOLL);
}
else if (design.equals("ss"))
{
inst2XsdOptions.setDesign(Inst2XsdOptions.DESIGN_SALAMI_SLICE);
}
else
{
printHelp();
System.exit(0);
return;
}
String simpleContent = cl.getOpt("simple-content-types");
if (simpleContent==null)
{
//default
}
else if (simpleContent.equals("smart"))
{
inst2XsdOptions.setSimpleContentTypes(Inst2XsdOptions.SIMPLE_CONTENT_TYPES_SMART);
}
else if (simpleContent.equals("string"))
{
inst2XsdOptions.setSimpleContentTypes(Inst2XsdOptions.SIMPLE_CONTENT_TYPES_STRING);
}
else
{
printHelp();
System.exit(0);
return;
}
String enumerations = cl.getOpt("enumerations");
if (enumerations==null)
{
// default
}
else if (enumerations.equals("never"))
{
inst2XsdOptions.setUseEnumerations(Inst2XsdOptions.ENUMERATION_NEVER);
}
else
{
try
{
int intVal = Integer.parseInt(enumerations);
inst2XsdOptions.setUseEnumerations(intVal);
}
catch (NumberFormatException e)
{
printHelp();
System.exit(0);
return;
}
}
File outDir = new File( cl.getOpt("outDir")==null ? "." : cl.getOpt("outDir"));
String outPrefix = cl.getOpt("outPrefix");
if (outPrefix==null)
outPrefix = "schema";
inst2XsdOptions.setVerbose((cl.getOpt("verbose") != null));
boolean validate = cl.getOpt("validate")!=null;
File[] xmlFiles = cl.filesEndingWith(".xml");
XmlObject[] xmlInstances = new XmlObject[xmlFiles.length];
if ( xmlInstances.length==0 )
{
printHelp();
System.exit(0);
return;
}
int i = 0;
try
{
for (i = 0; i < xmlFiles.length; i++)
{
xmlInstances[i] = XmlObject.Factory.parse(xmlFiles[i]);
}
}
catch (XmlException e)
{
System.err.println("Invalid xml file: '" + xmlFiles[i].getName() + "'. " + e.getMessage());
return;
}
catch (IOException e)
{
System.err.println("Could not read file: '" + xmlFiles[i].getName() + "'. " + e.getMessage());
return;
}
SchemaDocument[] schemaDocs = inst2xsd(xmlInstances, inst2XsdOptions);
try
{
for (i = 0; i < schemaDocs.length; i++)
{
SchemaDocument schema = schemaDocs[i];
if (inst2XsdOptions.isVerbose())
System.out.println("----------------------\n\n" + schema);
schema.save(new File(outDir, outPrefix + i + ".xsd"), new XmlOptions().setSavePrettyPrint());
}
}
catch (IOException e)
{
System.err.println("Could not write file: '" + outDir + File.pathSeparator + outPrefix + i + ".xsd" + "'. " + e.getMessage());
return;
}
if (validate)
{
validateInstances(schemaDocs, xmlInstances);
}
}
|