diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f51caa61446b8b609169a406392f3ceca960700c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,161 @@
+
+# Created by https://www.toptal.com/developers/gitignore/api/linux,windows,macos,eclipse,java
+# Edit at https://www.toptal.com/developers/gitignore?templates=linux,windows,macos,eclipse,java
+
+### Eclipse ###
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.recommenders
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# PyDev specific (Python IDE for Eclipse)
+*.pydevproject
+
+# CDT-specific (C/C++ Development Tooling)
+.cproject
+
+# CDT- autotools
+.autotools
+
+# Java annotation processor (APT)
+.factorypath
+
+# PDT-specific (PHP Development Tools)
+.buildpath
+
+# sbteclipse plugin
+.target
+
+# Tern plugin
+.tern-project
+
+# TeXlipse plugin
+.texlipse
+
+# STS (Spring Tool Suite)
+.springBeans
+
+# Code Recommenders
+.recommenders/
+
+# Annotation Processing
+.apt_generated/
+.apt_generated_test/
+
+# Scala IDE specific (Scala & Java development for Eclipse)
+.cache-main
+.scala_dependencies
+.worksheet
+
+# Uncomment this line if you wish to ignore the project description file.
+# Typically, this file would be tracked if it contains build/dependency configurations:
+#.project
+
+### Java ###
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### Windows ###
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# End of https://www.toptal.com/developers/gitignore/api/linux,windows,macos,eclipse,java
\ No newline at end of file
diff --git a/org.example.democatalog.edit/.classpath b/org.example.democatalog.edit/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..004db3fba2030fa6e0a7da16a467101b8a4f95d6
--- /dev/null
+++ b/org.example.democatalog.edit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.example.democatalog.edit/.project b/org.example.democatalog.edit/.project
new file mode 100644
index 0000000000000000000000000000000000000000..b5a3ff46190bd4572f9088bd6e2caedcf71d3e2f
--- /dev/null
+++ b/org.example.democatalog.edit/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.example.democatalog.edit</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.example.democatalog.edit/META-INF/MANIFEST.MF b/org.example.democatalog.edit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..fd22dd90495c90e76527138036aa1b10167c4975
--- /dev/null
+++ b/org.example.democatalog.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.example.democatalog.edit;singleton:=true
+Automatic-Module-Name: org.example.democatalog.edit
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.example.democatalog.provider.DemocatalogEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.example.democatalog.provider
+Require-Bundle: org.eclipse.core.runtime,
+ org.example.democatalog;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.example.democatalog.edit/build.properties b/org.example.democatalog.edit/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a3c4e32afd5c06df8bd4f0d371e56479e0822559
--- /dev/null
+++ b/org.example.democatalog.edit/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin/
diff --git a/org.example.democatalog.edit/icons/full/obj16/Boiler.gif b/org.example.democatalog.edit/icons/full/obj16/Boiler.gif
new file mode 100644
index 0000000000000000000000000000000000000000..420eee177528d9bd6d862c38d2a66c14835a6140
Binary files /dev/null and b/org.example.democatalog.edit/icons/full/obj16/Boiler.gif differ
diff --git a/org.example.democatalog.edit/icons/full/obj16/ChemicalDevice.gif b/org.example.democatalog.edit/icons/full/obj16/ChemicalDevice.gif
new file mode 100644
index 0000000000000000000000000000000000000000..8a5c70cbd74c87cb3b1df383e0c242ede4660c3b
Binary files /dev/null and b/org.example.democatalog.edit/icons/full/obj16/ChemicalDevice.gif differ
diff --git a/org.example.democatalog.edit/icons/full/obj16/CombinedHeatPower.gif b/org.example.democatalog.edit/icons/full/obj16/CombinedHeatPower.gif
new file mode 100644
index 0000000000000000000000000000000000000000..db7414e937292c344d6fd0d0805085b67650f5c8
Binary files /dev/null and b/org.example.democatalog.edit/icons/full/obj16/CombinedHeatPower.gif differ
diff --git a/org.example.democatalog.edit/icons/full/obj16/EnergyComponentCatalog.gif b/org.example.democatalog.edit/icons/full/obj16/EnergyComponentCatalog.gif
new file mode 100644
index 0000000000000000000000000000000000000000..338fb8d9a728b682e398849d2038959d01b4e0f2
Binary files /dev/null and b/org.example.democatalog.edit/icons/full/obj16/EnergyComponentCatalog.gif differ
diff --git a/org.example.democatalog.edit/icons/full/obj16/Inverter.gif b/org.example.democatalog.edit/icons/full/obj16/Inverter.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c4a8af418445186dec6bb4f750c13a832181fe76
Binary files /dev/null and b/org.example.democatalog.edit/icons/full/obj16/Inverter.gif differ
diff --git a/org.example.democatalog.edit/icons/full/obj16/Manufacturer.gif b/org.example.democatalog.edit/icons/full/obj16/Manufacturer.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c3370c7ddd5e0817a59de6fd45ad0993b52abe28
Binary files /dev/null and b/org.example.democatalog.edit/icons/full/obj16/Manufacturer.gif differ
diff --git a/org.example.democatalog.edit/icons/full/obj16/SolarPanel.gif b/org.example.democatalog.edit/icons/full/obj16/SolarPanel.gif
new file mode 100644
index 0000000000000000000000000000000000000000..ef56c140853105ca812564e9b12a76413c8c3fb9
Binary files /dev/null and b/org.example.democatalog.edit/icons/full/obj16/SolarPanel.gif differ
diff --git a/org.example.democatalog.edit/plugin.properties b/org.example.democatalog.edit/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..66f7d5079ae7f00de85e213f65629969a95eb637
--- /dev/null
+++ b/org.example.democatalog.edit/plugin.properties
@@ -0,0 +1,49 @@
+#
+
+pluginName = org.example.democatalog Edit Support
+providerName = www.example.org
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_EnergyComponentCatalog_type = Energy Component Catalog
+_UI_Boiler_type = Boiler
+_UI_CombinedHeatPower_type = Combined Heat Power
+_UI_SolarPanel_type = Solar Panel
+_UI_Inverter_type = Inverter
+_UI_Manufacturer_type = Manufacturer
+_UI_ChemicalDevice_type = Chemical Device
+_UI_EnergyComponent_type = Energy Component
+_UI_ElectricalDevice_type = Electrical Device
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_EnergyComponentCatalog_author_feature = Author
+_UI_EnergyComponentCatalog_boilers_feature = Boilers
+_UI_EnergyComponentCatalog_chps_feature = Chps
+_UI_EnergyComponentCatalog_solarPanels_feature = Solar Panels
+_UI_EnergyComponentCatalog_inverters_feature = Inverters
+_UI_EnergyComponentCatalog_manufacturers_feature = Manufacturers
+_UI_Boiler_boilerType_feature = Boiler Type
+_UI_CombinedHeatPower_thermalEfficiency_feature = Thermal Efficiency
+_UI_SolarPanel_mppVoltage_feature = Mpp Voltage
+_UI_SolarPanel_mppCurrent_feature = Mpp Current
+_UI_Inverter_maxDCVoltage_feature = Max DC Voltage
+_UI_Inverter_macDCCurrent_feature = Mac DC Current
+_UI_Manufacturer_name_feature = Name
+_UI_ChemicalDevice_installedThermalPower_feature = Installed Thermal Power
+_UI_EnergyComponent_modelName_feature = Model Name
+_UI_EnergyComponent_revisionYear_feature = Revision Year
+_UI_EnergyComponent_producedBy_feature = Produced By
+_UI_ElectricalDevice_nominalPower_feature = Nominal Power
+_UI_Unknown_feature = Unspecified
+
+_UI_BoilerType_LowTemperature_literal = LowTemperature
+_UI_BoilerType_Condensing_literal = Condensing
diff --git a/org.example.democatalog.edit/plugin.xml b/org.example.democatalog.edit/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..33d1b03f8c1c2eaa59d9bb2aa58dc64e3f28e914
--- /dev/null
+++ b/org.example.democatalog.edit/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <!-- @generated democatalog -->
+      <factory
+            uri="http://example.org/democatalog"
+            class="org.example.democatalog.provider.DemocatalogItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+</plugin>
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/BoilerItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/BoilerItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d8212faa5006397d1fc35e575589919e0dbae79
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/BoilerItemProvider.java
@@ -0,0 +1,133 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.Boiler;
+import org.example.democatalog.DemocatalogPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.Boiler} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class BoilerItemProvider extends ChemicalDeviceItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BoilerItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addBoilerTypePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Boiler Type feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addBoilerTypePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_Boiler_boilerType_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_Boiler_boilerType_feature",
+								"_UI_Boiler_type"),
+						DemocatalogPackage.Literals.BOILER__BOILER_TYPE, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns Boiler.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Boiler"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Boiler) object).getModelName();
+		return label == null || label.length() == 0 ? getString("_UI_Boiler_type")
+				: getString("_UI_Boiler_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Boiler.class)) {
+		case DemocatalogPackage.BOILER__BOILER_TYPE:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ChemicalDeviceItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ChemicalDeviceItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..32d375f147800890ed1e7ffc506704c6ccd94001
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ChemicalDeviceItemProvider.java
@@ -0,0 +1,133 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.ChemicalDevice;
+import org.example.democatalog.DemocatalogPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.ChemicalDevice} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ChemicalDeviceItemProvider extends EnergyComponentItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ChemicalDeviceItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addInstalledThermalPowerPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Installed Thermal Power feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addInstalledThermalPowerPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_ChemicalDevice_installedThermalPower_feature"),
+						getString("_UI_PropertyDescriptor_description",
+								"_UI_ChemicalDevice_installedThermalPower_feature", "_UI_ChemicalDevice_type"),
+						DemocatalogPackage.Literals.CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER, true, false, false,
+						ItemPropertyDescriptor.REAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns ChemicalDevice.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ChemicalDevice"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((ChemicalDevice) object).getModelName();
+		return label == null || label.length() == 0 ? getString("_UI_ChemicalDevice_type")
+				: getString("_UI_ChemicalDevice_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(ChemicalDevice.class)) {
+		case DemocatalogPackage.CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/CombinedHeatPowerItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/CombinedHeatPowerItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8505eb03efdde7091ad6a4c266b4453dd3b7a4f
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/CombinedHeatPowerItemProvider.java
@@ -0,0 +1,133 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.CombinedHeatPower;
+import org.example.democatalog.DemocatalogPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.CombinedHeatPower} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CombinedHeatPowerItemProvider extends ChemicalDeviceItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CombinedHeatPowerItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addThermalEfficiencyPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Thermal Efficiency feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addThermalEfficiencyPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_CombinedHeatPower_thermalEfficiency_feature"),
+						getString("_UI_PropertyDescriptor_description",
+								"_UI_CombinedHeatPower_thermalEfficiency_feature", "_UI_CombinedHeatPower_type"),
+						DemocatalogPackage.Literals.COMBINED_HEAT_POWER__THERMAL_EFFICIENCY, true, false, false,
+						ItemPropertyDescriptor.REAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns CombinedHeatPower.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/CombinedHeatPower"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((CombinedHeatPower) object).getModelName();
+		return label == null || label.length() == 0 ? getString("_UI_CombinedHeatPower_type")
+				: getString("_UI_CombinedHeatPower_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(CombinedHeatPower.class)) {
+		case DemocatalogPackage.COMBINED_HEAT_POWER__THERMAL_EFFICIENCY:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/DemocatalogEditPlugin.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/DemocatalogEditPlugin.java
new file mode 100644
index 0000000000000000000000000000000000000000..b080cb2d1faa5537e3a812a61c0cabace5b81f26
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/DemocatalogEditPlugin.java
@@ -0,0 +1,87 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Democatalog edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class DemocatalogEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final DemocatalogEditPlugin INSTANCE = new DemocatalogEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DemocatalogEditPlugin() {
+		super(new ResourceLocator[] {});
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/DemocatalogItemProviderAdapterFactory.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/DemocatalogItemProviderAdapterFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..7824a2c68df08af2322956326d6d50539df6a167
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/DemocatalogItemProviderAdapterFactory.java
@@ -0,0 +1,326 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.example.democatalog.util.DemocatalogAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DemocatalogItemProviderAdapterFactory extends DemocatalogAdapterFactory
+		implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DemocatalogItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.example.democatalog.EnergyComponentCatalog} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EnergyComponentCatalogItemProvider energyComponentCatalogItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.example.democatalog.EnergyComponentCatalog}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createEnergyComponentCatalogAdapter() {
+		if (energyComponentCatalogItemProvider == null) {
+			energyComponentCatalogItemProvider = new EnergyComponentCatalogItemProvider(this);
+		}
+
+		return energyComponentCatalogItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.example.democatalog.Boiler} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected BoilerItemProvider boilerItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.example.democatalog.Boiler}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createBoilerAdapter() {
+		if (boilerItemProvider == null) {
+			boilerItemProvider = new BoilerItemProvider(this);
+		}
+
+		return boilerItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.example.democatalog.CombinedHeatPower} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CombinedHeatPowerItemProvider combinedHeatPowerItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.example.democatalog.CombinedHeatPower}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createCombinedHeatPowerAdapter() {
+		if (combinedHeatPowerItemProvider == null) {
+			combinedHeatPowerItemProvider = new CombinedHeatPowerItemProvider(this);
+		}
+
+		return combinedHeatPowerItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.example.democatalog.SolarPanel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SolarPanelItemProvider solarPanelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.example.democatalog.SolarPanel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSolarPanelAdapter() {
+		if (solarPanelItemProvider == null) {
+			solarPanelItemProvider = new SolarPanelItemProvider(this);
+		}
+
+		return solarPanelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.example.democatalog.Inverter} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected InverterItemProvider inverterItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.example.democatalog.Inverter}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createInverterAdapter() {
+		if (inverterItemProvider == null) {
+			inverterItemProvider = new InverterItemProvider(this);
+		}
+
+		return inverterItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.example.democatalog.Manufacturer} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ManufacturerItemProvider manufacturerItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.example.democatalog.Manufacturer}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createManufacturerAdapter() {
+		if (manufacturerItemProvider == null) {
+			manufacturerItemProvider = new ManufacturerItemProvider(this);
+		}
+
+		return manufacturerItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>) type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (energyComponentCatalogItemProvider != null)
+			energyComponentCatalogItemProvider.dispose();
+		if (boilerItemProvider != null)
+			boilerItemProvider.dispose();
+		if (combinedHeatPowerItemProvider != null)
+			combinedHeatPowerItemProvider.dispose();
+		if (solarPanelItemProvider != null)
+			solarPanelItemProvider.dispose();
+		if (inverterItemProvider != null)
+			inverterItemProvider.dispose();
+		if (manufacturerItemProvider != null)
+			manufacturerItemProvider.dispose();
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ElectricalDeviceItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ElectricalDeviceItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..762bfb65c5c635a58128d6bd9a12790af2815cda
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ElectricalDeviceItemProvider.java
@@ -0,0 +1,122 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.ElectricalDevice;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.ElectricalDevice} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ElectricalDeviceItemProvider extends EnergyComponentItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ElectricalDeviceItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNominalPowerPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Nominal Power feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNominalPowerPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+				((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+				getString("_UI_ElectricalDevice_nominalPower_feature"),
+				getString("_UI_PropertyDescriptor_description", "_UI_ElectricalDevice_nominalPower_feature",
+						"_UI_ElectricalDevice_type"),
+				DemocatalogPackage.Literals.ELECTRICAL_DEVICE__NOMINAL_POWER, true, false, false,
+				ItemPropertyDescriptor.REAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((ElectricalDevice) object).getModelName();
+		return label == null || label.length() == 0 ? getString("_UI_ElectricalDevice_type")
+				: getString("_UI_ElectricalDevice_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(ElectricalDevice.class)) {
+		case DemocatalogPackage.ELECTRICAL_DEVICE__NOMINAL_POWER:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/EnergyComponentCatalogItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/EnergyComponentCatalogItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..aef1af3dcaa3e027ab31ad06e0fcb78bcffdf7f1
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/EnergyComponentCatalogItemProvider.java
@@ -0,0 +1,213 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.DemocatalogFactory;
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.EnergyComponentCatalog;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.EnergyComponentCatalog} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EnergyComponentCatalogItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EnergyComponentCatalogItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addAuthorPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Author feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAuthorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_EnergyComponentCatalog_author_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_EnergyComponentCatalog_author_feature",
+								"_UI_EnergyComponentCatalog_type"),
+						DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__AUTHOR, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__BOILERS);
+			childrenFeatures.add(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__CHPS);
+			childrenFeatures.add(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS);
+			childrenFeatures.add(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__INVERTERS);
+			childrenFeatures.add(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__MANUFACTURERS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns EnergyComponentCatalog.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/EnergyComponentCatalog"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((EnergyComponentCatalog) object).getAuthor();
+		return label == null || label.length() == 0 ? getString("_UI_EnergyComponentCatalog_type")
+				: getString("_UI_EnergyComponentCatalog_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(EnergyComponentCatalog.class)) {
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__AUTHOR:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__BOILERS:
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__CHPS:
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS:
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__INVERTERS:
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__MANUFACTURERS:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__BOILERS,
+				DemocatalogFactory.eINSTANCE.createBoiler()));
+
+		newChildDescriptors.add(createChildParameter(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__CHPS,
+				DemocatalogFactory.eINSTANCE.createCombinedHeatPower()));
+
+		newChildDescriptors.add(createChildParameter(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS,
+				DemocatalogFactory.eINSTANCE.createSolarPanel()));
+
+		newChildDescriptors.add(createChildParameter(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__INVERTERS,
+				DemocatalogFactory.eINSTANCE.createInverter()));
+
+		newChildDescriptors
+				.add(createChildParameter(DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG__MANUFACTURERS,
+						DemocatalogFactory.eINSTANCE.createManufacturer()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DemocatalogEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/EnergyComponentItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/EnergyComponentItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d38c28fb47a061deb1e5ddd52ea690d5cd34b49
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/EnergyComponentItemProvider.java
@@ -0,0 +1,177 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.EnergyComponent;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.EnergyComponent} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EnergyComponentItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EnergyComponentItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addModelNamePropertyDescriptor(object);
+			addRevisionYearPropertyDescriptor(object);
+			addProducedByPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Model Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModelNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_EnergyComponent_modelName_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_EnergyComponent_modelName_feature",
+								"_UI_EnergyComponent_type"),
+						DemocatalogPackage.Literals.ENERGY_COMPONENT__MODEL_NAME, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Revision Year feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRevisionYearPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(
+				((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+				getString("_UI_EnergyComponent_revisionYear_feature"),
+				getString("_UI_PropertyDescriptor_description", "_UI_EnergyComponent_revisionYear_feature",
+						"_UI_EnergyComponent_type"),
+				DemocatalogPackage.Literals.ENERGY_COMPONENT__REVISION_YEAR, true, false, false,
+				ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Produced By feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addProducedByPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_EnergyComponent_producedBy_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_EnergyComponent_producedBy_feature",
+								"_UI_EnergyComponent_type"),
+						DemocatalogPackage.Literals.ENERGY_COMPONENT__PRODUCED_BY, true, false, true, null, null,
+						null));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((EnergyComponent) object).getModelName();
+		return label == null || label.length() == 0 ? getString("_UI_EnergyComponent_type")
+				: getString("_UI_EnergyComponent_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(EnergyComponent.class)) {
+		case DemocatalogPackage.ENERGY_COMPONENT__MODEL_NAME:
+		case DemocatalogPackage.ENERGY_COMPONENT__REVISION_YEAR:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DemocatalogEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/InverterItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/InverterItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7e86b9d2316df77259e99322880b112b069022b
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/InverterItemProvider.java
@@ -0,0 +1,151 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.Inverter;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.Inverter} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InverterItemProvider extends ElectricalDeviceItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public InverterItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addMaxDCVoltagePropertyDescriptor(object);
+			addMacDCCurrentPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Max DC Voltage feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMaxDCVoltagePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_Inverter_maxDCVoltage_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_Inverter_maxDCVoltage_feature",
+								"_UI_Inverter_type"),
+						DemocatalogPackage.Literals.INVERTER__MAX_DC_VOLTAGE, true, false, false,
+						ItemPropertyDescriptor.REAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Mac DC Current feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMacDCCurrentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_Inverter_macDCCurrent_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_Inverter_macDCCurrent_feature",
+								"_UI_Inverter_type"),
+						DemocatalogPackage.Literals.INVERTER__MAC_DC_CURRENT, true, false, false,
+						ItemPropertyDescriptor.REAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns Inverter.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Inverter"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Inverter) object).getModelName();
+		return label == null || label.length() == 0 ? getString("_UI_Inverter_type")
+				: getString("_UI_Inverter_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Inverter.class)) {
+		case DemocatalogPackage.INVERTER__MAX_DC_VOLTAGE:
+		case DemocatalogPackage.INVERTER__MAC_DC_CURRENT:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ManufacturerItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ManufacturerItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..cec8ba2d3a1c26447c7899d504c5de790ade0f46
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/ManufacturerItemProvider.java
@@ -0,0 +1,153 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.Manufacturer;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.Manufacturer} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ManufacturerItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ManufacturerItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNamePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_Manufacturer_name_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_Manufacturer_name_feature",
+								"_UI_Manufacturer_type"),
+						DemocatalogPackage.Literals.MANUFACTURER__NAME, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns Manufacturer.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Manufacturer"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Manufacturer) object).getName();
+		return label == null || label.length() == 0 ? getString("_UI_Manufacturer_type")
+				: getString("_UI_Manufacturer_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Manufacturer.class)) {
+		case DemocatalogPackage.MANUFACTURER__NAME:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DemocatalogEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/SolarPanelItemProvider.java b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/SolarPanelItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b424dc905b7f84eb98ddcc72d89c25c08add816
--- /dev/null
+++ b/org.example.democatalog.edit/src-gen/org/example/democatalog/provider/SolarPanelItemProvider.java
@@ -0,0 +1,151 @@
+/**
+ */
+package org.example.democatalog.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.SolarPanel;
+
+/**
+ * This is the item provider adapter for a {@link org.example.democatalog.SolarPanel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SolarPanelItemProvider extends ElectricalDeviceItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SolarPanelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addMppVoltagePropertyDescriptor(object);
+			addMppCurrentPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Mpp Voltage feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMppVoltagePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_SolarPanel_mppVoltage_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_SolarPanel_mppVoltage_feature",
+								"_UI_SolarPanel_type"),
+						DemocatalogPackage.Literals.SOLAR_PANEL__MPP_VOLTAGE, true, false, false,
+						ItemPropertyDescriptor.REAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Mpp Current feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMppCurrentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_SolarPanel_mppCurrent_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_SolarPanel_mppCurrent_feature",
+								"_UI_SolarPanel_type"),
+						DemocatalogPackage.Literals.SOLAR_PANEL__MPP_CURRENT, true, false, false,
+						ItemPropertyDescriptor.REAL_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns SolarPanel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/SolarPanel"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((SolarPanel) object).getModelName();
+		return label == null || label.length() == 0 ? getString("_UI_SolarPanel_type")
+				: getString("_UI_SolarPanel_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SolarPanel.class)) {
+		case DemocatalogPackage.SOLAR_PANEL__MPP_VOLTAGE:
+		case DemocatalogPackage.SOLAR_PANEL__MPP_CURRENT:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.example.democatalog/.classpath b/org.example.democatalog/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..9ecc2e8edf1b52afa539ab459e92e38b3eadc330
--- /dev/null
+++ b/org.example.democatalog/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.example.democatalog/.project b/org.example.democatalog/.project
new file mode 100644
index 0000000000000000000000000000000000000000..07aa22faa151e450999b5b33d8cae08e618f7f36
--- /dev/null
+++ b/org.example.democatalog/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.example.democatalog</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.sirius.nature.modelingproject</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.example.democatalog/META-INF/MANIFEST.MF b/org.example.democatalog/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..fe3c3bf71f172acafbe9b05e28f0d6dfbe58206c
--- /dev/null
+++ b/org.example.democatalog/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.example.democatalog;singleton:=true
+Automatic-Module-Name: org.example.democatalog
+Bundle-Version: 0.1.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.example.democatalog,
+ org.example.democatalog.impl,
+ org.example.democatalog.util
+Require-Bundle: org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
diff --git a/org.example.democatalog/build.properties b/org.example.democatalog/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..697ca964527a545764d3a69847c122b371257973
--- /dev/null
+++ b/org.example.democatalog/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin/
diff --git a/org.example.democatalog/model/democatalog.aird b/org.example.democatalog/model/democatalog.aird
new file mode 100644
index 0000000000000000000000000000000000000000..998abe4e04f5f6bc534a4147611ec19006f2dde8
--- /dev/null
+++ b/org.example.democatalog/model/democatalog.aird
@@ -0,0 +1,767 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
+  <viewpoint:DAnalysis uid="_HZnjoCHUEeuLPpz77IfmqA" selectedViews="_HikEQCHUEeuLPpz77IfmqA" version="14.3.1.202003261200">
+    <semanticResources>democatalog.ecore</semanticResources>
+    <semanticResources>democatalog.genmodel</semanticResources>
+    <ownedViews xmi:type="viewpoint:DView" uid="_HikEQCHUEeuLPpz77IfmqA">
+      <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="_HkPfQCHUEeuLPpz77IfmqA" name="democatalog" repPath="#_Hji7sCHUEeuLPpz77IfmqA" changeId="19235c9b-0cc2-4f1a-9aa8-7069bd7e5fa2">
+        <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="democatalog.ecore#/"/>
+      </ownedRepresentationDescriptors>
+    </ownedViews>
+  </viewpoint:DAnalysis>
+  <diagram:DSemanticDiagram uid="_Hji7sCHUEeuLPpz77IfmqA">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_HkiaMCHUEeuLPpz77IfmqA" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_HkiaMSHUEeuLPpz77IfmqA" type="Sirius" element="_Hji7sCHUEeuLPpz77IfmqA" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_b6U2gCHzEeuUrYII4OYxLg" type="2003" element="_b6BUgCHzEeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_b6XSwCHzEeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_b6Yg4CHzEeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_eyq8oCHzEeuUrYII4OYxLg" type="3010" element="_eyjA0CHzEeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_eyq8oSHzEeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_eyq8oiHzEeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_b6Yg4SHzEeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_b6Yg4iHzEeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_b6U2gSHzEeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b6U2giHzEeuUrYII4OYxLg" x="323" y="28" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_i4KyYCHzEeuUrYII4OYxLg" type="2003" element="_i4Gg8CHzEeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_i4LZcCHzEeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_i4LZcSHzEeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_lQc4YCHzEeuUrYII4OYxLg" type="3010" element="_lQZ1ECHzEeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_lQc4YSHzEeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_lQc4YiHzEeuUrYII4OYxLg"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_lhN4QCHzEeuUrYII4OYxLg" type="3010" element="_lhK08CHzEeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_lhN4QSHzEeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_lhN4QiHzEeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_i4LZciHzEeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_i4LZcyHzEeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_i4KyYSHzEeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i4KyYiHzEeuUrYII4OYxLg" x="53" y="28" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_1jykACHzEeuUrYII4OYxLg" type="2003" element="_1ju5oCHzEeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_1jzLECHzEeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_1jzLESHzEeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_4jpnYCHzEeuUrYII4OYxLg" type="3010" element="_4jl9ACHzEeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_4jpnYSHzEeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_4jpnYiHzEeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_1jzLEiHzEeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_1jzLEyHzEeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_1jykASHzEeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1jykAiHzEeuUrYII4OYxLg" x="21" y="188" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_9__UQCHzEeuUrYII4OYxLg" type="2003" element="_9_8Q8CHzEeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_9__UQyHzEeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_9__URCHzEeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_Mbc4QCH0EeuUrYII4OYxLg" type="3010" element="_MbZ08CH0EeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_Mbc4QSH0EeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_Mbc4QiH0EeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_9__URSHzEeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_9__URiHzEeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_9__UQSHzEeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9__UQiHzEeuUrYII4OYxLg" x="172" y="188" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_CxCocCH0EeuUrYII4OYxLg" type="2003" element="_Cw_lICH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_CxCocyH0EeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_CxDPgCH0EeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_SYAjACIEEeuUrYII4OYxLg" type="3010" element="_SXzusCIEEeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_SYAjASIEEeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_SYAjAiIEEeuUrYII4OYxLg"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_WL2oECIEEeuUrYII4OYxLg" type="3010" element="_WLv6YCIEEeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_WL2oESIEEeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_WL2oEiIEEeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_CxDPgSH0EeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_CxDPgiH0EeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_CxCocSH0EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CxCociH0EeuUrYII4OYxLg" x="323" y="188" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_C8fqgCH0EeuUrYII4OYxLg" type="2003" element="_C8cnMCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_C8gRkCH0EeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_C8gRkSH0EeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_h6GX4CIEEeuUrYII4OYxLg" type="3010" element="_h6CGcCIEEeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_h6GX4SIEEeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_h6GX4iIEEeuUrYII4OYxLg"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_n-YOgCIEEeuUrYII4OYxLg" type="3010" element="_n-UkICIEEeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_n-YOgSIEEeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_n-YOgiIEEeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_C8gRkiH0EeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_C8gRkyH0EeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_C8fqgSH0EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_C8fqgiH0EeuUrYII4OYxLg" x="474" y="188" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_DG_DQCH0EeuUrYII4OYxLg" type="2003" element="_DG7Y4CH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_DG_DQyH0EeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_DG_DRCH0EeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_yuswwCH0EeuUrYII4OYxLg" type="3010" element="_yuptcCH0EeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_yuswwSH0EeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_yuswwiH0EeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_DG_DRSH0EeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_DG_DRiH0EeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_DG_DQSH0EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DG_DQiH0EeuUrYII4OYxLg" x="625" y="188" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_ohBb0CH0EeuUrYII4OYxLg" type="2003" element="_og9xcCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_ohBb0yH0EeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_ohBb1CH0EeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_sD5ssCH0EeuUrYII4OYxLg" type="3010" element="_sD2pYCH0EeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_sD5ssSH0EeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_sD5ssiH0EeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_ohBb1SH0EeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_ohBb1iH0EeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_ohBb0SH0EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ohBb0iH0EeuUrYII4OYxLg" x="100" y="292" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="__ZYToCH0EeuUrYII4OYxLg" type="2003" element="__ZVQUCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="__ZYToyH0EeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="__ZY6sCH0EeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_BZX1cCH1EeuUrYII4OYxLg" type="3010" element="_BZULECH1EeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_BZX1cSH1EeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_BZX1ciH1EeuUrYII4OYxLg"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_DpPmUCH1EeuUrYII4OYxLg" type="3010" element="_DpL78CH1EeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_DpPmUSH1EeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_DpPmUiH1EeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="__ZY6sSH0EeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="__ZY6siH0EeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="__ZYToSH0EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="__ZYToiH0EeuUrYII4OYxLg" x="252" y="396" width="135" height="71"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_OINfkCH1EeuUrYII4OYxLg" type="2003" element="_OIJ1MCH1EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_OINfkyH1EeuUrYII4OYxLg" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_OINflCH1EeuUrYII4OYxLg" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_Tc3QFiH1EeuUrYII4OYxLg" type="3010" element="_TczlsCH1EeuUrYII4OYxLg">
+              <styles xmi:type="notation:FontStyle" xmi:id="_Tc3QFyH1EeuUrYII4OYxLg" fontColor="2697711" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_Tc3QGCH1EeuUrYII4OYxLg"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_OINflSH1EeuUrYII4OYxLg"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_OINfliH1EeuUrYII4OYxLg"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_OINfkSH1EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OINfkiH1EeuUrYII4OYxLg" x="400" y="292" width="135" height="71"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_HkiaMiHUEeuLPpz77IfmqA"/>
+        <edges xmi:type="notation:Edge" xmi:id="_HQL30CH1EeuUrYII4OYxLg" type="4001" element="_HQGYQCH1EeuUrYII4OYxLg" source="__ZYToCH0EeuUrYII4OYxLg" target="_DG_DQCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_HQL31CH1EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HQL31SH1EeuUrYII4OYxLg" x="-61" y="-9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_HQL31iH1EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HQL31yH1EeuUrYII4OYxLg" x="30" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_HQL32CH1EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HQL32SH1EeuUrYII4OYxLg" x="-1" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_HQL30SH1EeuUrYII4OYxLg" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_HQL30iH1EeuUrYII4OYxLg" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HQL30yH1EeuUrYII4OYxLg" points="[15, -26, -272, 144]$[321, -26, 34, 144]$[321, -199, 34, -29]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HQL32iH1EeuUrYII4OYxLg" id="(0.8872180451127819,0.8695652173913043)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HQL32yH1EeuUrYII4OYxLg" id="(0.24060150375939848,1.4202898550724639)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_8No68CH1EeuUrYII4OYxLg" type="4001" element="_8Nl3oCH1EeuUrYII4OYxLg" source="_1jykACHzEeuUrYII4OYxLg" target="_ohBb0CH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_8NpiACH1EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8NpiASH1EeuUrYII4OYxLg" x="4" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_8NpiAiH1EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8NpiAyH1EeuUrYII4OYxLg" x="13" y="-1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_8NpiBCH1EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8NpiBSH1EeuUrYII4OYxLg" x="-9" y="3"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_8No68SH1EeuUrYII4OYxLg" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_8No68iH1EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_8No68yH1EeuUrYII4OYxLg" points="[0, 2, -75, -69]$[0, 21, -75, -50]$[76, 21, 1, -50]$[76, 37, 1, -34]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_8NpiBiH1EeuUrYII4OYxLg" id="(0.5263157894736842,0.9710144927536232)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_8NpiByH1EeuUrYII4OYxLg" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_81zHICH1EeuUrYII4OYxLg" type="4001" element="_81wD1iH1EeuUrYII4OYxLg" source="_ohBb0CH0EeuUrYII4OYxLg" target="__ZYToCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_81zHJCH1EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_81zHJSH1EeuUrYII4OYxLg" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_81zHJiH1EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_81zHJyH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_81zHKCH1EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_81zHKSH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_81zHISH1EeuUrYII4OYxLg" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_81zHIiH1EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_81zHIyH1EeuUrYII4OYxLg" points="[0, 0, -152, -55]$[152, 55, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_81zHKiH1EeuUrYII4OYxLg" id="(0.518796992481203,0.9710144927536232)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_81zuMCH1EeuUrYII4OYxLg" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_9YhZsCH1EeuUrYII4OYxLg" type="4001" element="_9YdvUCH1EeuUrYII4OYxLg" source="_9__UQCHzEeuUrYII4OYxLg" target="_ohBb0CH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_9YhZtCH1EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9YhZtSH1EeuUrYII4OYxLg" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_9YhZtiH1EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9YhZtyH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_9YhZuCH1EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9YhZuSH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_9YhZsSH1EeuUrYII4OYxLg" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_9YhZsiH1EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9YhZsyH1EeuUrYII4OYxLg" points="[0, 0, 54, -51]$[-54, 51, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9YhZuiH1EeuUrYII4OYxLg" id="(0.5037593984962406,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9YhZuyH1EeuUrYII4OYxLg" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_94RQwCH1EeuUrYII4OYxLg" type="4001" element="_94ONcCH1EeuUrYII4OYxLg" source="_CxCocCH0EeuUrYII4OYxLg" target="_OINfkCH1EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_94RQxCH1EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_94RQxSH1EeuUrYII4OYxLg" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_94RQxiH1EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_94RQxyH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_94RQyCH1EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_94RQySH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_94RQwSH1EeuUrYII4OYxLg" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_94RQwiH1EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_94RQwyH1EeuUrYII4OYxLg" points="[0, 0, -48, -51]$[48, 51, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_94RQyiH1EeuUrYII4OYxLg" id="(0.518796992481203,0.9710144927536232)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_94RQyyH1EeuUrYII4OYxLg" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_-QTWQCH1EeuUrYII4OYxLg" type="4001" element="_-QPr-CH1EeuUrYII4OYxLg" source="_C8fqgCH0EeuUrYII4OYxLg" target="_OINfkCH1EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_-QTWRCH1EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-QTWRSH1EeuUrYII4OYxLg" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_-QTWRiH1EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-QTWRyH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_-QTWSCH1EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-QTWSSH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_-QTWQSH1EeuUrYII4OYxLg" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_-QTWQiH1EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-QTWQyH1EeuUrYII4OYxLg" points="[0, 0, 67, -51]$[-67, 51, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-QTWSiH1EeuUrYII4OYxLg" id="(0.5037593984962406,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-QTWSyH1EeuUrYII4OYxLg" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="__JhdQCH1EeuUrYII4OYxLg" type="4001" element="__Jdy9SH1EeuUrYII4OYxLg" source="_OINfkCH1EeuUrYII4OYxLg" target="__ZYToCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="__JhdRCH1EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="__JhdRSH1EeuUrYII4OYxLg" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="__JhdRiH1EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="__JhdRyH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="__JhdSCH1EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="__JhdSSH1EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="__JhdQSH1EeuUrYII4OYxLg" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="__JhdQiH1EeuUrYII4OYxLg" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__JhdQyH1EeuUrYII4OYxLg" points="[0, 0, 165, -55]$[-165, 55, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__JhdSiH1EeuUrYII4OYxLg" id="(0.5263157894736842,0.9710144927536232)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__JhdSyH1EeuUrYII4OYxLg" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_ZBGfQCH2EeuUrYII4OYxLg" type="4001" element="_ZBBmwCH2EeuUrYII4OYxLg" source="_b6U2gCHzEeuUrYII4OYxLg" target="_1jykACHzEeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_ZBGfRCH2EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZBGfRSH2EeuUrYII4OYxLg" x="47" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_ZBGfRiH2EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZBGfRyH2EeuUrYII4OYxLg" x="47" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_ZBGfSCH2EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZBGfSSH2EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_ZBGfQSH2EeuUrYII4OYxLg" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_ZBGfQiH2EeuUrYII4OYxLg" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZBGfQyH2EeuUrYII4OYxLg" points="[-27, 1, 232, -91]$[-27, 24, 232, -68]$[-256, 24, 3, -68]$[-256, 92, 3, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZBGfSiH2EeuUrYII4OYxLg" id="(0.39097744360902253,0.9855072463768116)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZBGfSyH2EeuUrYII4OYxLg" id="(0.7142857142857143,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_caCxACH2EeuUrYII4OYxLg" type="4001" element="_cZ-fliH2EeuUrYII4OYxLg" source="_b6U2gCHzEeuUrYII4OYxLg" target="_9__UQCHzEeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_caCxBCH2EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_caCxBSH2EeuUrYII4OYxLg" x="15" y="-9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_caCxBiH2EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_caCxByH2EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_caCxCCH2EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_caCxCSH2EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_caCxASH2EeuUrYII4OYxLg" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_caCxAiH2EeuUrYII4OYxLg" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_caCxAyH2EeuUrYII4OYxLg" points="[-4, 0, 116, -91]$[-4, 43, 116, -48]$[-120, 43, 0, -48]$[-120, 91, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_caDYECH2EeuUrYII4OYxLg" id="(0.3684210526315789,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_caDYESH2EeuUrYII4OYxLg" id="(0.6015037593984962,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_dAXKICH2EeuUrYII4OYxLg" type="4001" element="_dATfxiH2EeuUrYII4OYxLg" source="_b6U2gCHzEeuUrYII4OYxLg" target="_CxCocCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_dAXKJCH2EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dAXKJSH2EeuUrYII4OYxLg" x="15" y="-14"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_dAXxMCH2EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dAXxMSH2EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_dAXxMiH2EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dAXxMyH2EeuUrYII4OYxLg" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_dAXKISH2EeuUrYII4OYxLg" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_dAXKIiH2EeuUrYII4OYxLg" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dAXKIyH2EeuUrYII4OYxLg" points="[-27, 0, -27, -91]$[-27, 91, -27, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dAXxNCH2EeuUrYII4OYxLg" id="(0.6992481203007519,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dAXxNSH2EeuUrYII4OYxLg" id="(0.6992481203007519,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_dcsg0CH2EeuUrYII4OYxLg" type="4001" element="_dcoPciH2EeuUrYII4OYxLg" source="_b6U2gCHzEeuUrYII4OYxLg" target="_C8fqgCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_dcsg1CH2EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dcsg1SH2EeuUrYII4OYxLg" x="12" y="9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_dcsg1iH2EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dcsg1yH2EeuUrYII4OYxLg" x="18" y="-77"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_dcsg2CH2EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dcsg2SH2EeuUrYII4OYxLg" x="-2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_dcsg0SH2EeuUrYII4OYxLg" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_dcsg0iH2EeuUrYII4OYxLg" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dcsg0yH2EeuUrYII4OYxLg" points="[-15, 0, -148, -91]$[-15, 39, -148, -52]$[105, 39, -28, -52]$[105, 91, -28, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dcsg2iH2EeuUrYII4OYxLg" id="(0.7819548872180451,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dcsg2yH2EeuUrYII4OYxLg" id="(0.6466165413533834,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fG4xwCH2EeuUrYII4OYxLg" type="4001" element="_fG0gbiH2EeuUrYII4OYxLg" source="_b6U2gCHzEeuUrYII4OYxLg" target="_DG_DQCH0EeuUrYII4OYxLg">
+          <children xmi:type="notation:Node" xmi:id="_fG4xxCH2EeuUrYII4OYxLg" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fG4xxSH2EeuUrYII4OYxLg" x="62" y="9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fG4xxiH2EeuUrYII4OYxLg" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fG4xxyH2EeuUrYII4OYxLg" x="55" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fG4xyCH2EeuUrYII4OYxLg" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fG4xySH2EeuUrYII4OYxLg" x="-7" y="5"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fG4xwSH2EeuUrYII4OYxLg" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fG4xwiH2EeuUrYII4OYxLg" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fG4xwyH2EeuUrYII4OYxLg" points="[-24, 61, -272, -91]$[-24, 84, -272, -68]$[235, 84, -13, -68]$[235, 152, -13, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fG4xyiH2EeuUrYII4OYxLg" id="(1.0,0.11594202898550725)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fG4xyyH2EeuUrYII4OYxLg" id="(0.5939849624060151,0.0)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_HlutACHUEeuLPpz77IfmqA" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_HlvUECHUEeuLPpz77IfmqA">
+        <computedStyleDescriptions xmi:type="style:BundledImageDescription" xmi:id="_hEX5gCHzEeuUrYII4OYxLg" labelExpression="service:render" labelAlignment="LEFT" tooltipExpression="service:renderTooltip" sizeComputationExpression="1">
+          <borderColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <labelFormat>bold</labelFormat>
+          <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <color xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_KUpuZiH1EeuUrYII4OYxLg" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_KUpuZyH1EeuUrYII4OYxLg" showIcon="false" labelExpression="service:render">
+            <labelFormat>bold</labelFormat>
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </centerLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_KUpuaCH1EeuUrYII4OYxLg" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_ZBBmwSH2EeuUrYII4OYxLg" sourceArrow="FillDiamond" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_ZBBmwiH2EeuUrYII4OYxLg" showIcon="false" labelExpression="service:render">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </centerLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_ZBBmwyH2EeuUrYII4OYxLg" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_b6BUgCHzEeuUrYII4OYxLg" name="EnergyComponentCatalog" tooltipText="" outgoingEdges="_ZBBmwCH2EeuUrYII4OYxLg _cZ-fliH2EeuUrYII4OYxLg _dATfxiH2EeuUrYII4OYxLg _dcoPciH2EeuUrYII4OYxLg _fG0gbiH2EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//EnergyComponentCatalog"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//EnergyComponentCatalog"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_ggV_YSHzEeuUrYII4OYxLg" 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="_eyjA0CHzEeuUrYII4OYxLg" name="author : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//EnergyComponentCatalog/author"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//EnergyComponentCatalog/author"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_hEYgkCHzEeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_i4Gg8CHzEeuUrYII4OYxLg" name="BoilerType" tooltipText="" width="12" height="10">
+      <target xmi:type="ecore:EEnum" href="democatalog.ecore#//BoilerType"/>
+      <semanticElements xmi:type="ecore:EEnum" href="democatalog.ecore#//BoilerType"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_i4HIACHzEeuUrYII4OYxLg" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202">
+        <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%20EEnum']/@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%20EEnum']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_lQZ1ECHzEeuUrYII4OYxLg" name="LowTemperature" tooltipText="">
+        <target xmi:type="ecore:EEnumLiteral" href="democatalog.ecore#//BoilerType/LowTemperature"/>
+        <semanticElements xmi:type="ecore:EEnumLiteral" href="democatalog.ecore#//BoilerType/LowTemperature"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_lQZ1ESHzEeuUrYII4OYxLg" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+        </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%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_lhK08CHzEeuUrYII4OYxLg" name="Condensing" tooltipText="">
+        <target xmi:type="ecore:EEnumLiteral" href="democatalog.ecore#//BoilerType/Condensing"/>
+        <semanticElements xmi:type="ecore:EEnumLiteral" href="democatalog.ecore#//BoilerType/Condensing"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_lhLcACHzEeuUrYII4OYxLg" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+        </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%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_1ju5oCHzEeuUrYII4OYxLg" name="Boiler" tooltipText="" outgoingEdges="_8Nl3oCH1EeuUrYII4OYxLg" incomingEdges="_ZBBmwCH2EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//Boiler"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//Boiler"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_7kSG0SHzEeuUrYII4OYxLg" 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="_4jl9ACHzEeuUrYII4OYxLg" name="boilerType : BoilerType = LowTemperature" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//Boiler/boilerType"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//Boiler/boilerType"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_854n0iHzEeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_9_8Q8CHzEeuUrYII4OYxLg" name="CombinedHeatPower" tooltipText="" outgoingEdges="_9YdvUCH1EeuUrYII4OYxLg" incomingEdges="_cZ-fliH2EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//CombinedHeatPower"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//CombinedHeatPower"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_328c9SH0EeuUrYII4OYxLg" 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="_MbZ08CH0EeuUrYII4OYxLg" name="thermalEfficiency : EDouble = 0.0" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//CombinedHeatPower/thermalEfficiency"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//CombinedHeatPower/thermalEfficiency"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_329EAiH0EeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_Cw_lICH0EeuUrYII4OYxLg" name="SolarPanel" tooltipText="" outgoingEdges="_94ONcCH1EeuUrYII4OYxLg" incomingEdges="_dATfxiH2EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//SolarPanel"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//SolarPanel"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_ZXRbNyIEEeuUrYII4OYxLg" 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="_SXzusCIEEeuUrYII4OYxLg" name="mppVoltage : EDouble = 0.0" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//SolarPanel/mppVoltage"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//SolarPanel/mppVoltage"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_gHvCaiIEEeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_WLv6YCIEEeuUrYII4OYxLg" name="mppCurrent : EDouble = 0.0" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//SolarPanel/mppCurrent"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//SolarPanel/mppCurrent"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_fMs9iiIEEeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_C8cnMCH0EeuUrYII4OYxLg" name="Inverter" tooltipText="" outgoingEdges="_-QPr-CH1EeuUrYII4OYxLg" incomingEdges="_dcoPciH2EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//Inverter"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//Inverter"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_p80RKSIEEeuUrYII4OYxLg" 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="_h6CGcCIEEeuUrYII4OYxLg" name="maxDCVoltage : EDouble = 0.0" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//Inverter/maxDCVoltage"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//Inverter/maxDCVoltage"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAIMsSIEEeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_n-UkICIEEeuUrYII4OYxLg" name="macDCCurrent : EDouble = 0.0" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//Inverter/macDCCurrent"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//Inverter/macDCCurrent"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_rA3IFyIEEeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_DG7Y4CH0EeuUrYII4OYxLg" name="Manufacturer" tooltipText="" incomingEdges="_HQGYQCH1EeuUrYII4OYxLg _fG0gbiH2EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//Manufacturer"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//Manufacturer"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_zpXCOyH0EeuUrYII4OYxLg" 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="_yuptcCH0EeuUrYII4OYxLg" name="name : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//Manufacturer/name"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//Manufacturer/name"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_65xUxiH0EeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_og9xcCH0EeuUrYII4OYxLg" name="ChemicalDevice" tooltipText="" outgoingEdges="_81wD1iH1EeuUrYII4OYxLg" incomingEdges="_8Nl3oCH1EeuUrYII4OYxLg _9YdvUCH1EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//ChemicalDevice"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//ChemicalDevice"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_uQPBbSH0EeuUrYII4OYxLg" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <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']/@conditionnalStyles.1/@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="_sD2pYCH0EeuUrYII4OYxLg" name="installedThermalPower : EDouble = 0.0" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//ChemicalDevice/installedThermalPower"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//ChemicalDevice/installedThermalPower"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_viM_kSH0EeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="__ZVQUCH0EeuUrYII4OYxLg" name="EnergyComponent" tooltipText="" outgoingEdges="_HQGYQCH1EeuUrYII4OYxLg" incomingEdges="_81wD1iH1EeuUrYII4OYxLg __Jdy9SH1EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//EnergyComponent"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//EnergyComponent"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_FMe6viH1EeuUrYII4OYxLg" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <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']/@conditionnalStyles.1/@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="_BZULECH1EeuUrYII4OYxLg" name="modelName : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//EnergyComponent/modelName"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//EnergyComponent/modelName"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_CwLQUyH1EeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_DpL78CH1EeuUrYII4OYxLg" name="revisionYear : EInt" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//EnergyComponent/revisionYear"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//EnergyComponent/revisionYear"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_FMfhxyH1EeuUrYII4OYxLg" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" 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']/@style"/>
+        </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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_HQGYQCH1EeuUrYII4OYxLg" name="[1..1] producedBy" sourceNode="__ZVQUCH0EeuUrYII4OYxLg" targetNode="_DG7Y4CH0EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponent/producedBy"/>
+      <semanticElements xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponent/producedBy"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_KUpuaSH1EeuUrYII4OYxLg" description="_KUpuZiH1EeuUrYII4OYxLg" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_KUpuayH1EeuUrYII4OYxLg" showIcon="false">
+          <labelFormat>bold</labelFormat>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_KUpuaiH1EeuUrYII4OYxLg" labelSize="6" showIcon="false" labelColor="39,76,114"/>
+      </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:DNodeList" uid="_OIJ1MCH1EeuUrYII4OYxLg" name="ElectricalDevice" tooltipText="" outgoingEdges="__Jdy9SH1EeuUrYII4OYxLg" incomingEdges="_94ONcCH1EeuUrYII4OYxLg _-QPr-CH1EeuUrYII4OYxLg" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//ElectricalDevice"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//ElectricalDevice"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_UTSh0SH1EeuUrYII4OYxLg" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <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']/@conditionnalStyles.1/@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="_TczlsCH1EeuUrYII4OYxLg" name="nominalPower : EDouble = 0.0" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="democatalog.ecore#//ElectricalDevice/nominalPower"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="democatalog.ecore#//ElectricalDevice/nominalPower"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_VFSmcSH1EeuUrYII4OYxLg" labelAlignment="LEFT" description="_hEX5gCHzEeuUrYII4OYxLg">
+          <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']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_8Nl3oCH1EeuUrYII4OYxLg" sourceNode="_1ju5oCHzEeuUrYII4OYxLg" targetNode="_og9xcCH0EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//Boiler"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//Boiler"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_8Nl3oSH1EeuUrYII4OYxLg" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_8Nl3oiH1EeuUrYII4OYxLg" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_8Nl3oyH1EeuUrYII4OYxLg" 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='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_81wD1iH1EeuUrYII4OYxLg" sourceNode="_og9xcCH0EeuUrYII4OYxLg" targetNode="__ZVQUCH0EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//ChemicalDevice"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//ChemicalDevice"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_81wD1yH1EeuUrYII4OYxLg" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_81wD2CH1EeuUrYII4OYxLg" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_81wD2SH1EeuUrYII4OYxLg" 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='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_9YdvUCH1EeuUrYII4OYxLg" sourceNode="_9_8Q8CHzEeuUrYII4OYxLg" targetNode="_og9xcCH0EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//CombinedHeatPower"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//CombinedHeatPower"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_9YdvUSH1EeuUrYII4OYxLg" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_9YdvUiH1EeuUrYII4OYxLg" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_9YdvUyH1EeuUrYII4OYxLg" 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='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_94ONcCH1EeuUrYII4OYxLg" sourceNode="_Cw_lICH0EeuUrYII4OYxLg" targetNode="_OIJ1MCH1EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//SolarPanel"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//SolarPanel"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ZXTQiiIEEeuUrYII4OYxLg" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_ZXTQiyIEEeuUrYII4OYxLg" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_ZXTQjCIEEeuUrYII4OYxLg" 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='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_-QPr-CH1EeuUrYII4OYxLg" sourceNode="_C8cnMCH0EeuUrYII4OYxLg" targetNode="_OIJ1MCH1EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//Inverter"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//Inverter"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_p82GUCIEEeuUrYII4OYxLg" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_p82GUSIEEeuUrYII4OYxLg" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_p82GUiIEEeuUrYII4OYxLg" 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='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="__Jdy9SH1EeuUrYII4OYxLg" sourceNode="_OIJ1MCH1EeuUrYII4OYxLg" targetNode="__ZVQUCH0EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EClass" href="democatalog.ecore#//ElectricalDevice"/>
+      <semanticElements xmi:type="ecore:EClass" href="democatalog.ecore#//ElectricalDevice"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="__Jdy9iH1EeuUrYII4OYxLg" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="__Jdy9yH1EeuUrYII4OYxLg" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="__Jdy-CH1EeuUrYII4OYxLg" 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='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ZBBmwCH2EeuUrYII4OYxLg" name="[0..*] boilers" sourceNode="_b6BUgCHzEeuUrYII4OYxLg" targetNode="_1ju5oCHzEeuUrYII4OYxLg">
+      <target xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/boilers"/>
+      <semanticElements xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/boilers"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ZBBmxCH2EeuUrYII4OYxLg" description="_ZBBmwSH2EeuUrYII4OYxLg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_ZBBmxiH2EeuUrYII4OYxLg" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_ZBBmxSH2EeuUrYII4OYxLg" 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="_cZ-fliH2EeuUrYII4OYxLg" name="[0..*] chps" sourceNode="_b6BUgCHzEeuUrYII4OYxLg" targetNode="_9_8Q8CHzEeuUrYII4OYxLg">
+      <target xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/chps"/>
+      <semanticElements xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/chps"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_cZ-flyH2EeuUrYII4OYxLg" description="_ZBBmwSH2EeuUrYII4OYxLg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_cZ-fmSH2EeuUrYII4OYxLg" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_cZ-fmCH2EeuUrYII4OYxLg" 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="_dATfxiH2EeuUrYII4OYxLg" name="[0..*] solarPanels" sourceNode="_b6BUgCHzEeuUrYII4OYxLg" targetNode="_Cw_lICH0EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/solarPanels"/>
+      <semanticElements xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/solarPanels"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_dATfxyH2EeuUrYII4OYxLg" description="_ZBBmwSH2EeuUrYII4OYxLg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_dATfySH2EeuUrYII4OYxLg" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_dATfyCH2EeuUrYII4OYxLg" 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="_dcoPciH2EeuUrYII4OYxLg" name="[0..*] inverters" sourceNode="_b6BUgCHzEeuUrYII4OYxLg" targetNode="_C8cnMCH0EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/inverters"/>
+      <semanticElements xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/inverters"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_dcoPcyH2EeuUrYII4OYxLg" description="_ZBBmwSH2EeuUrYII4OYxLg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_dcoPdSH2EeuUrYII4OYxLg" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_dcoPdCH2EeuUrYII4OYxLg" 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="_fG0gbiH2EeuUrYII4OYxLg" name="[0..*] manufacturers" sourceNode="_b6BUgCHzEeuUrYII4OYxLg" targetNode="_DG7Y4CH0EeuUrYII4OYxLg">
+      <target xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/manufacturers"/>
+      <semanticElements xmi:type="ecore:EReference" href="democatalog.ecore#//EnergyComponentCatalog/manufacturers"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fG1HYCH2EeuUrYII4OYxLg" description="_ZBBmwSH2EeuUrYII4OYxLg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fG1HYiH2EeuUrYII4OYxLg" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_fG1HYSH2EeuUrYII4OYxLg" 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>
+    <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="_Hj79QCHUEeuLPpz77IfmqA"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+    <target xmi:type="ecore:EPackage" href="democatalog.ecore#/"/>
+  </diagram:DSemanticDiagram>
+</xmi:XMI>
diff --git a/org.example.democatalog/model/democatalog.ecore b/org.example.democatalog/model/democatalog.ecore
new file mode 100644
index 0000000000000000000000000000000000000000..1aea535499b24f8ab94761b7bf7429f23e43c712
--- /dev/null
+++ b/org.example.democatalog/model/democatalog.ecore
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="democatalog" nsURI="http://example.org/democatalog" nsPrefix="democat">
+  <eClassifiers xsi:type="ecore:EClass" name="EnergyComponentCatalog">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="author" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="boilers" upperBound="-1"
+        eType="#//Boiler" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="chps" upperBound="-1" eType="#//CombinedHeatPower"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="solarPanels" upperBound="-1"
+        eType="#//SolarPanel" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inverters" upperBound="-1"
+        eType="#//Inverter" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="manufacturers" upperBound="-1"
+        eType="#//Manufacturer" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="BoilerType">
+    <eLiterals name="LowTemperature"/>
+    <eLiterals name="Condensing" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Boiler" eSuperTypes="#//ChemicalDevice">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="boilerType" lowerBound="1"
+        eType="#//BoilerType"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CombinedHeatPower" eSuperTypes="#//ChemicalDevice">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="thermalEfficiency" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SolarPanel" eSuperTypes="#//ElectricalDevice">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mppVoltage" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mppCurrent" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Inverter" eSuperTypes="#//ElectricalDevice">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxDCVoltage" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="macDCCurrent" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Manufacturer">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ChemicalDevice" abstract="true" eSuperTypes="#//EnergyComponent">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="installedThermalPower"
+        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EnergyComponent" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modelName" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="revisionYear" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="producedBy" lowerBound="1"
+        eType="#//Manufacturer"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ElectricalDevice" abstract="true" eSuperTypes="#//EnergyComponent">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nominalPower" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.0"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.example.democatalog/model/democatalog.genmodel b/org.example.democatalog/model/democatalog.genmodel
new file mode 100644
index 0000000000000000000000000000000000000000..cc65a31d4e538756740447712e2244f7daf8434c
--- /dev/null
+++ b/org.example.democatalog/model/democatalog.genmodel
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel"
+    modelDirectory="/org.example.democatalog/src-gen" creationIcons="false"
+    editDirectory="/org.example.democatalog.edit/src-gen" editorDirectory="/org.example.democatalog.editor/src-gen"
+    modelPluginID="org.example.democatalog" modelName="Democatalog" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    codeFormatting="true" importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0"
+    copyrightFields="false" operationReflection="true" importOrganizing="true">
+  <foreignModel>democatalog.ecore</foreignModel>
+  <testsDirectory xsi:nil="true"/>
+  <genPackages prefix="Democatalog" basePackage="org.example" disposableProviderFactory="true"
+      ecorePackage="democatalog.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="democatalog.ecore#//BoilerType">
+      <genEnumLiterals ecoreEnumLiteral="democatalog.ecore#//BoilerType/LowTemperature"/>
+      <genEnumLiterals ecoreEnumLiteral="democatalog.ecore#//BoilerType/Condensing"/>
+    </genEnums>
+    <genClasses ecoreClass="democatalog.ecore#//EnergyComponentCatalog">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//EnergyComponentCatalog/author"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference democatalog.ecore#//EnergyComponentCatalog/boilers"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference democatalog.ecore#//EnergyComponentCatalog/chps"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference democatalog.ecore#//EnergyComponentCatalog/solarPanels"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference democatalog.ecore#//EnergyComponentCatalog/inverters"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference democatalog.ecore#//EnergyComponentCatalog/manufacturers"/>
+    </genClasses>
+    <genClasses ecoreClass="democatalog.ecore#//Boiler">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//Boiler/boilerType"/>
+    </genClasses>
+    <genClasses ecoreClass="democatalog.ecore#//CombinedHeatPower">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//CombinedHeatPower/thermalEfficiency"/>
+    </genClasses>
+    <genClasses ecoreClass="democatalog.ecore#//SolarPanel">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//SolarPanel/mppVoltage"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//SolarPanel/mppCurrent"/>
+    </genClasses>
+    <genClasses ecoreClass="democatalog.ecore#//Inverter">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//Inverter/maxDCVoltage"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//Inverter/macDCCurrent"/>
+    </genClasses>
+    <genClasses ecoreClass="democatalog.ecore#//Manufacturer">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//Manufacturer/name"/>
+    </genClasses>
+    <genClasses ecoreClass="democatalog.ecore#//ChemicalDevice">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//ChemicalDevice/installedThermalPower"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="democatalog.ecore#//EnergyComponent">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//EnergyComponent/modelName"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//EnergyComponent/revisionYear"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference democatalog.ecore#//EnergyComponent/producedBy"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="democatalog.ecore#//ElectricalDevice">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute democatalog.ecore#//ElectricalDevice/nominalPower"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.example.democatalog/plugin.properties b/org.example.democatalog/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..65de3c26b6f50889a224002308f1821c081f0cbd
--- /dev/null
+++ b/org.example.democatalog/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = org.example.democatalog
+providerName = www.example.org
diff --git a/org.example.democatalog/plugin.xml b/org.example.democatalog/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bed1880251bd87cede0e06e475084adc122a3f9c
--- /dev/null
+++ b/org.example.democatalog/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated democatalog -->
+      <package
+            uri="http://example.org/democatalog"
+            class="org.example.democatalog.DemocatalogPackage"
+            genModel="model/democatalog.genmodel"/>
+   </extension>
+
+</plugin>
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/Boiler.java b/org.example.democatalog/src-gen/org/example/democatalog/Boiler.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe7573f417f3c41127b8a5ee487bb277d93d27cd
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/Boiler.java
@@ -0,0 +1,47 @@
+/**
+ */
+package org.example.democatalog;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Boiler</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.Boiler#getBoilerType <em>Boiler Type</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getBoiler()
+ * @model
+ * @generated
+ */
+public interface Boiler extends ChemicalDevice {
+	/**
+	 * Returns the value of the '<em><b>Boiler Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.example.democatalog.BoilerType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Boiler Type</em>' attribute.
+	 * @see org.example.democatalog.BoilerType
+	 * @see #setBoilerType(BoilerType)
+	 * @see org.example.democatalog.DemocatalogPackage#getBoiler_BoilerType()
+	 * @model required="true"
+	 * @generated
+	 */
+	BoilerType getBoilerType();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.Boiler#getBoilerType <em>Boiler Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Boiler Type</em>' attribute.
+	 * @see org.example.democatalog.BoilerType
+	 * @see #getBoilerType()
+	 * @generated
+	 */
+	void setBoilerType(BoilerType value);
+
+} // Boiler
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/BoilerType.java b/org.example.democatalog/src-gen/org/example/democatalog/BoilerType.java
new file mode 100644
index 0000000000000000000000000000000000000000..1aa15fa427557bfb4e2b8a8c59418ef9b1bb9523
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/BoilerType.java
@@ -0,0 +1,204 @@
+/**
+ */
+package org.example.democatalog;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Boiler Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.example.democatalog.DemocatalogPackage#getBoilerType()
+ * @model
+ * @generated
+ */
+public enum BoilerType implements Enumerator {
+	/**
+	 * The '<em><b>Low Temperature</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LOW_TEMPERATURE_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	LOW_TEMPERATURE(0, "LowTemperature", "LowTemperature"),
+
+	/**
+	 * The '<em><b>Condensing</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CONDENSING_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	CONDENSING(1, "Condensing", "Condensing");
+
+	/**
+	 * The '<em><b>Low Temperature</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LOW_TEMPERATURE
+	 * @model name="LowTemperature"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LOW_TEMPERATURE_VALUE = 0;
+
+	/**
+	 * The '<em><b>Condensing</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CONDENSING
+	 * @model name="Condensing"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int CONDENSING_VALUE = 1;
+
+	/**
+	 * An array of all the '<em><b>Boiler Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final BoilerType[] VALUES_ARRAY = new BoilerType[] { LOW_TEMPERATURE, CONDENSING, };
+
+	/**
+	 * A public read-only list of all the '<em><b>Boiler Type</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<BoilerType> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Boiler Type</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static BoilerType get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			BoilerType result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Boiler Type</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static BoilerType getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			BoilerType result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Boiler Type</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static BoilerType get(int value) {
+		switch (value) {
+		case LOW_TEMPERATURE_VALUE:
+			return LOW_TEMPERATURE;
+		case CONDENSING_VALUE:
+			return CONDENSING;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final int value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String name;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String literal;
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private BoilerType(int value, String name, String literal) {
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLiteral() {
+		return literal;
+	}
+
+	/**
+	 * Returns the literal value of the enumerator, which is its string representation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		return literal;
+	}
+
+} //BoilerType
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/ChemicalDevice.java b/org.example.democatalog/src-gen/org/example/democatalog/ChemicalDevice.java
new file mode 100644
index 0000000000000000000000000000000000000000..0deb0f58d9326c29f9a3fd37aade204283735cc4
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/ChemicalDevice.java
@@ -0,0 +1,45 @@
+/**
+ */
+package org.example.democatalog;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Chemical Device</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.ChemicalDevice#getInstalledThermalPower <em>Installed Thermal Power</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getChemicalDevice()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ChemicalDevice extends EnergyComponent {
+	/**
+	 * Returns the value of the '<em><b>Installed Thermal Power</b></em>' attribute.
+	 * The default value is <code>"0.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Installed Thermal Power</em>' attribute.
+	 * @see #setInstalledThermalPower(double)
+	 * @see org.example.democatalog.DemocatalogPackage#getChemicalDevice_InstalledThermalPower()
+	 * @model default="0.0" required="true"
+	 * @generated
+	 */
+	double getInstalledThermalPower();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.ChemicalDevice#getInstalledThermalPower <em>Installed Thermal Power</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Installed Thermal Power</em>' attribute.
+	 * @see #getInstalledThermalPower()
+	 * @generated
+	 */
+	void setInstalledThermalPower(double value);
+
+} // ChemicalDevice
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/CombinedHeatPower.java b/org.example.democatalog/src-gen/org/example/democatalog/CombinedHeatPower.java
new file mode 100644
index 0000000000000000000000000000000000000000..aaffd63e3f71d1c972443740cf5b2b231bc82cb0
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/CombinedHeatPower.java
@@ -0,0 +1,45 @@
+/**
+ */
+package org.example.democatalog;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Combined Heat Power</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.CombinedHeatPower#getThermalEfficiency <em>Thermal Efficiency</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getCombinedHeatPower()
+ * @model
+ * @generated
+ */
+public interface CombinedHeatPower extends ChemicalDevice {
+	/**
+	 * Returns the value of the '<em><b>Thermal Efficiency</b></em>' attribute.
+	 * The default value is <code>"0.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Thermal Efficiency</em>' attribute.
+	 * @see #setThermalEfficiency(double)
+	 * @see org.example.democatalog.DemocatalogPackage#getCombinedHeatPower_ThermalEfficiency()
+	 * @model default="0.0" required="true"
+	 * @generated
+	 */
+	double getThermalEfficiency();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.CombinedHeatPower#getThermalEfficiency <em>Thermal Efficiency</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Thermal Efficiency</em>' attribute.
+	 * @see #getThermalEfficiency()
+	 * @generated
+	 */
+	void setThermalEfficiency(double value);
+
+} // CombinedHeatPower
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/DemocatalogFactory.java b/org.example.democatalog/src-gen/org/example/democatalog/DemocatalogFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..76a92ae66e3ff0e697897943bb168df3b3d6c020
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/DemocatalogFactory.java
@@ -0,0 +1,87 @@
+/**
+ */
+package org.example.democatalog;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.example.democatalog.DemocatalogPackage
+ * @generated
+ */
+public interface DemocatalogFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	DemocatalogFactory eINSTANCE = org.example.democatalog.impl.DemocatalogFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Energy Component Catalog</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Energy Component Catalog</em>'.
+	 * @generated
+	 */
+	EnergyComponentCatalog createEnergyComponentCatalog();
+
+	/**
+	 * Returns a new object of class '<em>Boiler</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Boiler</em>'.
+	 * @generated
+	 */
+	Boiler createBoiler();
+
+	/**
+	 * Returns a new object of class '<em>Combined Heat Power</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Combined Heat Power</em>'.
+	 * @generated
+	 */
+	CombinedHeatPower createCombinedHeatPower();
+
+	/**
+	 * Returns a new object of class '<em>Solar Panel</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Solar Panel</em>'.
+	 * @generated
+	 */
+	SolarPanel createSolarPanel();
+
+	/**
+	 * Returns a new object of class '<em>Inverter</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Inverter</em>'.
+	 * @generated
+	 */
+	Inverter createInverter();
+
+	/**
+	 * Returns a new object of class '<em>Manufacturer</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Manufacturer</em>'.
+	 * @generated
+	 */
+	Manufacturer createManufacturer();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	DemocatalogPackage getDemocatalogPackage();
+
+} //DemocatalogFactory
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/DemocatalogPackage.java b/org.example.democatalog/src-gen/org/example/democatalog/DemocatalogPackage.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb2c296353f0ffc4556494cb14d1e054ca2f4adb
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/DemocatalogPackage.java
@@ -0,0 +1,1249 @@
+/**
+ */
+package org.example.democatalog;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.example.democatalog.DemocatalogFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface DemocatalogPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "democatalog";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://example.org/democatalog";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "democat";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	DemocatalogPackage eINSTANCE = org.example.democatalog.impl.DemocatalogPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.EnergyComponentCatalogImpl <em>Energy Component Catalog</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.EnergyComponentCatalogImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getEnergyComponentCatalog()
+	 * @generated
+	 */
+	int ENERGY_COMPONENT_CATALOG = 0;
+
+	/**
+	 * The feature id for the '<em><b>Author</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_CATALOG__AUTHOR = 0;
+
+	/**
+	 * The feature id for the '<em><b>Boilers</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_CATALOG__BOILERS = 1;
+
+	/**
+	 * The feature id for the '<em><b>Chps</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_CATALOG__CHPS = 2;
+
+	/**
+	 * The feature id for the '<em><b>Solar Panels</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_CATALOG__SOLAR_PANELS = 3;
+
+	/**
+	 * The feature id for the '<em><b>Inverters</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_CATALOG__INVERTERS = 4;
+
+	/**
+	 * The feature id for the '<em><b>Manufacturers</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_CATALOG__MANUFACTURERS = 5;
+
+	/**
+	 * The number of structural features of the '<em>Energy Component Catalog</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_CATALOG_FEATURE_COUNT = 6;
+
+	/**
+	 * The number of operations of the '<em>Energy Component Catalog</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_CATALOG_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.EnergyComponentImpl <em>Energy Component</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.EnergyComponentImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getEnergyComponent()
+	 * @generated
+	 */
+	int ENERGY_COMPONENT = 7;
+
+	/**
+	 * The feature id for the '<em><b>Model Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT__MODEL_NAME = 0;
+
+	/**
+	 * The feature id for the '<em><b>Revision Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT__REVISION_YEAR = 1;
+
+	/**
+	 * The feature id for the '<em><b>Produced By</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT__PRODUCED_BY = 2;
+
+	/**
+	 * The number of structural features of the '<em>Energy Component</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_FEATURE_COUNT = 3;
+
+	/**
+	 * The number of operations of the '<em>Energy Component</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENERGY_COMPONENT_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.ChemicalDeviceImpl <em>Chemical Device</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.ChemicalDeviceImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getChemicalDevice()
+	 * @generated
+	 */
+	int CHEMICAL_DEVICE = 6;
+
+	/**
+	 * The feature id for the '<em><b>Model Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CHEMICAL_DEVICE__MODEL_NAME = ENERGY_COMPONENT__MODEL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Revision Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CHEMICAL_DEVICE__REVISION_YEAR = ENERGY_COMPONENT__REVISION_YEAR;
+
+	/**
+	 * The feature id for the '<em><b>Produced By</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CHEMICAL_DEVICE__PRODUCED_BY = ENERGY_COMPONENT__PRODUCED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Installed Thermal Power</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER = ENERGY_COMPONENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Chemical Device</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CHEMICAL_DEVICE_FEATURE_COUNT = ENERGY_COMPONENT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Chemical Device</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CHEMICAL_DEVICE_OPERATION_COUNT = ENERGY_COMPONENT_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.BoilerImpl <em>Boiler</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.BoilerImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getBoiler()
+	 * @generated
+	 */
+	int BOILER = 1;
+
+	/**
+	 * The feature id for the '<em><b>Model Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOILER__MODEL_NAME = CHEMICAL_DEVICE__MODEL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Revision Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOILER__REVISION_YEAR = CHEMICAL_DEVICE__REVISION_YEAR;
+
+	/**
+	 * The feature id for the '<em><b>Produced By</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOILER__PRODUCED_BY = CHEMICAL_DEVICE__PRODUCED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Installed Thermal Power</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOILER__INSTALLED_THERMAL_POWER = CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER;
+
+	/**
+	 * The feature id for the '<em><b>Boiler Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOILER__BOILER_TYPE = CHEMICAL_DEVICE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Boiler</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOILER_FEATURE_COUNT = CHEMICAL_DEVICE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Boiler</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOILER_OPERATION_COUNT = CHEMICAL_DEVICE_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.CombinedHeatPowerImpl <em>Combined Heat Power</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.CombinedHeatPowerImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getCombinedHeatPower()
+	 * @generated
+	 */
+	int COMBINED_HEAT_POWER = 2;
+
+	/**
+	 * The feature id for the '<em><b>Model Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMBINED_HEAT_POWER__MODEL_NAME = CHEMICAL_DEVICE__MODEL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Revision Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMBINED_HEAT_POWER__REVISION_YEAR = CHEMICAL_DEVICE__REVISION_YEAR;
+
+	/**
+	 * The feature id for the '<em><b>Produced By</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMBINED_HEAT_POWER__PRODUCED_BY = CHEMICAL_DEVICE__PRODUCED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Installed Thermal Power</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMBINED_HEAT_POWER__INSTALLED_THERMAL_POWER = CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER;
+
+	/**
+	 * The feature id for the '<em><b>Thermal Efficiency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMBINED_HEAT_POWER__THERMAL_EFFICIENCY = CHEMICAL_DEVICE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Combined Heat Power</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMBINED_HEAT_POWER_FEATURE_COUNT = CHEMICAL_DEVICE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Combined Heat Power</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMBINED_HEAT_POWER_OPERATION_COUNT = CHEMICAL_DEVICE_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.ElectricalDeviceImpl <em>Electrical Device</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.ElectricalDeviceImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getElectricalDevice()
+	 * @generated
+	 */
+	int ELECTRICAL_DEVICE = 8;
+
+	/**
+	 * The feature id for the '<em><b>Model Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELECTRICAL_DEVICE__MODEL_NAME = ENERGY_COMPONENT__MODEL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Revision Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELECTRICAL_DEVICE__REVISION_YEAR = ENERGY_COMPONENT__REVISION_YEAR;
+
+	/**
+	 * The feature id for the '<em><b>Produced By</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELECTRICAL_DEVICE__PRODUCED_BY = ENERGY_COMPONENT__PRODUCED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Nominal Power</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELECTRICAL_DEVICE__NOMINAL_POWER = ENERGY_COMPONENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Electrical Device</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELECTRICAL_DEVICE_FEATURE_COUNT = ENERGY_COMPONENT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Electrical Device</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELECTRICAL_DEVICE_OPERATION_COUNT = ENERGY_COMPONENT_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.SolarPanelImpl <em>Solar Panel</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.SolarPanelImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getSolarPanel()
+	 * @generated
+	 */
+	int SOLAR_PANEL = 3;
+
+	/**
+	 * The feature id for the '<em><b>Model Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SOLAR_PANEL__MODEL_NAME = ELECTRICAL_DEVICE__MODEL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Revision Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SOLAR_PANEL__REVISION_YEAR = ELECTRICAL_DEVICE__REVISION_YEAR;
+
+	/**
+	 * The feature id for the '<em><b>Produced By</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SOLAR_PANEL__PRODUCED_BY = ELECTRICAL_DEVICE__PRODUCED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Nominal Power</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SOLAR_PANEL__NOMINAL_POWER = ELECTRICAL_DEVICE__NOMINAL_POWER;
+
+	/**
+	 * The feature id for the '<em><b>Mpp Voltage</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SOLAR_PANEL__MPP_VOLTAGE = ELECTRICAL_DEVICE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Mpp Current</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SOLAR_PANEL__MPP_CURRENT = ELECTRICAL_DEVICE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Solar Panel</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SOLAR_PANEL_FEATURE_COUNT = ELECTRICAL_DEVICE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of operations of the '<em>Solar Panel</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SOLAR_PANEL_OPERATION_COUNT = ELECTRICAL_DEVICE_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.InverterImpl <em>Inverter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.InverterImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getInverter()
+	 * @generated
+	 */
+	int INVERTER = 4;
+
+	/**
+	 * The feature id for the '<em><b>Model Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INVERTER__MODEL_NAME = ELECTRICAL_DEVICE__MODEL_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Revision Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INVERTER__REVISION_YEAR = ELECTRICAL_DEVICE__REVISION_YEAR;
+
+	/**
+	 * The feature id for the '<em><b>Produced By</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INVERTER__PRODUCED_BY = ELECTRICAL_DEVICE__PRODUCED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Nominal Power</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INVERTER__NOMINAL_POWER = ELECTRICAL_DEVICE__NOMINAL_POWER;
+
+	/**
+	 * The feature id for the '<em><b>Max DC Voltage</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INVERTER__MAX_DC_VOLTAGE = ELECTRICAL_DEVICE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Mac DC Current</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INVERTER__MAC_DC_CURRENT = ELECTRICAL_DEVICE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Inverter</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INVERTER_FEATURE_COUNT = ELECTRICAL_DEVICE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of operations of the '<em>Inverter</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INVERTER_OPERATION_COUNT = ELECTRICAL_DEVICE_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.impl.ManufacturerImpl <em>Manufacturer</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.impl.ManufacturerImpl
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getManufacturer()
+	 * @generated
+	 */
+	int MANUFACTURER = 5;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MANUFACTURER__NAME = 0;
+
+	/**
+	 * The number of structural features of the '<em>Manufacturer</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MANUFACTURER_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Manufacturer</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MANUFACTURER_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.example.democatalog.BoilerType <em>Boiler Type</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.example.democatalog.BoilerType
+	 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getBoilerType()
+	 * @generated
+	 */
+	int BOILER_TYPE = 9;
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.EnergyComponentCatalog <em>Energy Component Catalog</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Energy Component Catalog</em>'.
+	 * @see org.example.democatalog.EnergyComponentCatalog
+	 * @generated
+	 */
+	EClass getEnergyComponentCatalog();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.EnergyComponentCatalog#getAuthor <em>Author</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Author</em>'.
+	 * @see org.example.democatalog.EnergyComponentCatalog#getAuthor()
+	 * @see #getEnergyComponentCatalog()
+	 * @generated
+	 */
+	EAttribute getEnergyComponentCatalog_Author();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.example.democatalog.EnergyComponentCatalog#getBoilers <em>Boilers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Boilers</em>'.
+	 * @see org.example.democatalog.EnergyComponentCatalog#getBoilers()
+	 * @see #getEnergyComponentCatalog()
+	 * @generated
+	 */
+	EReference getEnergyComponentCatalog_Boilers();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.example.democatalog.EnergyComponentCatalog#getChps <em>Chps</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Chps</em>'.
+	 * @see org.example.democatalog.EnergyComponentCatalog#getChps()
+	 * @see #getEnergyComponentCatalog()
+	 * @generated
+	 */
+	EReference getEnergyComponentCatalog_Chps();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.example.democatalog.EnergyComponentCatalog#getSolarPanels <em>Solar Panels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Solar Panels</em>'.
+	 * @see org.example.democatalog.EnergyComponentCatalog#getSolarPanels()
+	 * @see #getEnergyComponentCatalog()
+	 * @generated
+	 */
+	EReference getEnergyComponentCatalog_SolarPanels();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.example.democatalog.EnergyComponentCatalog#getInverters <em>Inverters</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Inverters</em>'.
+	 * @see org.example.democatalog.EnergyComponentCatalog#getInverters()
+	 * @see #getEnergyComponentCatalog()
+	 * @generated
+	 */
+	EReference getEnergyComponentCatalog_Inverters();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.example.democatalog.EnergyComponentCatalog#getManufacturers <em>Manufacturers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Manufacturers</em>'.
+	 * @see org.example.democatalog.EnergyComponentCatalog#getManufacturers()
+	 * @see #getEnergyComponentCatalog()
+	 * @generated
+	 */
+	EReference getEnergyComponentCatalog_Manufacturers();
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.Boiler <em>Boiler</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Boiler</em>'.
+	 * @see org.example.democatalog.Boiler
+	 * @generated
+	 */
+	EClass getBoiler();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.Boiler#getBoilerType <em>Boiler Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Boiler Type</em>'.
+	 * @see org.example.democatalog.Boiler#getBoilerType()
+	 * @see #getBoiler()
+	 * @generated
+	 */
+	EAttribute getBoiler_BoilerType();
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.CombinedHeatPower <em>Combined Heat Power</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Combined Heat Power</em>'.
+	 * @see org.example.democatalog.CombinedHeatPower
+	 * @generated
+	 */
+	EClass getCombinedHeatPower();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.CombinedHeatPower#getThermalEfficiency <em>Thermal Efficiency</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Thermal Efficiency</em>'.
+	 * @see org.example.democatalog.CombinedHeatPower#getThermalEfficiency()
+	 * @see #getCombinedHeatPower()
+	 * @generated
+	 */
+	EAttribute getCombinedHeatPower_ThermalEfficiency();
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.SolarPanel <em>Solar Panel</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Solar Panel</em>'.
+	 * @see org.example.democatalog.SolarPanel
+	 * @generated
+	 */
+	EClass getSolarPanel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.SolarPanel#getMppVoltage <em>Mpp Voltage</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Mpp Voltage</em>'.
+	 * @see org.example.democatalog.SolarPanel#getMppVoltage()
+	 * @see #getSolarPanel()
+	 * @generated
+	 */
+	EAttribute getSolarPanel_MppVoltage();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.SolarPanel#getMppCurrent <em>Mpp Current</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Mpp Current</em>'.
+	 * @see org.example.democatalog.SolarPanel#getMppCurrent()
+	 * @see #getSolarPanel()
+	 * @generated
+	 */
+	EAttribute getSolarPanel_MppCurrent();
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.Inverter <em>Inverter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Inverter</em>'.
+	 * @see org.example.democatalog.Inverter
+	 * @generated
+	 */
+	EClass getInverter();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.Inverter#getMaxDCVoltage <em>Max DC Voltage</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Max DC Voltage</em>'.
+	 * @see org.example.democatalog.Inverter#getMaxDCVoltage()
+	 * @see #getInverter()
+	 * @generated
+	 */
+	EAttribute getInverter_MaxDCVoltage();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.Inverter#getMacDCCurrent <em>Mac DC Current</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Mac DC Current</em>'.
+	 * @see org.example.democatalog.Inverter#getMacDCCurrent()
+	 * @see #getInverter()
+	 * @generated
+	 */
+	EAttribute getInverter_MacDCCurrent();
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.Manufacturer <em>Manufacturer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Manufacturer</em>'.
+	 * @see org.example.democatalog.Manufacturer
+	 * @generated
+	 */
+	EClass getManufacturer();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.Manufacturer#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.example.democatalog.Manufacturer#getName()
+	 * @see #getManufacturer()
+	 * @generated
+	 */
+	EAttribute getManufacturer_Name();
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.ChemicalDevice <em>Chemical Device</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Chemical Device</em>'.
+	 * @see org.example.democatalog.ChemicalDevice
+	 * @generated
+	 */
+	EClass getChemicalDevice();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.ChemicalDevice#getInstalledThermalPower <em>Installed Thermal Power</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Installed Thermal Power</em>'.
+	 * @see org.example.democatalog.ChemicalDevice#getInstalledThermalPower()
+	 * @see #getChemicalDevice()
+	 * @generated
+	 */
+	EAttribute getChemicalDevice_InstalledThermalPower();
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.EnergyComponent <em>Energy Component</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Energy Component</em>'.
+	 * @see org.example.democatalog.EnergyComponent
+	 * @generated
+	 */
+	EClass getEnergyComponent();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.EnergyComponent#getModelName <em>Model Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Model Name</em>'.
+	 * @see org.example.democatalog.EnergyComponent#getModelName()
+	 * @see #getEnergyComponent()
+	 * @generated
+	 */
+	EAttribute getEnergyComponent_ModelName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.EnergyComponent#getRevisionYear <em>Revision Year</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Revision Year</em>'.
+	 * @see org.example.democatalog.EnergyComponent#getRevisionYear()
+	 * @see #getEnergyComponent()
+	 * @generated
+	 */
+	EAttribute getEnergyComponent_RevisionYear();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.example.democatalog.EnergyComponent#getProducedBy <em>Produced By</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Produced By</em>'.
+	 * @see org.example.democatalog.EnergyComponent#getProducedBy()
+	 * @see #getEnergyComponent()
+	 * @generated
+	 */
+	EReference getEnergyComponent_ProducedBy();
+
+	/**
+	 * Returns the meta object for class '{@link org.example.democatalog.ElectricalDevice <em>Electrical Device</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Electrical Device</em>'.
+	 * @see org.example.democatalog.ElectricalDevice
+	 * @generated
+	 */
+	EClass getElectricalDevice();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.example.democatalog.ElectricalDevice#getNominalPower <em>Nominal Power</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Nominal Power</em>'.
+	 * @see org.example.democatalog.ElectricalDevice#getNominalPower()
+	 * @see #getElectricalDevice()
+	 * @generated
+	 */
+	EAttribute getElectricalDevice_NominalPower();
+
+	/**
+	 * Returns the meta object for enum '{@link org.example.democatalog.BoilerType <em>Boiler Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Boiler Type</em>'.
+	 * @see org.example.democatalog.BoilerType
+	 * @generated
+	 */
+	EEnum getBoilerType();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	DemocatalogFactory getDemocatalogFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.EnergyComponentCatalogImpl <em>Energy Component Catalog</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.EnergyComponentCatalogImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getEnergyComponentCatalog()
+		 * @generated
+		 */
+		EClass ENERGY_COMPONENT_CATALOG = eINSTANCE.getEnergyComponentCatalog();
+
+		/**
+		 * The meta object literal for the '<em><b>Author</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ENERGY_COMPONENT_CATALOG__AUTHOR = eINSTANCE.getEnergyComponentCatalog_Author();
+
+		/**
+		 * The meta object literal for the '<em><b>Boilers</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ENERGY_COMPONENT_CATALOG__BOILERS = eINSTANCE.getEnergyComponentCatalog_Boilers();
+
+		/**
+		 * The meta object literal for the '<em><b>Chps</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ENERGY_COMPONENT_CATALOG__CHPS = eINSTANCE.getEnergyComponentCatalog_Chps();
+
+		/**
+		 * The meta object literal for the '<em><b>Solar Panels</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ENERGY_COMPONENT_CATALOG__SOLAR_PANELS = eINSTANCE.getEnergyComponentCatalog_SolarPanels();
+
+		/**
+		 * The meta object literal for the '<em><b>Inverters</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ENERGY_COMPONENT_CATALOG__INVERTERS = eINSTANCE.getEnergyComponentCatalog_Inverters();
+
+		/**
+		 * The meta object literal for the '<em><b>Manufacturers</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ENERGY_COMPONENT_CATALOG__MANUFACTURERS = eINSTANCE.getEnergyComponentCatalog_Manufacturers();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.BoilerImpl <em>Boiler</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.BoilerImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getBoiler()
+		 * @generated
+		 */
+		EClass BOILER = eINSTANCE.getBoiler();
+
+		/**
+		 * The meta object literal for the '<em><b>Boiler Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute BOILER__BOILER_TYPE = eINSTANCE.getBoiler_BoilerType();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.CombinedHeatPowerImpl <em>Combined Heat Power</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.CombinedHeatPowerImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getCombinedHeatPower()
+		 * @generated
+		 */
+		EClass COMBINED_HEAT_POWER = eINSTANCE.getCombinedHeatPower();
+
+		/**
+		 * The meta object literal for the '<em><b>Thermal Efficiency</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMBINED_HEAT_POWER__THERMAL_EFFICIENCY = eINSTANCE.getCombinedHeatPower_ThermalEfficiency();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.SolarPanelImpl <em>Solar Panel</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.SolarPanelImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getSolarPanel()
+		 * @generated
+		 */
+		EClass SOLAR_PANEL = eINSTANCE.getSolarPanel();
+
+		/**
+		 * The meta object literal for the '<em><b>Mpp Voltage</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SOLAR_PANEL__MPP_VOLTAGE = eINSTANCE.getSolarPanel_MppVoltage();
+
+		/**
+		 * The meta object literal for the '<em><b>Mpp Current</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SOLAR_PANEL__MPP_CURRENT = eINSTANCE.getSolarPanel_MppCurrent();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.InverterImpl <em>Inverter</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.InverterImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getInverter()
+		 * @generated
+		 */
+		EClass INVERTER = eINSTANCE.getInverter();
+
+		/**
+		 * The meta object literal for the '<em><b>Max DC Voltage</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INVERTER__MAX_DC_VOLTAGE = eINSTANCE.getInverter_MaxDCVoltage();
+
+		/**
+		 * The meta object literal for the '<em><b>Mac DC Current</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INVERTER__MAC_DC_CURRENT = eINSTANCE.getInverter_MacDCCurrent();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.ManufacturerImpl <em>Manufacturer</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.ManufacturerImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getManufacturer()
+		 * @generated
+		 */
+		EClass MANUFACTURER = eINSTANCE.getManufacturer();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute MANUFACTURER__NAME = eINSTANCE.getManufacturer_Name();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.ChemicalDeviceImpl <em>Chemical Device</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.ChemicalDeviceImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getChemicalDevice()
+		 * @generated
+		 */
+		EClass CHEMICAL_DEVICE = eINSTANCE.getChemicalDevice();
+
+		/**
+		 * The meta object literal for the '<em><b>Installed Thermal Power</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER = eINSTANCE.getChemicalDevice_InstalledThermalPower();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.EnergyComponentImpl <em>Energy Component</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.EnergyComponentImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getEnergyComponent()
+		 * @generated
+		 */
+		EClass ENERGY_COMPONENT = eINSTANCE.getEnergyComponent();
+
+		/**
+		 * The meta object literal for the '<em><b>Model Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ENERGY_COMPONENT__MODEL_NAME = eINSTANCE.getEnergyComponent_ModelName();
+
+		/**
+		 * The meta object literal for the '<em><b>Revision Year</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ENERGY_COMPONENT__REVISION_YEAR = eINSTANCE.getEnergyComponent_RevisionYear();
+
+		/**
+		 * The meta object literal for the '<em><b>Produced By</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ENERGY_COMPONENT__PRODUCED_BY = eINSTANCE.getEnergyComponent_ProducedBy();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.impl.ElectricalDeviceImpl <em>Electrical Device</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.impl.ElectricalDeviceImpl
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getElectricalDevice()
+		 * @generated
+		 */
+		EClass ELECTRICAL_DEVICE = eINSTANCE.getElectricalDevice();
+
+		/**
+		 * The meta object literal for the '<em><b>Nominal Power</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ELECTRICAL_DEVICE__NOMINAL_POWER = eINSTANCE.getElectricalDevice_NominalPower();
+
+		/**
+		 * The meta object literal for the '{@link org.example.democatalog.BoilerType <em>Boiler Type</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.example.democatalog.BoilerType
+		 * @see org.example.democatalog.impl.DemocatalogPackageImpl#getBoilerType()
+		 * @generated
+		 */
+		EEnum BOILER_TYPE = eINSTANCE.getBoilerType();
+
+	}
+
+} //DemocatalogPackage
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/ElectricalDevice.java b/org.example.democatalog/src-gen/org/example/democatalog/ElectricalDevice.java
new file mode 100644
index 0000000000000000000000000000000000000000..506ef5dc51b8c4aaf6b6d8a669de5d969bb1933f
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/ElectricalDevice.java
@@ -0,0 +1,45 @@
+/**
+ */
+package org.example.democatalog;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Electrical Device</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.ElectricalDevice#getNominalPower <em>Nominal Power</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getElectricalDevice()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ElectricalDevice extends EnergyComponent {
+	/**
+	 * Returns the value of the '<em><b>Nominal Power</b></em>' attribute.
+	 * The default value is <code>"0.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Nominal Power</em>' attribute.
+	 * @see #setNominalPower(double)
+	 * @see org.example.democatalog.DemocatalogPackage#getElectricalDevice_NominalPower()
+	 * @model default="0.0" required="true"
+	 * @generated
+	 */
+	double getNominalPower();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.ElectricalDevice#getNominalPower <em>Nominal Power</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Nominal Power</em>' attribute.
+	 * @see #getNominalPower()
+	 * @generated
+	 */
+	void setNominalPower(double value);
+
+} // ElectricalDevice
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/EnergyComponent.java b/org.example.democatalog/src-gen/org/example/democatalog/EnergyComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..13c1f2a1f0b08c5eca327cad313468dd2a80ae60
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/EnergyComponent.java
@@ -0,0 +1,92 @@
+/**
+ */
+package org.example.democatalog;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Energy Component</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.EnergyComponent#getModelName <em>Model Name</em>}</li>
+ *   <li>{@link org.example.democatalog.EnergyComponent#getRevisionYear <em>Revision Year</em>}</li>
+ *   <li>{@link org.example.democatalog.EnergyComponent#getProducedBy <em>Produced By</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getEnergyComponent()
+ * @model abstract="true"
+ * @generated
+ */
+public interface EnergyComponent extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Model Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Model Name</em>' attribute.
+	 * @see #setModelName(String)
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponent_ModelName()
+	 * @model required="true"
+	 * @generated
+	 */
+	String getModelName();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.EnergyComponent#getModelName <em>Model Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Model Name</em>' attribute.
+	 * @see #getModelName()
+	 * @generated
+	 */
+	void setModelName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Revision Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Revision Year</em>' attribute.
+	 * @see #setRevisionYear(int)
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponent_RevisionYear()
+	 * @model
+	 * @generated
+	 */
+	int getRevisionYear();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.EnergyComponent#getRevisionYear <em>Revision Year</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Revision Year</em>' attribute.
+	 * @see #getRevisionYear()
+	 * @generated
+	 */
+	void setRevisionYear(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Produced By</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Produced By</em>' reference.
+	 * @see #setProducedBy(Manufacturer)
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponent_ProducedBy()
+	 * @model required="true"
+	 * @generated
+	 */
+	Manufacturer getProducedBy();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.EnergyComponent#getProducedBy <em>Produced By</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Produced By</em>' reference.
+	 * @see #getProducedBy()
+	 * @generated
+	 */
+	void setProducedBy(Manufacturer value);
+
+} // EnergyComponent
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/EnergyComponentCatalog.java b/org.example.democatalog/src-gen/org/example/democatalog/EnergyComponentCatalog.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ae4c3ea403fd4023d68d476fd3934a3fc5296f2
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/EnergyComponentCatalog.java
@@ -0,0 +1,113 @@
+/**
+ */
+package org.example.democatalog;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Energy Component Catalog</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.EnergyComponentCatalog#getAuthor <em>Author</em>}</li>
+ *   <li>{@link org.example.democatalog.EnergyComponentCatalog#getBoilers <em>Boilers</em>}</li>
+ *   <li>{@link org.example.democatalog.EnergyComponentCatalog#getChps <em>Chps</em>}</li>
+ *   <li>{@link org.example.democatalog.EnergyComponentCatalog#getSolarPanels <em>Solar Panels</em>}</li>
+ *   <li>{@link org.example.democatalog.EnergyComponentCatalog#getInverters <em>Inverters</em>}</li>
+ *   <li>{@link org.example.democatalog.EnergyComponentCatalog#getManufacturers <em>Manufacturers</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getEnergyComponentCatalog()
+ * @model
+ * @generated
+ */
+public interface EnergyComponentCatalog extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Author</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Author</em>' attribute.
+	 * @see #setAuthor(String)
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponentCatalog_Author()
+	 * @model required="true"
+	 * @generated
+	 */
+	String getAuthor();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.EnergyComponentCatalog#getAuthor <em>Author</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Author</em>' attribute.
+	 * @see #getAuthor()
+	 * @generated
+	 */
+	void setAuthor(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Boilers</b></em>' containment reference list.
+	 * The list contents are of type {@link org.example.democatalog.Boiler}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Boilers</em>' containment reference list.
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponentCatalog_Boilers()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Boiler> getBoilers();
+
+	/**
+	 * Returns the value of the '<em><b>Chps</b></em>' containment reference list.
+	 * The list contents are of type {@link org.example.democatalog.CombinedHeatPower}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Chps</em>' containment reference list.
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponentCatalog_Chps()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<CombinedHeatPower> getChps();
+
+	/**
+	 * Returns the value of the '<em><b>Solar Panels</b></em>' containment reference list.
+	 * The list contents are of type {@link org.example.democatalog.SolarPanel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Solar Panels</em>' containment reference list.
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponentCatalog_SolarPanels()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<SolarPanel> getSolarPanels();
+
+	/**
+	 * Returns the value of the '<em><b>Inverters</b></em>' containment reference list.
+	 * The list contents are of type {@link org.example.democatalog.Inverter}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Inverters</em>' containment reference list.
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponentCatalog_Inverters()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Inverter> getInverters();
+
+	/**
+	 * Returns the value of the '<em><b>Manufacturers</b></em>' containment reference list.
+	 * The list contents are of type {@link org.example.democatalog.Manufacturer}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Manufacturers</em>' containment reference list.
+	 * @see org.example.democatalog.DemocatalogPackage#getEnergyComponentCatalog_Manufacturers()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Manufacturer> getManufacturers();
+
+} // EnergyComponentCatalog
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/Inverter.java b/org.example.democatalog/src-gen/org/example/democatalog/Inverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..2615b0f2f80ff245ff7362131fa578b633949da9
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/Inverter.java
@@ -0,0 +1,69 @@
+/**
+ */
+package org.example.democatalog;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Inverter</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.Inverter#getMaxDCVoltage <em>Max DC Voltage</em>}</li>
+ *   <li>{@link org.example.democatalog.Inverter#getMacDCCurrent <em>Mac DC Current</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getInverter()
+ * @model
+ * @generated
+ */
+public interface Inverter extends ElectricalDevice {
+	/**
+	 * Returns the value of the '<em><b>Max DC Voltage</b></em>' attribute.
+	 * The default value is <code>"0.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Max DC Voltage</em>' attribute.
+	 * @see #setMaxDCVoltage(double)
+	 * @see org.example.democatalog.DemocatalogPackage#getInverter_MaxDCVoltage()
+	 * @model default="0.0" required="true"
+	 * @generated
+	 */
+	double getMaxDCVoltage();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.Inverter#getMaxDCVoltage <em>Max DC Voltage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Max DC Voltage</em>' attribute.
+	 * @see #getMaxDCVoltage()
+	 * @generated
+	 */
+	void setMaxDCVoltage(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Mac DC Current</b></em>' attribute.
+	 * The default value is <code>"0.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Mac DC Current</em>' attribute.
+	 * @see #setMacDCCurrent(double)
+	 * @see org.example.democatalog.DemocatalogPackage#getInverter_MacDCCurrent()
+	 * @model default="0.0" required="true"
+	 * @generated
+	 */
+	double getMacDCCurrent();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.Inverter#getMacDCCurrent <em>Mac DC Current</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Mac DC Current</em>' attribute.
+	 * @see #getMacDCCurrent()
+	 * @generated
+	 */
+	void setMacDCCurrent(double value);
+
+} // Inverter
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/Manufacturer.java b/org.example.democatalog/src-gen/org/example/democatalog/Manufacturer.java
new file mode 100644
index 0000000000000000000000000000000000000000..8608d40b73ba662572977586130c00e07dc18de6
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/Manufacturer.java
@@ -0,0 +1,47 @@
+/**
+ */
+package org.example.democatalog;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Manufacturer</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.Manufacturer#getName <em>Name</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getManufacturer()
+ * @model
+ * @generated
+ */
+public interface Manufacturer extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * The default value is <code>""</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.example.democatalog.DemocatalogPackage#getManufacturer_Name()
+	 * @model default="" required="true"
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.Manufacturer#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+} // Manufacturer
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/SolarPanel.java b/org.example.democatalog/src-gen/org/example/democatalog/SolarPanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c2bd48a9aa54a9e5b2afb5bfb932864ea7e826b
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/SolarPanel.java
@@ -0,0 +1,67 @@
+/**
+ */
+package org.example.democatalog;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Solar Panel</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.SolarPanel#getMppVoltage <em>Mpp Voltage</em>}</li>
+ *   <li>{@link org.example.democatalog.SolarPanel#getMppCurrent <em>Mpp Current</em>}</li>
+ * </ul>
+ *
+ * @see org.example.democatalog.DemocatalogPackage#getSolarPanel()
+ * @model
+ * @generated
+ */
+public interface SolarPanel extends ElectricalDevice {
+	/**
+	 * Returns the value of the '<em><b>Mpp Voltage</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Mpp Voltage</em>' attribute.
+	 * @see #setMppVoltage(double)
+	 * @see org.example.democatalog.DemocatalogPackage#getSolarPanel_MppVoltage()
+	 * @model required="true"
+	 * @generated
+	 */
+	double getMppVoltage();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.SolarPanel#getMppVoltage <em>Mpp Voltage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Mpp Voltage</em>' attribute.
+	 * @see #getMppVoltage()
+	 * @generated
+	 */
+	void setMppVoltage(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Mpp Current</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Mpp Current</em>' attribute.
+	 * @see #setMppCurrent(double)
+	 * @see org.example.democatalog.DemocatalogPackage#getSolarPanel_MppCurrent()
+	 * @model required="true"
+	 * @generated
+	 */
+	double getMppCurrent();
+
+	/**
+	 * Sets the value of the '{@link org.example.democatalog.SolarPanel#getMppCurrent <em>Mpp Current</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Mpp Current</em>' attribute.
+	 * @see #getMppCurrent()
+	 * @generated
+	 */
+	void setMppCurrent(double value);
+
+} // SolarPanel
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/BoilerImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/BoilerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d5f72e888ed49c6f5a446169ab1951ac3e7bff60
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/BoilerImpl.java
@@ -0,0 +1,165 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.example.democatalog.Boiler;
+import org.example.democatalog.BoilerType;
+import org.example.democatalog.DemocatalogPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Boiler</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.BoilerImpl#getBoilerType <em>Boiler Type</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class BoilerImpl extends ChemicalDeviceImpl implements Boiler {
+	/**
+	 * The default value of the '{@link #getBoilerType() <em>Boiler Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBoilerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final BoilerType BOILER_TYPE_EDEFAULT = BoilerType.LOW_TEMPERATURE;
+
+	/**
+	 * The cached value of the '{@link #getBoilerType() <em>Boiler Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBoilerType()
+	 * @generated
+	 * @ordered
+	 */
+	protected BoilerType boilerType = BOILER_TYPE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected BoilerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.BOILER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BoilerType getBoilerType() {
+		return boilerType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBoilerType(BoilerType newBoilerType) {
+		BoilerType oldBoilerType = boilerType;
+		boilerType = newBoilerType == null ? BOILER_TYPE_EDEFAULT : newBoilerType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.BOILER__BOILER_TYPE, oldBoilerType,
+					boilerType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DemocatalogPackage.BOILER__BOILER_TYPE:
+			return getBoilerType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DemocatalogPackage.BOILER__BOILER_TYPE:
+			setBoilerType((BoilerType) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.BOILER__BOILER_TYPE:
+			setBoilerType(BOILER_TYPE_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.BOILER__BOILER_TYPE:
+			return boilerType != BOILER_TYPE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (boilerType: ");
+		result.append(boilerType);
+		result.append(')');
+		return result.toString();
+	}
+
+} //BoilerImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/ChemicalDeviceImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/ChemicalDeviceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..43dc55ba6575da8f79cccc2fa9bf8f32da45a56b
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/ChemicalDeviceImpl.java
@@ -0,0 +1,165 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.example.democatalog.ChemicalDevice;
+import org.example.democatalog.DemocatalogPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Chemical Device</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.ChemicalDeviceImpl#getInstalledThermalPower <em>Installed Thermal Power</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ChemicalDeviceImpl extends EnergyComponentImpl implements ChemicalDevice {
+	/**
+	 * The default value of the '{@link #getInstalledThermalPower() <em>Installed Thermal Power</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInstalledThermalPower()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double INSTALLED_THERMAL_POWER_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getInstalledThermalPower() <em>Installed Thermal Power</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInstalledThermalPower()
+	 * @generated
+	 * @ordered
+	 */
+	protected double installedThermalPower = INSTALLED_THERMAL_POWER_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ChemicalDeviceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.CHEMICAL_DEVICE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getInstalledThermalPower() {
+		return installedThermalPower;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInstalledThermalPower(double newInstalledThermalPower) {
+		double oldInstalledThermalPower = installedThermalPower;
+		installedThermalPower = newInstalledThermalPower;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+					DemocatalogPackage.CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER, oldInstalledThermalPower,
+					installedThermalPower));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DemocatalogPackage.CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER:
+			return getInstalledThermalPower();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DemocatalogPackage.CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER:
+			setInstalledThermalPower((Double) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER:
+			setInstalledThermalPower(INSTALLED_THERMAL_POWER_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER:
+			return installedThermalPower != INSTALLED_THERMAL_POWER_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (installedThermalPower: ");
+		result.append(installedThermalPower);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ChemicalDeviceImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/CombinedHeatPowerImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/CombinedHeatPowerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..14eed755bb296143b5484534fdc0295ab076480a
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/CombinedHeatPowerImpl.java
@@ -0,0 +1,165 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.example.democatalog.CombinedHeatPower;
+import org.example.democatalog.DemocatalogPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Combined Heat Power</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.CombinedHeatPowerImpl#getThermalEfficiency <em>Thermal Efficiency</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class CombinedHeatPowerImpl extends ChemicalDeviceImpl implements CombinedHeatPower {
+	/**
+	 * The default value of the '{@link #getThermalEfficiency() <em>Thermal Efficiency</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThermalEfficiency()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double THERMAL_EFFICIENCY_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getThermalEfficiency() <em>Thermal Efficiency</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getThermalEfficiency()
+	 * @generated
+	 * @ordered
+	 */
+	protected double thermalEfficiency = THERMAL_EFFICIENCY_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CombinedHeatPowerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.COMBINED_HEAT_POWER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getThermalEfficiency() {
+		return thermalEfficiency;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setThermalEfficiency(double newThermalEfficiency) {
+		double oldThermalEfficiency = thermalEfficiency;
+		thermalEfficiency = newThermalEfficiency;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+					DemocatalogPackage.COMBINED_HEAT_POWER__THERMAL_EFFICIENCY, oldThermalEfficiency,
+					thermalEfficiency));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DemocatalogPackage.COMBINED_HEAT_POWER__THERMAL_EFFICIENCY:
+			return getThermalEfficiency();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DemocatalogPackage.COMBINED_HEAT_POWER__THERMAL_EFFICIENCY:
+			setThermalEfficiency((Double) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.COMBINED_HEAT_POWER__THERMAL_EFFICIENCY:
+			setThermalEfficiency(THERMAL_EFFICIENCY_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.COMBINED_HEAT_POWER__THERMAL_EFFICIENCY:
+			return thermalEfficiency != THERMAL_EFFICIENCY_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (thermalEfficiency: ");
+		result.append(thermalEfficiency);
+		result.append(')');
+		return result.toString();
+	}
+
+} //CombinedHeatPowerImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/DemocatalogFactoryImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/DemocatalogFactoryImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..32deb2169d1048ff63e5e63e52d0653a2d7abb3d
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/DemocatalogFactoryImpl.java
@@ -0,0 +1,209 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.example.democatalog.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DemocatalogFactoryImpl extends EFactoryImpl implements DemocatalogFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DemocatalogFactory init() {
+		try {
+			DemocatalogFactory theDemocatalogFactory = (DemocatalogFactory) EPackage.Registry.INSTANCE
+					.getEFactory(DemocatalogPackage.eNS_URI);
+			if (theDemocatalogFactory != null) {
+				return theDemocatalogFactory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new DemocatalogFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DemocatalogFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG:
+			return createEnergyComponentCatalog();
+		case DemocatalogPackage.BOILER:
+			return createBoiler();
+		case DemocatalogPackage.COMBINED_HEAT_POWER:
+			return createCombinedHeatPower();
+		case DemocatalogPackage.SOLAR_PANEL:
+			return createSolarPanel();
+		case DemocatalogPackage.INVERTER:
+			return createInverter();
+		case DemocatalogPackage.MANUFACTURER:
+			return createManufacturer();
+		default:
+			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+		case DemocatalogPackage.BOILER_TYPE:
+			return createBoilerTypeFromString(eDataType, initialValue);
+		default:
+			throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+		case DemocatalogPackage.BOILER_TYPE:
+			return convertBoilerTypeToString(eDataType, instanceValue);
+		default:
+			throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EnergyComponentCatalog createEnergyComponentCatalog() {
+		EnergyComponentCatalogImpl energyComponentCatalog = new EnergyComponentCatalogImpl();
+		return energyComponentCatalog;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Boiler createBoiler() {
+		BoilerImpl boiler = new BoilerImpl();
+		return boiler;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CombinedHeatPower createCombinedHeatPower() {
+		CombinedHeatPowerImpl combinedHeatPower = new CombinedHeatPowerImpl();
+		return combinedHeatPower;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SolarPanel createSolarPanel() {
+		SolarPanelImpl solarPanel = new SolarPanelImpl();
+		return solarPanel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Inverter createInverter() {
+		InverterImpl inverter = new InverterImpl();
+		return inverter;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Manufacturer createManufacturer() {
+		ManufacturerImpl manufacturer = new ManufacturerImpl();
+		return manufacturer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BoilerType createBoilerTypeFromString(EDataType eDataType, String initialValue) {
+		BoilerType result = BoilerType.get(initialValue);
+		if (result == null)
+			throw new IllegalArgumentException(
+					"The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertBoilerTypeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DemocatalogPackage getDemocatalogPackage() {
+		return (DemocatalogPackage) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static DemocatalogPackage getPackage() {
+		return DemocatalogPackage.eINSTANCE;
+	}
+
+} //DemocatalogFactoryImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/DemocatalogPackageImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/DemocatalogPackageImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..e85f4d0dcd6a8ceecaad62aee308648594567adc
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/DemocatalogPackageImpl.java
@@ -0,0 +1,612 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.example.democatalog.Boiler;
+import org.example.democatalog.BoilerType;
+import org.example.democatalog.ChemicalDevice;
+import org.example.democatalog.CombinedHeatPower;
+import org.example.democatalog.DemocatalogFactory;
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.ElectricalDevice;
+import org.example.democatalog.EnergyComponent;
+import org.example.democatalog.EnergyComponentCatalog;
+import org.example.democatalog.Inverter;
+import org.example.democatalog.Manufacturer;
+import org.example.democatalog.SolarPanel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DemocatalogPackageImpl extends EPackageImpl implements DemocatalogPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass energyComponentCatalogEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass boilerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass combinedHeatPowerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass solarPanelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass inverterEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass manufacturerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass chemicalDeviceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass energyComponentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass electricalDeviceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum boilerTypeEEnum = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.example.democatalog.DemocatalogPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private DemocatalogPackageImpl() {
+		super(eNS_URI, DemocatalogFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 *
+	 * <p>This method is used to initialize {@link DemocatalogPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static DemocatalogPackage init() {
+		if (isInited)
+			return (DemocatalogPackage) EPackage.Registry.INSTANCE.getEPackage(DemocatalogPackage.eNS_URI);
+
+		// Obtain or create and register package
+		Object registeredDemocatalogPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+		DemocatalogPackageImpl theDemocatalogPackage = registeredDemocatalogPackage instanceof DemocatalogPackageImpl
+				? (DemocatalogPackageImpl) registeredDemocatalogPackage
+				: new DemocatalogPackageImpl();
+
+		isInited = true;
+
+		// Create package meta-data objects
+		theDemocatalogPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theDemocatalogPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theDemocatalogPackage.freeze();
+
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(DemocatalogPackage.eNS_URI, theDemocatalogPackage);
+		return theDemocatalogPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEnergyComponentCatalog() {
+		return energyComponentCatalogEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getEnergyComponentCatalog_Author() {
+		return (EAttribute) energyComponentCatalogEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEnergyComponentCatalog_Boilers() {
+		return (EReference) energyComponentCatalogEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEnergyComponentCatalog_Chps() {
+		return (EReference) energyComponentCatalogEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEnergyComponentCatalog_SolarPanels() {
+		return (EReference) energyComponentCatalogEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEnergyComponentCatalog_Inverters() {
+		return (EReference) energyComponentCatalogEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEnergyComponentCatalog_Manufacturers() {
+		return (EReference) energyComponentCatalogEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getBoiler() {
+		return boilerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getBoiler_BoilerType() {
+		return (EAttribute) boilerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getCombinedHeatPower() {
+		return combinedHeatPowerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getCombinedHeatPower_ThermalEfficiency() {
+		return (EAttribute) combinedHeatPowerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSolarPanel() {
+		return solarPanelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSolarPanel_MppVoltage() {
+		return (EAttribute) solarPanelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSolarPanel_MppCurrent() {
+		return (EAttribute) solarPanelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getInverter() {
+		return inverterEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getInverter_MaxDCVoltage() {
+		return (EAttribute) inverterEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getInverter_MacDCCurrent() {
+		return (EAttribute) inverterEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getManufacturer() {
+		return manufacturerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getManufacturer_Name() {
+		return (EAttribute) manufacturerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getChemicalDevice() {
+		return chemicalDeviceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getChemicalDevice_InstalledThermalPower() {
+		return (EAttribute) chemicalDeviceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEnergyComponent() {
+		return energyComponentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getEnergyComponent_ModelName() {
+		return (EAttribute) energyComponentEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getEnergyComponent_RevisionYear() {
+		return (EAttribute) energyComponentEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEnergyComponent_ProducedBy() {
+		return (EReference) energyComponentEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getElectricalDevice() {
+		return electricalDeviceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getElectricalDevice_NominalPower() {
+		return (EAttribute) electricalDeviceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getBoilerType() {
+		return boilerTypeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DemocatalogFactory getDemocatalogFactory() {
+		return (DemocatalogFactory) getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated)
+			return;
+		isCreated = true;
+
+		// Create classes and their features
+		energyComponentCatalogEClass = createEClass(ENERGY_COMPONENT_CATALOG);
+		createEAttribute(energyComponentCatalogEClass, ENERGY_COMPONENT_CATALOG__AUTHOR);
+		createEReference(energyComponentCatalogEClass, ENERGY_COMPONENT_CATALOG__BOILERS);
+		createEReference(energyComponentCatalogEClass, ENERGY_COMPONENT_CATALOG__CHPS);
+		createEReference(energyComponentCatalogEClass, ENERGY_COMPONENT_CATALOG__SOLAR_PANELS);
+		createEReference(energyComponentCatalogEClass, ENERGY_COMPONENT_CATALOG__INVERTERS);
+		createEReference(energyComponentCatalogEClass, ENERGY_COMPONENT_CATALOG__MANUFACTURERS);
+
+		boilerEClass = createEClass(BOILER);
+		createEAttribute(boilerEClass, BOILER__BOILER_TYPE);
+
+		combinedHeatPowerEClass = createEClass(COMBINED_HEAT_POWER);
+		createEAttribute(combinedHeatPowerEClass, COMBINED_HEAT_POWER__THERMAL_EFFICIENCY);
+
+		solarPanelEClass = createEClass(SOLAR_PANEL);
+		createEAttribute(solarPanelEClass, SOLAR_PANEL__MPP_VOLTAGE);
+		createEAttribute(solarPanelEClass, SOLAR_PANEL__MPP_CURRENT);
+
+		inverterEClass = createEClass(INVERTER);
+		createEAttribute(inverterEClass, INVERTER__MAX_DC_VOLTAGE);
+		createEAttribute(inverterEClass, INVERTER__MAC_DC_CURRENT);
+
+		manufacturerEClass = createEClass(MANUFACTURER);
+		createEAttribute(manufacturerEClass, MANUFACTURER__NAME);
+
+		chemicalDeviceEClass = createEClass(CHEMICAL_DEVICE);
+		createEAttribute(chemicalDeviceEClass, CHEMICAL_DEVICE__INSTALLED_THERMAL_POWER);
+
+		energyComponentEClass = createEClass(ENERGY_COMPONENT);
+		createEAttribute(energyComponentEClass, ENERGY_COMPONENT__MODEL_NAME);
+		createEAttribute(energyComponentEClass, ENERGY_COMPONENT__REVISION_YEAR);
+		createEReference(energyComponentEClass, ENERGY_COMPONENT__PRODUCED_BY);
+
+		electricalDeviceEClass = createEClass(ELECTRICAL_DEVICE);
+		createEAttribute(electricalDeviceEClass, ELECTRICAL_DEVICE__NOMINAL_POWER);
+
+		// Create enums
+		boilerTypeEEnum = createEEnum(BOILER_TYPE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized)
+			return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		boilerEClass.getESuperTypes().add(this.getChemicalDevice());
+		combinedHeatPowerEClass.getESuperTypes().add(this.getChemicalDevice());
+		solarPanelEClass.getESuperTypes().add(this.getElectricalDevice());
+		inverterEClass.getESuperTypes().add(this.getElectricalDevice());
+		chemicalDeviceEClass.getESuperTypes().add(this.getEnergyComponent());
+		electricalDeviceEClass.getESuperTypes().add(this.getEnergyComponent());
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(energyComponentCatalogEClass, EnergyComponentCatalog.class, "EnergyComponentCatalog", !IS_ABSTRACT,
+				!IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getEnergyComponentCatalog_Author(), ecorePackage.getEString(), "author", null, 1, 1,
+				EnergyComponentCatalog.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getEnergyComponentCatalog_Boilers(), this.getBoiler(), null, "boilers", null, 0, -1,
+				EnergyComponentCatalog.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+				!IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getEnergyComponentCatalog_Chps(), this.getCombinedHeatPower(), null, "chps", null, 0, -1,
+				EnergyComponentCatalog.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+				!IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getEnergyComponentCatalog_SolarPanels(), this.getSolarPanel(), null, "solarPanels", null, 0, -1,
+				EnergyComponentCatalog.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+				!IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getEnergyComponentCatalog_Inverters(), this.getInverter(), null, "inverters", null, 0, -1,
+				EnergyComponentCatalog.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+				!IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getEnergyComponentCatalog_Manufacturers(), this.getManufacturer(), null, "manufacturers", null,
+				0, -1, EnergyComponentCatalog.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+				!IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(boilerEClass, Boiler.class, "Boiler", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getBoiler_BoilerType(), this.getBoilerType(), "boilerType", null, 1, 1, Boiler.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(combinedHeatPowerEClass, CombinedHeatPower.class, "CombinedHeatPower", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getCombinedHeatPower_ThermalEfficiency(), ecorePackage.getEDouble(), "thermalEfficiency", "0.0",
+				1, 1, CombinedHeatPower.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(solarPanelEClass, SolarPanel.class, "SolarPanel", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getSolarPanel_MppVoltage(), ecorePackage.getEDouble(), "mppVoltage", null, 1, 1,
+				SolarPanel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+				!IS_DERIVED, IS_ORDERED);
+		initEAttribute(getSolarPanel_MppCurrent(), ecorePackage.getEDouble(), "mppCurrent", null, 1, 1,
+				SolarPanel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+				!IS_DERIVED, IS_ORDERED);
+
+		initEClass(inverterEClass, Inverter.class, "Inverter", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getInverter_MaxDCVoltage(), ecorePackage.getEDouble(), "maxDCVoltage", "0.0", 1, 1,
+				Inverter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+				!IS_DERIVED, IS_ORDERED);
+		initEAttribute(getInverter_MacDCCurrent(), ecorePackage.getEDouble(), "macDCCurrent", "0.0", 1, 1,
+				Inverter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+				!IS_DERIVED, IS_ORDERED);
+
+		initEClass(manufacturerEClass, Manufacturer.class, "Manufacturer", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getManufacturer_Name(), ecorePackage.getEString(), "name", "", 1, 1, Manufacturer.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(chemicalDeviceEClass, ChemicalDevice.class, "ChemicalDevice", IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getChemicalDevice_InstalledThermalPower(), ecorePackage.getEDouble(), "installedThermalPower",
+				"0.0", 1, 1, ChemicalDevice.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(energyComponentEClass, EnergyComponent.class, "EnergyComponent", IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getEnergyComponent_ModelName(), ecorePackage.getEString(), "modelName", null, 1, 1,
+				EnergyComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+				!IS_DERIVED, IS_ORDERED);
+		initEAttribute(getEnergyComponent_RevisionYear(), ecorePackage.getEInt(), "revisionYear", null, 0, 1,
+				EnergyComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+				!IS_DERIVED, IS_ORDERED);
+		initEReference(getEnergyComponent_ProducedBy(), this.getManufacturer(), null, "producedBy", null, 1, 1,
+				EnergyComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+				!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(electricalDeviceEClass, ElectricalDevice.class, "ElectricalDevice", IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getElectricalDevice_NominalPower(), ecorePackage.getEDouble(), "nominalPower", "0.0", 1, 1,
+				ElectricalDevice.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+				!IS_DERIVED, IS_ORDERED);
+
+		// Initialize enums and add enum literals
+		initEEnum(boilerTypeEEnum, BoilerType.class, "BoilerType");
+		addEEnumLiteral(boilerTypeEEnum, BoilerType.LOW_TEMPERATURE);
+		addEEnumLiteral(boilerTypeEEnum, BoilerType.CONDENSING);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //DemocatalogPackageImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/ElectricalDeviceImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/ElectricalDeviceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..9526716cbf32459c8cf258478bed62f1855aae8e
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/ElectricalDeviceImpl.java
@@ -0,0 +1,164 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.ElectricalDevice;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Electrical Device</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.ElectricalDeviceImpl#getNominalPower <em>Nominal Power</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ElectricalDeviceImpl extends EnergyComponentImpl implements ElectricalDevice {
+	/**
+	 * The default value of the '{@link #getNominalPower() <em>Nominal Power</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNominalPower()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double NOMINAL_POWER_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getNominalPower() <em>Nominal Power</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNominalPower()
+	 * @generated
+	 * @ordered
+	 */
+	protected double nominalPower = NOMINAL_POWER_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ElectricalDeviceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.ELECTRICAL_DEVICE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getNominalPower() {
+		return nominalPower;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNominalPower(double newNominalPower) {
+		double oldNominalPower = nominalPower;
+		nominalPower = newNominalPower;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.ELECTRICAL_DEVICE__NOMINAL_POWER,
+					oldNominalPower, nominalPower));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DemocatalogPackage.ELECTRICAL_DEVICE__NOMINAL_POWER:
+			return getNominalPower();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DemocatalogPackage.ELECTRICAL_DEVICE__NOMINAL_POWER:
+			setNominalPower((Double) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.ELECTRICAL_DEVICE__NOMINAL_POWER:
+			setNominalPower(NOMINAL_POWER_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.ELECTRICAL_DEVICE__NOMINAL_POWER:
+			return nominalPower != NOMINAL_POWER_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (nominalPower: ");
+		result.append(nominalPower);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ElectricalDeviceImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/EnergyComponentCatalogImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/EnergyComponentCatalogImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b24eb82fd318ad3c19e0696edfe94e21612e735
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/EnergyComponentCatalogImpl.java
@@ -0,0 +1,377 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+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.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.example.democatalog.Boiler;
+import org.example.democatalog.CombinedHeatPower;
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.EnergyComponentCatalog;
+import org.example.democatalog.Inverter;
+import org.example.democatalog.Manufacturer;
+import org.example.democatalog.SolarPanel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Energy Component Catalog</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentCatalogImpl#getAuthor <em>Author</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentCatalogImpl#getBoilers <em>Boilers</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentCatalogImpl#getChps <em>Chps</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentCatalogImpl#getSolarPanels <em>Solar Panels</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentCatalogImpl#getInverters <em>Inverters</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentCatalogImpl#getManufacturers <em>Manufacturers</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EnergyComponentCatalogImpl extends MinimalEObjectImpl.Container implements EnergyComponentCatalog {
+	/**
+	 * The default value of the '{@link #getAuthor() <em>Author</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAuthor()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String AUTHOR_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getAuthor() <em>Author</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAuthor()
+	 * @generated
+	 * @ordered
+	 */
+	protected String author = AUTHOR_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getBoilers() <em>Boilers</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBoilers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Boiler> boilers;
+
+	/**
+	 * The cached value of the '{@link #getChps() <em>Chps</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getChps()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<CombinedHeatPower> chps;
+
+	/**
+	 * The cached value of the '{@link #getSolarPanels() <em>Solar Panels</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSolarPanels()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<SolarPanel> solarPanels;
+
+	/**
+	 * The cached value of the '{@link #getInverters() <em>Inverters</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInverters()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Inverter> inverters;
+
+	/**
+	 * The cached value of the '{@link #getManufacturers() <em>Manufacturers</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getManufacturers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Manufacturer> manufacturers;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EnergyComponentCatalogImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.ENERGY_COMPONENT_CATALOG;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getAuthor() {
+		return author;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAuthor(String newAuthor) {
+		String oldAuthor = author;
+		author = newAuthor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.ENERGY_COMPONENT_CATALOG__AUTHOR,
+					oldAuthor, author));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Boiler> getBoilers() {
+		if (boilers == null) {
+			boilers = new EObjectContainmentEList<Boiler>(Boiler.class, this,
+					DemocatalogPackage.ENERGY_COMPONENT_CATALOG__BOILERS);
+		}
+		return boilers;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<CombinedHeatPower> getChps() {
+		if (chps == null) {
+			chps = new EObjectContainmentEList<CombinedHeatPower>(CombinedHeatPower.class, this,
+					DemocatalogPackage.ENERGY_COMPONENT_CATALOG__CHPS);
+		}
+		return chps;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<SolarPanel> getSolarPanels() {
+		if (solarPanels == null) {
+			solarPanels = new EObjectContainmentEList<SolarPanel>(SolarPanel.class, this,
+					DemocatalogPackage.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS);
+		}
+		return solarPanels;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Inverter> getInverters() {
+		if (inverters == null) {
+			inverters = new EObjectContainmentEList<Inverter>(Inverter.class, this,
+					DemocatalogPackage.ENERGY_COMPONENT_CATALOG__INVERTERS);
+		}
+		return inverters;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Manufacturer> getManufacturers() {
+		if (manufacturers == null) {
+			manufacturers = new EObjectContainmentEList<Manufacturer>(Manufacturer.class, this,
+					DemocatalogPackage.ENERGY_COMPONENT_CATALOG__MANUFACTURERS);
+		}
+		return manufacturers;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__BOILERS:
+			return ((InternalEList<?>) getBoilers()).basicRemove(otherEnd, msgs);
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__CHPS:
+			return ((InternalEList<?>) getChps()).basicRemove(otherEnd, msgs);
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS:
+			return ((InternalEList<?>) getSolarPanels()).basicRemove(otherEnd, msgs);
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__INVERTERS:
+			return ((InternalEList<?>) getInverters()).basicRemove(otherEnd, msgs);
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__MANUFACTURERS:
+			return ((InternalEList<?>) getManufacturers()).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 DemocatalogPackage.ENERGY_COMPONENT_CATALOG__AUTHOR:
+			return getAuthor();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__BOILERS:
+			return getBoilers();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__CHPS:
+			return getChps();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS:
+			return getSolarPanels();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__INVERTERS:
+			return getInverters();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__MANUFACTURERS:
+			return getManufacturers();
+		}
+		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 DemocatalogPackage.ENERGY_COMPONENT_CATALOG__AUTHOR:
+			setAuthor((String) newValue);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__BOILERS:
+			getBoilers().clear();
+			getBoilers().addAll((Collection<? extends Boiler>) newValue);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__CHPS:
+			getChps().clear();
+			getChps().addAll((Collection<? extends CombinedHeatPower>) newValue);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS:
+			getSolarPanels().clear();
+			getSolarPanels().addAll((Collection<? extends SolarPanel>) newValue);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__INVERTERS:
+			getInverters().clear();
+			getInverters().addAll((Collection<? extends Inverter>) newValue);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__MANUFACTURERS:
+			getManufacturers().clear();
+			getManufacturers().addAll((Collection<? extends Manufacturer>) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__AUTHOR:
+			setAuthor(AUTHOR_EDEFAULT);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__BOILERS:
+			getBoilers().clear();
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__CHPS:
+			getChps().clear();
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS:
+			getSolarPanels().clear();
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__INVERTERS:
+			getInverters().clear();
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__MANUFACTURERS:
+			getManufacturers().clear();
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__AUTHOR:
+			return AUTHOR_EDEFAULT == null ? author != null : !AUTHOR_EDEFAULT.equals(author);
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__BOILERS:
+			return boilers != null && !boilers.isEmpty();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__CHPS:
+			return chps != null && !chps.isEmpty();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__SOLAR_PANELS:
+			return solarPanels != null && !solarPanels.isEmpty();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__INVERTERS:
+			return inverters != null && !inverters.isEmpty();
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG__MANUFACTURERS:
+			return manufacturers != null && !manufacturers.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (author: ");
+		result.append(author);
+		result.append(')');
+		return result.toString();
+	}
+
+} //EnergyComponentCatalogImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/EnergyComponentImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/EnergyComponentImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc774c146e6f27a69c4f4f9014336a089b5590a3
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/EnergyComponentImpl.java
@@ -0,0 +1,285 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+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.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.EnergyComponent;
+import org.example.democatalog.Manufacturer;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Energy Component</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentImpl#getModelName <em>Model Name</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentImpl#getRevisionYear <em>Revision Year</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.EnergyComponentImpl#getProducedBy <em>Produced By</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class EnergyComponentImpl extends MinimalEObjectImpl.Container implements EnergyComponent {
+	/**
+	 * The default value of the '{@link #getModelName() <em>Model Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModelName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String MODEL_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getModelName() <em>Model Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModelName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String modelName = MODEL_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRevisionYear() <em>Revision Year</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRevisionYear()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int REVISION_YEAR_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getRevisionYear() <em>Revision Year</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRevisionYear()
+	 * @generated
+	 * @ordered
+	 */
+	protected int revisionYear = REVISION_YEAR_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getProducedBy() <em>Produced By</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProducedBy()
+	 * @generated
+	 * @ordered
+	 */
+	protected Manufacturer producedBy;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EnergyComponentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.ENERGY_COMPONENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getModelName() {
+		return modelName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModelName(String newModelName) {
+		String oldModelName = modelName;
+		modelName = newModelName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.ENERGY_COMPONENT__MODEL_NAME,
+					oldModelName, modelName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getRevisionYear() {
+		return revisionYear;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRevisionYear(int newRevisionYear) {
+		int oldRevisionYear = revisionYear;
+		revisionYear = newRevisionYear;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.ENERGY_COMPONENT__REVISION_YEAR,
+					oldRevisionYear, revisionYear));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Manufacturer getProducedBy() {
+		if (producedBy != null && producedBy.eIsProxy()) {
+			InternalEObject oldProducedBy = (InternalEObject) producedBy;
+			producedBy = (Manufacturer) eResolveProxy(oldProducedBy);
+			if (producedBy != oldProducedBy) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE,
+							DemocatalogPackage.ENERGY_COMPONENT__PRODUCED_BY, oldProducedBy, producedBy));
+			}
+		}
+		return producedBy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Manufacturer basicGetProducedBy() {
+		return producedBy;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProducedBy(Manufacturer newProducedBy) {
+		Manufacturer oldProducedBy = producedBy;
+		producedBy = newProducedBy;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.ENERGY_COMPONENT__PRODUCED_BY,
+					oldProducedBy, producedBy));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DemocatalogPackage.ENERGY_COMPONENT__MODEL_NAME:
+			return getModelName();
+		case DemocatalogPackage.ENERGY_COMPONENT__REVISION_YEAR:
+			return getRevisionYear();
+		case DemocatalogPackage.ENERGY_COMPONENT__PRODUCED_BY:
+			if (resolve)
+				return getProducedBy();
+			return basicGetProducedBy();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DemocatalogPackage.ENERGY_COMPONENT__MODEL_NAME:
+			setModelName((String) newValue);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT__REVISION_YEAR:
+			setRevisionYear((Integer) newValue);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT__PRODUCED_BY:
+			setProducedBy((Manufacturer) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.ENERGY_COMPONENT__MODEL_NAME:
+			setModelName(MODEL_NAME_EDEFAULT);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT__REVISION_YEAR:
+			setRevisionYear(REVISION_YEAR_EDEFAULT);
+			return;
+		case DemocatalogPackage.ENERGY_COMPONENT__PRODUCED_BY:
+			setProducedBy((Manufacturer) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.ENERGY_COMPONENT__MODEL_NAME:
+			return MODEL_NAME_EDEFAULT == null ? modelName != null : !MODEL_NAME_EDEFAULT.equals(modelName);
+		case DemocatalogPackage.ENERGY_COMPONENT__REVISION_YEAR:
+			return revisionYear != REVISION_YEAR_EDEFAULT;
+		case DemocatalogPackage.ENERGY_COMPONENT__PRODUCED_BY:
+			return producedBy != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (modelName: ");
+		result.append(modelName);
+		result.append(", revisionYear: ");
+		result.append(revisionYear);
+		result.append(')');
+		return result.toString();
+	}
+
+} //EnergyComponentImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/InverterImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/InverterImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..2113e413cdde5f8a0aa183d335830139ab94ea09
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/InverterImpl.java
@@ -0,0 +1,219 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.Inverter;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Inverter</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.InverterImpl#getMaxDCVoltage <em>Max DC Voltage</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.InverterImpl#getMacDCCurrent <em>Mac DC Current</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class InverterImpl extends ElectricalDeviceImpl implements Inverter {
+	/**
+	 * The default value of the '{@link #getMaxDCVoltage() <em>Max DC Voltage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaxDCVoltage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MAX_DC_VOLTAGE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getMaxDCVoltage() <em>Max DC Voltage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaxDCVoltage()
+	 * @generated
+	 * @ordered
+	 */
+	protected double maxDCVoltage = MAX_DC_VOLTAGE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMacDCCurrent() <em>Mac DC Current</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMacDCCurrent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MAC_DC_CURRENT_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getMacDCCurrent() <em>Mac DC Current</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMacDCCurrent()
+	 * @generated
+	 * @ordered
+	 */
+	protected double macDCCurrent = MAC_DC_CURRENT_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected InverterImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.INVERTER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getMaxDCVoltage() {
+		return maxDCVoltage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMaxDCVoltage(double newMaxDCVoltage) {
+		double oldMaxDCVoltage = maxDCVoltage;
+		maxDCVoltage = newMaxDCVoltage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.INVERTER__MAX_DC_VOLTAGE,
+					oldMaxDCVoltage, maxDCVoltage));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getMacDCCurrent() {
+		return macDCCurrent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMacDCCurrent(double newMacDCCurrent) {
+		double oldMacDCCurrent = macDCCurrent;
+		macDCCurrent = newMacDCCurrent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.INVERTER__MAC_DC_CURRENT,
+					oldMacDCCurrent, macDCCurrent));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DemocatalogPackage.INVERTER__MAX_DC_VOLTAGE:
+			return getMaxDCVoltage();
+		case DemocatalogPackage.INVERTER__MAC_DC_CURRENT:
+			return getMacDCCurrent();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DemocatalogPackage.INVERTER__MAX_DC_VOLTAGE:
+			setMaxDCVoltage((Double) newValue);
+			return;
+		case DemocatalogPackage.INVERTER__MAC_DC_CURRENT:
+			setMacDCCurrent((Double) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.INVERTER__MAX_DC_VOLTAGE:
+			setMaxDCVoltage(MAX_DC_VOLTAGE_EDEFAULT);
+			return;
+		case DemocatalogPackage.INVERTER__MAC_DC_CURRENT:
+			setMacDCCurrent(MAC_DC_CURRENT_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.INVERTER__MAX_DC_VOLTAGE:
+			return maxDCVoltage != MAX_DC_VOLTAGE_EDEFAULT;
+		case DemocatalogPackage.INVERTER__MAC_DC_CURRENT:
+			return macDCCurrent != MAC_DC_CURRENT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (maxDCVoltage: ");
+		result.append(maxDCVoltage);
+		result.append(", macDCCurrent: ");
+		result.append(macDCCurrent);
+		result.append(')');
+		return result.toString();
+	}
+
+} //InverterImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/ManufacturerImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/ManufacturerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..52d5e1042e440cd79e15445d1fb695677b7093b6
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/ManufacturerImpl.java
@@ -0,0 +1,165 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.Manufacturer;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Manufacturer</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.ManufacturerImpl#getName <em>Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ManufacturerImpl extends MinimalEObjectImpl.Container implements Manufacturer {
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = "";
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ManufacturerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.MANUFACTURER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.MANUFACTURER__NAME, oldName,
+					name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DemocatalogPackage.MANUFACTURER__NAME:
+			return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DemocatalogPackage.MANUFACTURER__NAME:
+			setName((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.MANUFACTURER__NAME:
+			setName(NAME_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.MANUFACTURER__NAME:
+			return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ManufacturerImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/impl/SolarPanelImpl.java b/org.example.democatalog/src-gen/org/example/democatalog/impl/SolarPanelImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..199729cff29e620dc7651bb40e93115880eba647
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/impl/SolarPanelImpl.java
@@ -0,0 +1,219 @@
+/**
+ */
+package org.example.democatalog.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.example.democatalog.DemocatalogPackage;
+import org.example.democatalog.SolarPanel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Solar Panel</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.example.democatalog.impl.SolarPanelImpl#getMppVoltage <em>Mpp Voltage</em>}</li>
+ *   <li>{@link org.example.democatalog.impl.SolarPanelImpl#getMppCurrent <em>Mpp Current</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class SolarPanelImpl extends ElectricalDeviceImpl implements SolarPanel {
+	/**
+	 * The default value of the '{@link #getMppVoltage() <em>Mpp Voltage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMppVoltage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MPP_VOLTAGE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getMppVoltage() <em>Mpp Voltage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMppVoltage()
+	 * @generated
+	 * @ordered
+	 */
+	protected double mppVoltage = MPP_VOLTAGE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMppCurrent() <em>Mpp Current</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMppCurrent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MPP_CURRENT_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getMppCurrent() <em>Mpp Current</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMppCurrent()
+	 * @generated
+	 * @ordered
+	 */
+	protected double mppCurrent = MPP_CURRENT_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SolarPanelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DemocatalogPackage.Literals.SOLAR_PANEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getMppVoltage() {
+		return mppVoltage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMppVoltage(double newMppVoltage) {
+		double oldMppVoltage = mppVoltage;
+		mppVoltage = newMppVoltage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.SOLAR_PANEL__MPP_VOLTAGE,
+					oldMppVoltage, mppVoltage));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getMppCurrent() {
+		return mppCurrent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMppCurrent(double newMppCurrent) {
+		double oldMppCurrent = mppCurrent;
+		mppCurrent = newMppCurrent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DemocatalogPackage.SOLAR_PANEL__MPP_CURRENT,
+					oldMppCurrent, mppCurrent));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DemocatalogPackage.SOLAR_PANEL__MPP_VOLTAGE:
+			return getMppVoltage();
+		case DemocatalogPackage.SOLAR_PANEL__MPP_CURRENT:
+			return getMppCurrent();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DemocatalogPackage.SOLAR_PANEL__MPP_VOLTAGE:
+			setMppVoltage((Double) newValue);
+			return;
+		case DemocatalogPackage.SOLAR_PANEL__MPP_CURRENT:
+			setMppCurrent((Double) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.SOLAR_PANEL__MPP_VOLTAGE:
+			setMppVoltage(MPP_VOLTAGE_EDEFAULT);
+			return;
+		case DemocatalogPackage.SOLAR_PANEL__MPP_CURRENT:
+			setMppCurrent(MPP_CURRENT_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DemocatalogPackage.SOLAR_PANEL__MPP_VOLTAGE:
+			return mppVoltage != MPP_VOLTAGE_EDEFAULT;
+		case DemocatalogPackage.SOLAR_PANEL__MPP_CURRENT:
+			return mppCurrent != MPP_CURRENT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (mppVoltage: ");
+		result.append(mppVoltage);
+		result.append(", mppCurrent: ");
+		result.append(mppCurrent);
+		result.append(')');
+		return result.toString();
+	}
+
+} //SolarPanelImpl
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/util/DemocatalogAdapterFactory.java b/org.example.democatalog/src-gen/org/example/democatalog/util/DemocatalogAdapterFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..37faf205d94225d65792a210eb2be938bcfd743e
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/util/DemocatalogAdapterFactory.java
@@ -0,0 +1,271 @@
+/**
+ */
+package org.example.democatalog.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.example.democatalog.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.example.democatalog.DemocatalogPackage
+ * @generated
+ */
+public class DemocatalogAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static DemocatalogPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DemocatalogAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = DemocatalogPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject) object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DemocatalogSwitch<Adapter> modelSwitch = new DemocatalogSwitch<Adapter>() {
+		@Override
+		public Adapter caseEnergyComponentCatalog(EnergyComponentCatalog object) {
+			return createEnergyComponentCatalogAdapter();
+		}
+
+		@Override
+		public Adapter caseBoiler(Boiler object) {
+			return createBoilerAdapter();
+		}
+
+		@Override
+		public Adapter caseCombinedHeatPower(CombinedHeatPower object) {
+			return createCombinedHeatPowerAdapter();
+		}
+
+		@Override
+		public Adapter caseSolarPanel(SolarPanel object) {
+			return createSolarPanelAdapter();
+		}
+
+		@Override
+		public Adapter caseInverter(Inverter object) {
+			return createInverterAdapter();
+		}
+
+		@Override
+		public Adapter caseManufacturer(Manufacturer object) {
+			return createManufacturerAdapter();
+		}
+
+		@Override
+		public Adapter caseChemicalDevice(ChemicalDevice object) {
+			return createChemicalDeviceAdapter();
+		}
+
+		@Override
+		public Adapter caseEnergyComponent(EnergyComponent object) {
+			return createEnergyComponentAdapter();
+		}
+
+		@Override
+		public Adapter caseElectricalDevice(ElectricalDevice object) {
+			return createElectricalDeviceAdapter();
+		}
+
+		@Override
+		public Adapter defaultCase(EObject object) {
+			return createEObjectAdapter();
+		}
+	};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject) target);
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.EnergyComponentCatalog <em>Energy Component Catalog</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.EnergyComponentCatalog
+	 * @generated
+	 */
+	public Adapter createEnergyComponentCatalogAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.Boiler <em>Boiler</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.Boiler
+	 * @generated
+	 */
+	public Adapter createBoilerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.CombinedHeatPower <em>Combined Heat Power</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.CombinedHeatPower
+	 * @generated
+	 */
+	public Adapter createCombinedHeatPowerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.SolarPanel <em>Solar Panel</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.SolarPanel
+	 * @generated
+	 */
+	public Adapter createSolarPanelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.Inverter <em>Inverter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.Inverter
+	 * @generated
+	 */
+	public Adapter createInverterAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.Manufacturer <em>Manufacturer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.Manufacturer
+	 * @generated
+	 */
+	public Adapter createManufacturerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.ChemicalDevice <em>Chemical Device</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.ChemicalDevice
+	 * @generated
+	 */
+	public Adapter createChemicalDeviceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.EnergyComponent <em>Energy Component</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.EnergyComponent
+	 * @generated
+	 */
+	public Adapter createEnergyComponentAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.example.democatalog.ElectricalDevice <em>Electrical Device</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.example.democatalog.ElectricalDevice
+	 * @generated
+	 */
+	public Adapter createElectricalDeviceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //DemocatalogAdapterFactory
diff --git a/org.example.democatalog/src-gen/org/example/democatalog/util/DemocatalogSwitch.java b/org.example.democatalog/src-gen/org/example/democatalog/util/DemocatalogSwitch.java
new file mode 100644
index 0000000000000000000000000000000000000000..f863ffa2f6154f9afe2320110cdad2243a5db81a
--- /dev/null
+++ b/org.example.democatalog/src-gen/org/example/democatalog/util/DemocatalogSwitch.java
@@ -0,0 +1,308 @@
+/**
+ */
+package org.example.democatalog.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.example.democatalog.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.example.democatalog.DemocatalogPackage
+ * @generated
+ */
+public class DemocatalogSwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static DemocatalogPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DemocatalogSwitch() {
+		if (modelPackage == null) {
+			modelPackage = DemocatalogPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+		case DemocatalogPackage.ENERGY_COMPONENT_CATALOG: {
+			EnergyComponentCatalog energyComponentCatalog = (EnergyComponentCatalog) theEObject;
+			T result = caseEnergyComponentCatalog(energyComponentCatalog);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case DemocatalogPackage.BOILER: {
+			Boiler boiler = (Boiler) theEObject;
+			T result = caseBoiler(boiler);
+			if (result == null)
+				result = caseChemicalDevice(boiler);
+			if (result == null)
+				result = caseEnergyComponent(boiler);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case DemocatalogPackage.COMBINED_HEAT_POWER: {
+			CombinedHeatPower combinedHeatPower = (CombinedHeatPower) theEObject;
+			T result = caseCombinedHeatPower(combinedHeatPower);
+			if (result == null)
+				result = caseChemicalDevice(combinedHeatPower);
+			if (result == null)
+				result = caseEnergyComponent(combinedHeatPower);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case DemocatalogPackage.SOLAR_PANEL: {
+			SolarPanel solarPanel = (SolarPanel) theEObject;
+			T result = caseSolarPanel(solarPanel);
+			if (result == null)
+				result = caseElectricalDevice(solarPanel);
+			if (result == null)
+				result = caseEnergyComponent(solarPanel);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case DemocatalogPackage.INVERTER: {
+			Inverter inverter = (Inverter) theEObject;
+			T result = caseInverter(inverter);
+			if (result == null)
+				result = caseElectricalDevice(inverter);
+			if (result == null)
+				result = caseEnergyComponent(inverter);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case DemocatalogPackage.MANUFACTURER: {
+			Manufacturer manufacturer = (Manufacturer) theEObject;
+			T result = caseManufacturer(manufacturer);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case DemocatalogPackage.CHEMICAL_DEVICE: {
+			ChemicalDevice chemicalDevice = (ChemicalDevice) theEObject;
+			T result = caseChemicalDevice(chemicalDevice);
+			if (result == null)
+				result = caseEnergyComponent(chemicalDevice);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case DemocatalogPackage.ENERGY_COMPONENT: {
+			EnergyComponent energyComponent = (EnergyComponent) theEObject;
+			T result = caseEnergyComponent(energyComponent);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case DemocatalogPackage.ELECTRICAL_DEVICE: {
+			ElectricalDevice electricalDevice = (ElectricalDevice) theEObject;
+			T result = caseElectricalDevice(electricalDevice);
+			if (result == null)
+				result = caseEnergyComponent(electricalDevice);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		default:
+			return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Energy Component Catalog</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Energy Component Catalog</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseEnergyComponentCatalog(EnergyComponentCatalog object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Boiler</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Boiler</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseBoiler(Boiler object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Combined Heat Power</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Combined Heat Power</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseCombinedHeatPower(CombinedHeatPower object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Solar Panel</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Solar Panel</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSolarPanel(SolarPanel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Inverter</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Inverter</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseInverter(Inverter object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Manufacturer</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Manufacturer</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseManufacturer(Manufacturer object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Chemical Device</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Chemical Device</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseChemicalDevice(ChemicalDevice object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Energy Component</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Energy Component</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseEnergyComponent(EnergyComponent object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Electrical Device</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Electrical Device</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseElectricalDevice(ElectricalDevice object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //DemocatalogSwitch
diff --git a/org.example.democatalog/src/.gitkeep b/org.example.democatalog/src/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391