blob: 194cb883c83457e2d585f9fe547657319321cebc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ode.tools.bpelc.cline;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.ode.tools.ClineCommandContext;
import org.apache.ode.tools.ExecutionException;
import org.apache.ode.tools.bpelc.BpelCompileCommand;
import org.apache.ode.utils.cli.BaseCommandlineTool;
import org.apache.ode.utils.cli.CommandlineFragment;
import org.apache.ode.utils.cli.ConsoleFormatter;
import org.apache.ode.utils.cli.FlagWithArgument;
import org.apache.ode.utils.cli.Fragments;
import org.apache.ode.utils.cli.MultiArgument;
import java.io.File;
public class BpelC extends BaseCommandlineTool {
private static final Logger __log = LoggerFactory.getLogger(BpelC.class);
private static FlagWithArgument OUTPUT_DIR = new FlagWithArgument("od","directory",
"output directory",true);
private static FlagWithArgument ROOT_WSDL = new FlagWithArgument("wsdl","uri",
"URI of the WSDL for the process (used with BPEL4WS 1.1 " +
"processes, for WS-BPEL 2.0 processes, use <import>).",true);
private static MultiArgument BPEL_URLS = new MultiArgument("bpelurl",
"the URLs of BPEL processes to compile.",false);
private static Fragments DEFAULT = new Fragments(new CommandlineFragment[] {
LOGGING, ROOT_WSDL, OUTPUT_DIR, BPEL_URLS
});
private static final String SYNOPSIS = "compile one or more BPEL processes";
protected static String getProgramName() {
return "bpelc";
}
public static void main(String[] args) {
setClazz(BpelC.class);
if (args.length ==0 || HELP.matches(args)) {
ConsoleFormatter.printSynopsis(
getProgramName(),SYNOPSIS,
new Fragments[] {DEFAULT, HELP});
System.exit(0);
}
if (DEFAULT.matches(args)) {
// Do nothing; we just want the format enforced.
} else {
consoleErr("INVALID COMMANDLINE: Try \"" + getProgramName() + " -h\" for help.");
System.exit(-1);
}
// We don't want the normal logging crap; just the coiler messages.
initLogging();
BpelCompileCommand bcc = new BpelCompileCommand();
if (OUTPUT_DIR.isSet()) {
String outputDir = OUTPUT_DIR.getValue();
File od = new File(outputDir);
if (!od.exists() || !od.isDirectory()) {
consoleErr(outputDir + ": no such directory or not writable.");
System.exit(-1);
}
bcc.setOuputDirectory(od);
}
if (ROOT_WSDL.isSet()) {
bcc.setWsdlImportUri(ROOT_WSDL.getValue());
}
String[] b = BPEL_URLS.getValues();
if (b == null || b.length == 0) {
consoleErr("At least one process must be specified.");
System.exit(-1);
}
for (String aB : b) bcc.addBpelProcessUrl(aB);
try {
bcc.execute(new ClineCommandContext(__log));
} catch (ExecutionException ee) {
consoleErr(ee.getMessage());
System.exit(-1);
} catch (Throwable t) {
// This is really quite unexpected, so we should
// print the stack trace to stderr.
consoleErr(t.getMessage());
__log.error(t.getMessage(), t);
System.exit(-2);
}
System.exit(0);
}
}