ETypeParameter eFeaturePropertyEDataType_T = addETypeParameter(eFeaturePropertyEDataType, "T");
addETypeParameter(eFeatureAttributeEDataType, "V");
ETypeParameter eFeatureGeometryEDataType_V = addETypeParameter(eFeatureGeometryEDataType, "V");
// Set bounds for type parameters
EGenericType g1 = createEGenericType(this.getProperty());
eFeaturePropertyEDataType_T.getEBounds().add(g1);
g1 = createEGenericType(this.getGeometry());
eFeatureGeometryEDataType_V.getEBounds().add(g1);
// Add supertypes to classes
// Initialize classes and features; add operations and parameters
initEClass(eFeatureEClass, EFeature.class, "EFeature", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEAttribute(getEFeature_ID(), ecorePackage.getEString(), "ID", "", 1, 1, EFeature.class, !IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getEFeature_Data(), this.getFeature(), "data", null, 1, 1, EFeature.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
initEAttribute(getEFeature_SRID(), ecorePackage.getEString(), "SRID", "EPSG:4326", 1, 1, EFeature.class, !IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getEFeature_Default(), ecorePackage.getEString(), "default", "geom", 1, 1, EFeature.class, !IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getEFeature_Structure(), this.getEFeatureInfo(), "structure", null, 1, 1, EFeature.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
EOperation op = addEOperation(eFeatureEClass, null, "getAttributeList", 1, 1, IS_UNIQUE, IS_ORDERED);
ETypeParameter t1 = addETypeParameter(op, "V");
g1 = createEGenericType(ecorePackage.getEJavaClass());
EGenericType g2 = createEGenericType(t1);
g1.getETypeArguments().add(g2);
addEParameter(op, g1, "valueType", 0, 1, IS_UNIQUE, IS_ORDERED);
g1 = createEGenericType(this.getList());
g2 = createEGenericType(this.getEFeatureAttribute());
g1.getETypeArguments().add(g2);
EGenericType g3 = createEGenericType(t1);
g2.getETypeArguments().add(g3);
initEOperation(op, g1);
op = addEOperation(eFeatureEClass, null, "getGeometryList", 1, 1, IS_UNIQUE, IS_ORDERED);
t1 = addETypeParameter(op, "V");