use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class DownloadCompareDatabaseAction method getModelCompare.
public org.bimserver.plugins.modelcompare.ModelCompare getModelCompare() throws ModelCompareException, BimserverDatabaseException {
Revision revision1 = getDatabaseSession().get(roid1, OldQuery.getDefault());
Revision revision2 = getDatabaseSession().get(roid2, OldQuery.getDefault());
PackageMetaData packageMetaData = getBimServer().getMetaDataManager().getPackageMetaData(revision1.getProject().getSchema());
if (revision1.getProject().getSchema().equals(revision2.getProject().getSchema())) {
ModelComparePluginConfiguration modelCompareObject = getDatabaseSession().get(StorePackage.eINSTANCE.getModelComparePluginConfiguration(), mcid, OldQuery.getDefault());
if (modelCompareObject != null) {
ModelComparePlugin modelComparePlugin = getBimServer().getPluginManager().getModelComparePlugin(modelCompareObject.getPluginDescriptor().getPluginClassName(), true);
if (modelComparePlugin != null) {
org.bimserver.plugins.modelcompare.ModelCompare modelCompare = modelComparePlugin.createModelCompare(new PluginConfiguration(modelCompareObject.getSettings()), packageMetaData);
return modelCompare;
} else {
throw new ModelCompareException("No Model Compare found " + modelCompareObject.getPluginDescriptor().getPluginClassName());
}
} else {
throw new ModelCompareException("No configured Model Compare found");
}
} else {
throw new ModelCompareException("Schemas not the same");
}
}
use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class DownloadDatabaseAction method execute.
@Override
public IfcModelInterface execute() throws UserException, BimserverLockConflictException, BimserverDatabaseException, ServerException {
Revision revision = getRevisionByRoid(roid);
PluginConfiguration serializerPluginConfiguration = getDatabaseSession().get(StorePackage.eINSTANCE.getPluginConfiguration(), serializerOid, OldQuery.getDefault());
getAuthorization().canDownload(roid);
if (revision == null) {
throw new UserException("Revision with oid " + roid + " not found");
}
Project project = revision.getProject();
User user = getUserByUoid(getAuthorization().getUoid());
try {
getAuthorization().canDownload(roid);
} catch (UserException e) {
if (!getAuthorization().hasRightsOnProjectOrSuperProjectsOrSubProjects(user, project)) {
throw new UserException("User has insufficient rights to download revisions from this project");
}
}
IfcModelSet ifcModelSet = new IfcModelSet();
long incrSize = 0;
EList<ConcreteRevision> concreteRevisions = revision.getConcreteRevisions();
if (concreteRevisions.size() == 0) {
throw new ServerException("No concrete revisions in revision");
}
for (ConcreteRevision subRevision : concreteRevisions) {
incrSize += subRevision.getSize();
}
final long totalSize = incrSize;
final AtomicLong total = new AtomicLong();
IfcHeader ifcHeader = null;
PackageMetaData lastPackageMetaData = null;
Map<Integer, Long> pidRoidMap = new HashMap<>();
pidRoidMap.put(project.getId(), roid);
for (ConcreteRevision concreteRevision : concreteRevisions) {
if (concreteRevision.getUser().getOid() != ignoreUoid) {
PackageMetaData packageMetaData = getBimServer().getMetaDataManager().getPackageMetaData(concreteRevision.getProject().getSchema());
lastPackageMetaData = packageMetaData;
IfcModel subModel = new ServerIfcModel(packageMetaData, pidRoidMap, getDatabaseSession());
ifcHeader = concreteRevision.getIfcHeader();
int highestStopId = findHighestStopRid(project, concreteRevision);
OldQuery query = new OldQuery(packageMetaData, concreteRevision.getProject().getId(), concreteRevision.getId(), concreteRevision.getOid(), objectIDM, Deep.YES, highestStopId);
subModel.addChangeListener(new IfcModelChangeListener() {
@Override
public void objectAdded(IdEObject idEObject) {
total.incrementAndGet();
if (totalSize == 0) {
setProgress("Preparing download...", 0);
} else {
setProgress("Preparing download...", (int) Math.round(100.0 * total.get() / totalSize));
}
}
});
query.updateOidCounters(concreteRevision, getDatabaseSession());
getDatabaseSession().getMap(subModel, query);
if (serializerPluginConfiguration != null) {
try {
checkGeometry(serializerPluginConfiguration, getBimServer().getPluginManager(), subModel, project, concreteRevision, revision);
} catch (GeometryGeneratingException e) {
throw new UserException(e);
}
}
subModel.getModelMetaData().setDate(concreteRevision.getDate());
ifcModelSet.add(subModel);
}
}
IfcModelInterface ifcModel = new ServerIfcModel(lastPackageMetaData, pidRoidMap, getDatabaseSession());
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 {
ifcModel = ifcModelSet.iterator().next();
}
if (ifcHeader != null) {
ifcHeader.load();
ifcModel.getModelMetaData().setIfcHeader(ifcHeader);
}
ifcModel.getModelMetaData().setName(project.getName() + "." + revision.getId());
ifcModel.getModelMetaData().setRevisionId(project.getRevisions().indexOf(revision) + 1);
if (user != null) {
ifcModel.getModelMetaData().setAuthorizedUser(user.getName());
}
ifcModel.getModelMetaData().setDate(revision.getDate());
if (revision.getProject().getGeoTag() != null) {
// ifcModel.setLon(revision.getProject().getGeoTag().getX());
// ifcModel.setLat(revision.getProject().getGeoTag().getY());
// ifcModel.setAltitude((int)
// revision.getProject().getGeoTag().getZ());
// ifcModel.setDirectionAngle(revision.getProject().getGeoTag().getDirectionAngle());
// try {
// CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:" +
// revision.getProject().getGeoTag().getEpsg());
// CoordinateReferenceSystem targetCRS =
// DefaultGeocentricCRS.CARTESIAN;
// MathTransform transform = CRS.findMathTransform(sourceCRS,
// targetCRS, true);
// float[] in = new
// float[]{revision.getProject().getGeoTag().getX1(),
// revision.getProject().getGeoTag().getY1(),
// revision.getProject().getGeoTag().getZ1()};
// float[] result = new float[3];
// transform.transform(in, 0, result, 0, 1);
// IfcModel.setLon(result[0]);
// IfcModel.setLat(result[1]);
// } catch (NoSuchAuthorityCodeException e) {
// LOGGER.error("", e);
// } catch (FactoryException e) {
// LOGGER.error("", e);
// } catch (MismatchedDimensionException e) {
// LOGGER.error("", e);
// } catch (TransformException e) {
// LOGGER.error("", e);
// }
}
return ifcModel;
}
use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class DownloadProjectsDatabaseAction method execute.
@Override
public IfcModelInterface execute() throws UserException, BimserverLockConflictException, BimserverDatabaseException {
User user = getUserByUoid(getAuthorization().getUoid());
Project project = null;
String projectName = "";
IfcModelSet ifcModelSet = new IfcModelSet();
long incrSize = 0;
for (long roid : roids) {
Revision revision = getRevisionByRoid(roid);
for (ConcreteRevision subRevision : revision.getConcreteRevisions()) {
incrSize += subRevision.getSize();
}
}
final long totalSize = incrSize;
final AtomicLong total = new AtomicLong();
PluginConfiguration serializerPluginConfiguration = getDatabaseSession().get(StorePackage.eINSTANCE.getPluginConfiguration(), serializerOid, OldQuery.getDefault());
PackageMetaData lastPackageMetaData = null;
IfcHeader ifcHeader = null;
Map<Integer, Long> pidRoidMap = new HashMap<>();
for (long roid : roids) {
Revision revision = getRevisionByRoid(roid);
project = revision.getProject();
pidRoidMap.put(project.getId(), roid);
if (getAuthorization().hasRightsOnProjectOrSuperProjectsOrSubProjects(user, project)) {
for (ConcreteRevision concreteRevision : revision.getConcreteRevisions()) {
ifcHeader = concreteRevision.getIfcHeader();
PackageMetaData packageMetaData = getBimServer().getMetaDataManager().getPackageMetaData(concreteRevision.getProject().getSchema());
lastPackageMetaData = packageMetaData;
IfcModel subModel = new ServerIfcModel(packageMetaData, pidRoidMap, getDatabaseSession());
int highestStopId = findHighestStopRid(project, concreteRevision);
OldQuery query = new OldQuery(packageMetaData, concreteRevision.getProject().getId(), concreteRevision.getId(), revision.getOid(), objectIDM, Deep.YES, highestStopId);
subModel.addChangeListener(new IfcModelChangeListener() {
@Override
public void objectAdded(IdEObject idEObject) {
total.incrementAndGet();
if (totalSize == 0) {
setProgress("Preparing download...", 0);
} else {
setProgress("Preparing download...", (int) Math.round(100.0 * total.get() / totalSize));
}
}
});
query.updateOidCounters(concreteRevision, getDatabaseSession());
getDatabaseSession().getMap(subModel, query);
projectName += concreteRevision.getProject().getName() + "-";
subModel.getModelMetaData().setDate(concreteRevision.getDate());
try {
checkGeometry(serializerPluginConfiguration, getBimServer().getPluginManager(), subModel, project, concreteRevision, revision);
} catch (GeometryGeneratingException e) {
throw new UserException(e);
}
ifcModelSet.add(subModel);
}
} else {
throw new UserException("User has no rights on project " + project.getOid());
}
}
IfcModelInterface ifcModel = new ServerIfcModel(lastPackageMetaData, pidRoidMap, getDatabaseSession());
if (ifcModelSet.size() == 1) {
ifcModel = ifcModelSet.iterator().next();
} else {
try {
ifcModel = getBimServer().getMergerFactory().createMerger(getDatabaseSession(), getAuthorization().getUoid()).merge(project, ifcModelSet, new ModelHelper(getBimServer().getMetaDataManager(), ifcModel));
} catch (MergeException e) {
throw new UserException(e);
}
}
if (ifcHeader != null) {
ifcHeader.load();
ifcModel.getModelMetaData().setIfcHeader(ifcHeader);
}
if (projectName.endsWith("-")) {
projectName = projectName.substring(0, projectName.length() - 1);
}
ifcModel.getModelMetaData().setName(projectName);
return ifcModel;
}
use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class GenericCheckinDatabaseAction method checkCheckSum.
protected void checkCheckSum(Project project, IfcModelInterface model) throws UserException {
ConcreteRevision lastConcreteRevision = project.getLastConcreteRevision();
if (lastConcreteRevision != null) {
int revisionId = -1;
for (Revision revision : lastConcreteRevision.getRevisions()) {
if (revision.getProject() == project) {
revisionId = revision.getId();
}
}
byte[] revisionChecksum = lastConcreteRevision.getChecksum();
if (revisionChecksum != null && model.getModelMetaData().getChecksum() != null) {
if (Arrays.equals(revisionChecksum, model.getModelMetaData().getChecksum())) {
throw new UserException("Uploaded model is the same as last revision (" + revisionId + "), duplicate model not stored");
}
}
}
}
use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class LowLevelServiceImpl method startTransaction.
@Override
public Long startTransaction(Long poid) throws UserException, ServerException {
requireAuthenticationAndRunningServer();
DatabaseSession session = getBimServer().getDatabase().createSession();
int pid = -1;
int rid = -1;
long roid = -1;
try {
Project project = (Project) session.get(poid, OldQuery.getDefault());
if (project == null) {
throw new UserException("No project found with poid " + poid);
}
pid = project.getId();
if (project.getLastRevision() != null) {
Revision revision = project.getLastRevision();
ConcreteRevision lastConcreteRevision = revision.getLastConcreteRevision();
rid = lastConcreteRevision.getId();
roid = revision.getOid();
}
LongTransaction longTransaction = getBimServer().getLongTransactionManager().newLongTransaction(getBimServer().getMetaDataManager().getPackageMetaData(project.getSchema()), poid, pid, rid, roid);
return longTransaction.getTid();
} catch (Exception e) {
return handleException(e);
} finally {
session.close();
}
}
Aggregations