// ============================================================================ // // 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.matchrule; import org.eclipse.core.resources.IFolder; import org.eclipse.emf.ecore.util.EcoreUtil; import org.talend.commons.utils.platform.PluginChecker; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.cwm.helper.TaggedValueHelper; import org.talend.dataprofiler.core.CorePlugin; 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.editor.matchrule.MatchRuleItemEditorInput; import org.talend.dataprofiler.core.ui.wizard.AbstractWizard; import org.talend.dataquality.properties.TDQMatchRuleItem; import org.talend.dataquality.rules.MatchRuleDefinition; import org.talend.dq.analysis.parameters.ConnectionParameter; import org.talend.dq.analysis.parameters.DQMatchRuleParameter; import org.talend.dq.dqrule.MatchRuleBuilder; import org.talend.dq.helper.RepositoryNodeHelper; import org.talend.dq.helper.resourcehelper.ResourceFileMap; import org.talend.dq.writer.impl.ElementWriterFactory; import org.talend.dq.writer.impl.MatchRuleDefinitionWriter; import org.talend.repository.model.IRepositoryNode; import org.talend.utils.sugars.TypedReturnCode; import orgomg.cwm.objectmodel.core.ModelElement; /** * created by zshen on Aug 19, 2013 Detailled comment * */ public class NewMatchRuleWizard extends AbstractWizard { private NewMatchRuleMetadataPage newMatchRuleMetadataPage = null; private DQMatchRuleParameter parameter; private MatchRuleDefinition matchRule = null; private boolean isExport = false; private String helpContextId = "org.talend.help.match_rule";//$NON-NLS-1$ public NewMatchRuleWizard(DQMatchRuleParameter parameter) { this.parameter = parameter; setHelpAvailable(!PluginChecker.isOnlyTopLoaded()); } /* * (non-Javadoc) * * @see org.eclipse.jface.wizard.Wizard#addPages() */ @Override public void addPages() { newMatchRuleMetadataPage = new NewMatchRuleMetadataPage(); if (isExport) { newMatchRuleMetadataPage.setTitle(DefaultMessagesImpl.getString("NewMatchRuleWizard.exportPage1_1")); //$NON-NLS-1$ } else { newMatchRuleMetadataPage.setTitle(DefaultMessagesImpl.getString("NewMatchRuleWizard.createPage1_1")); //$NON-NLS-1$ } newMatchRuleMetadataPage.setDescription(DefaultMessagesImpl.getString("NewMatchRuleWizard.defineProp")); //$NON-NLS-1$ newMatchRuleMetadataPage.setHelpContextId(helpContextId); this.addPage(newMatchRuleMetadataPage); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.wizard.ICWMResouceAdapter#initCWMResourceBuilder() */ public ModelElement initCWMResourceBuilder() { if (matchRule != null) { MatchRuleDefinition copiedMatchRuleDefinition = EcoreUtil.copy(matchRule); copiedMatchRuleDefinition.setName(parameter.getName()); return copiedMatchRuleDefinition; } MatchRuleBuilder ruleBuilder = new MatchRuleBuilder(); boolean ruleInitialized = ruleBuilder.initializeDqRuleBuilder(parameter); if (ruleInitialized) { return ruleBuilder.getMatchRule(); } return null; } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.wizard.ICWMResouceAdapter#createAndSaveCWMFile(orgomg.cwm.objectmodel.core. * ModelElement) */ public TypedReturnCode<Object> createAndSaveCWMFile(ModelElement repositoryObject) { MatchRuleDefinition newMatchRule = (MatchRuleDefinition) repositoryObject; TaggedValueHelper.setValidStatus(true, newMatchRule); // Added for export an match rule created by the match analysis, which need to replace the rules in createdItem, MatchRuleDefinitionWriter matchRuleWriter = ElementWriterFactory.getInstance().createdMatchRuleWriter(); if (isExport) { matchRuleWriter.copy(newMatchRule, this.matchRule); } IFolder folder = parameter.getFolderProvider().getFolderResource(); TypedReturnCode<Object> createdItem = matchRuleWriter.create(newMatchRule, folder); return createdItem; } /* * (non-Javadoc) * * @see * org.talend.dataprofiler.core.ui.wizard.analysis.AbstractAnalysisWizard#openEditor(org.talend.repository.model * .IRepositoryNode ) */ @Override public void openEditor(IRepositoryNode repNode) { BusinessRuleItemEditorInput matchRuleEditorInput = new BusinessRuleItemEditorInput(repNode); CorePlugin.getDefault().openEditor(matchRuleEditorInput, DQRuleEditor.class.getName()); } /* * (non-Javadoc) * * @see * org.talend.dataprofiler.core.ui.wizard.AbstractWizard#openEditor(org.talend.dataquality.properties.TDQMatchRuleItem * ) */ @Override public void openEditor(TDQMatchRuleItem item) { MatchRuleItemEditorInput matchRuleEditorInput = new MatchRuleItemEditorInput(item); CorePlugin.getDefault().openEditor(matchRuleEditorInput, DQRuleEditor.class.getName()); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.wizard.AbstractWizard#getResourceFileMap() */ @Override protected ResourceFileMap getResourceFileMap() { return null; } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.wizard.AbstractWizard#getParameter() */ @Override public ConnectionParameter getParameter() { return parameter; } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.wizard.AbstractWizard#getEditorName() */ @Override protected String getEditorName() { return DQRuleEditor.class.getName(); } public void setMatchRule(MatchRuleDefinition matchRule) { this.matchRule = matchRule; isExport = true; } // the context id will change from different entry: new match rule, or export match rule public void setHelpContextId(String newContextId) { helpContextId = newContextId; } @Override public boolean performFinish() { boolean finished = super.performFinish(); // when export the match rule, the selected node must not be the match rule folder, so, it can not be refreshed // and shown in repository view: if (isExport) { CorePlugin.getDefault().refreshDQView(RepositoryNodeHelper.getRootNode(ERepositoryObjectType.TDQ_LIBRARIES)); } return finished; } }