@SuppressWarnings("rawtypes") @Override public IdEObject next() { IdEObject idEObject = todo.poll(); done.add(idEObject); for (EReference eReference : idEObject.eClass().getEAllReferences()) { Object val = idEObject.eGet(eReference); if (eReference.isMany()) { List list = (List) val; for (Object o : list) { if (!done.contains(o)) { todo.add((IdEObject) o); } } } else { if (val != null && !done.contains(val)) { todo.add((IdEObject) val); } } } return idEObject; }
@SuppressWarnings("rawtypes") public void updateReferences() { references.clear(); for (IdEObject idEObject : ifcModel.getValues()) { for (EReference eReference : idEObject.eClass().getEAllReferences()) { if (eReference.isMany()) { List list = (List) idEObject.eGet(eReference); for (Object o : list) { if (!references.containsKey(o)) { references.put((IdEObject) o, new HashSet<Reference>()); } references.get(o).add(new MultiReference(idEObject, (IdEObject) o, eReference)); } } else { Object o = idEObject.eGet(eReference); if (!references.containsKey(o)) { references.put((IdEObject) o, new HashSet<Reference>()); } references.get(o).add(new SingleReference(idEObject, (IdEObject) o, eReference)); } } } }
private int fixMisMatchInstance(Mismatch mismatch, IdEObject entityToBeFixed, IdEObject referenced) { int nrFixes = 0; for(EReference inverse: mismatch.inverse) if(inverse.getEContainingClass().isInstance(referenced)){ if(inverse.isMany()) ((EList<IdEObject>) referenced.eGet(inverse)).add(entityToBeFixed); else referenced.eSet(inverse, entityToBeFixed); nrFixes++; } return nrFixes; }
@SuppressWarnings("rawtypes") public int removeInternal(IdEObject idEObject) { int totalRemoved = 1; for (EReference eReference : idEObject.eClass().getEAllReferences()) { if (eReference.isMany()) { List list = (List) idEObject.eGet(eReference); for (Object o : list) { IdEObject refObject = (IdEObject) o; references.get(refObject).remove(idEObject); if (references.get(refObject).size() == 0) { totalRemoved += removeInternal(refObject); } } } else { IdEObject refObject = (IdEObject) idEObject.eGet(eReference); if (references.containsKey(refObject)) { references.get(refObject).remove(idEObject); if (references.get(refObject).size() == 0) { totalRemoved += removeInternal(refObject); } } } } return totalRemoved; }
private void initOppositeInfo() { for (EClassifier eClassifier : ePackage.getEClassifiers()) { if (eClassifier instanceof EClass) { EClass eClass = (EClass)eClassifier; boolean hasOpposites = false; boolean hasManyOpposites = false; for (EReference eReference : eClass.getEAllReferences()) { if (eReference.getEOpposite() != null) { hasOpposites = true; if (eReference.isMany()) { hasManyOpposites = true; } } } oppositeInfos.put(eClass, new OppositeInfo(hasOpposites, hasManyOpposites)); } } }
@SuppressWarnings("rawtypes") private void dumpPlusReferences(Set<IdEObject> done, IdEObject idEObject) { if (idEObject == null) { return; } if (done.contains(idEObject)) { return; } done.add(idEObject); System.out.println(idEObject.getOid() + ": " + idEObject.eClass().getName()); for (EReference eReference : idEObject.eClass().getEAllReferences()) { Object val = idEObject.eGet(eReference); if (eReference.isMany()) { List list = (List) val; for (Object o : list) { dumpPlusReferences(done, (IdEObject) o); } } else { dumpPlusReferences(done, (IdEObject) val); } } }
@SuppressWarnings("rawtypes") public void showBackReferences(IdEObject idEObject) { System.out.println("Showing back references to: " + idEObject); for (IdEObject object : getValues()) { for (EReference eReference : object.eClass().getEAllReferences()) { if (eReference.isMany()) { List list = (List) object.eGet(eReference); for (Object o : list) { if (o == idEObject) { System.out.println(object.eClass().getName() + "." + eReference.getName() + " " + object); } } } else { Object o = object.eGet(eReference); if (o == idEObject) { System.out.println(object.eClass().getName() + "." + eReference.getName() + " " + object); } } } } }
@SuppressWarnings("rawtypes") public void resetOids(IdEObject idEObject, Set<IdEObject> done) { if (idEObject == null) { return; } if (done.contains(idEObject)) { return; } ((IdEObjectImpl) idEObject).setOid(-1); done.add(idEObject); for (EReference eReference : idEObject.eClass().getEAllReferences()) { Object val = idEObject.eGet(eReference); if (eReference.isMany()) { List list = (List) val; for (Object o : list) { resetOids((IdEObject) o, done); } } else { resetOids((IdEObject) val, done); } } }
private void storeDeep(IdEObject object, Set<IdEObject> done) throws BimserverDatabaseException { if (object == null || done.contains(object)) { return; } done.add(object); store(object); for (EReference eReference : object.eClass().getEAllReferences()) { if (eReference.isMany()) { List<?> list = (List<?>) object.eGet(eReference); for (Object v : list) { storeDeep((IdEObject) v, done); } } else { IdEObject reference = (IdEObject) object.eGet(eReference); storeDeep(reference, done); } } }
if (reference.geteReference().getEOpposite().isMany()) { MultiReference backReference = new MultiReference(reference.getReferredObject(), reference.getIdEObject(), reference.geteReference().getEOpposite()); if (references.containsKey(reference.getIdEObject()))
if (oppositeReference.isMany()) { Object existingList = referencedObject.eGet(oppositeReference); if (existingList != null) {
private int estimateBufferSize(EClass eClass) { int size = 0; for (EStructuralFeature eStructuralFeature : eClass.getEAllStructuralFeatures()) { if (eStructuralFeature instanceof EAttribute) { EAttribute eAttribute = (EAttribute)eStructuralFeature; if (eAttribute.isMany()) { size += 2 + AVERAGE_PRIMITIVE_LIST_SIZE * getPrimitiveSize((EDataType) eAttribute.getEType()); } else { size += getPrimitiveSize((EDataType) eAttribute.getEType()); } } else if (eStructuralFeature instanceof EReference) { EReference eReference = (EReference)eStructuralFeature; if (eReference.isMany()) { size += 2 + AVERAGE_REFERENCE_LIST_SIZE * 10; } else { size += 10; } } } return size; }
@SuppressWarnings("rawtypes") private void checkDoubleOidsPlusReferences(BiMap<IdEObject, Long> done, IdEObject idEObject) { if (idEObject == null) { return; } if (idEObject.eClass().getEAnnotation("wrapped") != null) { return; } if (done.containsKey(idEObject)) { return; } if (done.containsValue(idEObject.getOid())) { showBackReferences(idEObject); IdEObject existing = done.inverse().get(idEObject.getOid()); showBackReferences(existing); throw new RuntimeException("Double oid: " + idEObject.getOid() + " " + idEObject + ", " + existing); } done.put(idEObject, idEObject.getOid()); for (EReference eReference : idEObject.eClass().getEAllReferences()) { if (eReference.isMany()) { List list = (List) idEObject.eGet(eReference); for (Object o : list) { checkDoubleOidsPlusReferences(done, (IdEObject) o); } } else { checkDoubleOidsPlusReferences(done, (IdEObject) idEObject.eGet(eReference)); } } }
throw new UserException("No reference with the name \"" + referenceName + "\" found in class \"" + eClass.getName() + "\""); if (!eReference.isMany()) { throw new UserException("Reference is not of type 'many'");
@SuppressWarnings("rawtypes") private void fixOids(IdEObject idEObject, OidProvider oidProvider, BiMap<Long, IdEObject> temp) { if (idEObject == null) { return; } if (temp.containsValue(idEObject)) { return; } ((IdEObjectImpl) idEObject).setOid(oidProvider.newOid(idEObject.eClass())); if (objects.containsValue(idEObject)) { temp.put(idEObject.getOid(), idEObject); } for (EReference eReference : idEObject.eClass().getEAllReferences()) { Object val = idEObject.eGet(eReference); if (eReference.isMany()) { List list = (List) val; for (Object o : list) { fixOids((IdEObject) o, oidProvider, temp); } } else { fixOids((IdEObject) val, oidProvider, temp); } } }
throw new UserException("No reference with the name \"" + referenceName + "\" found in class \"" + eClass.getName() + "\""); if (eReference.isMany()) { throw new UserException("Attribute is not of type 'single'");
throw new UserException("No reference with the name \"" + referenceName + "\" found in class \"" + eClass.getName() + "\""); if (!eReference.isMany()) { throw new UserException("Reference is not of type 'many'");
@SuppressWarnings("rawtypes") @Override public Void execute() throws UserException, BimserverLockConflictException, BimserverDatabaseException, ServerException { PluginConfiguration pluginConfiguration = getDatabaseSession().get(StorePackage.eINSTANCE.getPluginConfiguration(), oid, OldQuery.getDefault()); UserSettings settings = (UserSettings) pluginConfiguration.eGet(pluginConfiguration.eClass().getEStructuralFeature("userSettings")); if (settings == null) { throw new UserException("No user settings found..."); } for (EReference eReference : settings.eClass().getEAllReferences()) { if (eReference.getEType() == pluginConfiguration.eClass() && eReference.isMany()) { List list = (List) settings.eGet(eReference); list.remove(pluginConfiguration); } } getDatabaseSession().store(settings); pluginConfiguration.remove(); return null; } }
@SuppressWarnings("unchecked") public void updateNode(T expressId, EClass ec, IdEObject eObject) throws DeserializeException { for (WaitingObject waitingObject : waitingObjects.get(expressId)) { if (waitingObject.getEReference().isMany()) { AbstractEList<EObject> list = (AbstractEList<EObject>) waitingObject.getObject().eGet(waitingObject.getEReference()); if (waitingObject instanceof SingleWaitingObject) {