use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class BimServerImporter method start.
public void start() {
try (BimServerClientFactory factory = new JsonBimServerClientFactory(bimServer.getMetaDataManager(), address)) {
LOGGER.info("Importing...");
remoteClient = factory.create(new UsernamePasswordAuthenticationInfo(username, password));
final BimDatabase database = bimServer.getDatabase();
DatabaseSession databaseSession = database.createSession();
try {
LOGGER.info("Users...");
for (SUser user : remoteClient.getServiceInterface().getAllUsers()) {
createUser(databaseSession, user.getOid());
}
LOGGER.info("Projects...");
for (SProject project : remoteClient.getServiceInterface().getAllProjects(false, false)) {
createProject(databaseSession, project.getOid());
}
LOGGER.info("Done");
databaseSession.commit();
} catch (BimserverDatabaseException e) {
LOGGER.error("", e);
} finally {
databaseSession.close();
}
final BimServerClientInterface client = bimServer.getBimServerClientFactory().create(new UsernamePasswordAuthenticationInfo(username, password));
// for (SRenderEnginePluginConfiguration renderEnginePluginConfiguration : client.getPluginInterface().getAllRenderEngines(true)) {
// if (renderEnginePluginConfiguration.getName().equals("IFC Engine DLL")) {
// client.getPluginInterface().setDefaultRenderEngine(renderEnginePluginConfiguration.getOid());
// }
// }
Path incoming = Paths.get(path);
final Map<GregorianCalendar, Key> comments = new TreeMap<>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
for (SProject project : remoteClient.getServiceInterface().getAllProjects(false, false)) {
for (SRevision revision : remoteClient.getServiceInterface().getAllRevisionsOfProject(project.getOid())) {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.setTime(revision.getDate());
if (!revision.getComment().startsWith("generated for")) {
User user = users.get(revision.getUserId());
Path userFolder = incoming.resolve(user.getUsername());
boolean found = false;
for (Path file : PathUtils.list(userFolder)) {
if (file.getFileName().toString().endsWith(revision.getComment())) {
String dateStr = file.getFileName().toString().substring(0, 19);
Date parse = dateFormat.parse(dateStr);
GregorianCalendar fileDate = new GregorianCalendar();
fileDate.setTime(parse);
long millisDiff = Math.abs(fileDate.getTimeInMillis() - revision.getDate().getTime());
if (millisDiff > 1000 * 60 * 120) {
// 120 minutes
continue;
}
if (revision.getOid() == project.getLastRevisionId()) {
comments.put(gregorianCalendar, new Key(file, project.getOid(), revision.getComment(), revision.getDate(), revision.getUserId()));
}
found = true;
break;
}
}
if (!found) {
LOGGER.info("Not found: " + revision.getComment());
}
}
}
}
ExecutorService executorService = new ThreadPoolExecutor(1, 1, 1, TimeUnit.DAYS, new ArrayBlockingQueue<Runnable>(1000));
for (final GregorianCalendar gregorianCalendar : comments.keySet()) {
executorService.submit(new Runnable() {
@Override
public void run() {
Key key = comments.get(gregorianCalendar);
LOGGER.info("Checking in: " + key.file.getFileName().toString() + " " + Formatters.bytesToString(key.file.toFile().length()));
Project sProject = projects.get(key.poid);
try {
SDeserializerPluginConfiguration desserializer = client.getServiceInterface().getSuggestedDeserializerForExtension("ifc", sProject.getOid());
client.checkin(sProject.getOid(), key.comment, desserializer.getOid(), false, Flow.SYNC, key.file);
SProject updatedProject = client.getServiceInterface().getProjectByPoid(sProject.getOid());
DatabaseSession databaseSession = database.createSession();
try {
LOGGER.info("Done");
Project project = databaseSession.get(updatedProject.getOid(), OldQuery.getDefault());
Revision revision = project.getLastRevision();
User user = (User) databaseSession.get(users.get(key.userId).getOid(), OldQuery.getDefault());
for (Revision otherRevision : revision.getConcreteRevisions().get(0).getRevisions()) {
otherRevision.load();
otherRevision.setDate(key.date);
otherRevision.setComment(otherRevision.getComment().replace("Administrator", user.getName()));
databaseSession.store(otherRevision);
}
DateFormat m = new SimpleDateFormat("dd-MM-yyyy");
LOGGER.info("Setting date to " + m.format(key.date));
revision.setUser(user);
revision.setDate(key.date);
databaseSession.store(revision);
databaseSession.commit();
} catch (BimserverDatabaseException | ServiceException e) {
LOGGER.error("", e);
} finally {
databaseSession.close();
}
} catch (IOException | UserException | ServerException | PublicInterfaceNotFoundException e) {
LOGGER.error("", e);
}
}
});
}
executorService.shutdown();
} catch (ServiceException e) {
LOGGER.error("", e);
} catch (ChannelConnectionException e) {
LOGGER.error("", e);
} catch (PublicInterfaceNotFoundException e) {
LOGGER.error("", e);
} catch (ParseException e) {
LOGGER.error("", e);
} catch (IOException e) {
LOGGER.error("", e);
} catch (BimServerClientException e1) {
LOGGER.error("", e1);
} catch (Exception e2) {
LOGGER.error("", e2);
}
}
use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class ServiceImpl method getRevision.
@Override
public SRevision getRevision(Long roid) throws ServerException, UserException {
requireAuthenticationAndRunningServer();
DatabaseSession session = getBimServer().getDatabase().createSession();
try {
BimDatabaseAction<Revision> action = new GetRevisionDatabaseAction(session, getInternalAccessMethod(), roid, getAuthorization());
return getBimServer().getSConverter().convertToSObject(session.executeAndCommitAction(action));
} catch (Exception e) {
return handleException(e);
} finally {
session.close();
}
}
use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class ServiceImpl method sendCompareEmail.
@Override
public void sendCompareEmail(SCompareType sCompareType, Long mcid, Long poid, Long roid1, Long roid2, String address) throws ServerException, UserException {
requireRealUserAuthentication();
DatabaseSession session = getBimServer().getDatabase().createSession();
try {
SUser currentUser = getCurrentUser(session);
Revision revision1 = session.get(StorePackage.eINSTANCE.getRevision(), roid1, OldQuery.getDefault());
Revision revision2 = session.get(StorePackage.eINSTANCE.getRevision(), roid2, OldQuery.getDefault());
String senderName = currentUser.getName();
String senderAddress = currentUser.getUsername();
if (!senderAddress.contains("@") || !senderAddress.contains(".")) {
senderAddress = getBimServer().getServerSettingsCache().getServerSettings().getEmailSenderAddress();
}
EmailMessage message = getBimServer().getMailSystem().createMessage();
try {
InternetAddress addressFrom = new InternetAddress(senderAddress);
addressFrom.setPersonal(senderName);
message.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[1];
addressTo[0] = new InternetAddress(address);
message.setRecipients(Message.RecipientType.TO, addressTo);
message.setSubject("BIMserver Model Comparator");
SCompareResult compareResult = compare(roid1, roid2, sCompareType, mcid);
String html = CompareWriter.writeCompareResult(compareResult, revision1.getId(), revision2.getId(), sCompareType, getServiceMap().getServiceInterface().getProjectByPoid(poid), false);
message.setContent(html, "text/html");
message.send();
} catch (AddressException e) {
throw new UserException(e);
} catch (UnsupportedEncodingException e) {
throw new UserException(e);
} catch (MessagingException e) {
throw new UserException(e);
}
} catch (Exception e) {
handleException(e);
} finally {
session.close();
}
}
use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class ServiceImpl method triggerNewRevision.
@Override
public void triggerNewRevision(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);
}
getBimServer().getNotificationsManager().notify(new NewRevisionNotification(getBimServer(), revision.getProject().getOid(), revision.getOid(), soid));
} catch (Exception e) {
handleException(e);
} finally {
session.close();
}
}
use of org.bimserver.models.store.Revision in project BIMserver by opensourceBIM.
the class BranchToExistingProjectDatabaseAction method execute.
@Override
public ConcreteRevision execute() throws UserException, BimserverLockConflictException, BimserverDatabaseException {
Revision oldRevision = getDatabaseSession().get(StorePackage.eINSTANCE.getRevision(), roid, OldQuery.getDefault());
Project oldProject = oldRevision.getProject();
User user = getDatabaseSession().get(StorePackage.eINSTANCE.getUser(), authorization.getUoid(), OldQuery.getDefault());
if (!authorization.hasRightsOnProjectOrSuperProjectsOrSubProjects(user, oldProject)) {
throw new UserException("User has insufficient rights to download revisions from this project");
}
IfcModelSet ifcModelSet = new IfcModelSet();
PackageMetaData lastMetaData = null;
for (ConcreteRevision subRevision : oldRevision.getConcreteRevisions()) {
PackageMetaData packageMetaData = bimServer.getMetaDataManager().getPackageMetaData(subRevision.getProject().getSchema());
IfcModel subModel = new BasicIfcModel(packageMetaData, null);
getDatabaseSession().getMap(subModel, new OldQuery(packageMetaData, subRevision.getProject().getId(), subRevision.getId(), -1, Deep.YES));
subModel.getModelMetaData().setDate(subRevision.getDate());
ifcModelSet.add(subModel);
lastMetaData = packageMetaData;
}
IfcModelInterface model = new BasicIfcModel(lastMetaData, null);
try {
model = bimServer.getMergerFactory().createMerger(getDatabaseSession(), authorization.getUoid()).merge(oldRevision.getProject(), ifcModelSet, new ModelHelper(bimServer.getMetaDataManager(), model));
} catch (MergeException e) {
throw new UserException(e);
}
model.resetOids();
CheckinDatabaseAction checkinDatabaseAction = new CheckinDatabaseAction(bimServer, getDatabaseSession(), getAccessMethod(), destPoid, authorization, model, comment, comment, false, -1);
return checkinDatabaseAction.execute();
}
Aggregations