protected void convertContent(EObject eObject) { final Object target = objectMapping.get(eObject); final ModelObject<?> modelObject = ModelResolver.getInstance().getModelObject(target); for (final EStructuralFeature eStructuralFeature : modelObject.eClass().getEAllStructuralFeatures()) { if (!eStructuralFeature.isChangeable() || eStructuralFeature.isVolatile()) { continue; } // not set, not convert if (!eStructuralFeature.isMany() && !eObject.eIsSet(eStructuralFeature)) { continue; } if (FeatureMapUtil.isFeatureMap(eStructuralFeature)) { convertFeatureMap(eObject, modelObject, eStructuralFeature); } else if (eStructuralFeature.isMany()) { if (eStructuralFeature instanceof EAttribute) { final EAttribute eAttribute = (EAttribute) eStructuralFeature; convertManyEAttribute(eObject, modelObject, eAttribute); } else { final EReference eReference = (EReference) eStructuralFeature; if (eReference.isContainer()) { continue; } convertManyEReference(eObject, modelObject, eReference); } } else { if (eStructuralFeature instanceof EAttribute) { final EAttribute eAttribute = (EAttribute) eStructuralFeature; convertSingleEAttribute(eObject, modelObject, eAttribute); } else { final EReference eReference = (EReference) eStructuralFeature; if (eReference.isContainer()) { continue; } convertSingleEReference(eObject, modelObject, eReference); } } } }
/** * Returns whether an EStructuralFeature is valid for an EObject or not. A reference is valid, if * it can be set or added to. * * @param feature the EStructuralFeature in question * @param eObject the EObject to check the feature for * @param exceptionLog the current log of exceptions * @param ignoreAndLog should exceptions be ignored and added to <code>exceptionLog</code>? * @return if the feature can be set or added to */ public static boolean isValid( EStructuralFeature feature, EObject eObject, Set<RuntimeException> exceptionLog, boolean ignoreAndLog) { boolean result = false; try { if (feature.isMany()) { // has the maximum amount of referenced objects been reached? Collection<?> referencedItems = (Collection<?>) eObject.eGet(feature); if (feature.getUpperBound() >= 0 && referencedItems.size() >= feature.getUpperBound()) { return false; } } // can the feature be changed reflectively? result = feature.isChangeable() && !feature.isVolatile() && !feature.isDerived(); } catch (RuntimeException e) { handle(e, exceptionLog, ignoreAndLog); } return result; }
protected void convertContent(Object target) { // if a proxy then do no feature conversions as this may load // the object InternalEObject eObject = objectMapping.get(target); final ModelObject<?> modelObject = ModelResolver.getInstance().getModelObject(target); if (getProxyObjects().contains(target)) { final URI proxyURI = getProxyId(modelObject); if (proxyURI != null) { eObject.eSetProxyURI(proxyURI); } return; } for (final EStructuralFeature eStructuralFeature : eObject.eClass().getEAllStructuralFeatures()) { if (!eStructuralFeature.isChangeable() || eStructuralFeature.isVolatile()) { continue; } if (FeatureMapUtil.isFeatureMap(eStructuralFeature)) { convertFeatureMap(modelObject, eObject, eStructuralFeature); } else if (eStructuralFeature.isMany()) { if (eStructuralFeature instanceof EAttribute) { final EAttribute eAttribute = (EAttribute) eStructuralFeature; convertManyEAttribute(modelObject, eObject, eAttribute); } else { final EReference eReference = (EReference) eStructuralFeature; convertManyEReference(modelObject, eObject, eReference); } } else { if (eStructuralFeature instanceof EAttribute) { final EAttribute eAttribute = (EAttribute) eStructuralFeature; convertSingleEAttribute(modelObject, eObject, eAttribute); } else { final EReference eReference = (EReference) eStructuralFeature; convertSingleEReference(modelObject, eObject, eReference); } } } }