use of org.bimserver.shared.exceptions.ServerException 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 = getDatabaseSession().createServerModel(packageMetaData, pidRoidMap);
ifcHeader = concreteRevision.getIfcHeader();
int highestStopId = findHighestStopRid(project, concreteRevision);
OldQuery query = new OldQuery(packageMetaData, concreteRevision.getProject().getId(), concreteRevision.getId(), concreteRevision.getOid(), 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 = getDatabaseSession().createServerModel(lastPackageMetaData, pidRoidMap);
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.shared.exceptions.ServerException 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 NewService service) throws UserException, ServerException {
ServiceMap serviceMap = bimServer.getServiceFactory().get(authorization, AccessMethod.INTERNAL);
Thread thread = new Thread() {
@Override
public void run() {
try {
serviceMap.get(ServiceInterface.class).triggerRevisionService(roid, service.getOid());
} catch (Exception e) {
LOGGER.error("", e);
}
}
};
thread.start();
}
use of org.bimserver.shared.exceptions.ServerException in project BIMserver by opensourceBIM.
the class TestInOut method start.
private void start(String[] args) {
BimServerConfig config = new BimServerConfig();
Path homeDir = Paths.get("home");
try {
if (Files.isDirectory(homeDir)) {
PathUtils.removeDirectoryWithContent(homeDir);
}
} catch (IOException e) {
e.printStackTrace();
}
config.setClassPath(System.getProperty("java.class.path"));
config.setHomeDir(homeDir);
config.setPort(8080);
config.setStartEmbeddedWebServer(true);
config.setResourceFetcher(new LocalDevelopmentResourceFetcher(Paths.get("../")));
BimServer bimServer = new BimServer(config);
try {
LocalDevPluginLoader.loadPlugins(bimServer.getPluginBundleManager(), new OptionsParser(args).getPluginDirectories());
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:8080", "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);
}
BimServerClientInterface client = LocalDevSetup.setupJson("http://localhost:8080");
SProject project = client.getServiceInterface().addProject("test", "ifc2x3tc1");
SDeserializerPluginConfiguration deserializer = client.getServiceInterface().getSuggestedDeserializerForExtension("ifc", project.getOid());
Path inputFile = Paths.get("../TestData/data/AC11-Institute-Var-2-IFC.ifc");
client.checkinSync(project.getOid(), "test", deserializer.getOid(), false, inputFile);
project = client.getServiceInterface().getProjectByPoid(project.getOid());
SSerializerPluginConfiguration serializer = client.getServiceInterface().getSerializerByContentType("application/ifc");
Path outputFile = Paths.get("output.ifc");
client.download(project.getLastRevisionId(), serializer.getOid(), outputFile);
Diff diff = new Diff(false, false, false, inputFile, outputFile);
diff.start();
} catch (ServerException e) {
e.printStackTrace();
} catch (DatabaseInitException e) {
e.printStackTrace();
} catch (BimserverDatabaseException e) {
e.printStackTrace();
} catch (PluginException e) {
e.printStackTrace();
} catch (DatabaseRestartRequiredException e) {
e.printStackTrace();
} catch (UserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (PublicInterfaceNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CompareException e) {
e.printStackTrace();
} catch (BimServerClientException e) {
e.printStackTrace();
}
}
use of org.bimserver.shared.exceptions.ServerException in project BIMserver by opensourceBIM.
the class TestManyRevisions method start.
private void start(String[] args) {
try {
Path home = Paths.get("home");
PluginManager pluginManager = LocalDevPluginLoader.createPluginManager(home);
MetaDataManager metaDataManager = new MetaDataManager(home.resolve("tmp"));
pluginManager.setMetaDataManager(metaDataManager);
try (BimServerClientFactory factory = new JsonBimServerClientFactory(metaDataManager, "http://localhost:8080")) {
BimServerClientInterface client = factory.create(new UsernamePasswordAuthenticationInfo("admin@bimserver.org", "admin"));
try {
SProject project = client.getServiceInterface().addProject("lots2", "ifc2x3tc1");
Path[] files = new Path[] { Paths.get("../TestData/data/AC11-Institute-Var-2-IFC.ifc"), Paths.get("../TestData/data/AC11-FZK-Haus-IFC - Alt.ifc") };
SDeserializerPluginConfiguration deserializer = client.getServiceInterface().getSuggestedDeserializerForExtension("ifc", project.getOid());
int fn = 0;
for (int i = 0; i < 20; i++) {
System.out.println(i + ": " + files[fn].getFileName().toString());
client.checkinSync(project.getOid(), "comment" + i, deserializer.getOid(), false, files[fn]);
fn = 1 - fn;
}
} catch (ServerException | UserException | PublicInterfaceNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
use of org.bimserver.shared.exceptions.ServerException in project BIMserver by opensourceBIM.
the class ServiceImpl method getTotalUntransformedBounds.
@Override
public SBounds getTotalUntransformedBounds(Set<Long> roids) throws ServerException, UserException {
// TODO duplicate code with getTotalBounds
try (DatabaseSession session = getBimServer().getDatabase().createSession(OperationType.READ_ONLY)) {
double[] totalMin = new double[] { Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE };
double[] totalMax = new double[] { -Double.MAX_VALUE, -Double.MAX_VALUE, -Double.MAX_VALUE };
for (Long roid : roids) {
Revision revision = session.get(roid, OldQuery.getDefault());
Bounds bounds = revision.getBoundsUntransformedMm();
if (bounds.getMin().getX() == Double.MAX_VALUE || bounds.getMin().getY() == Double.MAX_VALUE || bounds.getMin().getZ() == Double.MAX_VALUE || bounds.getMax().getX() == -Double.MAX_VALUE || bounds.getMax().getY() == -Double.MAX_VALUE || bounds.getMax().getZ() == -Double.MAX_VALUE) {
// Probably no objects or weird error, let's skip this one
continue;
}
Vector3f min = bounds.getMin();
Vector3f max = bounds.getMax();
if (min.getX() < totalMin[0]) {
totalMin[0] = min.getX();
}
if (min.getY() < totalMin[1]) {
totalMin[1] = min.getY();
}
if (min.getZ() < totalMin[2]) {
totalMin[2] = min.getZ();
}
if (max.getX() > totalMax[0]) {
totalMax[0] = max.getX();
}
if (max.getY() > totalMax[1]) {
totalMax[1] = max.getY();
}
if (max.getZ() > totalMax[2]) {
totalMax[2] = max.getZ();
}
}
SBounds sBounds = new SBounds();
SVector3f sMin = new SVector3f();
SVector3f sMax = new SVector3f();
sBounds.setMin(sMin);
sBounds.setMax(sMax);
sMin.setX(totalMin[0]);
sMin.setY(totalMin[1]);
sMin.setZ(totalMin[2]);
sMax.setX(totalMax[0]);
sMax.setY(totalMax[1]);
sMax.setZ(totalMax[2]);
return sBounds;
} catch (Exception e) {
return handleException(e);
}
}
Aggregations