public String getEPackageName() { return ePackage.getName(); }
public RecordIdentifierPlusType(EClass eClass, int pid, long oid, int rid) { this.packageName = eClass.getEPackage().getName(); this.className = eClass.getName(); this.pid = pid; this.oid = oid; this.rid = rid; }
@Override public String getTableName(EClass eClass) { return eClass.getEPackage().getName() + "_" + eClass.getName(); } }
public void addEPackage(EPackage ePackage, Schema schema) { PackageMetaData packageMetaData = new PackageMetaData(ePackage, schema, tempDir); synchronized (this) { ePackages.put(ePackage.getName().toLowerCase(), packageMetaData); } }
public EEnumLiteral getEEnumLiteral(String enumName, String literalName) { EClassifier eClassifier = ePackage.getEClassifier(enumName); if (eClassifier == null) { throw new RuntimeException("Classifier " + enumName + " not found in package " + ePackage.getName()); } if (eClassifier instanceof EEnum) { EEnum eEnum = (EEnum)eClassifier; EEnumLiteral literal = eEnum.getEEnumLiteral(literalName); if (literal == null) { throw new RuntimeException("No enum literal " + literalName + " found on " + ePackage.getName() + "." + enumName); } return literal; } else { throw new RuntimeException("Classifier " + enumName + " is not of type enum"); } }
public <T extends IdEObject> List<T> getAllOfType(EClass eClass, Class<T> clazz, QueryInterface query) throws BimserverDatabaseException { IfcModelInterface allOfType = getAllOfType(eClass.getEPackage().getName(), eClass.getName(), query); return allOfType.getAllWithSubTypes(clazz); }
public boolean createTable(EClass eClass, DatabaseSession databaseSession, boolean transactional) throws BimserverDatabaseException { boolean createTable = keyValueStore.createTable(eClass.getEPackage().getName() + "_" + eClass.getName(), databaseSession, transactional); if (createTable) { tableId++; try { keyValueStore.store(CLASS_LOOKUP_TABLE, BinUtils.shortToByteArray(tableId), BinUtils.stringToByteArray(eClass.getEPackage().getName() + "_" + eClass.getName()), null); } catch (BimserverDatabaseException e) { LOGGER.error("", e); } return true; } return false; }
public void addEPackage(EPackage ePackage) { packages.put(ePackage.getName(), ePackage); changes.add(new NewPackageChange(ePackage)); Set<EClass> newClasses = new HashSet<>(); for (EClassifier eClassifier : ePackage.getEClassifiers()) { if (eClassifier instanceof EClass) { newClasses.add((EClass) eClassifier); } } addEClasses(ePackage, newClasses); }
public boolean createIndexTable(EClass eClass, EStructuralFeature eStructuralFeature, DatabaseSession databaseSession, boolean transactional) throws BimserverDatabaseException { return keyValueStore.createIndexTable(eClass.getEPackage().getName() + "_" + eClass.getName() + "_" + eStructuralFeature.getName(), databaseSession, transactional); }
public Database(BimServer bimServer, Set<? extends EPackage> emfPackages, KeyValueStore keyValueStore, MetaDataManager metaDataManager) throws DatabaseInitException { this.cidToEclass = new EClass[Short.MAX_VALUE]; this.bimServer = bimServer; this.keyValueStore = keyValueStore; this.metaDataManager = metaDataManager; this.emfPackages.put(StorePackage.eINSTANCE.getName(), StorePackage.eINSTANCE); this.emfPackages.put(LogPackage.eINSTANCE.getName(), LogPackage.eINSTANCE); this.emfPackages.put(GeometryPackage.eINSTANCE.getName(), GeometryPackage.eINSTANCE); for (EPackage ePackage : emfPackages) { this.emfPackages.put(ePackage.getName(), ePackage); } this.registry = new Registry(keyValueStore); }
private void comparePackage(EPackage package1, EPackage package2) throws SchemaCompareException { if (!package1.getName().equals(package2.getName())) { throw new SchemaCompareException("Schema package names not the same"); } if (package1.getEClassifiers().size() != package2.getEClassifiers().size()) { throw new SchemaCompareException("Not the same amount of classifiers in package " + package1.getName()); } Iterator<EClassifier> classifierIterator1 = package1.getEClassifiers().iterator(); Iterator<EClassifier> classifierIterator2 = package2.getEClassifiers().iterator(); while (classifierIterator1.hasNext()) { EClassifier classifier1 = classifierIterator1.next(); EClassifier classifier2 = classifierIterator2.next(); compareClassifier(classifier1, classifier2); } }
public void delete(HashMapVirtualObject object, int newRid) throws BimserverLockConflictException, BimserverConcurrentModificationDatabaseException, BimserverDatabaseException { ByteBuffer keyBuffer = ByteBuffer.allocate(16); fillKeyBuffer(keyBuffer, object.getPid(), object.getOid(), newRid); EClass eClass = object.eClass(); String tableName = eClass.getEPackage().getName() + "_" + eClass.getName(); database.getKeyValueStore().storeNoOverwrite(tableName, keyBuffer.array(), new byte[] { -1 }, this); database.incrementCommittedWrites(1); }
public EPackage createEPackage(String name) { EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage(); ePackage.setName(name); ePackage.setNsPrefix(name); ePackage.setNsURI(name); packages.put(ePackage.getName(), ePackage); return ePackage; }
@Override public int saveOverwrite(VirtualObject object) throws BimserverLockConflictException, BimserverConcurrentModificationDatabaseException, BimserverDatabaseException { ByteBuffer valueBuffer = object.write(); EClass eClass = object.eClass(); ByteBuffer keyBuffer = createKeyBuffer(object.getPid(), object.getOid(), object.getRid()); database.getKeyValueStore().store(eClass.getEPackage().getName() + "_" + eClass.getName(), keyBuffer.array(), valueBuffer.array(), 0, valueBuffer.position(), this); database.incrementCommittedWrites(1); return valueBuffer.position(); }
public int save(VirtualObject object, int newRid) throws BimserverLockConflictException, BimserverConcurrentModificationDatabaseException, BimserverDatabaseException { ByteBuffer valueBuffer = object.write(); EClass eClass = object.eClass(); ByteBuffer keyBuffer = createKeyBuffer(object.getPid(), object.getOid(), newRid); database.getKeyValueStore().storeNoOverwrite(eClass.getEPackage().getName() + "_" + eClass.getName(), keyBuffer.array(), valueBuffer.array(), 0, valueBuffer.position(), this); processPossibleIndices(keyBuffer, object.getPid(), object.getRid(), object.getOid(), object.eClass(), valueBuffer); database.incrementCommittedWrites(1); return valueBuffer.position(); }
public void prepareNext() throws BimserverDatabaseException { if (!oidsIterator.hasNext()) { record = null; return; } Long oid = oidsIterator.next(); EClass eClass = getReusable().getDatabaseInterface().getEClassForOid(oid); String tableName = eClass.getEPackage().getName() + "_" + eClass.getName(); if (getReusable().getOidCounters() != null) { ByteBuffer tmp = ByteBuffer.allocate(12); tmp.putInt(getReusable().getPid()); tmp.putLong(oid); typeRecordIterator = getQueryObjectProvider().getDatabaseSession().getKeyValueStore().getRecordIterator(tableName, BinUtils.intToByteArray(getReusable().getPid()), tmp.array(), getQueryObjectProvider().getDatabaseSession()); record = typeRecordIterator.next(); } }
@SuppressWarnings("unused") public IdEObject lazyLoad(IdEObject idEObject) throws BimserverDatabaseException { if (DEVELOPER_DEBUG) { LOGGER.info("Lazy loading " + idEObject.eClass().getName() + " " + idEObject.getOid()); } IfcModelInterface model = ((IdEObjectImpl)idEObject).getModel(); if (model == null) { Map<Integer, Long> pidToRoid = new HashMap<Integer, Long>(); model = createModel(getMetaDataManager().getPackageMetaData(idEObject.eClass().getEPackage().getName()), pidToRoid); } idEObject = get(idEObject, idEObject.getOid(), model, ((IdEObjectImpl) idEObject).getQueryInterface(), new TodoList()); if (idEObject != null) { if (DEVELOPER_DEBUG && idEObject.getRid() > 100000 || idEObject.getRid() < -100000) { LOGGER.debug("Improbable rid " + idEObject.getRid() + " - " + idEObject); } } return idEObject; }
private void initDependencies() { for (PackageMetaData packageMetaData : ePackages.values()) { for (EClassifier eClassifier : packageMetaData.getEPackage().getEClassifiers()) { if (eClassifier instanceof EClass) { EClass eClass = (EClass)eClassifier; for (EReference eReference : eClass.getEReferences()) { if (eReference.getEType().getEPackage() != packageMetaData.getEPackage()) { packageMetaData.addDependency(getPackageMetaData(eReference.getEType().getEPackage().getName())); } } } } } }
@Override public void execute(Transaction transaction) throws UserException, BimserverLockConflictException, BimserverDatabaseException, IOException, QueryException { PackageMetaData packageMetaData = transaction.getDatabaseSession().getMetaDataManager().getPackageMetaData(transaction.getProject().getSchema()); HashMapVirtualObject object = transaction.get(oid); if (object == null) { Query query = new Query(packageMetaData); QueryPart queryPart = query.createQueryPart(); queryPart.addOid(oid); QueryObjectProvider queryObjectProvider = new QueryObjectProvider(transaction.getDatabaseSession(), transaction.getBimServer(), query, Collections.singleton(transaction.getPreviousRevision().getOid()), packageMetaData); object = queryObjectProvider.next(); } if (object == null) { throw new UserException("Object with oid " + oid + " not found"); } if (!ChangeHelper.canBeChanged(eClass)) { throw new UserException("Only objects from the following schemas are allowed to be changed: Ifc2x3tc1 and IFC4, this object (" + eClass.getName() + ") is from the \"" + eClass.getEPackage().getName() + "\" package"); } transaction.deleted(object); } }
@Override public void execute(Transaction transaction) throws UserException, BimserverLockConflictException, BimserverDatabaseException { PackageMetaData packageMetaData = transaction.getDatabaseSession().getMetaDataManager().getPackageMetaData(transaction.getProject().getSchema()); QueryContext queryContext = new QueryContext(transaction.getDatabaseSession(), packageMetaData, transaction.getConcreteRevision().getProject().getId(), transaction.getPreviousRevision() == null ? 1 : transaction.getPreviousRevision().getRid() + 1, -1, -1, 0); // TODO if (!ChangeHelper.canBeChanged(eClass)) { throw new UserException("Only objects from the following schemas are allowed to be changed: Ifc2x3tc1 and IFC4, this object (" + eClass.getName() + ") is from the \"" + eClass.getEPackage().getName() + "\" package"); } HashMapVirtualObject object = new HashMapVirtualObject(queryContext, eClass, oid); if (generateGuid) { EStructuralFeature globalIdFeature = object.eClass().getEStructuralFeature("GlobalId"); if (globalIdFeature != null) { object.setAttribute(globalIdFeature, GuidCompressor.getNewIfcGloballyUniqueId()); } else { throw new UserException("Cannot generate GUID for " + object.eClass().getName() + ", no GlobalId property"); } } transaction.created(object); } }