Search in sources :

Example 1 with EReference

use of org.eclipse.emf.ecore.EReference in project BIMserver by opensourceBIM.

the class AddReferenceChange method execute.

@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();
        transaction.updated(object);
    }
    EClass eClass = transaction.getDatabaseSession().getEClassForOid(oid);
    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");
    }
    if (object == null) {
        throw new UserException("No object of type \"" + eClass.getName() + "\" with oid " + oid + " found in project with pid " + transaction.getProject().getId());
    }
    EReference eReference = packageMetaData.getEReference(eClass.getName(), referenceName);
    if (eReference == null) {
        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'");
    }
    EClass eClassForOid = transaction.getDatabaseSession().getEClassForOid(referenceOid);
    object.addReference(eReference, eClassForOid, referenceOid);
}
Also used : EClass(org.eclipse.emf.ecore.EClass) HashMapVirtualObject(org.bimserver.shared.HashMapVirtualObject) Query(org.bimserver.database.queries.om.Query) PackageMetaData(org.bimserver.emf.PackageMetaData) QueryPart(org.bimserver.database.queries.om.QueryPart) QueryObjectProvider(org.bimserver.database.queries.QueryObjectProvider) UserException(org.bimserver.shared.exceptions.UserException) EReference(org.eclipse.emf.ecore.EReference)

Example 2 with EReference

use of org.eclipse.emf.ecore.EReference in project BIMserver by opensourceBIM.

the class RemoveAllReferencesChange method execute.

@SuppressWarnings("rawtypes")
@Override
public void execute(Transaction transaction) throws UserException, BimserverLockConflictException, BimserverDatabaseException, IOException, QueryException {
    PackageMetaData packageMetaData = transaction.getDatabaseSession().getMetaDataManager().getPackageMetaData(transaction.getProject().getSchema());
    Query query = new Query(packageMetaData);
    QueryPart queryPart = query.createQueryPart();
    queryPart.addOid(oid);
    HashMapVirtualObject object = transaction.get(oid);
    if (object == null) {
        QueryObjectProvider queryObjectProvider = new QueryObjectProvider(transaction.getDatabaseSession(), transaction.getBimServer(), query, Collections.singleton(transaction.getPreviousRevision().getOid()), packageMetaData);
        object = queryObjectProvider.next();
        transaction.updated(object);
    }
    EClass eClass = transaction.getDatabaseSession().getEClassForOid(oid);
    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");
    }
    if (object == null) {
        throw new UserException("No object of type \"" + eClass.getName() + "\" with oid " + oid + " found in project with pid " + transaction.getProject().getId());
    }
    EReference eReference = packageMetaData.getEReference(eClass.getName(), referenceName);
    if (eReference == null) {
        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'");
    }
    List list = (List) object.get(eReference.getName());
    while (!list.isEmpty()) {
        list.remove(0);
    }
}
Also used : EClass(org.eclipse.emf.ecore.EClass) Query(org.bimserver.database.queries.om.Query) HashMapVirtualObject(org.bimserver.shared.HashMapVirtualObject) PackageMetaData(org.bimserver.emf.PackageMetaData) QueryPart(org.bimserver.database.queries.om.QueryPart) QueryObjectProvider(org.bimserver.database.queries.QueryObjectProvider) List(java.util.List) UserException(org.bimserver.shared.exceptions.UserException) EReference(org.eclipse.emf.ecore.EReference)

Example 3 with EReference

use of org.eclipse.emf.ecore.EReference in project BIMserver by opensourceBIM.

the class RemoveReferenceChange method execute.

@SuppressWarnings("rawtypes")
@Override
public void execute(Transaction transaction) throws UserException, BimserverLockConflictException, BimserverDatabaseException, IOException, QueryException {
    PackageMetaData packageMetaData = transaction.getDatabaseSession().getMetaDataManager().getPackageMetaData(transaction.getProject().getSchema());
    Query query = new Query(packageMetaData);
    QueryPart queryPart = query.createQueryPart();
    queryPart.addOid(oid);
    HashMapVirtualObject object = transaction.get(oid);
    if (object == null) {
        QueryObjectProvider queryObjectProvider = new QueryObjectProvider(transaction.getDatabaseSession(), transaction.getBimServer(), query, Collections.singleton(transaction.getPreviousRevision().getOid()), packageMetaData);
        object = queryObjectProvider.next();
        transaction.updated(object);
    }
    EClass eClass = transaction.getDatabaseSession().getEClassForOid(oid);
    if (object == null) {
        throw new UserException("No object of type \"" + eClass.getName() + "\" with oid " + oid + " found in project with pid " + transaction.getProject().getId());
    }
    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");
    }
    EReference eReference = packageMetaData.getEReference(eClass.getName(), referenceName);
    if (eReference == null) {
        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'");
    }
    List list = (List) object.get(eReference.getName());
    if (referencedOid != -1) {
        list.remove((Object) referencedOid);
    }
    if (index != -1) {
        list.remove(index);
    }
}
Also used : EClass(org.eclipse.emf.ecore.EClass) Query(org.bimserver.database.queries.om.Query) HashMapVirtualObject(org.bimserver.shared.HashMapVirtualObject) PackageMetaData(org.bimserver.emf.PackageMetaData) QueryPart(org.bimserver.database.queries.om.QueryPart) QueryObjectProvider(org.bimserver.database.queries.QueryObjectProvider) List(java.util.List) UserException(org.bimserver.shared.exceptions.UserException) EReference(org.eclipse.emf.ecore.EReference)

Example 4 with EReference

use of org.eclipse.emf.ecore.EReference in project BIMserver by opensourceBIM.

the class DatabaseSession method getExactSize.

private int getExactSize(IdEObject idEObject, PackageMetaData packageMetaData, boolean useUnsetBits) {
    int size = 0;
    int bits = 0;
    for (EStructuralFeature eStructuralFeature : idEObject.eClass().getEAllStructuralFeatures()) {
        if (packageMetaData.useForDatabaseStorage(idEObject.eClass(), eStructuralFeature)) {
            bits++;
            if (!useUnsetBits || !useUnsetBit(eStructuralFeature, idEObject)) {
                Object val = idEObject.eGet(eStructuralFeature);
                if (eStructuralFeature instanceof EAttribute) {
                    EAttribute eAttribute = (EAttribute) eStructuralFeature;
                    if (eAttribute.isMany()) {
                        size += 4;
                        for (Object v : ((List<?>) val)) {
                            size += getPrimitiveSize(eAttribute.getEAttributeType(), v);
                        }
                    } else {
                        size += getPrimitiveSize(eAttribute.getEAttributeType(), val);
                    }
                } else if (eStructuralFeature instanceof EReference) {
                    EReference eReference = (EReference) eStructuralFeature;
                    if (eReference.isMany()) {
                        size += 4;
                        for (Object v : ((List<?>) val)) {
                            size += getWrappedValueSize(v, eReference, packageMetaData);
                        }
                    } else {
                        size += getWrappedValueSize(val, eReference, packageMetaData);
                    }
                }
            }
        }
    }
    if (useUnsetBits) {
        size += (int) Math.ceil(bits / 8.0);
    }
    return size;
}
Also used : EAttribute(org.eclipse.emf.ecore.EAttribute) EStructuralFeature(org.eclipse.emf.ecore.EStructuralFeature) VirtualObject(org.bimserver.shared.VirtualObject) HashMapVirtualObject(org.bimserver.shared.HashMapVirtualObject) EObject(org.eclipse.emf.ecore.EObject) IdEObject(org.bimserver.emf.IdEObject) List(java.util.List) BasicEList(org.eclipse.emf.common.util.BasicEList) ArrayList(java.util.ArrayList) EList(org.eclipse.emf.common.util.EList) AbstractEList(org.eclipse.emf.common.util.AbstractEList) EReference(org.eclipse.emf.ecore.EReference)

Example 5 with EReference

use of org.eclipse.emf.ecore.EReference in project BIMserver by opensourceBIM.

the class BimServer method updateUserPlugin.

@SuppressWarnings("unchecked")
public void updateUserPlugin(DatabaseSession session, User user, PluginDescriptor pluginDescriptor, PluginContext pluginContext) throws BimserverDatabaseException {
    if (pluginDescriptor.isInstallForNewUsers()) {
        UserSettings userSettings = user.getUserSettings();
        if (userSettings == null) {
            userSettings = session.create(UserSettings.class);
            user.setUserSettings(userSettings);
            session.store(user);
        }
        Class<?> pluginInterface = getPluginInterface(pluginContext.getPlugin().getClass());
        String originalPluginInterfaceName = pluginInterface.getSimpleName();
        String pluginInterfaceName = pluginInterface.getSimpleName();
        if (pluginInterfaceName.endsWith("Plugin")) {
            pluginInterfaceName = pluginInterfaceName.substring(0, pluginInterfaceName.length() - 6);
        }
        if (pluginInterfaceName.equals("StreamingSerializer")) {
            pluginInterfaceName = "Serializer";
        } else if (pluginInterfaceName.equals("MessagingStreamingSerializer")) {
            pluginInterfaceName = "MessagingSerializer";
        }
        if (pluginInterfaceName.equals("StreamingDeserializer")) {
            pluginInterfaceName = "Deserializer";
        }
        if (pluginInterfaceName.equals("ModelChecker") || pluginInterfaceName.equals("WebModule")) {
            // ServerSettings
            return;
        }
        EClass userSettingsClass = StorePackage.eINSTANCE.getUserSettings();
        String listRefName = StringUtils.firstLowerCase(pluginInterfaceName) + "s";
        if (listRefName.equals("messagingSerializers")) {
            listRefName = "serializers";
        }
        EReference listReference = (EReference) userSettingsClass.getEStructuralFeature(listRefName);
        if (listReference == null) {
            LOGGER.warn(listRefName + " not found");
            return;
        }
        EReference defaultReference = (EReference) userSettingsClass.getEStructuralFeature("default" + pluginInterfaceName);
        EClass pluginConfigurationClass = (EClass) StorePackage.eINSTANCE.getEClassifier((pluginInterfaceName.equals("Service") ? "Internal" : "") + pluginInterfaceName + "PluginConfiguration");
        List<PluginConfiguration> list = (List<PluginConfiguration>) userSettings.eGet(listReference);
        PluginConfiguration pluginConfiguration = find(list, pluginContext.getIdentifier());
        if (pluginConfiguration == null) {
            pluginConfiguration = (PluginConfiguration) session.create(pluginConfigurationClass);
            if (pluginConfiguration instanceof SerializerPluginConfiguration) {
                boolean streaming = originalPluginInterfaceName.equals("StreamingSerializerPlugin") || originalPluginInterfaceName.equals("MessagingStreamingSerializerPlugin");
                ((SerializerPluginConfiguration) pluginConfiguration).setStreaming(streaming);
            } else if (pluginConfiguration instanceof InternalServicePluginConfiguration) {
                ((InternalServicePluginConfiguration) pluginConfiguration).setUserSettings(userSettings);
            }
            list.add(pluginConfiguration);
            genericPluginConversion(pluginContext, session, pluginConfiguration, pluginDescriptor);
        }
        if (pluginInterfaceName.equals("Service")) {
            activateService(user.getOid(), (InternalServicePluginConfiguration) pluginConfiguration);
        }
        if (defaultReference != null) {
            if (userSettings.eGet(defaultReference) == null || pluginConfiguration.getName().equals("IfcOpenShell")) {
                userSettings.eSet(defaultReference, pluginConfiguration);
            }
        }
        session.store(userSettings);
    }
}
Also used : EClass(org.eclipse.emf.ecore.EClass) UserSettings(org.bimserver.models.store.UserSettings) InternalServicePluginConfiguration(org.bimserver.models.store.InternalServicePluginConfiguration) SInternalServicePluginConfiguration(org.bimserver.interfaces.objects.SInternalServicePluginConfiguration) PluginConfiguration(org.bimserver.models.store.PluginConfiguration) SerializerPluginConfiguration(org.bimserver.models.store.SerializerPluginConfiguration) WebModulePluginConfiguration(org.bimserver.models.store.WebModulePluginConfiguration) InternalServicePluginConfiguration(org.bimserver.models.store.InternalServicePluginConfiguration) SInternalServicePluginConfiguration(org.bimserver.interfaces.objects.SInternalServicePluginConfiguration) SerializerPluginConfiguration(org.bimserver.models.store.SerializerPluginConfiguration) ArrayList(java.util.ArrayList) InterfaceList(org.bimserver.shared.InterfaceList) List(java.util.List) EReference(org.eclipse.emf.ecore.EReference)

Aggregations

EReference (org.eclipse.emf.ecore.EReference)232 EObject (org.eclipse.emf.ecore.EObject)119 EClass (org.eclipse.emf.ecore.EClass)58 List (java.util.List)52 ArrayList (java.util.ArrayList)48 EStructuralFeature (org.eclipse.emf.ecore.EStructuralFeature)37 Test (org.junit.Test)31 EAttribute (org.eclipse.emf.ecore.EAttribute)29 PalladioSelectEObjectDialog (org.palladiosimulator.editors.commons.dialogs.selection.PalladioSelectEObjectDialog)28 Resource (org.eclipse.emf.ecore.resource.Resource)22 EClassifier (org.eclipse.emf.ecore.EClassifier)21 IdEObject (org.bimserver.emf.IdEObject)18 IScope (org.eclipse.xtext.scoping.IScope)16 EList (org.eclipse.emf.common.util.EList)15 HashMapVirtualObject (org.bimserver.shared.HashMapVirtualObject)14 URI (org.eclipse.emf.common.util.URI)14 EPackage (org.eclipse.emf.ecore.EPackage)13 InternalEObject (org.eclipse.emf.ecore.InternalEObject)13 INode (org.eclipse.xtext.nodemodel.INode)11 AbstractEList (org.eclipse.emf.common.util.AbstractEList)10