try {
if (manifest == null)
manifest = ManifestUtils.createBoilerplate(getApplicationName(contentLocation));
ManifestParseTree application = manifest.get(ManifestConstants.APPLICATIONS).get(0);
String defaultName = getApplicationName(contentLocation);
set(application, ManifestConstants.NAME, defaultName);
set(application, ManifestConstants.HOST, ManifestUtils.slugify(defaultName));
set(application, ManifestConstants.MEMORY, ManifestUtils.DEFAULT_MEMORY);
set(application, ManifestConstants.INSTANCES, ManifestUtils.DEFAULT_INSTANCES);
set(application, ManifestConstants.PATH, ManifestUtils.DEFAULT_PATH);
/* node.js application require a start command */
if (application.has(ManifestConstants.COMMAND))
return new Plan(getId(), getWizardId(), TYPE, manifest);
InputStream is = null;
try {
is = packageStore.openInputStream(EFS.NONE, null);
JSONObject packageJSON = new JSONObject(new JSONTokener(new InputStreamReader(is)));
if (packageJSON.has(NodeJSConstants.SCRIPTS)) {
JSONObject scripts = packageJSON.getJSONObject(NodeJSConstants.SCRIPTS);
if (scripts.has(NodeJSConstants.START)) {
application.put(ManifestConstants.COMMAND, scripts.getString(NodeJSConstants.START));
return new Plan(getId(), getWizardId(), TYPE, manifest);
}
}
} catch (JSONException ex) {
/* can't parse the package.json, fail */
return null;
} finally {
IOUtilities.safeClose(is);
}
/* look for server.js or app.js files */
IFileStore serverJS = contentLocation.getChild(NodeJSConstants.SERVER_JS);
if (serverJS.fetchInfo().exists()) {
application.put(ManifestConstants.COMMAND, NodeJSConstants.NODE_SERVER_JS);
return new Plan(getId(), getWizardId(), TYPE, manifest);
}
IFileStore appJS = contentLocation.getChild(NodeJSConstants.APP_JS);
if (appJS.fetchInfo().exists()) {
application.put(ManifestConstants.COMMAND, NodeJSConstants.NODE_APP_JS);
return new Plan(getId(), getWizardId(), TYPE, manifest);
}
/* could not deduce command, mark as required */
Plan plan = new Plan(getId(), getWizardId(), TYPE, manifest);