public static void main(String[] args) throws IOException {
if (args.length == 0)
{
printUsage();
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("sync");
flags.add("refresh");
flags.add("recurse");
Set opts = new HashSet();
opts.add("dir");
CommandLine cl = new CommandLine(args, flags, opts);
if (cl.getOpt("h") != null || cl.getOpt("help") != null || cl.getOpt("usage") != null)
{
printUsage();
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]);
printUsage();
System.exit(0);
return;
}
if (cl.getOpt("license") != null)
{
CommandLine.printLicense();
System.exit(0);
return;
}
if (cl.getOpt("version") != null)
{
CommandLine.printVersion();
System.exit(0);
return;
}
args = cl.args();
boolean sync = (cl.getOpt("sync") != null);
boolean refresh = (cl.getOpt("refresh") != null);
boolean imports = (cl.getOpt("recurse") != null);
String dir = cl.getOpt("dir");
if (dir == null)
dir = ".";
File directory = new File(dir);
SchemaResourceManager mgr;
try
{
mgr = new SchemaResourceManager(directory);
}
catch (IllegalStateException e)
{
if (e.getMessage() != null)
System.out.println(e.getMessage());
else
e.printStackTrace();
System.exit(1);
return;
}
List uriList = new ArrayList();
List fileList = new ArrayList();
for (int i = 0; i < args.length; i++)
{
if (looksLikeURL(args[i]))
{
uriList.add(args[i]);
}
else
{
fileList.add(new File(directory, args[i]));
}
}
// deal with files that are not in the proper directory
for (Iterator i = fileList.iterator(); i.hasNext(); )
{
File file = (File)i.next();
if (!isInDirectory(file, directory))
{
System.err.println("File not within directory: " + file);
i.remove();
}
}
// deal with directories
fileList = collectXSDFiles((File[])fileList.toArray(new File[0]));
String[] uris = (String[])uriList.toArray(new String[0]);
File[] files = (File[])fileList.toArray(new File[0]);
String[] filenames = relativeFilenames(files, directory);
if (uris.length + filenames.length > 0)
{
mgr.process(uris, filenames, sync, refresh, imports);
}
else
{
mgr.processAll(sync, refresh, imports);
}
mgr.writeCache();
System.exit(0);
}
|