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) { } else if (bimServer.getServerInfo().getServerState() == ServerState.RUNNING) { long start = System.nanoTime(); LOGGER.info("Loading plugins..."); LocalDevPluginLoader.loadPlugins(bimServer.getPluginManager(), 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.getPluginManager(), 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); bimServer.activateServices();
public void update() { try { if (bimServer.getVersionChecker() != null) { serverInfo.setVersion(bimServer.getSConverter().convertFromSObject(bimServer.getVersionChecker().getLocalVersion())); if (bimServer.getDatabase().getMigrator().migrationRequired()) { setServerState(ServerState.MIGRATION_REQUIRED); if (bimServer.getConfig().isAutoMigrate()) { try { bimServer.getDatabase().getMigrator().migrate(); setServerState(ServerState.SETUP); } catch (MigrationException | InconsistentModelsException e) { } else if (bimServer.getDatabase().getMigrator().migrationImpossible()) { setServerState(ServerState.MIGRATION_IMPOSSIBLE); } else { DatabaseSession session = bimServer.getDatabase().createSession(); try { boolean adminFound = false; ServerSettings settings = bimServer.getServerSettingsCache().getServerSettings(); IfcModelInterface users = session.getAllOfType(StorePackage.eINSTANCE.getUser(), OldQuery.getDefault()); for (IdEObject idEObject : users.getValues()) {
private void writeDebugFile() throws IOException { Path debugPath = bimServer.getHomeDir().resolve("debug"); if (!Files.exists(debugPath)) { Files.createDirectories(debugPath); } Path folder = debugPath.resolve(debugIdentifier); if (!Files.exists(folder)) { Files.createDirectories(folder); } Path file = folder.resolve("generationreport.html"); FileUtils.writeStringToFile(file.toFile(), report.toHtml()); }
@Override public SServerInfo getServerInfo() { return getBimServer().getSConverter().convertToSObject(getBimServer().getServerInfo()); }
@Override public Void execute() throws UserException, BimserverLockConflictException, BimserverDatabaseException, ServerException { MavenPluginLocation mavenPluginLocation = bimServer.getMavenPluginRepository().getPluginLocation(repository, groupId, artifactId); try { bimServer.getPluginManager().uninstall(mavenPluginLocation.getPluginVersionIdentifier(version)); } catch (Exception e) { throw new UserException(e); } return null; } }
@Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.getHeader("Origin") != null && (getBimServer().getServerInfo().getServerState() != ServerState.MIGRATION_REQUIRED && !getBimServer().getServerSettingsCache().isHostAllowed(request.getHeader("Origin")))) { response.setStatus(403); return; } response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Headers", "Content-Type"); response.setCharacterEncoding("UTF-8"); try { ServletInputStream inputStream = request.getInputStream(); byte[] bytes = IOUtils.toByteArray(inputStream); // Not streaming here, because we want to be able to show the request-data when it's not valid if (LOGGER.isDebugEnabled()) { LOGGER.debug("Incoming JSON " + new String(bytes, Charsets.UTF_8)); } ObjectNode parse = OBJECT_MAPPER.readValue(new ByteArrayInputStream(bytes), ObjectNode.class); if (parse instanceof ObjectNode) { ObjectNode jsonRequest = (ObjectNode) parse; response.setHeader("Content-Type", "application/json"); getBimServer().getJsonHandler().execute(jsonRequest, request, response.getWriter()); } else { LOGGER.error("Invalid JSON request: " + new String(bytes, Charsets.UTF_8)); response.setStatus(500); } } catch (IOException e) { LOGGER.error("", e); response.setStatus(500); } } }
config.setLocalDev(true); config.setPort(port); bimServer = new BimServer(config); bimServer.getVersionChecker().getLocalVersion().setDate(new Date()); try { LocalDevPluginLoader.loadPlugins(bimServer.getPluginManager(), pluginDirectories); bimServer.start(); if (bimServer.getServerInfo().getServerState() == ServerState.NOT_SETUP) { AdminInterface adminInterface = bimServer.getServiceFactory().get(new SystemAuthorization(1, TimeUnit.HOURS), AccessMethod.INTERNAL).get(AdminInterface.class); adminInterface.setup("http://localhost:" + port, "Administrator", "admin@bimserver.org", "admin", null, null, null); SettingsInterface settingsInterface = bimServer.getServiceFactory().get(new SystemAuthorization(1, TimeUnit.HOURS), AccessMethod.INTERNAL).get(SettingsInterface.class); settingsInterface.setCacheOutputFiles(false); bimServer.stop(); bimServer = null; Thread.sleep(1000000);
public BimServerBimBotsInput(BimServer bimServer, long uoid, String schemaName, byte[] data, IfcModelInterface model, boolean generateGeometry) throws BimBotsException { super(schemaName, data); this.model = model; try (DatabaseSession session = bimServer.getDatabase().createSession()) { User user = session.get(uoid, OldQuery.getDefault()); UserSettings userSettings = user.getUserSettings(); RenderEnginePluginConfiguration defaultRenderEngine = userSettings.getDefaultRenderEngine(); if (defaultRenderEngine == null) { throw new BimBotsException("No default render engine has been selected for this user", BimBotDefaultErrorCode.NO_RENDER_ENGINE); } if (generateGeometry) { GeometryGenerator generator = new GeometryGenerator(bimServer); RenderEnginePool pool = bimServer.getRenderEnginePools().getRenderEnginePool(model.getPackageMetaData().getSchema(), defaultRenderEngine.getPluginDescriptor().getPluginClassName(), bimServer.getPluginSettingsCache().getPluginSettings(defaultRenderEngine.getOid())); generator.generateGeometry(pool, bimServer.getPluginManager(), null, model, -1, -1, false, null); } } catch (PluginException e) { e.printStackTrace(); } catch (BimserverDatabaseException e) { e.printStackTrace(); } catch (GeometryGeneratingException e) { e.printStackTrace(); } catch (ObjectAlreadyExistsException e) { e.printStackTrace(); } catch (IfcModelInterfaceException e) { e.printStackTrace(); } }
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()); DatabaseSession session = bimServer.getDatabase().createSession(); try { long profileId = Long.parseLong(profileIdentifier); throw new RuntimeException("Oid is neither an InternalServicePluginConfiguration nor a Service"); final SObjectType settings = bimServer.getSConverter().convertToSObject(internalServicePluginConfiguration.getSettings()); 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);
DatabaseSession session = getBimServer().getDatabase().createSession(); List<DeserializerPluginConfiguration> list = new ArrayList<>(); try { UserSettings userSettings = getUserSettings(session); for (DeserializerPluginConfiguration deserializer : userSettings.getDeserializers()) { Plugin plugin = getBimServer().getPluginManager().getPlugin(deserializer.getPluginDescriptor().getIdentifier(), true); if (plugin instanceof DeserializerPlugin) { DeserializerPlugin deserializerPlugin = (DeserializerPlugin)plugin; return getBimServer().getSConverter().convertToSObject(list.get(0)); } else if (list.size() > 1) { for (DeserializerPluginConfiguration deserializerPluginConfiguration : list) { Plugin plugin = getBimServer().getPluginManager().getPlugin(deserializerPluginConfiguration.getPluginDescriptor().getIdentifier(), true); return getBimServer().getSConverter().convertToSObject(deserializerPluginConfiguration); return getBimServer().getSConverter().convertToSObject(list.get(0));
setProgressTopic(bimServer.getNotificationsManager().createProgressTopic(SProgressTopicType.DOWNLOAD, "Download")); DatabaseSession databaseSession = getBimServer().getDatabase().createSession(); try { PackageMetaData packageMetaData = null; projectInfo.setBounds(getBimServer().getSConverter().convertToSObject(concreteRevision.getBounds())); projectInfo.setBoundsUntranslated(getBimServer().getSConverter().convertToSObject(concreteRevision.getBoundsUntransformed())); projectInfo.setMultiplierToMm(concreteRevision.getMultiplierToMm()); projectInfo.setName("" + roids.iterator().next()); packageMetaData = getBimServer().getMetaDataManager().getPackageMetaData(revision.getProject().getSchema()); projectNames.add(revision.getProject().getName() + "." + revision.getId()); break; org.bimserver.plugins.PluginConfiguration pluginConfiguration = bimServer.getPluginSettingsCache().getPluginSettings(serializerOid); if (serializerPluginConfiguration == null) { LOGGER.info("No serializer config found"); } else { Plugin plugin = getBimServer().getPluginManager().getPlugin(serializerPluginConfiguration.getPluginDescriptor().getPluginClassName(), true); if (getBimServer().getNewDiskCacheManager().contains(downloadDescriptor)) { cacheFile = getBimServer().getNewDiskCacheManager().get(downloadDescriptor); FileInputStreamDataSource fileInputStreamDataSource = new FileInputStreamDataSource(cacheFile); fileInputStreamDataSource.setName(downloadDescriptor.getFileNameWithoutExtension()); messagingStreamingSerializer.init(queryObjectProvider, projectInfo, getBimServer().getPluginManager(), packageMetaData); serializer.init(queryObjectProvider, projectInfo, ifcHeader, getBimServer().getPluginManager(), packageMetaData);
for (ModelCheckerInstance modelCheckerInstance : service.getModelCheckers()) { if (modelCheckerInstance.isValid()) { ModelCheckerPlugin modelCheckerPlugin = bimServer.getPluginManager().getModelCheckerPlugin(modelCheckerInstance.getModelCheckerPluginClassName(), true); if (modelCheckerPlugin != null) { ModelChecker modelChecker = modelCheckerPlugin.createModelChecker(null); try { if (model == null) { PackageMetaData packageMetaData = bimServer.getMetaDataManager().getPackageMetaData(project.getSchema()); model = new BasicIfcModel(packageMetaData, null); Revision revision; ServiceInterface newService = bimServer.getServiceFactory().get(authorization, AccessMethod.INTERNAL).get(ServiceInterface.class); AsyncRemoteServiceInterface asyncRemoteServiceInterface = new AsyncRemoteServiceInterface(remoteServiceInterface, bimServer.getExecutorService()); asyncRemoteServiceInterface.newRevision(poid, roid, service.getOid(), service.getServiceIdentifier(), service.getProfileIdentifier(), service.getToken(), authorization.asHexToken(bimServer.getEncryptionKey()), bimServer.getServerSettingsCache().getServerSettings().getSiteAddress(), new NewRevisionCallback(){ @Override public void success() {
@Override public void stateChanged(ServerState oldState, ServerState newState) { if (oldState == ServerState.MIGRATION_REQUIRED && newState == ServerState.RUNNING) { try { LocalDevPluginLoader.loadPlugins(bimServer.getPluginManager(), pluginDirectories); } catch (PluginException e) { LOGGER.error("", e); } } } });
try (DatabaseSession session = bimServer.getDatabase().createSession()) { ServiceMap serviceMap = bimServer.getServiceFactory().get(authorization, AccessMethod.INTERNAL); ServiceInterface serviceInterface = serviceMap.get(ServiceInterface.class); if (bimServer.getServerSettingsCache().getServerSettings().isStoreServiceRuns()) { LOGGER.info("Storing intermediate results"); long start = System.nanoTime(); VirtualEndPoint virtualEndpoint = null; try { progressTopic = bimServer.getNotificationsManager().getProgressTopic(topicId); virtualEndpoint = new VirtualEndPoint(){ @Override project = serviceInterface.getProjectByPoid(project.getOid()); PackageMetaData packageMetaData = bimServer.getMetaDataManager().getPackageMetaData(project.getSchema()); IfcModelInterface model = new BasicIfcModel(packageMetaData, null); try { DeserializerPlugin deserializerPlugin = bimServer.getPluginManager().getFirstDeserializer("ifc", schema, true); if (deserializerPlugin == null) { throw new BimBotsException("No deserializer plugin found", BimBotDefaultErrorCode.NO_DESERIALIZER); PackageMetaData packageMetaData = bimServer.getMetaDataManager().getPackageMetaData(schema.name()); deserializer.init(packageMetaData); IfcModelInterface model = deserializer.read(new ByteArrayInputStream(data), inputType, data.length, null);
List<SPluginBundle> result = new ArrayList<>(); GitHubPluginRepository repository = new GitHubPluginRepository(bimServer.getMavenPluginRepository(), bimServer.getServerSettingsCache().getServerSettings().getServiceRepositoryUrl()); bimserverVersion = new DefaultArtifactVersion(bimServer.getVersionChecker().getLocalVersion().getFullString()); PluginBundle pluginBundle = bimServer.getPluginManager().getPluginBundle(pluginLocation.getPluginIdentifier());
PackageMetaData lastPackageMetaData = null; for (ConcreteRevision subRevision : revision.getConcreteRevisions()) { PackageMetaData packageMetaData = getBimServer().getMetaDataManager().getPackageMetaData(subRevision.getProject().getSchema()); lastPackageMetaData = packageMetaData; IfcModel subModel = new BasicIfcModel(packageMetaData, null); getDatabaseSession().getMap(subModel, query); try { checkGeometry(serializerPluginConfiguration, getBimServer().getPluginManager(), subModel, project, subRevision, revision); } catch (GeometryGeneratingException e) { throw new UserException(e); if (ifcModelSet.size() > 1) { try { ifcModel = getBimServer().getMergerFactory().createMerger(getDatabaseSession(), getAuthorization().getUoid()) .merge(revision.getProject(), ifcModelSet, new ModelHelper(getBimServer().getMetaDataManager(), ifcModel)); } catch (MergeException e) { throw new UserException(e);
} else { PluginBundleVersion pluginBundleVersion = deserializerPluginConfiguration.getPluginDescriptor().getPluginBundleVersion(); Plugin plugin = getBimServer().getPluginManager().getPlugin(deserializerPluginConfiguration.getPluginDescriptor().getPluginClassName(), true); if (plugin != null) { if (plugin instanceof DeserializerPlugin) { DeserializerPlugin deserializerPlugin = (DeserializerPlugin)plugin; Deserializer deserializer = deserializerPlugin.createDeserializer(getBimServer().getPluginSettingsCache().getPluginSettings(deserializerOid)); OutputStream outputStream = Files.newOutputStream(file); InputStream inputStream = new MultiplexingInputStream(originalInputStream, outputStream); deserializer.init(getBimServer().getDatabase().getMetaDataManager().getPackageMetaData(project.getSchema())); getBimServer().getLongActionManager().start(longAction); if (sync) { longAction.waitForCompletion(); clearCheckinInProgress(poid); ProgressTopic progressTopic = getBimServer().getNotificationsManager().getProgressTopic(topicId); return (SLongCheckinActionState) getBimServer().getSConverter().convertToSObject(progressTopic.getLastProgress()); } else if (plugin instanceof StreamingDeserializerPlugin) { StreamingDeserializerPlugin streaminDeserializerPlugin = (StreamingDeserializerPlugin) plugin; StreamingDeserializer streamingDeserializer = streaminDeserializerPlugin.createDeserializer(getBimServer().getPluginSettingsCache().getPluginSettings(deserializerPluginConfiguration.getOid())); streamingDeserializer.init(getBimServer().getDatabase().getMetaDataManager().getPackageMetaData(project.getSchema())); RestartableInputStream restartableInputStream = new RestartableInputStream(originalInputStream, file); StreamingCheckinDatabaseAction checkinDatabaseAction = new StreamingCheckinDatabaseAction(getBimServer(), null, getInternalAccessMethod(), poid, getAuthorization(), comment, fileName, restartableInputStream, streamingDeserializer, fileSize, newServiceId, pluginBundleVersion, topicId); LongStreamingCheckinAction longAction = new LongStreamingCheckinAction(topicId, getBimServer(), username, userUsername, getAuthorization(), checkinDatabaseAction); getBimServer().getLongActionManager().start(longAction); ProgressTopic progressTopic = null; if (sync) {
bimServer.stop(); return; } else if (line.startsWith("dumpmodel")) { try { long roid = Long.parseLong(line.substring(9).trim()); DatabaseSession databaseSession = bimServer.getDatabase().createSession(); try { DownloadDatabaseAction downloadDatabaseAction = new DownloadDatabaseAction(bimServer, databaseSession, AccessMethod.INTERNAL, roid, -1, -1, new SystemAuthorization(1, TimeUnit.HOURS), null); LOGGER.info("Starting migration..."); try { bimServer.getDatabase().getMigrator().migrate(); bimServer.getServerInfoManager().update(); } catch (MigrationException e) { LOGGER.error("", e); bimServer.getEndPointManager().clear(); } else if (line.startsWith("showall")) { KeyValueStore keyValueStore = ((Database) bimServer.getDatabase()).getKeyValueStore(); Set<String> allTableNames = keyValueStore.getAllTableNames(); long total = 0;
@Override public void setSiteAddress(final String siteAddress) throws ServerException, UserException { if (getBimServer().getServerInfo().getServerState() != ServerState.NOT_SETUP) { requireAdminAuthentication(); } if (siteAddress.trim().isEmpty()) { throw new UserException("Site Address cannot be empty"); } else if (!siteAddress.startsWith("http://") && !(siteAddress.startsWith("https://"))) { throw new UserException("Site Address must start with either \"http://\" or \"https://\""); } DatabaseSession session = getBimServer().getDatabase().createSession(); try { SetServerSettingDatabaseAction action = new SetServerSettingDatabaseAction(getBimServer(), session, getInternalAccessMethod(), new ServerSettingsSetter() { @Override public void set(ServerSettings serverSettings) { serverSettings.setSiteAddress(siteAddress); } }); session.executeAndCommitAction(action); } catch (BimserverDatabaseException e) { handleException(e); } finally { session.close(); } }
Authorization authorization = Authorization.fromToken(getBimServer().getEncryptionKey(), token); if (authorization instanceof RunServiceAuthorization) { RunServiceAuthorization runServiceAuthorization = (RunServiceAuthorization)authorization; try (DatabaseSession session = getBimServer().getDatabase().createSession()) { Authorization authorization = Authorization.fromToken(getBimServer().getEncryptionKey(), token); User user = session.get(authorization.getUoid(), OldQuery.getDefault()); if (user == null) { ServicePlugin servicePlugin = getBimServer().getPluginManager().getServicePlugin(pluginDescriptor.getPluginClassName(), true); if (servicePlugin instanceof BimBotsServiceInterface) { LOGGER.info("Found service " + servicePlugin); BimBotsServiceInterface bimBotsServiceInterface = (BimBotsServiceInterface)servicePlugin; EndPoint endPoint = getBimServer().getEndPointManager().get(token); InputStream inputStream = request.getInputStream(); String contextId = request.getHeader("Context-Id"); getBimServer().getExecutorService().submit(new BimBotRunner(getBimServer(), new ByteArrayInputStream(baos.toByteArray()), contextId, inputType, authorization, foundService, bimBotsServiceInterface, endPoint.getStreamingSocketInterface(), topicKey.getId(), endPoint.getEndPointId()));