Search in sources :

Example 36 with PackageMetaData

use of org.bimserver.emf.PackageMetaData in project BIMserver by opensourceBIM.

the class DatabaseSession method getOidOfGuid.

public ObjectIdentifier getOidOfGuid(String schema, String guid, int pid, int rid) throws BimserverDatabaseException {
    PackageMetaData packageMetaData = getMetaDataManager().getPackageMetaData(schema);
    for (EClass eClass : packageMetaData.getAllSubClasses(packageMetaData.getEClass("IfcRoot"))) {
        RecordIterator recordIterator = database.getKeyValueStore().getRecordIterator(eClass.getEPackage().getName() + "_" + eClass.getName(), BinUtils.intToByteArray(pid), BinUtils.intToByteArray(pid), this);
        try {
            Record record = recordIterator.next();
            while (record != null) {
                reads++;
                ByteBuffer buffer = ByteBuffer.wrap(record.getKey());
                int pidOfRecord = buffer.getInt();
                long oid = buffer.getLong();
                int ridOfRecord = -buffer.getInt();
                if (ridOfRecord == rid && pid == pidOfRecord) {
                    ByteBuffer value = ByteBuffer.wrap(record.getValue());
                    // Skip the unsettable part
                    value.position(value.position() + packageMetaData.getUnsettedLength(eClass));
                    if (value.capacity() > 1) {
                        int stringLength = value.getInt();
                        if (stringLength == -1) {
                            return null;
                        } else {
                            String s = BinUtils.readString(value, stringLength);
                            if (s.equals(guid)) {
                                return new ObjectIdentifier(oid, getCid(eClass));
                            }
                        }
                    }
                }
                record = recordIterator.next();
            }
        } finally {
            recordIterator.close();
        }
    }
    return null;
}
Also used : EClass(org.eclipse.emf.ecore.EClass) PackageMetaData(org.bimserver.emf.PackageMetaData) ByteBuffer(java.nio.ByteBuffer)

Example 37 with PackageMetaData

use of org.bimserver.emf.PackageMetaData in project BIMserver by opensourceBIM.

the class ServiceRunnerServlet method service.

@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (request.getRequestURI().endsWith("/servicelist")) {
        processServiceList(request, response);
        return;
    }
    String token = null;
    if (request.getHeader("Authorization") != null) {
        String a = request.getHeader("Authorization");
        if (a.startsWith("Bearer")) {
            token = a.substring(7);
        }
    }
    if (token == null) {
        token = request.getHeader("Token");
    }
    LOGGER.info("Token: " + token);
    String serviceName = request.getHeader("ServiceName");
    if (serviceName == null) {
        serviceName = request.getRequestURI();
        if (serviceName.startsWith("/services/")) {
            serviceName = serviceName.substring(10);
        }
    }
    LOGGER.info("ServiceName: " + serviceName);
    long serviceOid = Long.parseLong(serviceName);
    String inputType = request.getHeader("Input-Type");
    LOGGER.info("Input-Type: " + inputType);
    try (DatabaseSession session = getBimServer().getDatabase().createSession()) {
        Authorization authorization = Authorization.fromToken(getBimServer().getEncryptionKey(), token);
        User user = session.get(authorization.getUoid(), OldQuery.getDefault());
        if (user == null) {
            LOGGER.error("Service \"" + serviceName + "\" not found for this user");
            throw new UserException("No user found with uoid " + authorization.getUoid());
        }
        if (user.getState() == ObjectState.DELETED) {
            LOGGER.error("User has been deleted");
            throw new UserException("User has been deleted");
        }
        InternalServicePluginConfiguration foundService = null;
        UserSettings userSettings = user.getUserSettings();
        for (InternalServicePluginConfiguration internalServicePluginConfiguration : userSettings.getServices()) {
            if (internalServicePluginConfiguration.getOid() == serviceOid) {
                foundService = internalServicePluginConfiguration;
                break;
            }
        }
        if (foundService == null) {
            LOGGER.info("Service \"" + serviceName + "\" not found for this user");
            throw new ServletException("Service \"" + serviceName + "\" not found for this user");
        }
        PluginDescriptor pluginDescriptor = foundService.getPluginDescriptor();
        ServicePlugin servicePlugin = getBimServer().getPluginManager().getServicePlugin(pluginDescriptor.getPluginClassName(), true);
        if (servicePlugin instanceof BimBotsServiceInterface) {
            LOGGER.info("Found service " + servicePlugin);
            BimBotsServiceInterface bimBotsServiceInterface = (BimBotsServiceInterface) servicePlugin;
            try {
                if (getBimServer().getServerSettingsCache().getServerSettings().isStoreServiceRuns()) {
                    LOGGER.info("Storing intermediate results");
                    // When we store service runs, we can just use the streaming deserializer to stream directly to the database, after that we'll trigger the actual service
                    // Create or find project and link user and service to project
                    // Checkin stream into project
                    // Trigger service
                    ServiceInterface serviceInterface = getBimServer().getServiceFactory().get(authorization, AccessMethod.INTERNAL).get(ServiceInterface.class);
                    SProject project = serviceInterface.addProject("tmp-" + new Random().nextInt(), "ifc2x3tc1");
                    SDeserializerPluginConfiguration deserializer = serviceInterface.getSuggestedDeserializerForExtension("ifc", project.getOid());
                    if (deserializer == null) {
                        throw new BimBotsException("No deserializer found");
                    }
                    serviceInterface.checkin(project.getOid(), "Auto checkin", deserializer.getOid(), -1L, "s", new DataHandler(new InputStreamDataSource(request.getInputStream())), false, true);
                    project = serviceInterface.getProjectByPoid(project.getOid());
                    PackageMetaData packageMetaData = getBimServer().getMetaDataManager().getPackageMetaData(project.getSchema());
                    IfcModelInterface model = new BasicIfcModel(packageMetaData, null);
                    try {
                        Revision revision = session.get(project.getLastRevisionId(), OldQuery.getDefault());
                        session.getMap(model, new OldQuery(packageMetaData, project.getId(), revision.getId(), revision.getOid(), null, Deep.NO));
                    } catch (BimserverDatabaseException e) {
                        e.printStackTrace();
                    }
                    BimServerBimBotsInput input = new BimServerBimBotsInput(getBimServer(), authorization.getUoid(), null, null, model);
                    BimBotsOutput output = bimBotsServiceInterface.runBimBot(input, getBimServer().getSConverter().convertToSObject(foundService.getSettings()));
                    SExtendedData extendedData = new SExtendedData();
                    SFile file = new SFile();
                    file.setData(output.getData());
                    file.setFilename(output.getContentDisposition());
                    file.setMime(output.getContentType());
                    file.setSize(output.getData().length);
                    Long fileId = serviceInterface.uploadFile(file);
                    extendedData.setFileId(fileId);
                    extendedData.setTitle(output.getTitle());
                    SExtendedDataSchema extendedDataSchema = null;
                    try {
                        extendedDataSchema = serviceInterface.getExtendedDataSchemaByName(output.getSchemaName());
                    } catch (UserException e) {
                        extendedDataSchema = new SExtendedDataSchema();
                        extendedDataSchema.setContentType(output.getContentType());
                        extendedDataSchema.setName(output.getSchemaName());
                        serviceInterface.addExtendedDataSchema(extendedDataSchema);
                    }
                    extendedData.setSchemaId(extendedDataSchema.getOid());
                    serviceInterface.addExtendedDataToRevision(project.getLastRevisionId(), extendedData);
                    response.setHeader("Output-Type", output.getSchemaName());
                    response.setHeader("Data-Title", output.getTitle());
                    response.setHeader("Data-Identifier", "" + project.getOid());
                    response.setHeader("Content-Type", output.getContentType());
                    response.setHeader("Content-Disposition", output.getContentDisposition());
                    response.getOutputStream().write(output.getData());
                } else {
                    // When we don't store the service runs, there is no other way than to just use the old deserializer and run the service from the EMF model
                    LOGGER.info("NOT Storing intermediate results");
                    DeserializerPlugin deserializerPlugin = getBimServer().getPluginManager().getFirstDeserializer("ifc", Schema.IFC2X3TC1, true);
                    if (deserializerPlugin == null) {
                        throw new BimBotsException("No deserializer plugin found");
                    }
                    byte[] data = IOUtils.toByteArray(request.getInputStream());
                    SchemaName schema = SchemaName.valueOf(inputType);
                    Deserializer deserializer = deserializerPlugin.createDeserializer(new PluginConfiguration());
                    PackageMetaData packageMetaData = getBimServer().getMetaDataManager().getPackageMetaData("ifc2x3tc1");
                    deserializer.init(packageMetaData);
                    IfcModelInterface model = deserializer.read(new ByteArrayInputStream(data), schema.name(), data.length, null);
                    BimServerBimBotsInput input = new BimServerBimBotsInput(getBimServer(), authorization.getUoid(), schema, data, model);
                    BimBotsOutput output = bimBotsServiceInterface.runBimBot(input, getBimServer().getSConverter().convertToSObject(foundService.getSettings()));
                    response.setHeader("Output-Type", output.getSchemaName());
                    response.setHeader("Data-Title", output.getTitle());
                    response.setHeader("Content-Type", output.getContentType());
                    response.setHeader("Content-Disposition", output.getContentDisposition());
                    response.getOutputStream().write(output.getData());
                }
            } catch (BimBotsException e) {
                LOGGER.error("", e);
            } catch (DeserializeException e) {
                LOGGER.error("", e);
            } catch (PluginException e) {
                LOGGER.error("", e);
            } catch (ServerException e) {
                LOGGER.error("", e);
            }
        } else {
            throw new ServletException("Service \"" + serviceName + "\" does not implement the BimBotsServiceInterface");
        }
    } catch (AuthenticationException e) {
        LOGGER.error("", e);
    } catch (BimserverDatabaseException e) {
        LOGGER.error("", e);
    } catch (UserException e) {
        LOGGER.error("", e);
    }
}
Also used : ServicePlugin(org.bimserver.plugins.services.ServicePlugin) User(org.bimserver.models.store.User) SDeserializerPluginConfiguration(org.bimserver.interfaces.objects.SDeserializerPluginConfiguration) DatabaseSession(org.bimserver.database.DatabaseSession) AuthenticationException(org.bimserver.webservices.authorization.AuthenticationException) IfcModelInterface(org.bimserver.emf.IfcModelInterface) DataHandler(javax.activation.DataHandler) BimBotsServiceInterface(org.bimserver.bimbots.BimBotsServiceInterface) SProject(org.bimserver.interfaces.objects.SProject) SExtendedDataSchema(org.bimserver.interfaces.objects.SExtendedDataSchema) Authorization(org.bimserver.webservices.authorization.Authorization) ServletException(javax.servlet.ServletException) InputStreamDataSource(org.bimserver.utils.InputStreamDataSource) BimserverDatabaseException(org.bimserver.BimserverDatabaseException) Random(java.util.Random) BimBotsServiceInterface(org.bimserver.bimbots.BimBotsServiceInterface) ServiceInterface(org.bimserver.shared.interfaces.ServiceInterface) InternalServicePluginConfiguration(org.bimserver.models.store.InternalServicePluginConfiguration) SDeserializerPluginConfiguration(org.bimserver.interfaces.objects.SDeserializerPluginConfiguration) PluginConfiguration(org.bimserver.plugins.PluginConfiguration) UserException(org.bimserver.shared.exceptions.UserException) SFile(org.bimserver.interfaces.objects.SFile) ServerException(org.bimserver.shared.exceptions.ServerException) UserSettings(org.bimserver.models.store.UserSettings) PackageMetaData(org.bimserver.emf.PackageMetaData) PluginException(org.bimserver.shared.exceptions.PluginException) DeserializerPlugin(org.bimserver.plugins.deserializers.DeserializerPlugin) BimBotsException(org.bimserver.bimbots.BimBotsException) DeserializeException(org.bimserver.plugins.deserializers.DeserializeException) BasicIfcModel(org.bimserver.ifc.BasicIfcModel) BimServerBimBotsInput(org.bimserver.bimbots.BimServerBimBotsInput) OldQuery(org.bimserver.database.OldQuery) PluginDescriptor(org.bimserver.models.store.PluginDescriptor) Revision(org.bimserver.models.store.Revision) SExtendedData(org.bimserver.interfaces.objects.SExtendedData) ByteArrayInputStream(java.io.ByteArrayInputStream) Deserializer(org.bimserver.plugins.deserializers.Deserializer) InternalServicePluginConfiguration(org.bimserver.models.store.InternalServicePluginConfiguration) BimBotsOutput(org.bimserver.bimbots.BimBotsOutput) SchemaName(org.bimserver.plugins.SchemaName)

Example 38 with PackageMetaData

use of org.bimserver.emf.PackageMetaData in project BIMserver by opensourceBIM.

the class AdminServiceImpl method regenerateGeometry.

@Override
public void regenerateGeometry(Long croid) throws ServerException, UserException {
    LOGGER.info("Regenerating geometry for concrete revision" + croid);
    DatabaseSession session = getBimServer().getDatabase().createSession();
    try {
        // Normally we wouldn't be allowed to change existing data
        session.setOverwriteEnabled(true);
        ConcreteRevision concreteRevision = session.get(StorePackage.eINSTANCE.getConcreteRevision(), croid, OldQuery.getDefault());
        PackageMetaData packageMetaData = getBimServer().getMetaDataManager().getPackageMetaData(concreteRevision.getProject().getSchema());
        IfcModelInterface model = new BasicIfcModel(packageMetaData, null);
        session.getMap(model, new OldQuery(packageMetaData, concreteRevision.getProject().getId(), concreteRevision.getId(), -1));
        User user = session.get(getAuthorization().getUoid(), 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");
        }
        RenderEnginePool pool = getBimServer().getRenderEnginePools().getRenderEnginePool(model.getPackageMetaData().getSchema(), defaultRenderEngine.getPluginDescriptor().getPluginClassName(), new PluginConfiguration(defaultRenderEngine.getSettings()));
        new GeometryGenerator(getBimServer()).generateGeometry(pool, getBimServer().getPluginManager(), session, model, concreteRevision.getProject().getId(), concreteRevision.getId(), true, null);
        session.commit();
    } catch (Exception e) {
        handleException(e);
    } finally {
        session.close();
    }
}
Also used : User(org.bimserver.models.store.User) RenderEnginePool(org.bimserver.renderengine.RenderEnginePool) DatabaseSession(org.bimserver.database.DatabaseSession) PackageMetaData(org.bimserver.emf.PackageMetaData) IfcModelInterface(org.bimserver.emf.IfcModelInterface) UserSettings(org.bimserver.models.store.UserSettings) GeometryGenerator(org.bimserver.GeometryGenerator) BimBotsException(org.bimserver.bimbots.BimBotsException) BasicIfcModel(org.bimserver.ifc.BasicIfcModel) UserException(org.bimserver.shared.exceptions.UserException) BimBotsException(org.bimserver.bimbots.BimBotsException) IOException(java.io.IOException) ServerException(org.bimserver.shared.exceptions.ServerException) BimserverDatabaseException(org.bimserver.BimserverDatabaseException) OldQuery(org.bimserver.database.OldQuery) RenderEnginePluginConfiguration(org.bimserver.models.store.RenderEnginePluginConfiguration) ConcreteRevision(org.bimserver.models.store.ConcreteRevision) RenderEnginePluginConfiguration(org.bimserver.models.store.RenderEnginePluginConfiguration) PluginConfiguration(org.bimserver.plugins.PluginConfiguration)

Example 39 with PackageMetaData

use of org.bimserver.emf.PackageMetaData in project BIMserver by opensourceBIM.

the class NewRevisionNotification method triggerNewRevision.

public void triggerNewRevision(DatabaseSession session, NotificationsManager notificationsManager, final BimServer bimServer, String siteAddress, Project project, final long roid, Trigger trigger, final Service service) throws UserException, ServerException {
    if (service.getTrigger() == trigger) {
        Channel channel = null;
        try {
            IfcModelInterface model = null;
            for (ModelCheckerInstance modelCheckerInstance : service.getModelCheckers()) {
                if (modelCheckerInstance.isValid()) {
                    ModelCheckerPlugin modelCheckerPlugin = bimServer.getPluginManager().getModelCheckerPlugin(modelCheckerInstance.getModelCheckerPluginClassName(), true);
                    if (modelCheckerPlugin != null) {
                        ModelChecker modelChecker = modelCheckerPlugin.createModelChecker(null);
                        ModelCheckerResult result;
                        try {
                            if (model == null) {
                                PackageMetaData packageMetaData = bimServer.getMetaDataManager().getPackageMetaData(project.getSchema());
                                model = new BasicIfcModel(packageMetaData, null);
                                Revision revision;
                                try {
                                    revision = session.get(roid, OldQuery.getDefault());
                                    session.getMap(model, new OldQuery(packageMetaData, project.getId(), revision.getId(), revision.getOid(), null, Deep.NO));
                                } catch (BimserverDatabaseException e) {
                                    LOGGER.error("", e);
                                }
                            }
                            result = modelChecker.check(model, modelCheckerInstance.getCompiled());
                            if (!result.isValid()) {
                                LOGGER.info("Not triggering");
                                return;
                            }
                        } catch (ModelCheckException e) {
                            LOGGER.info("Not triggering");
                            return;
                        }
                    }
                }
            }
            channel = notificationsManager.getChannel(service);
            final RemoteServiceInterface remoteServiceInterface = channel.get(RemoteServiceInterface.class);
            long writeProjectPoid = service.getWriteRevision() == null ? -1 : service.getWriteRevision().getOid();
            long writeExtendedDataRoid = service.getWriteExtendedData() != null ? roid : -1;
            @SuppressWarnings("unused") long readRevisionRoid = service.isReadRevision() ? roid : -1;
            long readExtendedDataRoid = service.getReadExtendedData() != null ? roid : -1;
            List<Long> roidsList = new ArrayList<>();
            Set<Project> relatedProjects = getRelatedProjects(project);
            for (Project p : relatedProjects) {
                for (Revision revision : p.getRevisions()) {
                    roidsList.add(revision.getOid());
                }
            }
            long[] roids = new long[roidsList.size()];
            for (int i = 0; i < roids.length; i++) {
                roids[i] = roidsList.get(i);
            }
            final ExplicitRightsAuthorization authorization = new ExplicitRightsAuthorization(bimServer, service.getUser().getOid(), service.getOid(), service.isReadRevision() ? roids : new long[0], writeProjectPoid, readExtendedDataRoid, writeExtendedDataRoid);
            ServiceInterface newService = bimServer.getServiceFactory().get(authorization, AccessMethod.INTERNAL).get(ServiceInterface.class);
            // TODO redundant?
            ((org.bimserver.webservices.impl.ServiceImpl) newService).setAuthorization(authorization);
            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 error(Throwable e) {
                    LOGGER.error("", e);
                }
            });
        } catch (ChannelConnectionException e) {
            LOGGER.error("", e);
        } catch (PublicInterfaceNotFoundException e) {
            LOGGER.error("", e);
        } finally {
            if (channel != null) {
                // TODO This is interesting, when sending async, is this not going to break?
                channel.disconnect();
            }
        }
    }
}
Also used : RemoteServiceInterface(org.bimserver.shared.interfaces.RemoteServiceInterface) AsyncRemoteServiceInterface(org.bimserver.shared.interfaces.async.AsyncRemoteServiceInterface) NewRevisionCallback(org.bimserver.shared.interfaces.async.AsyncRemoteServiceInterface.NewRevisionCallback) IfcModelInterface(org.bimserver.emf.IfcModelInterface) ArrayList(java.util.ArrayList) AsyncRemoteServiceInterface(org.bimserver.shared.interfaces.async.AsyncRemoteServiceInterface) ModelCheckerResult(org.bimserver.models.store.ModelCheckerResult) BimserverDatabaseException(org.bimserver.BimserverDatabaseException) ModelChecker(org.bimserver.plugins.modelchecker.ModelChecker) ExplicitRightsAuthorization(org.bimserver.webservices.authorization.ExplicitRightsAuthorization) RemoteServiceInterface(org.bimserver.shared.interfaces.RemoteServiceInterface) ServiceInterface(org.bimserver.shared.interfaces.ServiceInterface) AsyncRemoteServiceInterface(org.bimserver.shared.interfaces.async.AsyncRemoteServiceInterface) ModelCheckerInstance(org.bimserver.models.store.ModelCheckerInstance) ModelCheckerPlugin(org.bimserver.plugins.modelchecker.ModelCheckerPlugin) ChannelConnectionException(org.bimserver.shared.ChannelConnectionException) PackageMetaData(org.bimserver.emf.PackageMetaData) Channel(org.bimserver.client.Channel) ModelCheckException(org.bimserver.plugins.modelchecker.ModelCheckException) BasicIfcModel(org.bimserver.ifc.BasicIfcModel) OldQuery(org.bimserver.database.OldQuery) Project(org.bimserver.models.store.Project) Revision(org.bimserver.models.store.Revision) PublicInterfaceNotFoundException(org.bimserver.shared.exceptions.PublicInterfaceNotFoundException)

Example 40 with PackageMetaData

use of org.bimserver.emf.PackageMetaData in project BIMserver by opensourceBIM.

the class ServiceImpl method triggerRevisionService.

@Override
public void triggerRevisionService(Long roid, Long soid) throws ServerException, UserException {
    DatabaseSession session = getBimServer().getDatabase().createSession();
    try {
        Revision revision = (Revision) session.get(StorePackage.eINSTANCE.getRevision(), roid, OldQuery.getDefault());
        if (revision == null) {
            throw new UserException("No revision found for roid " + roid);
        }
        NewService newService = session.get(StorePackage.eINSTANCE.getNewService(), soid, OldQuery.getDefault());
        if (revision.getServicesLinked().contains(newService)) {
            // We don't want no loops
            return;
        }
        String url = newService.getResourceUrl();
        SerializerPluginConfiguration serializer = newService.getSerializer();
        PackageMetaData pmd = getBimServer().getMetaDataManager().getPackageMetaData(revision.getProject().getSchema());
        Query query = DefaultQueries.all(pmd);
        Long topicId = download(Collections.singleton(roid), new JsonQueryObjectModelConverter(pmd).toJson(query).toString(), serializer.getOid(), false);
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        LongAction<?> longAction = getBimServer().getLongActionManager().getLongAction(topicId);
        if (longAction == null) {
            throw new UserException("No data found for topicId " + topicId);
        }
        SCheckoutResult result;
        if (longAction instanceof LongStreamingDownloadAction) {
            LongStreamingDownloadAction longStreamingDownloadAction = (LongStreamingDownloadAction) longAction;
            if (longStreamingDownloadAction.getErrors().isEmpty()) {
                try {
                    result = longStreamingDownloadAction.getCheckoutResult();
                } catch (SerializerException e) {
                    throw new UserException(e);
                }
            } else {
                LOGGER.error(longStreamingDownloadAction.getErrors().get(0));
                throw new ServerException(longStreamingDownloadAction.getErrors().get(0));
            }
        } else {
            LongDownloadOrCheckoutAction longDownloadAction = (LongDownloadOrCheckoutAction) longAction;
            try {
                longDownloadAction.waitForCompletion();
                if (longDownloadAction.getErrors().isEmpty()) {
                    result = longDownloadAction.getCheckoutResult();
                } else {
                    LOGGER.error(longDownloadAction.getErrors().get(0));
                    throw new ServerException(longDownloadAction.getErrors().get(0));
                }
            } catch (Exception e) {
                LOGGER.error("", e);
                throw new ServerException(e);
            }
        }
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        LOGGER.info("Starting serialization");
        DataSource datasource = result.getFile().getDataSource();
        if (datasource instanceof ExtendedDataSource) {
            ((ExtendedDataSource) datasource).writeToOutputStream(baos, null);
        }
        LOGGER.info("Serialization done");
        if (newService.getAccessToken() != null) {
            httpPost.setHeader("Authorization", "Bearer " + newService.getAccessToken());
        }
        httpPost.setHeader("Input-Type", newService.getInput());
        httpPost.setHeader("Output-Type", newService.getOutput());
        httpPost.setEntity(new ByteArrayEntity(baos.toByteArray()));
        CloseableHttpResponse response = httpclient.execute(httpPost);
        LOGGER.info(response.getStatusLine().toString());
        if (response.getStatusLine().getStatusCode() == 401) {
            throw new UserException("Remote service responded with a 401 Unauthorized");
        } else if (response.getStatusLine().getStatusCode() == 200) {
            Header[] headers = response.getHeaders("Content-Disposition");
            String filename = "unknown";
            if (headers.length > 0) {
                String contentDisposition = headers[0].getValue();
                if (contentDisposition.contains("filename=")) {
                    int indexOf = contentDisposition.indexOf("filename=") + 10;
                    filename = contentDisposition.substring(indexOf, contentDisposition.indexOf("\"", indexOf + 1));
                } else {
                    filename = contentDisposition;
                }
            }
            Header dataTitleHeader = response.getFirstHeader("Data-Title");
            String dataTitle = newService.getName() + " Results";
            if (dataTitleHeader != null) {
                dataTitle = dataTitleHeader.getValue();
            }
            byte[] responseBytes = ByteStreams.toByteArray(response.getEntity().getContent());
            Action action = newService.getAction();
            if (action instanceof StoreExtendedData) {
                SFile file = new SFile();
                file.setData(responseBytes);
                file.setFilename(filename);
                file.setSize(responseBytes.length);
                file.setMime(response.getHeaders("Content-Type")[0].getValue());
                Long fileId = uploadFile(file);
                SExtendedData extendedData = new SExtendedData();
                extendedData.setAdded(new Date());
                extendedData.setRevisionId(roid);
                extendedData.setTitle(dataTitle);
                extendedData.setSize(responseBytes.length);
                extendedData.setFileId(fileId);
                extendedData.setSchemaId(getExtendedDataSchemaByName(newService.getOutput()).getOid());
                addExtendedDataToRevision(roid, extendedData);
            } else if (action instanceof CheckinRevision) {
                CheckinRevision checkinRevision = (CheckinRevision) action;
                Project targetProject = checkinRevision.getProject();
                String extension = filename.substring(filename.lastIndexOf(".") + 1);
                SDeserializerPluginConfiguration deserializer = getSuggestedDeserializerForExtension(extension, targetProject.getOid());
                Long checkingTopicId = initiateCheckin(targetProject.getOid(), deserializer.getOid());
                checkinInitiatedInternal(checkingTopicId, targetProject.getOid(), dataTitle, deserializer.getOid(), (long) responseBytes.length, filename, new DataHandler(new ByteArrayDataSource(responseBytes, "ifc")), false, true, newService.getOid());
            }
        } else {
            throw new UserException("Remote service responded with a " + response.getStatusLine());
        }
    } catch (Exception e) {
        handleException(e);
    } finally {
        session.close();
    }
}
Also used : HttpPost(org.apache.http.client.methods.HttpPost) CheckinDatabaseAction(org.bimserver.database.actions.CheckinDatabaseAction) GetDeserializerByIdDatabaseAction(org.bimserver.database.actions.GetDeserializerByIdDatabaseAction) GetAllReadableProjectsDatabaseAction(org.bimserver.database.actions.GetAllReadableProjectsDatabaseAction) AddModelCheckerToProjectDatabaseAction(org.bimserver.database.actions.AddModelCheckerToProjectDatabaseAction) GetProjectsByNameDatabaseAction(org.bimserver.database.actions.GetProjectsByNameDatabaseAction) AddProjectDatabaseAction(org.bimserver.database.actions.AddProjectDatabaseAction) LongCheckinAction(org.bimserver.longaction.LongCheckinAction) GetUserByUoidDatabaseAction(org.bimserver.database.actions.GetUserByUoidDatabaseAction) UpdateProjectDatabaseAction(org.bimserver.database.actions.UpdateProjectDatabaseAction) BimDatabaseAction(org.bimserver.database.actions.BimDatabaseAction) GetAllExtendedDataSchemasDatabaseAction(org.bimserver.database.actions.GetAllExtendedDataSchemasDatabaseAction) UserHasRightsDatabaseAction(org.bimserver.database.actions.UserHasRightsDatabaseAction) GetAllNewServicesOfProjectDatabaseAction(org.bimserver.database.actions.GetAllNewServicesOfProjectDatabaseAction) LongBranchAction(org.bimserver.longaction.LongBranchAction) AddExtendedDataToProjectDatabaseAction(org.bimserver.database.actions.AddExtendedDataToProjectDatabaseAction) GetSerializerByContentTypeDatabaseAction(org.bimserver.database.actions.GetSerializerByContentTypeDatabaseAction) GetSubProjectsDatabaseAction(org.bimserver.database.actions.GetSubProjectsDatabaseAction) SAction(org.bimserver.interfaces.objects.SAction) LongStreamingDownloadAction(org.bimserver.longaction.LongStreamingDownloadAction) GetModelCheckerOidDatabaseAction(org.bimserver.database.actions.GetModelCheckerOidDatabaseAction) BranchToExistingProjectDatabaseAction(org.bimserver.database.actions.BranchToExistingProjectDatabaseAction) RegenerateGeometryDatabaseAction(org.bimserver.database.actions.RegenerateGeometryDatabaseAction) GetAllAuthorizedUsersOfProjectDatabaseAction(org.bimserver.database.actions.GetAllAuthorizedUsersOfProjectDatabaseAction) GetAllCheckoutsOfRevisionDatabaseAction(org.bimserver.database.actions.GetAllCheckoutsOfRevisionDatabaseAction) ChangeUserTypeDatabaseAction(org.bimserver.database.actions.ChangeUserTypeDatabaseAction) GetAvailableClassesDatabaseAction(org.bimserver.database.actions.GetAvailableClassesDatabaseAction) GetProjectByPoidDatabaseAction(org.bimserver.database.actions.GetProjectByPoidDatabaseAction) RemoveServiceFromProjectDatabaseAction(org.bimserver.database.actions.RemoveServiceFromProjectDatabaseAction) StreamingCheckinDatabaseAction(org.bimserver.database.actions.StreamingCheckinDatabaseAction) UploadFileDatabaseAction(org.bimserver.database.actions.UploadFileDatabaseAction) DeleteUserDatabaseAction(org.bimserver.database.actions.DeleteUserDatabaseAction) LongGenericAction(org.bimserver.longaction.LongGenericAction) AddUserDatabaseAction(org.bimserver.database.actions.AddUserDatabaseAction) GetQueryEngineByNameDatabaseAction(org.bimserver.database.actions.GetQueryEngineByNameDatabaseAction) RemoveNewServiceFromProjectDatabaseAction(org.bimserver.database.actions.RemoveNewServiceFromProjectDatabaseAction) GetAllProjectsSmallDatabaseAction(org.bimserver.database.actions.GetAllProjectsSmallDatabaseAction) RemoveModelCheckerFromProjectDatabaseAction(org.bimserver.database.actions.RemoveModelCheckerFromProjectDatabaseAction) LongAction(org.bimserver.longaction.LongAction) LongDownloadAction(org.bimserver.longaction.LongDownloadAction) GetAllUsersDatabaseAction(org.bimserver.database.actions.GetAllUsersDatabaseAction) GetAllProjectsDatabaseAction(org.bimserver.database.actions.GetAllProjectsDatabaseAction) LongDownloadOrCheckoutAction(org.bimserver.longaction.LongDownloadOrCheckoutAction) GetRevisionSummaryDatabaseAction(org.bimserver.database.actions.GetRevisionSummaryDatabaseAction) UndeleteUserDatabaseAction(org.bimserver.database.actions.UndeleteUserDatabaseAction) GetSerializerByIdDatabaseAction(org.bimserver.database.actions.GetSerializerByIdDatabaseAction) GetAllWritableProjectsDatabaseAction(org.bimserver.database.actions.GetAllWritableProjectsDatabaseAction) SetRevisionTagDatabaseAction(org.bimserver.database.actions.SetRevisionTagDatabaseAction) GetExtendedDataSchemaByIdDatabaseAction(org.bimserver.database.actions.GetExtendedDataSchemaByIdDatabaseAction) GetOidByGuidDatabaseAction(org.bimserver.database.actions.GetOidByGuidDatabaseAction) AddExtendedDataSchemaDatabaseAction(org.bimserver.database.actions.AddExtendedDataSchemaDatabaseAction) RemoveUserFromExtendedDataSchemaDatabaseAction(org.bimserver.database.actions.RemoveUserFromExtendedDataSchemaDatabaseAction) GetUserByUserNameDatabaseAction(org.bimserver.database.actions.GetUserByUserNameDatabaseAction) GetAllRevisionsByUserDatabaseAction(org.bimserver.database.actions.GetAllRevisionsByUserDatabaseAction) GetSerializerByNameDatabaseAction(org.bimserver.database.actions.GetSerializerByNameDatabaseAction) GetIfcHeaderDatabaseAction(org.bimserver.database.actions.GetIfcHeaderDatabaseAction) GetCheckoutWarningsDatabaseAction(org.bimserver.database.actions.GetCheckoutWarningsDatabaseAction) GetQueryEngineByIdDatabaseAction(org.bimserver.database.actions.GetQueryEngineByIdDatabaseAction) UpdateRevisionDatabaseAction(org.bimserver.database.actions.UpdateRevisionDatabaseAction) BranchToNewProjectDatabaseAction(org.bimserver.database.actions.BranchToNewProjectDatabaseAction) AddServiceToProjectDatabaseAction(org.bimserver.database.actions.AddServiceToProjectDatabaseAction) GetTopLevelProjectByNameDatabaseAction(org.bimserver.database.actions.GetTopLevelProjectByNameDatabaseAction) GetAllRelatedProjectsDatabaseAction(org.bimserver.database.actions.GetAllRelatedProjectsDatabaseAction) DeleteServiceDatabaseAction(org.bimserver.database.actions.DeleteServiceDatabaseAction) GetDeserializerByNameDatabaseAction(org.bimserver.database.actions.GetDeserializerByNameDatabaseAction) AddLocalServiceToProjectDatabaseAction(org.bimserver.database.actions.AddLocalServiceToProjectDatabaseAction) GetAllCheckoutsOfProjectDatabaseAction(org.bimserver.database.actions.GetAllCheckoutsOfProjectDatabaseAction) LogAction(org.bimserver.models.log.LogAction) GetAllCheckoutsByUserDatabaseAction(org.bimserver.database.actions.GetAllCheckoutsByUserDatabaseAction) GetVolumeDatabaseAction(org.bimserver.database.actions.GetVolumeDatabaseAction) LongCheckoutAction(org.bimserver.longaction.LongCheckoutAction) UpdateModelCheckerDatabaseAction(org.bimserver.database.actions.UpdateModelCheckerDatabaseAction) UpdateGeoTagDatabaseAction(org.bimserver.database.actions.UpdateGeoTagDatabaseAction) Action(org.bimserver.models.store.Action) AddExtendedDataToRevisionDatabaseAction(org.bimserver.database.actions.AddExtendedDataToRevisionDatabaseAction) DeleteProjectDatabaseAction(org.bimserver.database.actions.DeleteProjectDatabaseAction) GetExtendedDataSchemaByNameDatabaseAction(org.bimserver.database.actions.GetExtendedDataSchemaByNameDatabaseAction) RemoveUserFromProjectDatabaseAction(org.bimserver.database.actions.RemoveUserFromProjectDatabaseAction) GetExtendedDataByIdDatabaseAction(org.bimserver.database.actions.GetExtendedDataByIdDatabaseAction) GetAllRevisionsOfProjectDatabaseAction(org.bimserver.database.actions.GetAllRevisionsOfProjectDatabaseAction) GetProjectsOfUserDatabaseAction(org.bimserver.database.actions.GetProjectsOfUserDatabaseAction) SLogAction(org.bimserver.interfaces.objects.SLogAction) AddUserToExtendedDataSchemaDatabaseAction(org.bimserver.database.actions.AddUserToExtendedDataSchemaDatabaseAction) GetSubProjectByNameDatabaseAction(org.bimserver.database.actions.GetSubProjectByNameDatabaseAction) GetNrPrimitivesDatabaseAction(org.bimserver.database.actions.GetNrPrimitivesDatabaseAction) GetRevisionDatabaseAction(org.bimserver.database.actions.GetRevisionDatabaseAction) ValidateModelCheckerDatabaseAction(org.bimserver.database.actions.ValidateModelCheckerDatabaseAction) AddNewServiceToProjectDatabaseAction(org.bimserver.database.actions.AddNewServiceToProjectDatabaseAction) LongStreamingCheckinAction(org.bimserver.longaction.LongStreamingCheckinAction) UndeleteProjectDatabaseAction(org.bimserver.database.actions.UndeleteProjectDatabaseAction) CompareDatabaseAction(org.bimserver.database.actions.CompareDatabaseAction) GetAllNonAuthorizedProjectsOfUserDatabaseAction(org.bimserver.database.actions.GetAllNonAuthorizedProjectsOfUserDatabaseAction) GetAllServicesOfProjectDatabaseAction(org.bimserver.database.actions.GetAllServicesOfProjectDatabaseAction) GetGeometryInfoDatabaseAction(org.bimserver.database.actions.GetGeometryInfoDatabaseAction) GetAvailableClassesInRevisionDatabaseAction(org.bimserver.database.actions.GetAvailableClassesInRevisionDatabaseAction) AddModelCheckerDatabaseAction(org.bimserver.database.actions.AddModelCheckerDatabaseAction) AddUserToProjectDatabaseAction(org.bimserver.database.actions.AddUserToProjectDatabaseAction) GetCheckinWarningsDatabaseAction(org.bimserver.database.actions.GetCheckinWarningsDatabaseAction) UserHasCheckinRightsDatabaseAction(org.bimserver.database.actions.UserHasCheckinRightsDatabaseAction) GetAreaDatabaseAction(org.bimserver.database.actions.GetAreaDatabaseAction) GetGeoTagDatabaseAction(org.bimserver.database.actions.GetGeoTagDatabaseAction) GetAllNonAuthorizedUsersOfProjectDatabaseAction(org.bimserver.database.actions.GetAllNonAuthorizedUsersOfProjectDatabaseAction) GetAllModelCheckersDatabaseAction(org.bimserver.database.actions.GetAllModelCheckersDatabaseAction) JsonQueryObjectModelConverter(org.bimserver.database.queries.om.JsonQueryObjectModelConverter) SDeserializerPluginConfiguration(org.bimserver.interfaces.objects.SDeserializerPluginConfiguration) Query(org.bimserver.database.queries.om.Query) OldQuery(org.bimserver.database.OldQuery) DatabaseSession(org.bimserver.database.DatabaseSession) SCheckoutResult(org.bimserver.interfaces.objects.SCheckoutResult) LongStreamingDownloadAction(org.bimserver.longaction.LongStreamingDownloadAction) DataHandler(javax.activation.DataHandler) CheckinRevision(org.bimserver.models.store.CheckinRevision) LongDownloadOrCheckoutAction(org.bimserver.longaction.LongDownloadOrCheckoutAction) ByteArrayEntity(org.apache.http.entity.ByteArrayEntity) CloseableHttpResponse(org.apache.http.client.methods.CloseableHttpResponse) UserException(org.bimserver.shared.exceptions.UserException) SFile(org.bimserver.interfaces.objects.SFile) NewService(org.bimserver.models.store.NewService) SNewService(org.bimserver.interfaces.objects.SNewService) ByteArrayDataSource(javax.mail.util.ByteArrayDataSource) CloseableHttpClient(org.apache.http.impl.client.CloseableHttpClient) ServerException(org.bimserver.shared.exceptions.ServerException) PackageMetaData(org.bimserver.emf.PackageMetaData) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SerializerException(org.bimserver.plugins.serializers.SerializerException) IOException(java.io.IOException) BimserverDatabaseException(org.bimserver.BimserverDatabaseException) SerializerException(org.bimserver.plugins.serializers.SerializerException) BcfException(org.opensourcebim.bcf.BcfException) UserException(org.bimserver.shared.exceptions.UserException) CannotBeScheduledException(org.bimserver.longaction.CannotBeScheduledException) DeserializeException(org.bimserver.plugins.deserializers.DeserializeException) ServerException(org.bimserver.shared.exceptions.ServerException) MessagingException(javax.mail.MessagingException) AddressException(javax.mail.internet.AddressException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) MalformedURLException(java.net.MalformedURLException) Date(java.util.Date) ByteArrayDataSource(javax.mail.util.ByteArrayDataSource) ExtendedDataSource(org.bimserver.plugins.serializers.ExtendedDataSource) DataSource(javax.activation.DataSource) StoreExtendedData(org.bimserver.models.store.StoreExtendedData) Project(org.bimserver.models.store.Project) SProject(org.bimserver.interfaces.objects.SProject) ExtendedDataSource(org.bimserver.plugins.serializers.ExtendedDataSource) SRevision(org.bimserver.interfaces.objects.SRevision) Revision(org.bimserver.models.store.Revision) CheckinRevision(org.bimserver.models.store.CheckinRevision) SExtendedDataAddedToRevision(org.bimserver.interfaces.objects.SExtendedDataAddedToRevision) SIfcHeader(org.bimserver.interfaces.objects.SIfcHeader) Header(org.apache.http.Header) SExtendedData(org.bimserver.interfaces.objects.SExtendedData) SerializerPluginConfiguration(org.bimserver.models.store.SerializerPluginConfiguration) SSerializerPluginConfiguration(org.bimserver.interfaces.objects.SSerializerPluginConfiguration)

Aggregations

PackageMetaData (org.bimserver.emf.PackageMetaData)43 UserException (org.bimserver.shared.exceptions.UserException)30 Revision (org.bimserver.models.store.Revision)22 OldQuery (org.bimserver.database.OldQuery)17 EClass (org.eclipse.emf.ecore.EClass)17 IfcModelInterface (org.bimserver.emf.IfcModelInterface)15 HashMapVirtualObject (org.bimserver.shared.HashMapVirtualObject)14 Query (org.bimserver.database.queries.om.Query)13 Project (org.bimserver.models.store.Project)13 QueryObjectProvider (org.bimserver.database.queries.QueryObjectProvider)12 ModelHelper (org.bimserver.plugins.ModelHelper)12 QueryPart (org.bimserver.database.queries.om.QueryPart)11 ConcreteRevision (org.bimserver.models.store.ConcreteRevision)11 IfcModelSet (org.bimserver.plugins.IfcModelSet)10 MergeException (org.bimserver.plugins.modelmerger.MergeException)10 User (org.bimserver.models.store.User)9 HashMap (java.util.HashMap)8 BimserverDatabaseException (org.bimserver.BimserverDatabaseException)8 List (java.util.List)7 ServerIfcModel (org.bimserver.ServerIfcModel)7