/*******************************************************************************
* Copyright (c) 2012 OpenLegacy Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* OpenLegacy Inc. - initial API and implementation
*******************************************************************************/
package org.openlegacy.designtime.terminal.analyzer.support.fact_processors;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openlegacy.definitions.support.SimpleDateFieldTypeDefinition;
import org.openlegacy.designtime.terminal.analyzer.ScreenFact;
import org.openlegacy.designtime.terminal.analyzer.ScreenFactProcessor;
import org.openlegacy.designtime.terminal.model.ScreenEntityDesigntimeDefinition;
import org.openlegacy.terminal.definitions.ScreenFieldDefinition;
import org.openlegacy.terminal.definitions.SimpleScreenFieldDefinition;
import org.openlegacy.utils.StringUtil;
import java.text.MessageFormat;
import java.util.Date;
import java.util.Map;
public class DateFieldFactProcessor implements ScreenFactProcessor {
private final static Log logger = LogFactory.getLog(DateFieldFactProcessor.class);
public boolean accept(ScreenFact screenFact) {
return screenFact instanceof DateFieldFact;
}
public void process(ScreenEntityDesigntimeDefinition screenEntityDefinition, ScreenFact screenFact) {
DateFieldFact dateFieldFact = (DateFieldFact)screenFact;
SimpleScreenFieldDefinition leftFieldDefinition = (SimpleScreenFieldDefinition)dateFieldFact.getLeftField();
ScreenFieldDefinition middleFieldDefinition = dateFieldFact.getMiddleField();
ScreenFieldDefinition rightFieldDefinition = dateFieldFact.getRightField();
Map<String, ScreenFieldDefinition> fieldsDefinitions = screenEntityDefinition.getFieldsDefinitions();
SimpleDateFieldTypeDefinition fieldTypeDefinition = new SimpleDateFieldTypeDefinition(
dateFieldFact.getLeftField().getPosition().getColumn(), middleFieldDefinition.getPosition().getColumn(),
rightFieldDefinition.getPosition().getColumn());
leftFieldDefinition.setFieldTypeDefinition(fieldTypeDefinition);
leftFieldDefinition.setJavaType(Date.class);
screenEntityDefinition.getReferredClasses().add(Date.class.getName());
// remove all 3 fields date fields and add with the correct name. The middle/last date fields may take the label field
// name as drools as can't verify analysis order
fieldsDefinitions.remove(leftFieldDefinition.getName());
if (middleFieldDefinition != null) {
fieldsDefinitions.remove(middleFieldDefinition.getName());
}
if (rightFieldDefinition != null) {
fieldsDefinitions.remove(rightFieldDefinition.getName());
}
// set the length as all 3 - as place holder
leftFieldDefinition.setLength(rightFieldDefinition.getEndPosition().getColumn()
- leftFieldDefinition.getPosition().getColumn());
// re-add the field
String fieldName = StringUtil.toJavaFieldName(dateFieldFact.getLabelField().getValue());
leftFieldDefinition.setName(fieldName);
fieldsDefinitions.put(fieldName, leftFieldDefinition);
logger.info(MessageFormat.format("Set field {0} to be date field", leftFieldDefinition.getName()));
}
}