package net.sf.minuteProject.configuration.bean.enrichment; import java.util.ArrayList; import java.util.List; import net.sf.minuteProject.configuration.bean.AbstractConfiguration; import net.sf.minuteProject.configuration.bean.enrichment.group.FieldGroup; import net.sf.minuteProject.configuration.bean.enrichment.rule.Constraint; import net.sf.minuteProject.configuration.bean.enrichment.rule.Rule; import net.sf.minuteProject.configuration.bean.enrichment.security.EntitySecuredAccess; import net.sf.minuteProject.configuration.bean.model.data.Database; import net.sf.minuteProject.configuration.bean.model.data.Table; import net.sf.minuteProject.configuration.bean.model.data.impl.DDLUtils.TableDDLUtils; import net.sf.minuteProject.utils.ConvertUtils; import net.sf.minuteProject.utils.TableUtils; import org.apache.ddlutils.model.Column; import org.apache.ddlutils.model.ForeignKey; import org.apache.ddlutils.model.Reference; public class Entity extends AbstractConfiguration { private String structure; private VirtualPrimaryKey virtualPrimaryKey; private List<Field> fields; private List<Action> actions; private Enrichment enrichment; private String contentType; //pseudo-static, reference, life-business-data private SemanticReference semanticReference; private boolean isLinkEntity, isTransferEntity, isSearchable; private EntitySecuredAccess entitySecuredAccess; private String type, masterRelationshipField; private List<FieldGroup> fieldGroups; private List<Constraint> constraints; public EntitySecuredAccess getEntitySecuredAccess() { return entitySecuredAccess; } public void setEntitySecuredAccess(EntitySecuredAccess entitySecuredAccess) { this.entitySecuredAccess = entitySecuredAccess; } public VirtualPrimaryKey getVirtualPrimaryKey() { return virtualPrimaryKey; } public void setVirtualPrimaryKey(VirtualPrimaryKey virtualPrimaryKey) { this.virtualPrimaryKey = virtualPrimaryKey; } public String getStructure() { return structure; } public void setStructure(String structure) { this.structure = structure; } public void setField (Field field) { addField(field); } public void addField (Field field) { field.setEntity(this); getFields().add(field); } public List<Field> getFields() { if (fields==null) fields = new ArrayList<Field> (); return fields; } public void setFields(List<Field> fields) { this.fields = fields; } public Enrichment getEnrichment() { return enrichment; } public void setEnrichment(Enrichment enrichment) { this.enrichment = enrichment; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; } public SemanticReference getSemanticReference() { return semanticReference; } public void setSemanticReference(SemanticReference semanticReference) { this.semanticReference = semanticReference; } public boolean isLinkEntity() { return isLinkEntity; } public void setLinkEntity(boolean isLinkEntity) { this.isLinkEntity = isLinkEntity; } public boolean isTransferEntity() { return isTransferEntity; } public void setTransferEntity(boolean isTransferEntity) { this.isTransferEntity = isTransferEntity; } public boolean isSearchable() { return isSearchable; } public void setSearchable(boolean isSearchable) { this.isSearchable = isSearchable; } public String getType() { return (type==null)?Table.TABLE:type; } public void setType(String type) { this.type = type; } public List<FieldGroup> getFieldGroups() { if (fieldGroups==null) fieldGroups = new ArrayList<FieldGroup>(); return fieldGroups; } public void addFieldGroup (FieldGroup fieldGroup) { getFieldGroups().add(fieldGroup); } public List<Action> getActions() { if (actions==null) actions = new ArrayList<Action>(); return actions; } public void addAction (Action action) { getActions().add(action); } public List<Constraint> getConstraints() { if (constraints==null) constraints = new ArrayList<Constraint>(); return constraints; } public void addConstraint (Constraint constraint) { getConstraints().add(constraint); } //use for m2m in grails, jpa2 xml rootnavigation public String getMasterRelationshipField() { return masterRelationshipField; } public void setMasterRelationshipField(String masterRelationshipField) { this.masterRelationshipField = masterRelationshipField; } public Table getTable (Database database) { Table table = new TableDDLUtils(getTable(this, database)); for (Action action : this.getActions()) { action.setParent(table); } table.setActions (this.getActions()); table.setConstraints(this.getConstraints()); table.setFieldGroups(this.getFieldGroups()); return table; } private org.apache.ddlutils.model.Table getTable(Entity entity, Database database) { org.apache.ddlutils.model.Table table = new org.apache.ddlutils.model.Table(); table.setType(Table.TABLE); table.setName(entity.getName()); for (Field field : entity.getFields()) { table.addColumn(getColumn(field)); } for (Field field : entity.getFields()) { if (isForeignKey(field)) table.addForeignKey(getForeignKey(field, database)); } return table; } private boolean isForeignKey(Field field) { return (field.getLinkToTargetEntity()!=null && !field.getLinkToTargetEntity().trim().equals("")); } private ForeignKey getForeignKey(Field field, Database database) { ForeignKey foreignKey = new ForeignKey(); foreignKey.addReference(getReference (field)); foreignKey.setForeignTable(getForeignTable(field, database)); foreignKey.setForeignTableName(field.getLinkToTargetEntity()); return foreignKey; } private org.apache.ddlutils.model.Table getForeignTable(Field field, Database database) { Table table = TableUtils.getTable(database, field.getLinkToTargetEntity()); org.apache.ddlutils.model.Table t = new org.apache.ddlutils.model.Table(); t.setName(table.getName()); return null; } private Reference getReference(Field field) { Reference reference = new Reference(); Column localColumn = new Column(); localColumn.setName(field.getName()); reference.setLocalColumn(localColumn); reference.setLocalColumnName(field.getName()); Column foreignColumn = new Column(); foreignColumn.setName(field.getLinkToTargetField()); reference.setForeignColumn(foreignColumn); reference.setForeignColumnName(field.getLinkToTargetField()); // reference.setLocalColumn(localColumn); // reference.setForeignColumn(foreignColumn) return reference; } private org.apache.ddlutils.model.Column getColumn(Field field) { org.apache.ddlutils.model.Column column = new org.apache.ddlutils.model.Column(); column.setName(field.getName()); column.setType(ConvertUtils.getDBFullTypeFromUMLType(field.getType())); column.setRequired(field.isMandatory()); column.setSize(field.getLength()); column.setPrimaryKey(field.isId()); return column; } }