use of org.bimserver.plugins.serializers.CacheStoringEmfSerializerDataSource in project BIMserver by opensourceBIM.
the class JsonConverter method toJson.
public void toJson(Object object, JsonWriter out) throws IOException, SerializerException {
if (object instanceof SBase) {
SBase base = (SBase) object;
out.beginObject();
out.name("__type");
out.value(base.getSClass().getSimpleName());
for (SField field : base.getSClass().getAllFields()) {
out.name(field.getName());
toJson(base.sGet(field), out);
}
out.endObject();
} else if (object instanceof Collection) {
Collection<?> collection = (Collection<?>) object;
out.beginArray();
for (Object value : collection) {
toJson(value, out);
}
out.endArray();
} else if (object instanceof Date) {
out.value(((Date) object).getTime());
} else if (object instanceof DataHandler) {
DataHandler dataHandler = (DataHandler) object;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (dataHandler.getDataSource() instanceof CacheStoringEmfSerializerDataSource) {
CacheStoringEmfSerializerDataSource cacheStoringEmfSerializerDataSource = (CacheStoringEmfSerializerDataSource) dataHandler.getDataSource();
cacheStoringEmfSerializerDataSource.writeToOutputStream(baos, null);
out.value(new String(Base64.encodeBase64(baos.toByteArray()), Charsets.UTF_8));
} else {
InputStream inputStream = dataHandler.getInputStream();
IOUtils.copy(inputStream, baos);
out.value(new String(Base64.encodeBase64(baos.toByteArray()), Charsets.UTF_8));
}
} else if (object instanceof byte[]) {
byte[] data = (byte[]) object;
out.value(new String(Base64.encodeBase64(data), Charsets.UTF_8));
} else if (object instanceof String) {
out.value((String) object);
} else if (object instanceof Number) {
out.value((Number) object);
} else if (object instanceof Enum) {
out.value(object.toString());
} else if (object instanceof Boolean) {
out.value((Boolean) object);
} else if (object == null) {
out.nullValue();
} else {
throw new UnsupportedOperationException(object.toString());
}
}
use of org.bimserver.plugins.serializers.CacheStoringEmfSerializerDataSource in project BIMserver by opensourceBIM.
the class LongDownloadOrCheckoutAction method convertModelToCheckoutResult.
protected SCheckoutResult convertModelToCheckoutResult(Project project, String username, IfcModelInterface model, RenderEnginePlugin renderEnginePlugin, DownloadParameters downloadParameters) throws UserException, NoSerializerFoundException {
SCheckoutResult checkoutResult = new SCheckoutResult();
checkoutResult.setSerializerOid(downloadParameters.getSerializerOid());
if (model.isValid()) {
checkoutResult.setProjectName(project.getName());
checkoutResult.setRevisionNr(model.getModelMetaData().getRevisionId());
try {
Serializer serializer = getBimServer().getSerializerFactory().create(project, username, model, renderEnginePlugin, downloadParameters);
if (serializer == null) {
throw new UserException("Error, no serializer found " + downloadParameters.getSerializerOid());
}
if (getBimServer().getServerSettingsCache().getServerSettings().getCacheOutputFiles() && serializer.allowCaching()) {
if (getBimServer().getDiskCacheManager().contains(downloadParameters)) {
checkoutResult.setFile(new CachingDataHandler(getBimServer().getDiskCacheManager(), downloadParameters));
} else {
checkoutResult.setFile(new DataHandler(new CacheStoringEmfSerializerDataSource(serializer, model.getModelMetaData().getName(), getBimServer().getDiskCacheManager().startCaching(downloadParameters))));
}
} else {
checkoutResult.setFile(new DataHandler(new EmfSerializerDataSource(serializer, model.getModelMetaData().getName())));
}
} catch (SerializerException e) {
LOGGER.error("", e);
}
}
return checkoutResult;
}
use of org.bimserver.plugins.serializers.CacheStoringEmfSerializerDataSource in project BIMserver by opensourceBIM.
the class TestSimultaniousDownloadWithCaching method start.
private void start() {
BimServerConfig config = new BimServerConfig();
Path homeDir = Paths.get("home");
try {
if (Files.isDirectory(homeDir)) {
PathUtils.removeDirectoryWithContent(homeDir);
}
} catch (IOException e) {
e.printStackTrace();
}
config.setClassPath(System.getProperty("java.class.path"));
config.setHomeDir(homeDir);
config.setPort(8080);
config.setStartEmbeddedWebServer(true);
config.setResourceFetcher(new LocalDevelopmentResourceFetcher(Paths.get("../")));
final BimServer bimServer = new BimServer(config);
try {
LocalDevPluginLoader.loadPlugins(bimServer.getPluginBundleManager(), null);
bimServer.start();
if (bimServer.getServerInfo().getServerState() == ServerState.NOT_SETUP) {
bimServer.getService(AdminInterface.class).setup("http://localhost", "Administrator", "admin@bimserver.org", "admin", null, null, null);
}
} catch (PluginException e2) {
e2.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
} catch (DatabaseInitException e) {
e.printStackTrace();
} catch (BimserverDatabaseException e) {
e.printStackTrace();
} catch (DatabaseRestartRequiredException e) {
e.printStackTrace();
} catch (UserException e) {
e.printStackTrace();
}
try {
final ServiceMap serviceMap = bimServer.getServiceFactory().get(AccessMethod.INTERNAL);
ServiceInterface serviceInterface = serviceMap.get(ServiceInterface.class);
SettingsInterface settingsInterface = serviceMap.get(SettingsInterface.class);
final AuthInterface authInterface = serviceMap.get(AuthInterface.class);
serviceInterface = bimServer.getServiceFactory().get(authInterface.login("admin@bimserver.org", "admin"), AccessMethod.INTERNAL).get(ServiceInterface.class);
settingsInterface.setCacheOutputFiles(true);
settingsInterface.setGenerateGeometryOnCheckin(false);
final SProject project = serviceMap.getServiceInterface().addProject("test", "ifc2x3tc1");
SDeserializerPluginConfiguration deserializerByName = serviceMap.getServiceInterface().getDeserializerByName("IfcStepDeserializer");
Path file = Paths.get("../TestData/data/AC11-Institute-Var-2-IFC.ifc");
serviceInterface.checkinSync(project.getOid(), "test", deserializerByName.getOid(), file.toFile().length(), file.getFileName().toString(), new DataHandler(new FileDataSource(file.toFile())), false);
final SProject projectUpdate = serviceMap.getServiceInterface().getProjectByPoid(project.getOid());
ThreadPoolExecutor executor = new ThreadPoolExecutor(20, 20, 1, TimeUnit.HOURS, new ArrayBlockingQueue<Runnable>(1000));
for (int i = 0; i < 20; i++) {
executor.execute(new Runnable() {
@Override
public void run() {
try {
ServiceMap serviceMap2 = bimServer.getServiceFactory().get(authInterface.login("admin@bimserver.org", "admin"), AccessMethod.INTERNAL);
SSerializerPluginConfiguration serializerPluginConfiguration = serviceMap.getServiceInterface().getSerializerByName("Ifc2x3");
Long download = serviceMap2.getServiceInterface().download(Collections.singleton(projectUpdate.getLastRevisionId()), DefaultQueries.allAsString(), serializerPluginConfiguration.getOid(), true);
SDownloadResult downloadData = serviceMap2.getServiceInterface().getDownloadData(download);
if (downloadData.getFile().getDataSource() instanceof CacheStoringEmfSerializerDataSource) {
CacheStoringEmfSerializerDataSource c = (CacheStoringEmfSerializerDataSource) downloadData.getFile().getDataSource();
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
c.writeToOutputStream(baos, null);
System.out.println(baos.size());
} catch (SerializerException e) {
e.printStackTrace();
}
} else {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(downloadData.getFile().getInputStream(), baos);
System.out.println(baos.size());
}
serviceMap2.getServiceInterface().cleanupLongAction(download);
} catch (ServerException e) {
e.printStackTrace();
} catch (UserException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (PublicInterfaceNotFoundException e1) {
e1.printStackTrace();
}
}
});
}
executor.shutdown();
executor.awaitTermination(1, TimeUnit.HOURS);
bimServer.stop();
} catch (ServerException e1) {
e1.printStackTrace();
} catch (UserException e1) {
e1.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (PublicInterfaceNotFoundException e2) {
e2.printStackTrace();
}
}
Aggregations