package net.sf.minuteProject.utils;
import org.apache.log4j.Logger;
import net.sf.minuteProject.configuration.bean.enrichment.Field;
import net.sf.minuteProject.configuration.bean.model.data.Column;
import net.sf.minuteProject.configuration.bean.model.data.Database;
import net.sf.minuteProject.configuration.bean.model.data.ForeignKey;
import net.sf.minuteProject.configuration.bean.model.data.Reference;
import net.sf.minuteProject.configuration.bean.model.data.Table;
import net.sf.minuteProject.configuration.bean.model.data.impl.DDLUtils.ForeignKeyDDLUtils;
public class ForeignKeyUtils {
private static Logger logger = Logger.getLogger(ForeignKeyUtils.class);
public static void setForeignKey (Table table, Field field) {
//field.getEntity().getEnrichment().getBusinessModel().getModel().getDataModel().getDatabase();
ForeignKey foreignKey = getForeignKey(field, table.getDatabase());
if (foreignKey!=null)
table.setForeignKey (foreignKey);
}
public static ForeignKey getForeignKey (Field field, Database database) {
if (field.getLinkToTargetEntity()!=null && field.getLinkToTargetField()!=null) {
Reference reference = ReferenceUtils.getReference(field, database);
if (reference!=null) {
org.apache.ddlutils.model.ForeignKey foreignKeyMp = new org.apache.ddlutils.model.ForeignKey();
foreignKeyMp.setName(field.getName());
ForeignKey foreignKey = new ForeignKeyDDLUtils (foreignKeyMp);
foreignKey.setForeignTableName(field.getLinkToTargetEntity());
foreignKey.setReference (reference);
// bidirection
if (field.getBidirectional()!=null && field.getBidirectional().equals("false"))
foreignKey.setBidirectional(false);
return foreignKey;
}
logger.info("no correct fk found for "+field.getEntity().getName()+" - "+field.getName()+" - pointing towards "+field.getLinkToTargetEntity()+" - "+field.getLinkToTargetField());
}
return null;
}
public static boolean containsLocalColumn(ForeignKey fk, Column column) {
for (Reference ref : fk.getReferences()) {
if (ref.getLocalColumnName().equals(column.getName()))
return true;
}
return false;
}
}