use of org.bimserver.interfaces.SConverter in project BIMserver by opensourceBIM.
the class AddExtendedDataToRevisionDatabaseAction method execute.
@Override
public Long execute() throws UserException, BimserverLockConflictException, BimserverDatabaseException {
authorization.canWriteExtendedData(roid);
User actingUser = getUserByUoid(authorization.getUoid());
getIdEObject().setUser(actingUser);
getIdEObject().setAdded(new Date());
File file = getIdEObject().getFile();
getIdEObject().setSize(file.getData().length);
super.execute();
Revision revision = getRevisionByRoid(roid);
if (revision == null) {
throw new UserException("Revision with roid " + roid + " not found");
}
revision.getExtendedData().add(getIdEObject());
getDatabaseSession().store(revision);
getIdEObject().setProject(revision.getProject());
getIdEObject().setRevision(revision);
if (getIdEObject().getSchema() != null) {
getDatabaseSession().store(getIdEObject().getSchema());
}
final ExtendedDataAddedToRevision extendedDataAddedToRevision = getDatabaseSession().create(ExtendedDataAddedToRevision.class);
extendedDataAddedToRevision.setAccessMethod(getAccessMethod());
extendedDataAddedToRevision.setDate(new Date());
extendedDataAddedToRevision.setExecutor(actingUser);
extendedDataAddedToRevision.setExtendedData(getIdEObject());
extendedDataAddedToRevision.setRevision(revision);
final long poid = revision.getProject().getOid();
final long roid = revision.getOid();
getDatabaseSession().addPostCommitAction(new PostCommitAction() {
@Override
public void execute() throws UserException {
bimServer.getNotificationsManager().notify(new NewExtendedDataOnRevisionNotification(bimServer, getIdEObject().getOid(), poid, roid, -1));
bimServer.getNotificationsManager().notify(new SConverter().convertToSObject(extendedDataAddedToRevision));
}
});
return null;
}
use of org.bimserver.interfaces.SConverter in project BIMserver by opensourceBIM.
the class AddUserToProjectDatabaseAction method execute.
@Override
public Boolean execute() throws UserException, BimserverDatabaseException, BimserverLockConflictException {
final Project project = getProjectByPoid(poid);
User actingUser = getUserByUoid(authorization.getUoid());
if (authorization.hasRightsOnProject(actingUser, project)) {
User user = getUserByUoid(uoid);
project.getHasAuthorizedUsers().add(user);
user.getHasRightsOn().add(project);
final UserAddedToProject userAddedToProject = getDatabaseSession().create(UserAddedToProject.class);
userAddedToProject.setExecutor(actingUser);
userAddedToProject.setDate(new Date());
userAddedToProject.setAccessMethod(getAccessMethod());
userAddedToProject.setUser(user);
userAddedToProject.setProject(project);
getDatabaseSession().addPostCommitAction(new PostCommitAction() {
@Override
public void execute() throws UserException {
bimServer.getNotificationsManager().notify(new SConverter().convertToSObject(userAddedToProject));
}
});
getDatabaseSession().store(user);
getDatabaseSession().store(project);
return true;
} else {
throw new UserException("User has no rights to grant permission on '" + project.getName() + "'");
}
}
use of org.bimserver.interfaces.SConverter in project BIMserver by opensourceBIM.
the class ChangePasswordDatabaseAction method changePassword.
private boolean changePassword(DatabaseSession databaseSession, User actingUser, boolean skipCheck) throws BimserverLockConflictException, BimserverDatabaseException, UserException {
User user = getUserByUoid(uoid);
Authenticator authenticator = new Authenticator();
if (skipCheck || authenticator.validate(oldPassword, user.getPasswordHash(), user.getPasswordSalt())) {
byte[] salt = new byte[32];
new java.security.SecureRandom().nextBytes(salt);
user.setPasswordHash(authenticator.createHash(newPassword, salt));
user.setPasswordSalt(salt);
final PasswordChanged passwordchanged = databaseSession.create(PasswordChanged.class);
passwordchanged.setAccessMethod(getAccessMethod());
passwordchanged.setDate(new Date());
passwordchanged.setExecutor(actingUser);
passwordchanged.setUser(user);
getDatabaseSession().addPostCommitAction(new PostCommitAction() {
@Override
public void execute() throws UserException {
bimServer.getNotificationsManager().notify(new SConverter().convertToSObject(passwordchanged));
}
});
databaseSession.store(user);
return true;
} else {
throw new UserException("Old password does not match user's password");
}
}
use of org.bimserver.interfaces.SConverter in project BIMserver by opensourceBIM.
the class CommitTransactionDatabaseAction method execute.
@Override
public ConcreteRevision execute() throws UserException, BimserverLockConflictException, BimserverDatabaseException {
Project project = getProjectByPoid(longTransaction.getPoid());
User user = getUserByUoid(authorization.getUoid());
if (project == null) {
throw new UserException("Project with poid " + longTransaction.getPoid() + " not found");
}
if (!authorization.hasRightsOnProjectOrSuperProjects(user, project)) {
throw new UserException("User has no rights to checkin models to this project");
}
if (!MailSystem.isValidEmailAddress(user.getUsername())) {
throw new UserException("Users must have a valid e-mail address to checkin");
}
long size = 0;
Revision previousRevision = project.getLastRevision();
if (project.getLastRevision() != null) {
size += project.getLastRevision().getSize();
// for (ConcreteRevision concreteRevision : project.getLastRevision().getConcreteRevisions()) {
// size += concreteRevision.getSize();
// }
}
for (Change change : longTransaction.getChanges()) {
if (change instanceof CreateObjectChange) {
size++;
} else if (change instanceof RemoveObjectChange) {
size--;
}
}
Revision oldLastRevision = project.getLastRevision();
CreateRevisionResult result = createNewConcreteRevision(getDatabaseSession(), size, project, user, comment.trim());
ConcreteRevision concreteRevision = result.getConcreteRevision();
revision = concreteRevision.getRevisions().get(0);
project.setLastRevision(revision);
final NewRevisionAdded newRevisionAdded = getDatabaseSession().create(NewRevisionAdded.class);
newRevisionAdded.setDate(new Date());
newRevisionAdded.setExecutor(user);
newRevisionAdded.setRevision(concreteRevision.getRevisions().get(0));
newRevisionAdded.setProject(project);
newRevisionAdded.setAccessMethod(getAccessMethod());
PackageMetaData packageMetaData = bimServer.getMetaDataManager().getPackageMetaData(project.getSchema());
// IfcModelInterface ifcModel = new BasicIfcModel(packageMetaData, null);
if (oldLastRevision != null) {
int highestStopId = AbstractDownloadDatabaseAction.findHighestStopRid(project, oldLastRevision.getLastConcreteRevision());
OldQuery query = new OldQuery(longTransaction.getPackageMetaData(), project.getId(), oldLastRevision.getId(), -1, null, Deep.YES, highestStopId);
query.updateOidCounters(oldLastRevision.getLastConcreteRevision(), getDatabaseSession());
// getDatabaseSession().getMap(ifcModel, query);
}
getDatabaseSession().addPostCommitAction(new PostCommitAction() {
@Override
public void execute() throws UserException {
bimServer.getNotificationsManager().notify(new SConverter().convertToSObject(newRevisionAdded));
try {
bimServer.getLongTransactionManager().remove(longTransaction.getTid());
} catch (NoTransactionException e) {
LOGGER.error("", e);
}
}
});
SummaryMap summaryMap = null;
if (oldLastRevision != null && oldLastRevision.getConcreteRevisions().size() == 1 && oldLastRevision.getConcreteRevisions().get(0).getSummary() != null) {
summaryMap = new SummaryMap(packageMetaData, oldLastRevision.getConcreteRevisions().get(0).getSummary());
} else {
summaryMap = new SummaryMap(packageMetaData);
}
boolean geometryChanged = true;
// TODO actually change this variable...
// First create all new objects
Transaction transaction = new Transaction(bimServer, previousRevision, project, concreteRevision, getDatabaseSession());
for (Change change : longTransaction.getChanges()) {
if (change instanceof CreateObjectChange) {
try {
change.execute(transaction);
} catch (IOException | QueryException e) {
e.printStackTrace();
}
summaryMap.add(((CreateObjectChange) change).geteClass(), 1);
}
}
// Then do the rest
for (Change change : longTransaction.getChanges()) {
if (!(change instanceof CreateObjectChange)) {
if (change instanceof RemoveObjectChange) {
summaryMap.remove(((RemoveObjectChange) change).geteClass(), 1);
}
try {
change.execute(transaction);
} catch (IOException e) {
e.printStackTrace();
} catch (QueryException e) {
e.printStackTrace();
}
}
}
for (HashMapVirtualObject object : transaction.getCreated()) {
getDatabaseSession().save(object);
}
for (HashMapVirtualObject object : transaction.getUpdated()) {
getDatabaseSession().save(object, concreteRevision.getId());
}
for (HashMapVirtualObject object : transaction.getDeleted()) {
getDatabaseSession().delete(object, concreteRevision.getId());
}
if (bimServer.getServerSettingsCache().getServerSettings().isGenerateGeometryOnCheckin() && geometryChanged) {
setProgress("Generating Geometry...", -1);
try {
GeometryGenerationReport report = new GeometryGenerationReport();
report.setOriginalDeserializer("No deserializer, low level call");
report.setOriginalIfcFileName("No file, low level call");
report.setOriginalIfcFileSize(-1);
StreamingGeometryGenerator streamingGeometryGenerator = new StreamingGeometryGenerator(bimServer, null, -1L, report);
int highestStopId = AbstractDownloadDatabaseAction.findHighestStopRid(concreteRevision.getProject(), concreteRevision);
QueryContext queryContext = new QueryContext(getDatabaseSession(), packageMetaData, project.getId(), concreteRevision.getId(), concreteRevision.getRevisions().get(0).getOid(), highestStopId);
Map<EClass, Long> startOids = getDatabaseSession().getStartOids();
if (startOids == null) {
throw new BimserverDatabaseException("No objects changed");
}
Map<EClass, Long> oidCounters = new HashMap<>();
// buffer.order(ByteOrder.LITTLE_ENDIAN);
for (EClass eClass : packageMetaData.getEClasses()) {
if (startOids.containsKey(eClass)) {
long oid = startOids.get(eClass);
if (!DatabaseSession.perRecordVersioning(eClass)) {
oidCounters.put(eClass, oid);
// buffer.putLong(oid);
}
}
}
queryContext.setOidCounters(oidCounters);
GenerateGeometryResult generateGeometry = streamingGeometryGenerator.generateGeometry(authorization.getUoid(), getDatabaseSession(), queryContext);
concreteRevision.setMinBounds(generateGeometry.getMinBoundsAsVector3f());
concreteRevision.setMaxBounds(generateGeometry.getMaxBoundsAsVector3f());
} catch (GeometryGeneratingException e) {
throw new UserException(e);
}
revision.setHasGeometry(true);
}
if (oldLastRevision != null) {
concreteRevision.setOidCounters(oldLastRevision.getConcreteRevisions().get(0).getOidCounters());
}
concreteRevision.setSummary(summaryMap.toRevisionSummary(getDatabaseSession()));
getDatabaseSession().store(concreteRevision);
getDatabaseSession().store(project);
return concreteRevision;
}
use of org.bimserver.interfaces.SConverter in project BIMserver by opensourceBIM.
the class SetServerSettingsDatabaseAction method execute.
@Override
public Void execute() throws UserException, BimserverLockConflictException, BimserverDatabaseException {
ServerSettings existingServerSettings = getDatabaseSession().getSingle(StorePackage.eINSTANCE.getServerSettings(), OldQuery.getDefault());
existingServerSettings.getWhitelistedDomains().clear();
new SConverter().convertFromSObject(serverSettings, existingServerSettings, getDatabaseSession());
getDatabaseSession().store(existingServerSettings);
return null;
}
Aggregations