Search in sources :

Example 1 with ApiFileStreamSource

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());
        }
    }
}
Also used : ApiFileStreamSource(com.bluenimble.platform.api.impls.ApiFileStreamSource) ServerStartupException(com.bluenimble.platform.server.ServerStartupException) ApiSpaceImpl(com.bluenimble.platform.api.impls.ApiSpaceImpl) JsonObject(com.bluenimble.platform.json.JsonObject) Api(com.bluenimble.platform.api.Api) IOException(java.io.IOException) FileFilter(java.io.FileFilter) File(java.io.File) ServerStartupException(com.bluenimble.platform.server.ServerStartupException) ApiManagementException(com.bluenimble.platform.api.ApiManagementException) IOException(java.io.IOException)

Aggregations

Api (com.bluenimble.platform.api.Api)1 ApiManagementException (com.bluenimble.platform.api.ApiManagementException)1 ApiFileStreamSource (com.bluenimble.platform.api.impls.ApiFileStreamSource)1 ApiSpaceImpl (com.bluenimble.platform.api.impls.ApiSpaceImpl)1 JsonObject (com.bluenimble.platform.json.JsonObject)1 ServerStartupException (com.bluenimble.platform.server.ServerStartupException)1 File (java.io.File)1 FileFilter (java.io.FileFilter)1 IOException (java.io.IOException)1