package net.sf.minuteProject.utils; import static net.sf.minuteProject.configuration.bean.enrichment.Trigger.INSERT; import static net.sf.minuteProject.configuration.bean.enrichment.Trigger.UPDATE; import static net.sf.minuteProject.utils.property.PropertyUtils.isPropertyTagContain; import static net.sf.minuteProject.utils.property.PropertyUtils.isPropertyTagStartWith; import java.util.ArrayList; import java.util.List; import net.sf.minuteProject.configuration.bean.Template; import net.sf.minuteProject.configuration.bean.enrichment.Trigger; import net.sf.minuteProject.configuration.bean.enumeration.CRUDEnum; import net.sf.minuteProject.configuration.bean.model.data.Column; import net.sf.minuteProject.configuration.bean.model.data.impl.UMLNotation.ColumnUMLNotation; import net.sf.minuteProject.configuration.bean.system.Property; public class TriggerUtils { private static final String TRIGGER = "TRIGGER"; public static String getTriggerAlias (Trigger trigger) { return CommonUtils.getColumnVariableName(getColumn(trigger)); } public static String getTriggerType (Trigger trigger) { return CommonUtils.getJavaType(getColumn(trigger)); } public static Column getColumn(Trigger trigger) { return trigger.getColumn(); } public static Trigger getTriggerFromProperty(Property property, Column column) { if (isTriggerTag(property)) { Trigger trigger = new Trigger(); trigger.setColumn(column); trigger.setCruds(getCruds(property)); trigger.setValue(getValue(property)); return trigger; } return null; } public static String getJavaDisplayChunk (Trigger trigger, Template template) { if (trigger.getValue()==null) return getTriggerAlias(trigger); if (Trigger.CURRENT_TIME.equals(trigger.getValue())) return getJavaCurrentTime(trigger, template); return getTriggerAlias(trigger); } public static String getSqlDisplayChunk (Trigger trigger, Template template) { if (trigger.getValue()==null) return getTriggerAlias(trigger); if (Trigger.CURRENT_TIME.equals(trigger.getValue())) return getSQLCurrentTime(trigger, template); return getTriggerAlias(trigger); } private static String getJavaCurrentTime(Trigger trigger, Template template) { //TODO add temporal in trigger Column column = getColumn(trigger); String javaFullType = CommonUtils.getFullType2(column); if (template.hasProperty("use-temporal") && ColumnUtils.isTimeColumn(column)) { return "new java.util.Date()"; } if (ConvertUtils.JAVA_SQL_DATE_TYPE.equals(javaFullType)) return "new java.sql.Date((new java.util.Date().getTime()))"; if (ConvertUtils.JAVA_SQL_TIMESTAMP_TYPE.equals(javaFullType)) return "new java.sql.Timestamp(new java.util.Date().getTime()))"; if (ConvertUtils.JAVA_SQL_TIME_TYPE.equals(javaFullType)) return "new java.sql.Time(new java.util.Date().getTime()))"; return getTriggerAlias(trigger); } private static String getSQLCurrentTime(Trigger trigger, Template template) { //TODO add temporal in trigger Column column = getColumn(trigger); String javaFullType = CommonUtils.getFullType2(column); if (ConvertUtils.JAVA_SQL_DATE_TYPE.equals(javaFullType)) return "sysdate"; if (ConvertUtils.JAVA_SQL_TIMESTAMP_TYPE.equals(javaFullType)) return "systimestamp"; if (ConvertUtils.JAVA_SQL_TIME_TYPE.equals(javaFullType)) return "sysdate"; return getTriggerAlias(trigger); } public static CRUDEnum getCRUDEnum (String crud) { if (StringUtils.isEmpty(crud)) return null; for (CRUDEnum e : CRUDEnum.values()) { if (e.toString().equals(crud)) return e; } return null; } private static String getValue(Property property) { if (org.apache.commons.lang.StringUtils.contains(property.getTag(), Trigger.CURRENT_TIME) || org.apache.commons.lang.StringUtils.contains(property.getTag(), Trigger.CURRENT_DATE)) return Trigger.CURRENT_TIME; return null; } private static List<CRUDEnum> getCruds(Property property) { List<CRUDEnum> list = new ArrayList<CRUDEnum>(); for (CRUDEnum c : CRUDEnum.values()) { if (isPropertyTagContain(property, c.toString())) list.add(c); } return list; } public static boolean isTriggerTag(Property property) { return isPropertyTagStartWith(property, TRIGGER); } public static boolean isInsertTrigger(Property property) { return isTriggerTag(property) && isInsertTag(property); } public static boolean isUpdateTrigger(Property property) { return isTriggerTag(property) && isUpdateTag(property); } private static boolean isInsertTag(Property property) { return isPropertyTagContain(property, INSERT); } private static boolean isUpdateTag(Property property) { return isPropertyTagContain(property, UPDATE); } }