// Path: src/main/java/com/modelsolv/kaboom/model/canonical/CDMProperty.java
// public interface CDMProperty extends ReadableCDMProperty {
// 
// 	public void setName(String name);
// 	
// 	public void setCardinality(Cardinality cardinality);
// 
// }
// 
// Path: src/main/java/com/modelsolv/kaboom/model/canonical/CanonicalDataType.java
// public interface CanonicalDataType {
// 	
// 	public String getName();
// 	
// 	public void setName(String name);
// 	
// 	public Iterable<CDMProperty> getProperties();
// 	
// 	public CDMProperty getProperty(String propName);
// 	
// 	public boolean hasProperty(CDMProperty property);
// 	
// 	public CanonicalDataType withPrimitive(String name, PrimitiveDataType type);
// 	
// 	public CanonicalDataType withPrimitive(String name, PrimitiveDataType type, Cardinality cardinality);
// 
// 	public CanonicalDataType withReference(String name, CanonicalDataType type);
// 
// 	public CanonicalDataType withReference(String name, CanonicalDataType type, Cardinality cardinality);
// 
// }
// 
// Path: src/main/java/com/modelsolv/kaboom/model/canonical/Cardinality.java
// public enum Cardinality {
// 	ONE, ZERO_OR_ONE, ONE_OR_MORE, ZERO_OR_MORE
// 
// }
// 
// Path: src/main/java/com/modelsolv/kaboom/model/canonical/PrimitiveDataType.java
// public enum PrimitiveDataType {
// 	STRING, INTEGER, FLOAT, DECIMAL, BOOLEAN, DATE
// }


import java.util.LinkedHashMap;
import com.modelsolv.kaboom.model.canonical.CDMProperty;
import com.modelsolv.kaboom.model.canonical.CanonicalDataType;
import com.modelsolv.kaboom.model.canonical.Cardinality;
import com.modelsolv.kaboom.model.canonical.PrimitiveDataType;
	@Override
	public String getName() {
		return name;
	}

	@Override
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public Iterable<CDMProperty> getProperties() {
		return properties.values();
	}

	@Override
	public CDMProperty getProperty(String propName) {
		if (properties.containsKey(propName)) {
			return properties.get(propName);
		}
		return null;
	}

	@Override
	public boolean hasProperty(CDMProperty property) {
		return properties.containsValue(property);
	}

	@Override
	public CanonicalDataType withPrimitive(String name, PrimitiveDataType type) {
// Path: src/main/java/com/modelsolv/kaboom/model/canonical/CDMProperty.java
// public interface CDMProperty extends ReadableCDMProperty {
// 
// 	public void setName(String name);
// 	
// 	public void setCardinality(Cardinality cardinality);
// 
// }
// 
// Path: src/main/java/com/modelsolv/kaboom/model/canonical/CanonicalDataType.java
// public interface CanonicalDataType {
// 	
// 	public String getName();
// 	
// 	public void setName(String name);
// 	
// 	public Iterable<CDMProperty> getProperties();
// 	
// 	public CDMProperty getProperty(String propName);
// 	
// 	public boolean hasProperty(CDMProperty property);
// 	
// 	public CanonicalDataType withPrimitive(String name, PrimitiveDataType type);
// 	
// 	public CanonicalDataType withPrimitive(String name, PrimitiveDataType type, Cardinality cardinality);
// 
// 	public CanonicalDataType withReference(String name, CanonicalDataType type);
// 
// 	public CanonicalDataType withReference(String name, CanonicalDataType type, Cardinality cardinality);
// 
// }
// 
// Path: src/main/java/com/modelsolv/kaboom/model/canonical/Cardinality.java
// public enum Cardinality {
// 	ONE, ZERO_OR_ONE, ONE_OR_MORE, ZERO_OR_MORE
// 
// }
// 
// Path: src/main/java/com/modelsolv/kaboom/model/canonical/PrimitiveDataType.java
// public enum PrimitiveDataType {
// 	STRING, INTEGER, FLOAT, DECIMAL, BOOLEAN, DATE
// }


// Path: src/main/java/com/modelsolv/kaboom/model/canonical/nativeImpl/CanonicalDataTypeImpl.java
import java.util.LinkedHashMap;
import com.modelsolv.kaboom.model.canonical.CDMProperty;
import com.modelsolv.kaboom.model.canonical.CanonicalDataType;
import com.modelsolv.kaboom.model.canonical.Cardinality;
import com.modelsolv.kaboom.model.canonical.PrimitiveDataType;

	@Override
	public String getName() {
		return name;
	}

	@Override
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public Iterable<CDMProperty> getProperties() {
		return properties.values();
	}

	@Override
	public CDMProperty getProperty(String propName) {
		if (properties.containsKey(propName)) {
			return properties.get(propName);
		}
		return null;
	}

	@Override
	public boolean hasProperty(CDMProperty property) {
		return properties.containsValue(property);
	}

	@Override
	public CanonicalDataType withPrimitive(String name, PrimitiveDataType type) {
		return withPrimitive(name, type, Cardinality.ONE);