From 46db403e53bbe6a4c6b85f924150ac92ce4373ad Mon Sep 17 00:00:00 2001
From: Kai Brassel <mail@khbrassel.de>
Date: Thu, 27 May 2021 20:04:21 +0200
Subject: [PATCH] Make mounting table more informative with material and
 category columns

---
 .../plugin.properties                         |   5 +-
 .../provider/MaterialItemProvider.java        |   6 +-
 .../viewmodels/Mounting.view                  |  11 ++
 .../model/buildingphysics.aird                | 118 +++++++++---------
 .../model/buildingphysics.ecore               |   4 +-
 .../model/buildingphysics.genmodel            |   3 +-
 .../BuildingPhysicsPackage.java               |  30 ++++-
 .../buildingphysics/Material.java             |  25 ++++
 .../buildingphysics/MaterialCategory.java     |   4 +-
 .../impl/BuildingPhysicsPackageImpl.java      |  20 ++-
 .../impl/MaterialCategoryImpl.java            |  22 +++-
 .../buildingphysics/impl/MaterialImpl.java    | 107 ++++++++++++++++
 12 files changed, 282 insertions(+), 73 deletions(-)

diff --git a/de.hftstuttgart.buildingphysics.edit/plugin.properties b/de.hftstuttgart.buildingphysics.edit/plugin.properties
index 93c2813..9a86aa4 100644
--- a/de.hftstuttgart.buildingphysics.edit/plugin.properties
+++ b/de.hftstuttgart.buildingphysics.edit/plugin.properties
@@ -38,9 +38,9 @@ _UI_Catalog_source_feature = Source
 _UI_WindowCatalog_windowTypes_feature = Window Types
 _UI_MaterialCatalog_materialCategories_feature = Material Categories
 _UI_MaterialCategory_material_feature = Material
-_UI_MaterialCategory_name_feature = Name
+_UI_MaterialCategory_name_feature = Category
 _UI_Material_id_feature = Id
-_UI_Material_name_feature = Name
+_UI_Material_name_feature = Material
 _UI_Material_density_feature = Density
 _UI_Material_heatCapacity_feature = Heat Capacity
 _UI_Material_conductivity_feature = Conductivity
@@ -85,3 +85,4 @@ _UI_WindowType_windowTypeId_feature = Window Type Id
 _UI_Material_materialId_feature = Material Id
 _UI_Mounting_mountingId_feature = Mounting Id
 _UI_Layer__feature = Layer
+_UI_Material_category_feature = Category
diff --git a/de.hftstuttgart.buildingphysics.edit/src/de/hftstuttgart/buildingphysics/provider/MaterialItemProvider.java b/de.hftstuttgart.buildingphysics.edit/src/de/hftstuttgart/buildingphysics/provider/MaterialItemProvider.java
index a154fb6..11445a7 100644
--- a/de.hftstuttgart.buildingphysics.edit/src/de/hftstuttgart/buildingphysics/provider/MaterialItemProvider.java
+++ b/de.hftstuttgart.buildingphysics.edit/src/de/hftstuttgart/buildingphysics/provider/MaterialItemProvider.java
@@ -94,10 +94,8 @@ public class MaterialItemProvider extends ItemProviderAdapter implements IEditin
 		itemPropertyDescriptors
 				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
 						getResourceLocator(), getString("_UI_Material_name_feature"),
-						getString("_UI_PropertyDescriptor_description", "_UI_Material_name_feature",
-								"_UI_Material_type"),
-						BuildingPhysicsPackage.Literals.MATERIAL__NAME, true, false, false,
-						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+						getString("_UI_Material_name_description"), BuildingPhysicsPackage.Literals.MATERIAL__NAME,
+						true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
 	}
 
 	/**
diff --git a/de.hftstuttgart.buildingphysics.viewmodel/viewmodels/Mounting.view b/de.hftstuttgart.buildingphysics.viewmodel/viewmodels/Mounting.view
index c96c959..c58181f 100644
--- a/de.hftstuttgart.buildingphysics.viewmodel/viewmodels/Mounting.view
+++ b/de.hftstuttgart.buildingphysics.viewmodel/viewmodels/Mounting.view
@@ -16,10 +16,21 @@
       <columnDomainModelReferences xsi:type="org.eclipse.emf.ecp.view.model:FeaturePathDomainModelReference" xmi:id="_QnRfELPZEeup29SeaUMpQQ">
         <domainModelEFeature xsi:type="ecore:EAttribute" href="http://www.hftstuttgart.de/buildingphysics#//Layer/thickness"/>
       </columnDomainModelReferences>
+      <columnDomainModelReferences xsi:type="org.eclipse.emf.ecp.view.model:FeaturePathDomainModelReference" xmi:id="_123AEL4qEeuIHZm4y-I19A">
+        <domainModelEFeature xsi:type="ecore:EAttribute" href="http://www.hftstuttgart.de/buildingphysics#//Material/name"/>
+        <domainModelEReferencePath href="http://www.hftstuttgart.de/buildingphysics#//Layer/material"/>
+      </columnDomainModelReferences>
+      <columnDomainModelReferences xsi:type="org.eclipse.emf.ecp.view.model:FeaturePathDomainModelReference" xmi:id="_6c1I0L4uEeuIHZm4y-I19A">
+        <domainModelEFeature xsi:type="ecore:EAttribute" href="http://www.hftstuttgart.de/buildingphysics#//MaterialCategory/name"/>
+        <domainModelEReferencePath href="http://www.hftstuttgart.de/buildingphysics#//Layer/material"/>
+        <domainModelEReferencePath href="http://www.hftstuttgart.de/buildingphysics#//Material/category"/>
+      </columnDomainModelReferences>
       <domainModelReference xsi:type="org.eclipse.emf.ecp.view.model:FeaturePathDomainModelReference" xmi:id="_MkYRYbPZEeup29SeaUMpQQ">
         <domainModelEFeature xsi:type="ecore:EReference" href="http://www.hftstuttgart.de/buildingphysics#//Mounting/layers"/>
       </domainModelReference>
     </domainModelReference>
+    <columnConfigurations xsi:type="org.eclipse.emf.ecp.view.table.model:ReadOnlyColumnConfiguration" xmi:id="_rCf9QL44EeuIHZm4y-I19A" columnDomainReferences="_123AEL4qEeuIHZm4y-I19A _6c1I0L4uEeuIHZm4y-I19A"/>
+    <columnConfigurations xsi:type="org.eclipse.emf.ecp.view.table.model:WidthConfiguration" xmi:id="_d7H2QL8HEeuIHZm4y-I19A" columnDomainReference="_QnRfELPZEeup29SeaUMpQQ" weight="30" minWidth="65"/>
   </children>
   <ecorePaths>/de.hftstuttgart.buildingphysics/model/buildingphysics.ecore</ecorePaths>
 </org.eclipse.emf.ecp.view.model:View>
diff --git a/de.hftstuttgart.buildingphysics/model/buildingphysics.aird b/de.hftstuttgart.buildingphysics/model/buildingphysics.aird
index d3bdece..a967b96 100644
--- a/de.hftstuttgart.buildingphysics/model/buildingphysics.aird
+++ b/de.hftstuttgart.buildingphysics/model/buildingphysics.aird
@@ -8,7 +8,7 @@
     <semanticResources>http://www.hftstuttgart.de/buildingphysics</semanticResources>
     <ownedViews xmi:type="viewpoint:DView" uid="_nfHygB3ZEeuNsK3dZmTkbQ">
       <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
-      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_JKPtIZUqEeudooziRGqkJA" name="Buildingphysics Class Diagram" repPath="#_JKN38JUqEeudooziRGqkJA" changeId="9cce401e-c8d9-4ef3-80ab-ea9e537bc120">
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_JKPtIZUqEeudooziRGqkJA" name="Buildingphysics Class Diagram" repPath="#_JKN38JUqEeudooziRGqkJA" changeId="5910fc7c-ffb8-4a2a-9d44-0858cf3e2591">
         <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
         <target xmi:type="ecore:EPackage" href="buildingphysics.ecore#/"/>
       </ownedRepresentationDescriptors>
@@ -33,9 +33,9 @@
         <children xmi:type="notation:Node" xmi:id="_J2yDBJUqEeudooziRGqkJA" type="2003" element="_J2lOsJUqEeudooziRGqkJA">
           <children xmi:type="notation:Node" xmi:id="_J2yDB5UqEeudooziRGqkJA" type="5007"/>
           <children xmi:type="notation:Node" xmi:id="_J2yqEJUqEeudooziRGqkJA" type="7004">
-            <children xmi:type="notation:Node" xmi:id="_J2z4NpUqEeudooziRGqkJA" type="3010" element="_J2qHNpUqEeudooziRGqkJA">
-              <styles xmi:type="notation:FontStyle" xmi:id="_J2z4N5UqEeudooziRGqkJA" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
-              <layoutConstraint xmi:type="notation:Location" xmi:id="_J2z4OJUqEeudooziRGqkJA"/>
+            <children xmi:type="notation:Node" xmi:id="_eY1IAL4tEeuIHZm4y-I19A" type="3010" element="_eYcGcL4tEeuIHZm4y-I19A">
+              <styles xmi:type="notation:FontStyle" xmi:id="_eY1IAb4tEeuIHZm4y-I19A" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_eY1IAr4tEeuIHZm4y-I19A"/>
             </children>
             <children xmi:type="notation:Node" xmi:id="_J2z4OZUqEeudooziRGqkJA" type="3010" element="_J2quQZUqEeudooziRGqkJA">
               <styles xmi:type="notation:FontStyle" xmi:id="_J2z4OpUqEeudooziRGqkJA" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
@@ -142,9 +142,9 @@
         <children xmi:type="notation:Node" xmi:id="_J2zRK5UqEeudooziRGqkJA" type="2003" element="_J2nD45UqEeudooziRGqkJA">
           <children xmi:type="notation:Node" xmi:id="_J2zRLpUqEeudooziRGqkJA" type="5007"/>
           <children xmi:type="notation:Node" xmi:id="_J2z4MJUqEeudooziRGqkJA" type="7004">
-            <children xmi:type="notation:Node" xmi:id="_J21GVpUqEeudooziRGqkJA" type="3010" element="_J2sjcpUqEeudooziRGqkJA">
-              <styles xmi:type="notation:FontStyle" xmi:id="_J21GV5UqEeudooziRGqkJA" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
-              <layoutConstraint xmi:type="notation:Location" xmi:id="_J21GWJUqEeudooziRGqkJA"/>
+            <children xmi:type="notation:Node" xmi:id="_eY5ZcL4tEeuIHZm4y-I19A" type="3010" element="_eYhmAL4tEeuIHZm4y-I19A">
+              <styles xmi:type="notation:FontStyle" xmi:id="_eY5Zcb4tEeuIHZm4y-I19A" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_eY5Zcr4tEeuIHZm4y-I19A"/>
             </children>
             <children xmi:type="notation:Node" xmi:id="_J21GWZUqEeudooziRGqkJA" type="3010" element="_J2tKgZUqEeudooziRGqkJA">
               <styles xmi:type="notation:FontStyle" xmi:id="_J21GWpUqEeudooziRGqkJA" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
@@ -221,9 +221,9 @@
         <children xmi:type="notation:Node" xmi:id="_jARk1LCmEeup29SeaUMpQQ" type="2003" element="_i_7mkbCmEeup29SeaUMpQQ">
           <children xmi:type="notation:Node" xmi:id="_jARk17CmEeup29SeaUMpQQ" type="5007"/>
           <children xmi:type="notation:Node" xmi:id="_jARk2LCmEeup29SeaUMpQQ" type="7004">
-            <children xmi:type="notation:Node" xmi:id="_jASy8LCmEeup29SeaUMpQQ" type="3010" element="_jAHz0rCmEeup29SeaUMpQQ">
-              <styles xmi:type="notation:FontStyle" xmi:id="_jASy8bCmEeup29SeaUMpQQ" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
-              <layoutConstraint xmi:type="notation:Location" xmi:id="_jASy8rCmEeup29SeaUMpQQ"/>
+            <children xmi:type="notation:Node" xmi:id="_eY6AgL4tEeuIHZm4y-I19A" type="3010" element="_eYlQYL4tEeuIHZm4y-I19A">
+              <styles xmi:type="notation:FontStyle" xmi:id="_eY6Agb4tEeuIHZm4y-I19A" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_eY6Agr4tEeuIHZm4y-I19A"/>
             </children>
             <children xmi:type="notation:Node" xmi:id="_jASy87CmEeup29SeaUMpQQ" type="3010" element="_jAIa4bCmEeup29SeaUMpQQ">
               <styles xmi:type="notation:FontStyle" xmi:id="_jASy9LCmEeup29SeaUMpQQ" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
@@ -300,22 +300,6 @@
           <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_J25X3JUqEeudooziRGqkJA" id="(0.5084745762711864,0.0)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_J25X3ZUqEeudooziRGqkJA" id="(0.5084745762711864,1.3424657534246576)"/>
         </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_J25-0JUqEeudooziRGqkJA" type="4001" element="_J2vmw5UqEeudooziRGqkJA" source="_J2zRJJUqEeudooziRGqkJA" target="_J2zRK5UqEeudooziRGqkJA">
-          <children xmi:type="notation:Node" xmi:id="_J25-1JUqEeudooziRGqkJA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J25-1ZUqEeudooziRGqkJA" x="33" y="9"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_J25-1pUqEeudooziRGqkJA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J25-15UqEeudooziRGqkJA" x="192"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_J25-2JUqEeudooziRGqkJA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J25-2ZUqEeudooziRGqkJA" x="6" y="2"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_J25-0ZUqEeudooziRGqkJA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_J25-0pUqEeudooziRGqkJA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_J25-05UqEeudooziRGqkJA" points="[3, -49, 22, 378]$[3, -324, 22, 103]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_J25-2pUqEeudooziRGqkJA" id="(0.5,0.6712328767123288)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_J25-25UqEeudooziRGqkJA" id="(0.5,0.5)"/>
-        </edges>
         <edges xmi:type="notation:Edge" xmi:id="_J25-3JUqEeudooziRGqkJA" type="4001" element="_J2vmypUqEeudooziRGqkJA" source="_J2yqGpUqEeudooziRGqkJA" target="_J2yqE5UqEeudooziRGqkJA">
           <children xmi:type="notation:Node" xmi:id="_J25-4JUqEeudooziRGqkJA" type="6001">
             <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J25-4ZUqEeudooziRGqkJA" y="-10"/>
@@ -412,6 +396,22 @@
           <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jAbV2rCmEeup29SeaUMpQQ" id="(0.5,0.6363636363636364)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jAbV27CmEeup29SeaUMpQQ" id="(0.5,0.15517241379310345)"/>
         </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_NbjSEL4uEeuIHZm4y-I19A" type="4001" element="_NbeZlr4uEeuIHZm4y-I19A" source="_J2zRJJUqEeudooziRGqkJA" target="_J2zRK5UqEeudooziRGqkJA">
+          <children xmi:type="notation:Node" xmi:id="_NbluUL4uEeuIHZm4y-I19A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NbluUb4uEeuIHZm4y-I19A" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_NbmVYL4uEeuIHZm4y-I19A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NbmVYb4uEeuIHZm4y-I19A" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Nbm8cL4uEeuIHZm4y-I19A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Nbm8cb4uEeuIHZm4y-I19A" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_NbjSEb4uEeuIHZm4y-I19A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_NbjSEr4uEeuIHZm4y-I19A" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_NbjSE74uEeuIHZm4y-I19A" points="[0, 0, 71, 518]$[-35, 0, 36, 518]$[-35, -518, 36, 0]$[-70, -518, 1, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_NbrN4L4uEeuIHZm4y-I19A" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_NbrN4b4uEeuIHZm4y-I19A" id="(0.5,0.5)"/>
+        </edges>
       </data>
     </ownedAnnotationEntries>
     <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_JKdIgJUqEeudooziRGqkJA" source="DANNOTATION_CUSTOMIZATION_KEY">
@@ -451,6 +451,15 @@
             <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
           </endLabelStyleDescription>
         </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_bdzr4L4uEeuIHZm4y-I19A" sourceArrow="FillDiamond" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <beginLabelStyleDescription xmi:type="style:BeginLabelStyleDescription" xmi:id="_bdzr4b4uEeuIHZm4y-I19A" showIcon="false" labelExpression="service:renderEOpposite">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </beginLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_bdzr4r4uEeuIHZm4y-I19A" showIcon="false" labelExpression="service:render">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
       </data>
     </ownedAnnotationEntries>
     <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_J2jZgJUqEeudooziRGqkJA" name="BuildingPhysicsCatalog" tooltipText="" outgoingEdges="_J2uYoJUqEeudooziRGqkJA _J2uYqpUqEeudooziRGqkJA" width="12" height="10">
@@ -482,10 +491,10 @@
         <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_J2qHNpUqEeudooziRGqkJA" name="id : EInt" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//WindowType/id"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//WindowType/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_J2quQJUqEeudooziRGqkJA" labelAlignment="LEFT" description="_J2qHNJUqEeudooziRGqkJA">
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_eYcGcL4tEeuIHZm4y-I19A" name="windowTypeId : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//WindowType/windowTypeId"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//WindowType/windowTypeId"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_eYctgL4tEeuIHZm4y-I19A" labelAlignment="LEFT" description="_J2qHNJUqEeudooziRGqkJA">
           <labelFormat>bold</labelFormat>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
@@ -637,7 +646,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_J2nD4JUqEeudooziRGqkJA" name="MaterialCategory" tooltipText="" outgoingEdges="_J2vmw5UqEeudooziRGqkJA" incomingEdges="_J2u_wJUqEeudooziRGqkJA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_J2nD4JUqEeudooziRGqkJA" name="MaterialCategory" tooltipText="" outgoingEdges="_NbeZlr4uEeuIHZm4y-I19A" incomingEdges="_J2u_wJUqEeudooziRGqkJA" width="12" height="10">
       <target xmi:type="ecore:EClass" href="buildingphysics.ecore#//MaterialCategory"/>
       <semanticElements xmi:type="ecore:EClass" href="buildingphysics.ecore#//MaterialCategory"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -656,20 +665,20 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_J2nD45UqEeudooziRGqkJA" name="Material" tooltipText="" incomingEdges="_J2vmw5UqEeudooziRGqkJA _jALeNrCmEeup29SeaUMpQQ" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_J2nD45UqEeudooziRGqkJA" name="Material" tooltipText="" incomingEdges="_jALeNrCmEeup29SeaUMpQQ _NbeZlr4uEeuIHZm4y-I19A" width="12" height="10">
       <target xmi:type="ecore:EClass" href="buildingphysics.ecore#//Material"/>
       <semanticElements xmi:type="ecore:EClass" href="buildingphysics.ecore#//Material"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
       <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
       <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
-      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_J2nD5JUqEeudooziRGqkJA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_dL6MdL4uEeuIHZm4y-I19A" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
         <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_J2sjcpUqEeudooziRGqkJA" name="id : ELong" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Material/id"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Material/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_J2tKgJUqEeudooziRGqkJA" labelAlignment="LEFT" description="_J2qHNJUqEeudooziRGqkJA">
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_eYhmAL4tEeuIHZm4y-I19A" name="materialId : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Material/materialId"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Material/materialId"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_eYiNEL4tEeuIHZm4y-I19A" labelAlignment="LEFT" description="_J2qHNJUqEeudooziRGqkJA">
           <labelFormat>bold</labelFormat>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
@@ -809,19 +818,6 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_J2vmw5UqEeudooziRGqkJA" name="[0..*] materials" sourceNode="_J2nD4JUqEeudooziRGqkJA" targetNode="_J2nD45UqEeudooziRGqkJA">
-      <target xmi:type="ecore:EReference" href="buildingphysics.ecore#//MaterialCategory/materials"/>
-      <semanticElements xmi:type="ecore:EReference" href="buildingphysics.ecore#//MaterialCategory/materials"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_J2vmxJUqEeudooziRGqkJA" description="_J2u_t5UqEeudooziRGqkJA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_J2vmxpUqEeudooziRGqkJA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_J2vmxZUqEeudooziRGqkJA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
     <ownedDiagramElements xmi:type="diagram:DEdge" uid="_J2vmypUqEeudooziRGqkJA" sourceNode="_J2mc0JUqEeudooziRGqkJA" targetNode="_J2l1wJUqEeudooziRGqkJA">
       <target xmi:type="ecore:EClass" href="buildingphysics.ecore#//WindowCatalog"/>
       <semanticElements xmi:type="ecore:EClass" href="buildingphysics.ecore#//WindowCatalog"/>
@@ -875,7 +871,7 @@
         <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_jAHz0LCmEeup29SeaUMpQQ" name="thickness : QuantityDouble = cm" tooltipText="">
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_jAHz0LCmEeup29SeaUMpQQ" name="thickness : QuantityDouble = m" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Layer/thickness"/>
         <semanticElements xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Layer/thickness"/>
         <ownedStyle xmi:type="diagram:BundledImage" uid="_jAHz0bCmEeup29SeaUMpQQ" labelAlignment="LEFT" description="_J2qHNJUqEeudooziRGqkJA">
@@ -894,10 +890,10 @@
         <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_jAHz0rCmEeup29SeaUMpQQ" name="id : EInt" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Mounting/id"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Mounting/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_jAIa4LCmEeup29SeaUMpQQ" labelAlignment="LEFT" description="_J2qHNJUqEeudooziRGqkJA">
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_eYlQYL4tEeuIHZm4y-I19A" name="mountingId : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Mounting/mountingId"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="buildingphysics.ecore#//Mounting/mountingId"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_eYlQYb4tEeuIHZm4y-I19A" labelAlignment="LEFT" description="_J2qHNJUqEeudooziRGqkJA">
           <labelFormat>bold</labelFormat>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
@@ -938,7 +934,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_jALeNrCmEeup29SeaUMpQQ" name="[1..1] material" sourceNode="_i_5xYrCmEeup29SeaUMpQQ" targetNode="_J2nD45UqEeudooziRGqkJA">
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_jALeNrCmEeup29SeaUMpQQ" name="[1..1] material" sourceNode="_i_5xYrCmEeup29SeaUMpQQ" targetNode="_J2nD45UqEeudooziRGqkJA" endLabel="materialId">
       <target xmi:type="ecore:EReference" href="buildingphysics.ecore#//Layer/material"/>
       <semanticElements xmi:type="ecore:EReference" href="buildingphysics.ecore#//Layer/material"/>
       <ownedStyle xmi:type="diagram:EdgeStyle" uid="_jALeOrCmEeup29SeaUMpQQ" description="_jALeN7CmEeup29SeaUMpQQ" routingStyle="manhattan" strokeColor="0,0,0">
@@ -966,6 +962,16 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
     </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_NbeZlr4uEeuIHZm4y-I19A" sourceNode="_J2nD4JUqEeudooziRGqkJA" targetNode="_J2nD45UqEeudooziRGqkJA" beginLabel="[1..1] category" endLabel="[0..*] materials">
+      <target xmi:type="ecore:EReference" href="buildingphysics.ecore#//MaterialCategory/materials"/>
+      <semanticElements xmi:type="ecore:EReference" href="buildingphysics.ecore#//Material/category"/>
+      <semanticElements xmi:type="ecore:EReference" href="buildingphysics.ecore#//MaterialCategory/materials"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_bdzr474uEeuIHZm4y-I19A" description="_bdzr4L4uEeuIHZm4y-I19A" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_bdzr5L4uEeuIHZm4y-I19A" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_bdzr5b4uEeuIHZm4y-I19A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
     <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
     <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_JKOfAJUqEeudooziRGqkJA"/>
     <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
diff --git a/de.hftstuttgart.buildingphysics/model/buildingphysics.ecore b/de.hftstuttgart.buildingphysics/model/buildingphysics.ecore
index 7aa1183..0eff548 100644
--- a/de.hftstuttgart.buildingphysics/model/buildingphysics.ecore
+++ b/de.hftstuttgart.buildingphysics/model/buildingphysics.ecore
@@ -65,7 +65,7 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="MaterialCategory">
     <eStructuralFeatures xsi:type="ecore:EReference" name="materials" upperBound="-1"
-        eType="#//Material" containment="true"/>
+        eType="#//Material" containment="true" eOpposite="#//Material/category"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Material">
@@ -97,6 +97,8 @@
         defaultValueLiteral="kg"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="disposalDescription" lowerBound="1"
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="category" ordered="false"
+        unique="false" lowerBound="1" eType="#//MaterialCategory" eOpposite="#//MaterialCategory/materials"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ConstructionCategory">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
diff --git a/de.hftstuttgart.buildingphysics/model/buildingphysics.genmodel b/de.hftstuttgart.buildingphysics/model/buildingphysics.genmodel
index a358986..f0e7b89 100644
--- a/de.hftstuttgart.buildingphysics/model/buildingphysics.genmodel
+++ b/de.hftstuttgart.buildingphysics/model/buildingphysics.genmodel
@@ -48,7 +48,7 @@
     </genClasses>
     <genClasses image="false" ecoreClass="buildingphysics.ecore#//Material">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/materialId"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/name"/>
+      <genFeatures createChild="false" propertyDescription="Bla Blub" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/name"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/density"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/heatCapacity"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/conductivity"/>
@@ -58,6 +58,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/disposalEnergy"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/disposalCarbon"/>
       <genFeatures createChild="false" propertyMultiLine="true" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//Material/disposalDescription"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference buildingphysics.ecore#//Material/category"/>
     </genClasses>
     <genClasses ecoreClass="buildingphysics.ecore#//ConstructionCategory">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute buildingphysics.ecore#//ConstructionCategory/name"/>
diff --git a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/BuildingPhysicsPackage.java b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/BuildingPhysicsPackage.java
index 876950b..d592791 100644
--- a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/BuildingPhysicsPackage.java
+++ b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/BuildingPhysicsPackage.java
@@ -594,6 +594,15 @@ public interface BuildingPhysicsPackage extends EPackage {
 	 */
 	int MATERIAL__DISPOSAL_DESCRIPTION = 10;
 
+	/**
+	 * The feature id for the '<em><b>Category</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MATERIAL__CATEGORY = 11;
+
 	/**
 	 * The number of structural features of the '<em>Material</em>' class.
 	 * <!-- begin-user-doc -->
@@ -601,7 +610,7 @@ public interface BuildingPhysicsPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int MATERIAL_FEATURE_COUNT = 11;
+	int MATERIAL_FEATURE_COUNT = 12;
 
 	/**
 	 * The number of operations of the '<em>Material</em>' class.
@@ -1203,6 +1212,17 @@ public interface BuildingPhysicsPackage extends EPackage {
 	 */
 	EAttribute getMaterial_DisposalDescription();
 
+	/**
+	 * Returns the meta object for the container reference '{@link de.hftstuttgart.buildingphysics.Material#getCategory <em>Category</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Category</em>'.
+	 * @see de.hftstuttgart.buildingphysics.Material#getCategory()
+	 * @see #getMaterial()
+	 * @generated
+	 */
+	EReference getMaterial_Category();
+
 	/**
 	 * Returns the meta object for class '{@link de.hftstuttgart.buildingphysics.ConstructionCategory <em>Construction Category</em>}'.
 	 * <!-- begin-user-doc -->
@@ -1675,6 +1695,14 @@ public interface BuildingPhysicsPackage extends EPackage {
 		 */
 		EAttribute MATERIAL__DISPOSAL_DESCRIPTION = eINSTANCE.getMaterial_DisposalDescription();
 
+		/**
+		 * The meta object literal for the '<em><b>Category</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MATERIAL__CATEGORY = eINSTANCE.getMaterial_Category();
+
 		/**
 		 * The meta object literal for the '{@link de.hftstuttgart.buildingphysics.impl.ConstructionCategoryImpl <em>Construction Category</em>}' class.
 		 * <!-- begin-user-doc -->
diff --git a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/Material.java b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/Material.java
index 200452b..df7035d 100644
--- a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/Material.java
+++ b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/Material.java
@@ -26,6 +26,7 @@ import org.eclipse.emf.ecore.EObject;
  *   <li>{@link de.hftstuttgart.buildingphysics.Material#getDisposalEnergy <em>Disposal Energy</em>}</li>
  *   <li>{@link de.hftstuttgart.buildingphysics.Material#getDisposalCarbon <em>Disposal Carbon</em>}</li>
  *   <li>{@link de.hftstuttgart.buildingphysics.Material#getDisposalDescription <em>Disposal Description</em>}</li>
+ *   <li>{@link de.hftstuttgart.buildingphysics.Material#getCategory <em>Category</em>}</li>
  * </ul>
  *
  * @see de.hftstuttgart.buildingphysics.BuildingPhysicsPackage#getMaterial()
@@ -282,4 +283,28 @@ public interface Material extends EObject {
 	 */
 	void setDisposalDescription(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Category</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link de.hftstuttgart.buildingphysics.MaterialCategory#getMaterials <em>Materials</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Category</em>' container reference.
+	 * @see #setCategory(MaterialCategory)
+	 * @see de.hftstuttgart.buildingphysics.BuildingPhysicsPackage#getMaterial_Category()
+	 * @see de.hftstuttgart.buildingphysics.MaterialCategory#getMaterials
+	 * @model opposite="materials" required="true" transient="false" ordered="false"
+	 * @generated
+	 */
+	MaterialCategory getCategory();
+
+	/**
+	 * Sets the value of the '{@link de.hftstuttgart.buildingphysics.Material#getCategory <em>Category</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Category</em>' container reference.
+	 * @see #getCategory()
+	 * @generated
+	 */
+	void setCategory(MaterialCategory value);
+
 } // Material
diff --git a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/MaterialCategory.java b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/MaterialCategory.java
index db727ea..266f3e6 100644
--- a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/MaterialCategory.java
+++ b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/MaterialCategory.java
@@ -27,11 +27,13 @@ public interface MaterialCategory extends EObject {
 	/**
 	 * Returns the value of the '<em><b>Materials</b></em>' containment reference list.
 	 * The list contents are of type {@link de.hftstuttgart.buildingphysics.Material}.
+	 * It is bidirectional and its opposite is '{@link de.hftstuttgart.buildingphysics.Material#getCategory <em>Category</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Materials</em>' containment reference list.
 	 * @see de.hftstuttgart.buildingphysics.BuildingPhysicsPackage#getMaterialCategory_Materials()
-	 * @model containment="true"
+	 * @see de.hftstuttgart.buildingphysics.Material#getCategory
+	 * @model opposite="category" containment="true"
 	 * @generated
 	 */
 	EList<Material> getMaterials();
diff --git a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/BuildingPhysicsPackageImpl.java b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/BuildingPhysicsPackageImpl.java
index d1f5e6b..6bfc5b7 100644
--- a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/BuildingPhysicsPackageImpl.java
+++ b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/BuildingPhysicsPackageImpl.java
@@ -578,6 +578,16 @@ public class BuildingPhysicsPackageImpl extends EPackageImpl implements Building
 		return (EAttribute) materialEClass.getEStructuralFeatures().get(10);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EReference getMaterial_Category() {
+		return (EReference) materialEClass.getEStructuralFeatures().get(11);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -755,6 +765,7 @@ public class BuildingPhysicsPackageImpl extends EPackageImpl implements Building
 		createEAttribute(materialEClass, MATERIAL__DISPOSAL_ENERGY);
 		createEAttribute(materialEClass, MATERIAL__DISPOSAL_CARBON);
 		createEAttribute(materialEClass, MATERIAL__DISPOSAL_DESCRIPTION);
+		createEReference(materialEClass, MATERIAL__CATEGORY);
 
 		constructionCategoryEClass = createEClass(CONSTRUCTION_CATEGORY);
 		createEAttribute(constructionCategoryEClass, CONSTRUCTION_CATEGORY__NAME);
@@ -881,9 +892,9 @@ public class BuildingPhysicsPackageImpl extends EPackageImpl implements Building
 
 		initEClass(materialCategoryEClass, MaterialCategory.class, "MaterialCategory", !IS_ABSTRACT, !IS_INTERFACE,
 				IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getMaterialCategory_Materials(), this.getMaterial(), null, "materials", null, 0, -1,
-				MaterialCategory.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-				!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getMaterialCategory_Materials(), this.getMaterial(), this.getMaterial_Category(), "materials",
+				null, 0, -1, MaterialCategory.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+				!IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getMaterialCategory_Name(), ecorePackage.getEString(), "name", null, 1, 1,
 				MaterialCategory.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
 				!IS_DERIVED, IS_ORDERED);
@@ -921,6 +932,9 @@ public class BuildingPhysicsPackageImpl extends EPackageImpl implements Building
 		initEAttribute(getMaterial_DisposalDescription(), ecorePackage.getEString(), "disposalDescription", null, 1, 1,
 				Material.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
 				!IS_DERIVED, IS_ORDERED);
+		initEReference(getMaterial_Category(), this.getMaterialCategory(), this.getMaterialCategory_Materials(),
+				"category", null, 1, 1, Material.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+				!IS_RESOLVE_PROXIES, !IS_UNSETTABLE, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
 		initEClass(constructionCategoryEClass, ConstructionCategory.class, "ConstructionCategory", !IS_ABSTRACT,
 				!IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
diff --git a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/MaterialCategoryImpl.java b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/MaterialCategoryImpl.java
index e50f51a..a05543a 100644
--- a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/MaterialCategoryImpl.java
+++ b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/MaterialCategoryImpl.java
@@ -18,8 +18,7 @@ import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -94,8 +93,8 @@ public class MaterialCategoryImpl extends MinimalEObjectImpl.Container implement
 	@Override
 	public EList<Material> getMaterials() {
 		if (materials == null) {
-			materials = new EObjectContainmentEList<Material>(Material.class, this,
-					BuildingPhysicsPackage.MATERIAL_CATEGORY__MATERIALS);
+			materials = new EObjectContainmentWithInverseEList<Material>(Material.class, this,
+					BuildingPhysicsPackage.MATERIAL_CATEGORY__MATERIALS, BuildingPhysicsPackage.MATERIAL__CATEGORY);
 		}
 		return materials;
 	}
@@ -124,6 +123,21 @@ public class MaterialCategoryImpl extends MinimalEObjectImpl.Container implement
 					oldName, name));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case BuildingPhysicsPackage.MATERIAL_CATEGORY__MATERIALS:
+			return ((InternalEList<InternalEObject>) (InternalEList<?>) getMaterials()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/MaterialImpl.java b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/MaterialImpl.java
index 7e75a2a..f70ee25 100644
--- a/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/MaterialImpl.java
+++ b/de.hftstuttgart.buildingphysics/src/de/hftstuttgart/buildingphysics/impl/MaterialImpl.java
@@ -5,6 +5,7 @@ package de.hftstuttgart.buildingphysics.impl;
 import de.hftstuttgart.buildingphysics.BuildingPhysicsPackage;
 import de.hftstuttgart.buildingphysics.Material;
 
+import de.hftstuttgart.buildingphysics.MaterialCategory;
 import de.hftstuttgart.cityunits.model.NullableQuantity;
 
 import de.hftstuttgart.cityunits.model.quantities.QuantitiesFactory;
@@ -12,10 +13,13 @@ import de.hftstuttgart.cityunits.model.quantities.QuantitiesPackage;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -36,6 +40,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  *   <li>{@link de.hftstuttgart.buildingphysics.impl.MaterialImpl#getDisposalEnergy <em>Disposal Energy</em>}</li>
  *   <li>{@link de.hftstuttgart.buildingphysics.impl.MaterialImpl#getDisposalCarbon <em>Disposal Carbon</em>}</li>
  *   <li>{@link de.hftstuttgart.buildingphysics.impl.MaterialImpl#getDisposalDescription <em>Disposal Description</em>}</li>
+ *   <li>{@link de.hftstuttgart.buildingphysics.impl.MaterialImpl#getCategory <em>Category</em>}</li>
  * </ul>
  *
  * @generated
@@ -552,6 +557,98 @@ public class MaterialImpl extends MinimalEObjectImpl.Container implements Materi
 					oldDisposalDescription, disposalDescription));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public MaterialCategory getCategory() {
+		if (eContainerFeatureID() != BuildingPhysicsPackage.MATERIAL__CATEGORY)
+			return null;
+		return (MaterialCategory) eInternalContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCategory(MaterialCategory newCategory, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject) newCategory, BuildingPhysicsPackage.MATERIAL__CATEGORY, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setCategory(MaterialCategory newCategory) {
+		if (newCategory != eInternalContainer()
+				|| (eContainerFeatureID() != BuildingPhysicsPackage.MATERIAL__CATEGORY && newCategory != null)) {
+			if (EcoreUtil.isAncestor(this, newCategory))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newCategory != null)
+				msgs = ((InternalEObject) newCategory).eInverseAdd(this,
+						BuildingPhysicsPackage.MATERIAL_CATEGORY__MATERIALS, MaterialCategory.class, msgs);
+			msgs = basicSetCategory(newCategory, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, BuildingPhysicsPackage.MATERIAL__CATEGORY,
+					newCategory, newCategory));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case BuildingPhysicsPackage.MATERIAL__CATEGORY:
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			return basicSetCategory((MaterialCategory) 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 BuildingPhysicsPackage.MATERIAL__CATEGORY:
+			return basicSetCategory(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+		case BuildingPhysicsPackage.MATERIAL__CATEGORY:
+			return eInternalContainer().eInverseRemove(this, BuildingPhysicsPackage.MATERIAL_CATEGORY__MATERIALS,
+					MaterialCategory.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -582,6 +679,8 @@ public class MaterialImpl extends MinimalEObjectImpl.Container implements Materi
 			return getDisposalCarbon();
 		case BuildingPhysicsPackage.MATERIAL__DISPOSAL_DESCRIPTION:
 			return getDisposalDescription();
+		case BuildingPhysicsPackage.MATERIAL__CATEGORY:
+			return getCategory();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -627,6 +726,9 @@ public class MaterialImpl extends MinimalEObjectImpl.Container implements Materi
 		case BuildingPhysicsPackage.MATERIAL__DISPOSAL_DESCRIPTION:
 			setDisposalDescription((String) newValue);
 			return;
+		case BuildingPhysicsPackage.MATERIAL__CATEGORY:
+			setCategory((MaterialCategory) newValue);
+			return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -672,6 +774,9 @@ public class MaterialImpl extends MinimalEObjectImpl.Container implements Materi
 		case BuildingPhysicsPackage.MATERIAL__DISPOSAL_DESCRIPTION:
 			setDisposalDescription(DISPOSAL_DESCRIPTION_EDEFAULT);
 			return;
+		case BuildingPhysicsPackage.MATERIAL__CATEGORY:
+			setCategory((MaterialCategory) null);
+			return;
 		}
 		super.eUnset(featureID);
 	}
@@ -712,6 +817,8 @@ public class MaterialImpl extends MinimalEObjectImpl.Container implements Materi
 		case BuildingPhysicsPackage.MATERIAL__DISPOSAL_DESCRIPTION:
 			return DISPOSAL_DESCRIPTION_EDEFAULT == null ? disposalDescription != null
 					: !DISPOSAL_DESCRIPTION_EDEFAULT.equals(disposalDescription);
+		case BuildingPhysicsPackage.MATERIAL__CATEGORY:
+			return getCategory() != null;
 		}
 		return super.eIsSet(featureID);
 	}
-- 
GitLab