// ============================================================================ // // 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.editor.dqrules; import java.util.List; import org.apache.log4j.Level; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.FileEditorInput; import org.talend.commons.emf.FactoriesUtil; import org.talend.commons.exception.ExceptionHandler; import org.talend.dataprofiler.core.ImageLib; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.ui.action.actions.DefaultSaveAction; import org.talend.dataprofiler.core.ui.editor.CommonFormEditor; import org.talend.dataprofiler.core.ui.editor.TdEditorToolBar; import org.talend.dataprofiler.core.ui.editor.matchrule.MatchRuleItemEditorInput; import org.talend.dataprofiler.core.ui.editor.matchrule.MatchRuleMasterDetailsPage; import org.talend.dataquality.rules.MatchRuleDefinition; import org.talend.dataquality.rules.ParserRule; import org.talend.dq.helper.resourcehelper.DQRuleResourceFileHelper; import orgomg.cwm.objectmodel.core.ModelElement; /** * DOC xqliu class global comment. Detailled comment */ public class DQRuleEditor extends CommonFormEditor { private ParserRuleMasterDetailsPage parserPage; private MatchRuleMasterDetailsPage matchPage; private static final String ID = "DQRuleEditor.masterPage";//$NON-NLS-1$ private DefaultSaveAction saveAction; @Override protected void addPages() { ModelElement currentRuleModelElement = getCurrentModelElement(); try { if (currentRuleModelElement != null) { if (currentRuleModelElement instanceof ParserRule) { parserPage = new ParserRuleMasterDetailsPage(this, ID, DefaultMessagesImpl.getString("DQRuleEditor.parserRuleSettings")); //$NON-NLS-1$ addPage(parserPage); setPartName(parserPage.getIntactElemenetName()); } else if (currentRuleModelElement instanceof MatchRuleDefinition) { matchPage = new MatchRuleMasterDetailsPage(this); addPage(matchPage); setPartName(matchPage.getIntactElemenetName()); setTitleImage(ImageLib.getImage(ImageLib.MATCH_RULE_WHITE_ICON)); } else { masterPage = new DQRuleMasterDetailsPage(this, ID, DefaultMessagesImpl.getString("DQRuleEditor.dqRuleSettings")); //$NON-NLS-1$ addPage(masterPage); setPartName(masterPage.getIntactElemenetName()); } } } catch (PartInitException e) { ExceptionHandler.process(e, Level.ERROR); } // ADD xqliu 2009-07-02 bug 7687 TdEditorToolBar toolbar = getToolBar(); // MOD msjian 2011-9-22 TDQ-3372: Add a "save" button in the parser rule editor if (toolbar != null && (masterPage != null || parserPage != null || matchPage != null)) { // TDQ-3372 ~ saveAction = new DefaultSaveAction(this); saveAction.setEnabled(false); toolbar.addActions(saveAction); } // ~ } /** * DOC zshen Comment method "getCurrentModelElement". */ private ModelElement getCurrentModelElement() { IEditorInput editorInput = this.getEditorInput(); if (editorInput instanceof FileEditorInput) { FileEditorInput fileEditorInput = (FileEditorInput) editorInput; IFile file = fileEditorInput.getFile(); if (FactoriesUtil.isDQRuleFile(file.getFileExtension())) { return DQRuleResourceFileHelper.getInstance().findIndicatorDefinition(file); } } else if (editorInput instanceof BusinessRuleItemEditorInput) { return ((BusinessRuleItemEditorInput) editorInput).getModel(); } else if (editorInput instanceof MatchRuleItemEditorInput) { // this only used when this comes from MDM team return ((MatchRuleItemEditorInput) editorInput).getMatchRule(); } return null; } @Override public void doSave(IProgressMonitor monitor) { if (masterPage != null) { if (masterPage.isDirty()) { masterPage.doSave(monitor); setPartName(masterPage.getIntactElemenetName()); } setEditorObject(((DQRuleMasterDetailsPage) getMasterPage()).getCurrentRepNode()); } else if (parserPage != null) { if (parserPage.isDirty()) { parserPage.doSave(monitor); setPartName(parserPage.getIntactElemenetName()); } setEditorObject(parserPage.getCurrentRepNode()); } else if (matchPage != null) { if (matchPage.isDirty()) { matchPage.doSave(monitor); setPartName(matchPage.getIntactElemenetName()); } // setEditorObject(matchPage.getRuleRepNode()); } super.doSave(monitor); } @Override public void firePropertyChange(final int propertyId) { // ADD xqliu 2009-07-02 bug 7687 setSaveActionButtonState(isDirty()); // ~ super.firePropertyChange(propertyId); } @Override protected void pageChange(int newPageIndex) { super.pageChange(newPageIndex); // ADD xqliu 2009-07-02 bug 7686 if (masterPage != null) { setSaveActionButtonState(false); } else if (parserPage != null) { setSaveActionButtonState(false); } else if (matchPage != null) { setSaveActionButtonState(false); } } /** * DOC xqliu 2009-07-02 bug 7687. * * @param state */ public void setSaveActionButtonState(boolean state) { if (saveAction != null) { saveAction.setEnabled(state); } } @Override public void setFocus() { super.setFocus(); // don't invoke this method here, invoke it in IPartListener.partBroughtToTop() // WorkbenchUtils.autoChange2DataProfilerPerspective(); } public ParserRuleMasterDetailsPage getParserPage() { return this.parserPage; } private boolean isMatchRuleEditor() { ModelElement currentModelElement = getCurrentModelElement(); if (currentModelElement != null && currentModelElement instanceof MatchRuleDefinition) { return true; } return false; } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.editor.CommonFormEditor#getPreferredPerspectiveId() */ @Override public List<String> getPreferredPerspectiveId() { // we will use this editor on the Di perspective and MDM perspective so return null to disable this function if (isMatchRuleEditor()) { return null; } else { return super.getPreferredPerspectiveId(); } } }