--- a
+++ b/src/main/java/genericbcm/impl/UnitImpl.java
@@ -0,0 +1,555 @@
+/**
+ */
+package genericbcm.impl;
+
+import genericbcm.BusinessProcessOnUnitLink;
+import genericbcm.Dependency;
+import genericbcm.DerivedMetrics;
+import genericbcm.GenericbcmPackage;
+import genericbcm.LogicalGroupMemberLink;
+import genericbcm.Unit;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Unit</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link genericbcm.impl.UnitImpl#getComputedAvailability <em>Computed Availability</em>}</li>
+ *   <li>{@link genericbcm.impl.UnitImpl#getRTO_Derived_QEC <em>RTO Derived QEC</em>}</li>
+ *   <li>{@link genericbcm.impl.UnitImpl#getRPODerived <em>RPO Derived</em>}</li>
+ *   <li>{@link genericbcm.impl.UnitImpl#getRTODerivedNormalPeriod <em>RTO Derived Normal Period</em>}</li>
+ *   <li>{@link genericbcm.impl.UnitImpl#getWeight <em>Weight</em>}</li>
+ *   <li>{@link genericbcm.impl.UnitImpl#getDeps <em>Deps</em>}</li>
+ *   <li>{@link genericbcm.impl.UnitImpl#getActivities <em>Activities</em>}</li>
+ *   <li>{@link genericbcm.impl.UnitImpl#getMemberOfLogicalGroup <em>Member Of Logical Group</em>}</li>
+ *   <li>{@link genericbcm.impl.UnitImpl#getIncommingDependencies <em>Incomming Dependencies</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class UnitImpl extends NameableImpl implements Unit {
+	/**
+	 * The default value of the '{@link #getComputedAvailability() <em>Computed Availability</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getComputedAvailability()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double COMPUTED_AVAILABILITY_EDEFAULT = 1.0;
+
+	/**
+	 * The cached value of the '{@link #getComputedAvailability() <em>Computed Availability</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getComputedAvailability()
+	 * @generated
+	 * @ordered
+	 */
+	protected double computedAvailability = COMPUTED_AVAILABILITY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRTO_Derived_QEC() <em>RTO Derived QEC</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRTO_Derived_QEC()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double RTO_DERIVED_QEC_EDEFAULT = -1.0;
+
+	/**
+	 * The cached value of the '{@link #getRTO_Derived_QEC() <em>RTO Derived QEC</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRTO_Derived_QEC()
+	 * @generated
+	 * @ordered
+	 */
+	protected double rtO_Derived_QEC = RTO_DERIVED_QEC_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRPODerived() <em>RPO Derived</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRPODerived()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double RPO_DERIVED_EDEFAULT = -1.0;
+
+	/**
+	 * The cached value of the '{@link #getRPODerived() <em>RPO Derived</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRPODerived()
+	 * @generated
+	 * @ordered
+	 */
+	protected double rpoDerived = RPO_DERIVED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRTODerivedNormalPeriod() <em>RTO Derived Normal Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRTODerivedNormalPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double RTO_DERIVED_NORMAL_PERIOD_EDEFAULT = -1.0;
+
+	/**
+	 * The cached value of the '{@link #getRTODerivedNormalPeriod() <em>RTO Derived Normal Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRTODerivedNormalPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected double rtoDerivedNormalPeriod = RTO_DERIVED_NORMAL_PERIOD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getWeight() <em>Weight</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getWeight()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int WEIGHT_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getWeight() <em>Weight</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getWeight()
+	 * @generated
+	 * @ordered
+	 */
+	protected int weight = WEIGHT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDeps() <em>Deps</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeps()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int DEPS_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getDeps() <em>Deps</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeps()
+	 * @generated
+	 * @ordered
+	 */
+	protected int deps = DEPS_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getActivities() <em>Activities</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getActivities()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<BusinessProcessOnUnitLink> activities;
+
+	/**
+	 * The cached value of the '{@link #getMemberOfLogicalGroup() <em>Member Of Logical Group</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMemberOfLogicalGroup()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<LogicalGroupMemberLink> memberOfLogicalGroup;
+
+	/**
+	 * The cached value of the '{@link #getIncommingDependencies() <em>Incomming Dependencies</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncommingDependencies()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Dependency> incommingDependencies;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected UnitImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GenericbcmPackage.Literals.UNIT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getComputedAvailability() {
+		return computedAvailability;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getRTO_Derived_QEC() {
+		return rtO_Derived_QEC;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getRPODerived() {
+		return rpoDerived;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getRTODerivedNormalPeriod() {
+		return rtoDerivedNormalPeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getWeight() {
+		return weight;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setWeight(int newWeight) {
+		int oldWeight = weight;
+		weight = newWeight;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GenericbcmPackage.UNIT__WEIGHT, oldWeight, weight));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getDeps() {
+		return deps;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeps(int newDeps) {
+		int oldDeps = deps;
+		deps = newDeps;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GenericbcmPackage.UNIT__DEPS, oldDeps, deps));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<BusinessProcessOnUnitLink> getActivities() {
+		if (activities == null) {
+			activities = new EObjectWithInverseResolvingEList<BusinessProcessOnUnitLink>(BusinessProcessOnUnitLink.class, this, GenericbcmPackage.UNIT__ACTIVITIES, GenericbcmPackage.BUSINESS_PROCESS_ON_UNIT_LINK__TO);
+		}
+		return activities;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<LogicalGroupMemberLink> getMemberOfLogicalGroup() {
+		if (memberOfLogicalGroup == null) {
+			memberOfLogicalGroup = new EObjectWithInverseResolvingEList<LogicalGroupMemberLink>(LogicalGroupMemberLink.class, this, GenericbcmPackage.UNIT__MEMBER_OF_LOGICAL_GROUP, GenericbcmPackage.LOGICAL_GROUP_MEMBER_LINK__TO);
+		}
+		return memberOfLogicalGroup;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Dependency> getIncommingDependencies() {
+		if (incommingDependencies == null) {
+			incommingDependencies = new EObjectWithInverseResolvingEList<Dependency>(Dependency.class, this, GenericbcmPackage.UNIT__INCOMMING_DEPENDENCIES, GenericbcmPackage.DEPENDENCY__ON);
+		}
+		return incommingDependencies;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GenericbcmPackage.UNIT__ACTIVITIES:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getActivities()).basicAdd(otherEnd, msgs);
+			case GenericbcmPackage.UNIT__MEMBER_OF_LOGICAL_GROUP:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getMemberOfLogicalGroup()).basicAdd(otherEnd, msgs);
+			case GenericbcmPackage.UNIT__INCOMMING_DEPENDENCIES:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getIncommingDependencies()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GenericbcmPackage.UNIT__ACTIVITIES:
+				return ((InternalEList<?>)getActivities()).basicRemove(otherEnd, msgs);
+			case GenericbcmPackage.UNIT__MEMBER_OF_LOGICAL_GROUP:
+				return ((InternalEList<?>)getMemberOfLogicalGroup()).basicRemove(otherEnd, msgs);
+			case GenericbcmPackage.UNIT__INCOMMING_DEPENDENCIES:
+				return ((InternalEList<?>)getIncommingDependencies()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GenericbcmPackage.UNIT__COMPUTED_AVAILABILITY:
+				return getComputedAvailability();
+			case GenericbcmPackage.UNIT__RTO_DERIVED_QEC:
+				return getRTO_Derived_QEC();
+			case GenericbcmPackage.UNIT__RPO_DERIVED:
+				return getRPODerived();
+			case GenericbcmPackage.UNIT__RTO_DERIVED_NORMAL_PERIOD:
+				return getRTODerivedNormalPeriod();
+			case GenericbcmPackage.UNIT__WEIGHT:
+				return getWeight();
+			case GenericbcmPackage.UNIT__DEPS:
+				return getDeps();
+			case GenericbcmPackage.UNIT__ACTIVITIES:
+				return getActivities();
+			case GenericbcmPackage.UNIT__MEMBER_OF_LOGICAL_GROUP:
+				return getMemberOfLogicalGroup();
+			case GenericbcmPackage.UNIT__INCOMMING_DEPENDENCIES:
+				return getIncommingDependencies();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GenericbcmPackage.UNIT__WEIGHT:
+				setWeight((Integer)newValue);
+				return;
+			case GenericbcmPackage.UNIT__DEPS:
+				setDeps((Integer)newValue);
+				return;
+			case GenericbcmPackage.UNIT__ACTIVITIES:
+				getActivities().clear();
+				getActivities().addAll((Collection<? extends BusinessProcessOnUnitLink>)newValue);
+				return;
+			case GenericbcmPackage.UNIT__MEMBER_OF_LOGICAL_GROUP:
+				getMemberOfLogicalGroup().clear();
+				getMemberOfLogicalGroup().addAll((Collection<? extends LogicalGroupMemberLink>)newValue);
+				return;
+			case GenericbcmPackage.UNIT__INCOMMING_DEPENDENCIES:
+				getIncommingDependencies().clear();
+				getIncommingDependencies().addAll((Collection<? extends Dependency>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GenericbcmPackage.UNIT__WEIGHT:
+				setWeight(WEIGHT_EDEFAULT);
+				return;
+			case GenericbcmPackage.UNIT__DEPS:
+				setDeps(DEPS_EDEFAULT);
+				return;
+			case GenericbcmPackage.UNIT__ACTIVITIES:
+				getActivities().clear();
+				return;
+			case GenericbcmPackage.UNIT__MEMBER_OF_LOGICAL_GROUP:
+				getMemberOfLogicalGroup().clear();
+				return;
+			case GenericbcmPackage.UNIT__INCOMMING_DEPENDENCIES:
+				getIncommingDependencies().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GenericbcmPackage.UNIT__COMPUTED_AVAILABILITY:
+				return computedAvailability != COMPUTED_AVAILABILITY_EDEFAULT;
+			case GenericbcmPackage.UNIT__RTO_DERIVED_QEC:
+				return rtO_Derived_QEC != RTO_DERIVED_QEC_EDEFAULT;
+			case GenericbcmPackage.UNIT__RPO_DERIVED:
+				return rpoDerived != RPO_DERIVED_EDEFAULT;
+			case GenericbcmPackage.UNIT__RTO_DERIVED_NORMAL_PERIOD:
+				return rtoDerivedNormalPeriod != RTO_DERIVED_NORMAL_PERIOD_EDEFAULT;
+			case GenericbcmPackage.UNIT__WEIGHT:
+				return weight != WEIGHT_EDEFAULT;
+			case GenericbcmPackage.UNIT__DEPS:
+				return deps != DEPS_EDEFAULT;
+			case GenericbcmPackage.UNIT__ACTIVITIES:
+				return activities != null && !activities.isEmpty();
+			case GenericbcmPackage.UNIT__MEMBER_OF_LOGICAL_GROUP:
+				return memberOfLogicalGroup != null && !memberOfLogicalGroup.isEmpty();
+			case GenericbcmPackage.UNIT__INCOMMING_DEPENDENCIES:
+				return incommingDependencies != null && !incommingDependencies.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == DerivedMetrics.class) {
+			switch (derivedFeatureID) {
+				case GenericbcmPackage.UNIT__COMPUTED_AVAILABILITY: return GenericbcmPackage.DERIVED_METRICS__COMPUTED_AVAILABILITY;
+				case GenericbcmPackage.UNIT__RTO_DERIVED_QEC: return GenericbcmPackage.DERIVED_METRICS__RTO_DERIVED_QEC;
+				case GenericbcmPackage.UNIT__RPO_DERIVED: return GenericbcmPackage.DERIVED_METRICS__RPO_DERIVED;
+				case GenericbcmPackage.UNIT__RTO_DERIVED_NORMAL_PERIOD: return GenericbcmPackage.DERIVED_METRICS__RTO_DERIVED_NORMAL_PERIOD;
+				case GenericbcmPackage.UNIT__WEIGHT: return GenericbcmPackage.DERIVED_METRICS__WEIGHT;
+				case GenericbcmPackage.UNIT__DEPS: return GenericbcmPackage.DERIVED_METRICS__DEPS;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == DerivedMetrics.class) {
+			switch (baseFeatureID) {
+				case GenericbcmPackage.DERIVED_METRICS__COMPUTED_AVAILABILITY: return GenericbcmPackage.UNIT__COMPUTED_AVAILABILITY;
+				case GenericbcmPackage.DERIVED_METRICS__RTO_DERIVED_QEC: return GenericbcmPackage.UNIT__RTO_DERIVED_QEC;
+				case GenericbcmPackage.DERIVED_METRICS__RPO_DERIVED: return GenericbcmPackage.UNIT__RPO_DERIVED;
+				case GenericbcmPackage.DERIVED_METRICS__RTO_DERIVED_NORMAL_PERIOD: return GenericbcmPackage.UNIT__RTO_DERIVED_NORMAL_PERIOD;
+				case GenericbcmPackage.DERIVED_METRICS__WEIGHT: return GenericbcmPackage.UNIT__WEIGHT;
+				case GenericbcmPackage.DERIVED_METRICS__DEPS: return GenericbcmPackage.UNIT__DEPS;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (ComputedAvailability: ");
+		result.append(computedAvailability);
+		result.append(", RTO_Derived_QEC: ");
+		result.append(rtO_Derived_QEC);
+		result.append(", RPODerived: ");
+		result.append(rpoDerived);
+		result.append(", RTODerivedNormalPeriod: ");
+		result.append(rtoDerivedNormalPeriod);
+		result.append(", Weight: ");
+		result.append(weight);
+		result.append(", Deps: ");
+		result.append(deps);
+		result.append(')');
+		return result.toString();
+	}
+
+} //UnitImpl