package org.safehaus.penrose.studio.mapping.wizard; import org.apache.log4j.Logger; import org.eclipse.jface.wizard.Wizard; import org.safehaus.penrose.mapping.MappingRuleConfig; import org.safehaus.penrose.mapping.Expression; import org.safehaus.penrose.studio.dialog.ErrorDialog; /** * @author Endi Sukma Dewata */ public class EditFieldMappingWizard extends Wizard { Logger log = Logger.getLogger(getClass()); public FieldValueWizardPage valuePage; public FieldConditionWizardPage conditionPage; public MappingRuleConfig ruleConfig; public EditFieldMappingWizard(MappingRuleConfig ruleConfig) { this.ruleConfig = ruleConfig; setWindowTitle("Edit field mapping"); valuePage = new FieldValueWizardPage(); valuePage.setDescription("Enter field value/expression."); Object constant = ruleConfig.getConstant(); String variable = ruleConfig.getVariable(); Expression expression = ruleConfig.getExpression(); if (constant != null) { valuePage.setConstant(constant); } else if (variable != null) { valuePage.setVariable(variable); } else if (expression != null) { valuePage.setExpression(expression); } conditionPage = new FieldConditionWizardPage(); conditionPage.setRequired(ruleConfig.isRequired()); conditionPage.setCondition(ruleConfig.getCondition()); conditionPage.setDescription("Enter condition to evaluate the field."); } public boolean canFinish() { if (!valuePage.isPageComplete()) return false; if (!conditionPage.isPageComplete()) return false; return true; } public void addPages() { addPage(valuePage); addPage(conditionPage); } public boolean needsPreviousAndNextButtons() { return true; } public boolean performFinish() { try { int type = valuePage.getType(); switch (type) { case FieldValueWizardPage.TEXT: String text = valuePage.getText(); ruleConfig.setConstant(text); break; case FieldValueWizardPage.BINARY: byte[] binary = valuePage.getBinary(); ruleConfig.setBinary(binary); break; case FieldValueWizardPage.VARIABLE: String variable = valuePage.getVariable(); ruleConfig.setVariable(variable); break; case FieldValueWizardPage.EXPRESSION: Expression expression = valuePage.getExpression(); ruleConfig.setExpression(expression); break; } boolean required = conditionPage.isRequired(); ruleConfig.setRequired(required); String condition = conditionPage.getCondition(); ruleConfig.setCondition(condition); return true; } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); return false; } } public MappingRuleConfig getFieldConfig() { return ruleConfig; } }