use of org.bimserver.shared.exceptions.ServiceException in project BIMserver by opensourceBIM.
the class AbstractLocalDevBimServerStarter method start.
public void start(int id, String address, String name, int port, int pbport, Path[] pluginDirectories, Path home, ResourceFetcher resourceFetcher, String resourceBase, boolean autoSetup) {
BimServerConfig config = new BimServerConfig();
if (home != null) {
config.setHomeDir(home);
} else {
config.setHomeDir(Paths.get("tmptestdata/home" + (id == -1 ? "" : id)));
}
config.setResourceFetcher(resourceFetcher);
config.setStartEmbeddedWebServer(true);
config.setClassPath(System.getProperty("java.class.path"));
config.setLocalDev(true);
config.setEnvironment(Environment.LOCAL_DEV);
config.setPort(port);
config.setStartCommandLine(true);
config.setResourceBase(resourceBase);
Path bdbPropertiesFile = config.getHomeDir().resolve("bdb.properties");
if (Files.exists(bdbPropertiesFile)) {
try (InputStream inputStream = Files.newInputStream(bdbPropertiesFile)) {
Properties properties = new Properties();
properties.load(inputStream);
config.setBdbEnvironmentProperties(properties);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
fixLogging(config);
} catch (IOException e1) {
e1.printStackTrace();
}
bimServer = new BimServer(config);
bimServer.getVersionChecker().getLocalVersion().setDate(new Date());
bimServer.setEmbeddedWebServer(new EmbeddedWebServer(bimServer, config.getResourcebase(), config.isLocalDev()));
Logger LOGGER = LoggerFactory.getLogger(LocalDevBimServerStarter.class);
try {
bimServer.start();
if (bimServer.getServerInfo().getServerState() == ServerState.MIGRATION_REQUIRED) {
bimServer.getServerInfoManager().registerStateChangeListener(new StateChangeListener() {
@Override
public void stateChanged(ServerState oldState, ServerState newState) {
if (oldState == ServerState.MIGRATION_REQUIRED && newState == ServerState.RUNNING) {
try {
LocalDevPluginLoader.loadPlugins(bimServer.getPluginBundleManager(), pluginDirectories);
} catch (PluginException e) {
LOGGER.error("", e);
}
}
}
});
} else if (bimServer.getServerInfo().getServerState() == ServerState.RUNNING) {
long start = System.nanoTime();
LOGGER.info("Loading plugins...");
LocalDevPluginLoader.loadPlugins(bimServer.getPluginBundleManager(), pluginDirectories);
bimServer.activateServices();
long end = System.nanoTime();
LOGGER.info("All plugins loaded (" + ((end - start) / 1000000) + " ms)");
} else if (bimServer.getServerInfo().getServerState() == ServerState.NOT_SETUP) {
LocalDevPluginLoader.loadPlugins(bimServer.getPluginBundleManager(), pluginDirectories);
if (autoSetup) {
try {
AdminInterface adminInterface = bimServer.getServiceFactory().get(new SystemAuthorization(1, TimeUnit.HOURS), AccessMethod.INTERNAL).get(AdminInterface.class);
adminInterface.setup("http://localhost:" + port, name, "My Description", "http://localhost:" + port + "/img/bimserver.png", "Administrator", "admin@bimserver.org", "admin");
SettingsInterface settingsInterface = bimServer.getServiceFactory().get(new SystemAuthorization(1, TimeUnit.HOURS), AccessMethod.INTERNAL).get(SettingsInterface.class);
settingsInterface.setCacheOutputFiles(false);
settingsInterface.setPluginStrictVersionChecking(false);
} catch (Exception e) {
// Ignore
}
}
bimServer.activateServices();
} else {
LOGGER.error("BIMserver did not startup correctly");
}
} catch (PluginException e) {
LOGGER.error("", e);
} catch (ServiceException e) {
LOGGER.error("", e);
} catch (DatabaseInitException e) {
LOGGER.error("", e);
} catch (BimserverDatabaseException e) {
LOGGER.error("", e);
} catch (DatabaseRestartRequiredException e) {
LOGGER.error("", e);
}
}
use of org.bimserver.shared.exceptions.ServiceException 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.shared.exceptions.ServiceException in project BIMserver by opensourceBIM.
the class SyndicationServlet method writeRevisionsFeed.
private void writeRevisionsFeed(HttpServletRequest request, HttpServletResponse response, ServiceMap serviceMap) throws IOException, FeedException, ServiceException, PublicInterfaceNotFoundException {
long poid = Long.parseLong(request.getParameter("poid"));
SProject sProject = serviceMap.getServiceInterface().getProjectByPoid(poid);
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(FEED_TYPE);
feed.setTitle("BIMserver.org revisions feed for project '" + sProject.getName() + "'");
feed.setLink(request.getContextPath());
feed.setDescription("This feed represents all the revisions of project '" + sProject.getName() + "'");
List<SyndEntry> entries = new ArrayList<SyndEntry>();
try {
List<SRevision> allRevisionsOfProject = serviceMap.getServiceInterface().getAllRevisionsOfProject(poid);
Collections.sort(allRevisionsOfProject, new SRevisionIdComparator(false));
for (SRevision sVirtualRevision : allRevisionsOfProject) {
SUser user = serviceMap.getServiceInterface().getUserByUoid(sVirtualRevision.getUserId());
SyndEntry entry = new SyndEntryImpl();
entry.setTitle("Revision " + sVirtualRevision.getOid());
entry.setLink(request.getContextPath() + "/revision.jsp?poid=" + sVirtualRevision.getOid() + "&roid=" + sVirtualRevision.getOid());
entry.setPublishedDate(sVirtualRevision.getDate());
SyndContent description = new SyndContentImpl();
description.setType("text/html");
description.setValue("<table><tr><td>User</td><td>" + user.getUsername() + "</td></tr><tr><td>Comment</td><td>" + sVirtualRevision.getComment() + "</td></tr></table>");
entry.setDescription(description);
entries.add(entry);
}
} catch (ServiceException e) {
LOGGER.error("", e);
}
feed.setEntries(entries);
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, response.getWriter());
}
use of org.bimserver.shared.exceptions.ServiceException in project BIMserver by opensourceBIM.
the class InternalServicesManager method getBimServerClient.
private P getBimServerClient(String serviceIdentifier, String profileIdentifier, String apiUrl, String token) {
ServiceMapInterface serviceMapInterface = new ServiceMap(bimServer, null, AccessMethod.JSON, null);
serviceMapInterface.add(RemoteServiceInterface.class, internalRemoteServiceInterfaces.get(serviceIdentifier));
P p = new P();
final InternalChannel internalChannel = new InternalChannel(bimServer.getServiceFactory(), bimServer.getServicesMap());
try {
internalChannel.connect(new SimpleTokenHolder());
} catch (ChannelConnectionException e) {
LOGGER.error("", e);
}
try {
DatabaseSession session = bimServer.getDatabase().createSession(OperationType.READ_ONLY);
try {
long profileId = Long.parseLong(profileIdentifier);
EClass eClassForOid = session.getEClassForOid(profileId);
InternalServicePluginConfiguration internalServicePluginConfiguration = null;
if (eClassForOid == StorePackage.eINSTANCE.getInternalServicePluginConfiguration()) {
internalServicePluginConfiguration = session.get(profileId, OldQuery.getDefault());
} else if (eClassForOid == StorePackage.eINSTANCE.getService()) {
Service service = session.get(profileId, OldQuery.getDefault());
internalServicePluginConfiguration = service.getInternalService();
} else {
throw new RuntimeException("Oid is neither an InternalServicePluginConfiguration nor a Service");
}
final SObjectType settings = bimServer.getSConverter().convertToSObject(internalServicePluginConfiguration.getSettings());
BimServerClientInterface bimServerClient = null;
BimServerClientFactory factory = null;
if (apiUrl == null) {
factory = bimServer.getBimServerClientFactory();
} else {
if (factories.containsKey(apiUrl)) {
factory = factories.get(apiUrl);
} else {
factory = new JsonBimServerClientFactory(apiUrl, bimServer.getServicesMap(), new JsonSocketReflectorFactory(bimServer.getServicesMap()), bimServer.getReflectorFactory(), bimServer.getMetaDataManager());
factories.put(apiUrl, factory);
}
}
bimServerClient = factory.create(new TokenAuthentication(token));
p.client = bimServerClient;
p.settings = settings;
return p;
} catch (BimserverDatabaseException e) {
LOGGER.error("", e);
} catch (ServiceException e) {
LOGGER.error("", e);
} catch (ChannelConnectionException e) {
LOGGER.error("", e);
} finally {
session.close();
}
} finally {
}
return null;
}
use of org.bimserver.shared.exceptions.ServiceException in project BIMserver by opensourceBIM.
the class RegenerateGeometry method start.
private void start() {
try {
BimServerClientInterface client = LocalDevSetup.setupJson("http://localhost:8080");
List<SProject> allProjects = client.getServiceInterface().getAllProjects(false, true);
Set<Long> croids = new HashSet<Long>();
for (SProject project : allProjects) {
for (Long roid : project.getRevisions()) {
SRevision revision = client.getServiceInterface().getRevision(roid);
for (long croid : revision.getConcreteRevisions()) {
croids.add(croid);
}
}
}
for (long croid : croids) {
client.getAdminInterface().regenerateGeometry(croid);
}
System.out.println("Done");
} catch (ServiceException e) {
e.printStackTrace();
} catch (PublicInterfaceNotFoundException e) {
e.printStackTrace();
}
}
Aggregations