org.apache.cxf.js.rhino.ServerApp Maven / Gradle / Ivy
/**
* 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.cxf.js.rhino;
import java.io.File;
import java.io.FileFilter;
import java.net.MalformedURLException;
import java.net.URL;
public class ServerApp {
public static final String NO_ADDR_ERR = "error: an endpoint address must be provided";
public static final String NO_FILES_ERR = "error: no JavaScript files specified";
public static final String WRONG_ADDR_ERR = "error: -a requires a URL argument";
public static final String WRONG_BASE_ERR = "error: -b requires a base URL argument";
public static final String ILLEGAL_OPTIONS_ERR = "error: -a and -b cannot be used together";
public static final String UNKNOWN_OPTION = "error: unknown option";
private boolean verbose;
private boolean bOptSeen;
private String epAddr;
protected void start(String[] args) throws Exception {
ProviderFactory ph = createProviderFactory();
FileFilter jsFilter = new JSFilter();
int i = 0;
boolean fileSeen = false;
boolean msgPrinted = false;
for (;;) {
if (i == args.length) {
break;
}
if (args[i].startsWith("-")) {
i = checkOption(args, i);
if (verbose && !msgPrinted) {
msgPrinted = true;
if (verbose) {
System.out.println("entering server");
}
}
} else {
File f = new File(args[i]);
if (f.isFile() && jsFilter.accept(f)) {
fileSeen = true;
if (verbose) {
System.out.println("processing file " + f.getCanonicalPath());
}
ph.createAndPublish(f, epAddr, bOptSeen);
} else if (f.isDirectory()) {
File[] flist = f.listFiles(jsFilter);
for (File file : flist) {
fileSeen = true;
if (verbose) {
System.out.println("processing file " + file.getCanonicalPath());
}
ph.createAndPublish(file, epAddr, bOptSeen);
}
}
}
i++;
}
if (!fileSeen) {
throw new Exception(NO_FILES_ERR);
}
}
public static void main(String[] args) throws Exception {
ServerApp app = null;
try {
app = new ServerApp();
app.start(args);
} catch (Exception e) {
System.err.println("error: " + e.getMessage());
System.exit(1);
}
if (app.verbose) {
System.out.println("server ready...");
}
Thread.sleep(5 * 60 * 1000);
if (app.verbose) {
System.out.println("server timed out, exiting");
}
System.exit(0);
}
protected ProviderFactory createProviderFactory() {
return new ProviderFactory();
}
private int checkOption(String[] args, int index) throws Exception {
if ("-v".equals(args[index])) {
verbose = true;
} else if ("-a".equals(args[index])) {
bOptSeen = false;
if (++index == args.length) {
throw new Exception(WRONG_ADDR_ERR);
}
try {
new URL(args[index]);
} catch (MalformedURLException m) {
throw new Exception(WRONG_ADDR_ERR, m);
}
epAddr = args[index];
} else if ("-b".equals(args[index])) {
bOptSeen = true;
if (++index == args.length) {
throw new Exception(WRONG_BASE_ERR);
}
try {
new URL(args[index]);
} catch (MalformedURLException m) {
throw new Exception(WRONG_BASE_ERR, m);
}
epAddr = args[index];
} else {
throw new Exception(UNKNOWN_OPTION + ": " + args[index]);
}
return index;
}
private static class JSFilter implements FileFilter {
public final boolean accept(File f) {
if (f.isFile()) {
String name = f.getName();
return name.endsWith(".js") || name.endsWith(".jsx");
} else {
return false;
}
}
}
}