// Path: src/main/java/eme/properties/ExtractionProperties.java
// public class ExtractionProperties extends AbstractProperties<TextProperty, BinaryProperty> {
//     /**
//      * Basic constructor, sets the file name, file description and symbolic bundle name.
//      */
//     public ExtractionProperties() {
//         super("user.properties", "Use this file to configure the Ecore metamodel extraction.", "EcoreMetamodelExtraction");
//     }
// }
// 
// Path: src/main/java/eme/properties/TextProperty.java
// public enum TextProperty implements ITextProperty {
//     DATATYPE_PACKAGE("DataTypePackageName", "DATATYPES"),
//     DEFAULT_PACKAGE("DefaultPackageName", "DEFAULT"),
//     DUMMY_NAME("DummyClassName", "DUMMY"),
//     ROOT_NAME("RootContainerName", "ROOT"),
//     NESTED_TYPE_PACKAGE("NestedTypePackageSuffix", "InnerTypes"),
//     PROJECT_SUFFIX("ProjectSuffix", "Model"),
//     SAVING_STRATEGY("SavingStrategy", "NewProject");
// 
//     private final String defaultValue;
//     private final String key;
// 
//     /**
//      * Private constructor for enum values with key and default value of an extraction property.
//      * @param key is the key of the property.
//      * @param defaultValue is the default value of the property.
//      */
//     TextProperty(String key, String defaultValue) {
//         this.key = key;
//         this.defaultValue = defaultValue;
//     }
// 
//     @Override
//     public String getDefaultValue() {
//         return defaultValue;
//     }
// 
//     @Override
//     public String getKey() {
//         return key;
//     }
// }


import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EPackage;
import eme.properties.ExtractionProperties;
import eme.properties.TextProperty;
package eme.generator.hierarchies;



/**
 * This class allows to build an external type package hierarchy from EDataTypes.
 * @author Timur Saglam
 */
public class ExternalTypeHierarchy extends EPackageHierarchy {

    /**
     * Simple constructor, builds the base for the hierarchy.
     * @param root is the root {@link EPackage} of the metamodel.
     * @param properties is the instance of the {@link ExtractionProperties} class.
     */
    public ExternalTypeHierarchy(EPackage root, ExtractionProperties properties) {
// Path: src/main/java/eme/properties/ExtractionProperties.java
// public class ExtractionProperties extends AbstractProperties<TextProperty, BinaryProperty> {
//     /**
//      * Basic constructor, sets the file name, file description and symbolic bundle name.
//      */
//     public ExtractionProperties() {
//         super("user.properties", "Use this file to configure the Ecore metamodel extraction.", "EcoreMetamodelExtraction");
//     }
// }
// 
// Path: src/main/java/eme/properties/TextProperty.java
// public enum TextProperty implements ITextProperty {
//     DATATYPE_PACKAGE("DataTypePackageName", "DATATYPES"),
//     DEFAULT_PACKAGE("DefaultPackageName", "DEFAULT"),
//     DUMMY_NAME("DummyClassName", "DUMMY"),
//     ROOT_NAME("RootContainerName", "ROOT"),
//     NESTED_TYPE_PACKAGE("NestedTypePackageSuffix", "InnerTypes"),
//     PROJECT_SUFFIX("ProjectSuffix", "Model"),
//     SAVING_STRATEGY("SavingStrategy", "NewProject");
// 
//     private final String defaultValue;
//     private final String key;
// 
//     /**
//      * Private constructor for enum values with key and default value of an extraction property.
//      * @param key is the key of the property.
//      * @param defaultValue is the default value of the property.
//      */
//     TextProperty(String key, String defaultValue) {
//         this.key = key;
//         this.defaultValue = defaultValue;
//     }
// 
//     @Override
//     public String getDefaultValue() {
//         return defaultValue;
//     }
// 
//     @Override
//     public String getKey() {
//         return key;
//     }
// }


// Path: src/main/java/eme/generator/hierarchies/ExternalTypeHierarchy.java
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EPackage;
import eme.properties.ExtractionProperties;
import eme.properties.TextProperty;

package eme.generator.hierarchies;



/**
 * This class allows to build an external type package hierarchy from EDataTypes.
 * @author Timur Saglam
 */
public class ExternalTypeHierarchy extends EPackageHierarchy {

    /**
     * Simple constructor, builds the base for the hierarchy.
     * @param root is the root {@link EPackage} of the metamodel.
     * @param properties is the instance of the {@link ExtractionProperties} class.
     */
    public ExternalTypeHierarchy(EPackage root, ExtractionProperties properties) {
        super(generatePackage(properties.get(TextProperty.DATATYPE_PACKAGE), root), properties);