use of org.bimserver.interfaces.objects.SDownloadResult in project BIMserver by opensourceBIM.
the class InternalChannel method getDownloadData.
public InputStream getDownloadData(String baseAddress, String token, long topicId) throws IOException {
try {
SDownloadResult sDownloadResult = serviceFactory.get(AccessMethod.INTERNAL).get(ServiceInterface.class).getDownloadData(topicId);
DataHandler dataHandler = sDownloadResult.getFile();
return dataHandler.getInputStream();
} catch (ServerException e) {
e.printStackTrace();
} catch (UserException e) {
e.printStackTrace();
}
return null;
}
use of org.bimserver.interfaces.objects.SDownloadResult in project BIMserver by opensourceBIM.
the class DownloadServlet method service.
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String acceptEncoding = request.getHeader("Accept-Encoding");
boolean useGzip = false;
if (acceptEncoding != null && acceptEncoding.contains("gzip")) {
useGzip = true;
}
OutputStream outputStream = response.getOutputStream();
boolean zip = request.getParameter("zip") != null && request.getParameter("zip").equals("on");
if (useGzip && !zip) {
response.setHeader("Content-Encoding", "gzip");
outputStream = new GZIPOutputStream(response.getOutputStream());
}
String token = (String) request.getSession().getAttribute("token");
if (token == null) {
token = request.getParameter("token");
}
long topicId = -1;
if (request.getParameter("topicId") != null) {
topicId = Long.parseLong(request.getParameter("topicId"));
}
ServiceMap serviceMap = getBimServer().getServiceFactory().get(token, AccessMethod.INTERNAL);
String action = request.getParameter("action");
if (action != null) {
if (action.equals("extendeddata")) {
SExtendedData sExtendedData = serviceMap.getServiceInterface().getExtendedData(Long.parseLong(request.getParameter("edid")));
SFile file = serviceMap.getServiceInterface().getFile(sExtendedData.getFileId());
if (file.getMime() != null) {
response.setContentType(file.getMime());
}
if (file.getFilename() != null) {
response.setHeader("Content-Disposition", "inline; filename=\"" + file.getFilename() + "\"");
}
outputStream.write(file.getData());
if (outputStream instanceof GZIPOutputStream) {
((GZIPOutputStream) outputStream).finish();
}
outputStream.flush();
return;
} else if (action.equals("getfile")) {
String type = request.getParameter("type");
if (type.equals("proto")) {
try {
String protocolBuffersFile = serviceMap.getAdminInterface().getProtocolBuffersFile(request.getParameter("name"));
outputStream.write(protocolBuffersFile.getBytes(Charsets.UTF_8));
outputStream.flush();
} catch (ServiceException e) {
LOGGER.error("", e);
}
} else if (type.equals("serverlog")) {
try {
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
writer.write(serviceMap.getAdminInterface().getServerLog());
writer.flush();
} catch (ServerException e) {
LOGGER.error("", e);
} catch (UserException e) {
LOGGER.error("", e);
}
}
} else if (action.equals("getBcfImage")) {
long extendedDataId = Long.parseLong(request.getParameter("extendedDataId"));
String topicUuid = request.getParameter("topicUuid");
String name = request.getParameter("name");
BcfFile bcfFile = BcfCache.INSTANCE.get(extendedDataId);
if (bcfFile == null) {
SExtendedData extendedData = serviceMap.getServiceInterface().getExtendedData(extendedDataId);
long fileId = extendedData.getFileId();
SFile file = serviceMap.getServiceInterface().getFile(fileId);
try {
bcfFile = BcfFile.read(new ByteArrayInputStream(file.getData()), new ReadOptions(false));
BcfCache.INSTANCE.put(extendedDataId, bcfFile);
} catch (BcfException e) {
e.printStackTrace();
}
}
TopicFolder topicFolder = bcfFile.getTopicFolder(topicUuid);
if (topicFolder != null) {
byte[] data = topicFolder.getSnapshot(topicUuid + "/" + name);
if (data != null) {
response.setContentType("image/png");
IOUtils.write(data, outputStream);
if (outputStream instanceof GZIPOutputStream) {
((GZIPOutputStream) outputStream).finish();
}
outputStream.flush();
return;
}
}
}
} else {
if (request.getParameter("topicId") != null) {
topicId = Long.parseLong(request.getParameter("topicId"));
}
if (topicId == -1) {
response.getWriter().println("No valid topicId");
return;
}
SDownloadResult checkoutResult = serviceMap.getServiceInterface().getDownloadData(topicId);
if (checkoutResult == null) {
LOGGER.error("Invalid topicId: " + topicId);
} else {
DataSource dataSource = checkoutResult.getFile().getDataSource();
PluginConfiguration pluginConfiguration = getBimServer().getPluginSettingsCache().getPluginSettings(checkoutResult.getSerializerOid());
final ProgressTopic progressTopic = getBimServer().getNotificationsManager().getProgressTopic(topicId);
ProgressReporter progressReporter = new ProgressReporter() {
private long lastMax;
private long lastProgress;
private int stage = 3;
private Date start = new Date();
private String title = "Downloading...";
@Override
public void update(long progress, long max) {
if (progressTopic != null) {
LongActionState ds = StoreFactory.eINSTANCE.createLongActionState();
ds.setStart(start);
ds.setState(progress == max ? ActionState.FINISHED : ActionState.STARTED);
ds.setTitle(title);
ds.setStage(stage);
ds.setProgress((int) Math.round(100.0 * progress / max));
progressTopic.stageProgressUpdate(ds);
this.lastMax = max;
this.lastProgress = progress;
}
}
@Override
public void setTitle(String title) {
if (progressTopic != null) {
stage++;
this.title = title;
LongActionState ds = StoreFactory.eINSTANCE.createLongActionState();
ds.setStart(new Date());
ds.setState(lastProgress == lastMax ? ActionState.FINISHED : ActionState.STARTED);
ds.setTitle(title);
ds.setStage(stage);
ds.setProgress((int) Math.round(100.0 * lastProgress / lastMax));
progressTopic.stageProgressUpdate(ds);
}
}
};
try {
if (zip) {
if (pluginConfiguration.getString("ZipExtension") != null) {
response.setHeader("Content-Disposition", "inline; filename=\"" + dataSource.getName() + "." + pluginConfiguration.getString(SerializerPlugin.ZIP_EXTENSION) + "\"");
} else {
response.setHeader("Content-Disposition", "inline; filename=\"" + dataSource.getName() + ".zip" + "\"");
}
response.setContentType("application/zip");
String nameInZip = dataSource.getName() + "." + pluginConfiguration.getString(SerializerPlugin.EXTENSION);
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
zipOutputStream.putNextEntry(new ZipEntry(nameInZip));
processDataSource(zipOutputStream, dataSource, progressReporter);
try {
zipOutputStream.finish();
} catch (IOException e) {
// Sometimes it's already closed, that's no problem
}
} else {
if (request.getParameter("mime") == null) {
response.setContentType(pluginConfiguration.getString(SerializerPlugin.CONTENT_TYPE));
response.setHeader("Content-Disposition", "inline; filename=\"" + dataSource.getName() + "." + pluginConfiguration.getString(SerializerPlugin.EXTENSION) + "\"");
} else {
response.setContentType(request.getParameter("mime"));
}
processDataSource(outputStream, dataSource, progressReporter);
}
} catch (SerializerException s) {
if (s.getCause() != null && s.getCause() instanceof IOException) {
} else {
LOGGER.error("", s);
}
LongActionState ds = StoreFactory.eINSTANCE.createLongActionState();
ds.setStart(new Date());
ds.setState(ActionState.AS_ERROR);
ds.setTitle(s.getMessage());
ds.setProgress(-1);
ds.setStage(3);
ds.getErrors().add(s.getMessage());
progressTopic.stageProgressUpdate(ds);
}
}
}
if (outputStream instanceof GZIPOutputStream) {
((GZIPOutputStream) outputStream).finish();
}
outputStream.flush();
} catch (NumberFormatException e) {
LOGGER.error("", e);
response.getWriter().println("Some number was incorrectly formatted");
} catch (ServiceException e) {
LOGGER.error("", e);
response.getWriter().println(e.getUserMessage());
} catch (EOFException e) {
} catch (Exception e) {
LOGGER.error("", e);
}
}
use of org.bimserver.interfaces.objects.SDownloadResult 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