use of com.bluenimble.platform.api.impls.ApiFileStreamSource in project serverless by bluenimble.
the class FileSystemApiServer method installSpace.
private void installSpace(File spaceHome) throws ServerStartupException {
tracer.log(Tracer.Level.Info, "Install Space {0}", spaceHome.getName());
JsonObject oSpace = null;
File fDescriptor = new File(spaceHome, ConfigKeys.Descriptor.Space);
if (fDescriptor.exists()) {
try {
oSpace = resolve(Json.load(fDescriptor));
} catch (Exception ex) {
failed.put("unnable to load space '" + spaceHome.getName() + "'", ex);
return;
}
}
if (oSpace == null) {
throw new ServerStartupException("space descriptor for " + spaceHome.getName() + " not found");
}
if (!oSpace.containsKey(ApiSpace.Spec.Namespace)) {
oSpace.set(ApiSpace.Spec.Namespace, spaceHome.getName());
}
ApiSpaceImpl space;
try {
space = (ApiSpaceImpl) create(oSpace, false);
// save space descriptor, change maybe made by plugins onEvent/Create
// Json.store (oSpace, fDescriptor);
} catch (Exception ex) {
throw new ServerStartupException(ex.getMessage(), ex);
}
File[] apis = spaceHome.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory() || (file.isFile() && file.getAbsolutePath().endsWith(ConfigKeys.ApiExt));
}
});
if (apis == null || apis.length == 0) {
tracer.log(Tracer.Level.Info, "\tno apis found in space [{0}]", spaceHome.getName());
return;
}
tracer.log(Tracer.Level.Info, "\tfound ({0}) Api(s) in [{1}]", apis.length, spaceHome.getName());
for (File aFile : apis) {
Api api = null;
if (aFile.isDirectory()) {
try {
api = space.install(aFile);
} catch (Exception ex) {
failed.put(space.getNamespace() + " > " + aFile.getName(), ex);
continue;
}
} else if (aFile.isFile()) {
ApiFileStreamSource is = new ApiFileStreamSource(aFile, ConfigKeys.ApiExt);
try {
api = space.install(is);
} catch (Exception ex) {
failed.put(space.getNamespace() + " > " + aFile.getName(), ex);
continue;
} finally {
IOUtils.closeQuietly(is.stream());
}
try {
FileUtils.delete(aFile);
} catch (IOException ex) {
tracer.log(Tracer.Level.Error, "\tcan't delete api file {0} / {1} > ", spaceHome.getName(), aFile.getName());
}
}
if (api != null && ApiStatus.Failed.equals(api.status())) {
failed.put(space.getNamespace() + "/" + aFile.getName(), api.getFailure());
}
}
}
Aggregations