// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataprofiler.core.ui.wizard.parserrule;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFolder;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.talend.cwm.helper.TaggedValueHelper;
import org.talend.cwm.relational.TdExpression;
import org.talend.dataprofiler.core.CorePlugin;
import org.talend.dataprofiler.core.PluginConstant;
import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl;
import org.talend.dataprofiler.core.ui.editor.dqrules.BusinessRuleItemEditorInput;
import org.talend.dataprofiler.core.ui.editor.dqrules.DQRuleEditor;
import org.talend.dataprofiler.core.ui.wizard.AbstractWizard;
import org.talend.dataquality.indicators.definition.IndicatorCategory;
import org.talend.dataquality.rules.ParserRule;
import org.talend.dq.analysis.parameters.DQParserRulesParameter;
import org.talend.dq.dqrule.DqRuleBuilder;
import org.talend.dq.helper.resourcehelper.DQRuleResourceFileHelper;
import org.talend.dq.helper.resourcehelper.ResourceFileMap;
import org.talend.dq.indicators.definitions.DefinitionHandler;
import org.talend.dq.writer.impl.ElementWriterFactory;
import org.talend.repository.model.IRepositoryNode;
import org.talend.utils.sugars.TypedReturnCode;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* DOC klliu class global comment. Detailled comment
*/
public class NewParserRulesWizard extends AbstractWizard {
static Logger log = Logger.getLogger(NewParserRulesWizard.class);
private NewParserRulesWizardPage1 mPage;
private DQParserRulesParameter parameter;
private TdExpression expression;
public NewParserRulesWizard(DQParserRulesParameter parameter) {
this.parameter = parameter;
}
@Override
public void addPages() {
String s = DefaultMessagesImpl.getString("NewParserRulesWizard.parserRule"); //$NON-NLS-1$
mPage = new NewParserRulesWizardPage1();
mPage.setTitle(s + PluginConstant.SPACE_STRING + DefaultMessagesImpl.getString("NewParserRulesWizard.createPage1_2")); //$NON-NLS-1$
mPage.setDescription(DefaultMessagesImpl.getString("NewParserRulesWizard.defineProp")); //$NON-NLS-1$
mPage.setPageComplete(false);
addPage(mPage);
}
/**
* DOC zshen Comment method "isComeFromTestEditor".
*
* @return
*/
private boolean isComeFromTestEditor() {
return getParameter().getParserRule() != null;
}
public TypedReturnCode<Object> createAndSaveCWMFile(ModelElement cwmElement) {
ParserRule parserRule = (ParserRule) cwmElement;
TaggedValueHelper.setValidStatus(true, parserRule);
if (isComeFromTestEditor()) {
// MOD klliu bug TDQ-4772 2012-03-20
// copy the informations of old Expressions for the new parser rule,and it's used when an new rule is
// created in testing rule editor.
List<TdExpression> ruleExpressions = parameter.getParserRule().getExpression();
for (TdExpression expression : ruleExpressions) {
parserRule.addExpression(expression.getName(), expression.getLanguage(), expression.getBody());
}
// ~
} else {
parserRule
.addExpression(parameter.getParserRuleName(), parameter.getParserRuleType(), parameter.getParserRuleValue());
IndicatorCategory ruleIndicatorCategory = DefinitionHandler.getInstance().getDQRuleIndicatorCategory();
if (ruleIndicatorCategory != null && !parserRule.getCategories().contains(ruleIndicatorCategory)) {
parserRule.getCategories().add(ruleIndicatorCategory);
}
}
IFolder folder = parameter.getFolderProvider().getFolderResource();
return ElementWriterFactory.getInstance().createdRuleWriter().create(parserRule, folder);
}
public ModelElement initCWMResourceBuilder() {
DqRuleBuilder ruleBuilder = new DqRuleBuilder();
boolean ruleInitialized = ruleBuilder.initializeParserRuleBuilder(parameter.getName());
if (ruleInitialized) {
return ruleBuilder.getParserRule();
}
return null;
}
public TdExpression getExpression() {
if (expression == null) {
expression = EcoreUtil.copy(DefinitionHandler.getInstance().getDQRuleDefaultIndicatorDefinition()
.getSqlGenericExpression().get(0));
}
return expression;
}
@Override
protected String getEditorName() {
return DQRuleEditor.class.getName();
}
@Override
public DQParserRulesParameter getParameter() {
return parameter;
}
@Override
protected ResourceFileMap getResourceFileMap() {
return DQRuleResourceFileHelper.getInstance();
}
@Override
public boolean canFinish() {
if (isComeFromTestEditor()) {
return true;
}
return mPage.isPageComplete();
}
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.wizard.AbstractWizard#openEditor(org.talend.repository.model.IRepositoryNode)
*/
@Override
public void openEditor(IRepositoryNode repNode) {
BusinessRuleItemEditorInput parserRuleEditorInput = new BusinessRuleItemEditorInput(repNode);
CorePlugin.getDefault().openEditor(parserRuleEditorInput, DQRuleEditor.class.getName());
}
}