// ============================================================================
//
// 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;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.resources.IFolder;
import org.eclipse.jface.wizard.Wizard;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.exception.PersistenceException;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.properties.ConnectionItem;
import org.talend.core.model.properties.Item;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.dataprofiler.core.CorePlugin;
import org.talend.dataprofiler.core.ui.utils.MessageUI;
import org.talend.dataprofiler.core.ui.utils.UIMessages;
import org.talend.dataquality.helpers.MetadataHelper;
import org.talend.dataquality.properties.TDQMatchRuleItem;
import org.talend.dq.analysis.parameters.ConnectionParameter;
import org.talend.dq.helper.RepositoryNodeHelper;
import org.talend.dq.helper.resourcehelper.AnaResourceFileHelper;
import org.talend.dq.helper.resourcehelper.DQRuleResourceFileHelper;
import org.talend.dq.helper.resourcehelper.IndicatorResourceFileHelper;
import org.talend.dq.helper.resourcehelper.PatternResourceFileHelper;
import org.talend.dq.helper.resourcehelper.RepResourceFileHelper;
import org.talend.dq.helper.resourcehelper.ResourceFileMap;
import org.talend.repository.model.IRepositoryNode;
import org.talend.repository.model.RepositoryNode;
import org.talend.utils.sugars.ReturnCode;
import org.talend.utils.sugars.TypedReturnCode;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* DOC zqin class global comment. Detailled comment
*/
public abstract class AbstractWizard extends Wizard implements ICWMResouceAdapter, IConnectionParameter {
protected ModelElement modelElement = null;
protected boolean isDoingPerformFinish = false;
@Override
public boolean performFinish() {
// TDQ-12153: add a flag to avoid this method run twice when the user quickly click the finish button on the
// wizard. TODO: consider other better solution.
if (isDoingPerformFinish) {
return true;
}
isDoingPerformFinish = true;
// MOD mzhao feature 15750 Use repository object represent ModelElement.
modelElement = initCWMResourceBuilder();
if (modelElement != null) {
fillMetadataToCWMResource(modelElement);
// Save the repository objects.
TypedReturnCode<Object> csResult = createAndSaveCWMFile(modelElement);
if (csResult.isOk()) {
Object savedObj = csResult.getObject();
if (savedObj instanceof Item) {
if (!RepositoryNodeHelper.isOpenDQCommonViewer() && savedObj instanceof TDQMatchRuleItem) {
openEditor((TDQMatchRuleItem) savedObj);
} else {
RepositoryNode recursiveFind = RepositoryNodeHelper.recursiveFind(((Item) savedObj).getProperty());
openEditor(recursiveFind);
}
}
CorePlugin.getDefault().refresh(modelElement);
isDoingPerformFinish = false;
return true;
} else {
MessageUI.openError(csResult.getMessage());
}
}
isDoingPerformFinish = false;
return false;
}
public abstract void openEditor(IRepositoryNode repNode);
public void openEditor(TDQMatchRuleItem item) {
}
public ReturnCode checkMetadata() {
String elementName = getParameter().getName();
IFolder folderResource = getParameter().getFolderProvider().getFolderResource();
if (elementName == null || folderResource == null) {
return new ReturnCode("", false); //$NON-NLS-1$
} else {
Collection<ModelElement> modelElements = new ArrayList<ModelElement>();
switch (getParameter().getParamType()) {
case ANALYSIS:
modelElements.addAll(AnaResourceFileHelper.getInstance().getAllElement(folderResource));
break;
case REPORT:
modelElements.addAll(RepResourceFileHelper.getInstance().getAllElement(folderResource));
break;
case PATTERN:
modelElements.addAll(PatternResourceFileHelper.getInstance().getAllElement(folderResource));
break;
case CONNECTION:
List<Connection> conns = new ArrayList<Connection>();
try {
for (ConnectionItem connItem : ProxyRepositoryFactory.getInstance().getMetadataConnectionsItem()) {
conns.add(connItem.getConnection());
}
} catch (PersistenceException e) {
ExceptionHandler.process(e);
}
modelElements.addAll(conns);
break;
case DQRULE:
modelElements.addAll(DQRuleResourceFileHelper.getInstance().getAllElement(folderResource));
break;
case UDINDICATOR:
modelElements.addAll(IndicatorResourceFileHelper.getInstance().getAllElement(folderResource));
break;
default:
break;
}
if (!modelElements.isEmpty()) {
for (ModelElement element : modelElements) {
String theElementName = element.getName();
if (theElementName == null) {
if (element instanceof Connection) {
// MOD klliu 2011-04-18 get repository Object label
// theElementName =RepositoryNodeHelper.recursiveFind(element).getObject().getLabel();
}
}
if (elementName.equals(theElementName)) {
// MOD xqliu 2010-09-21 bug 15762
return new ReturnCode(UIMessages.MSG_ANALYSIS_SAME_NAME, false);
// if (!MessageUI.openConfirm(UIMessages.MSG_ANALYSIS_SAME_NAME)) {
// getParameter().setName(elementName + DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")); //$NON-NLS-1$
// }
// break;
// ~ 15762
}
}
}
}
return new ReturnCode(true);
}
public void fillMetadataToCWMResource(ModelElement cwmElement) {
MetadataHelper.setDevStatus(cwmElement, getParameter().getStatus());
MetadataHelper.setAuthor(cwmElement, getParameter().getAuthor());
MetadataHelper.setPurpose(getParameter().getPurpose(), cwmElement);
MetadataHelper.setDescription(getParameter().getDescription(), cwmElement);
MetadataHelper.setVersion(getParameter().getVersion(), cwmElement);
}
protected abstract ResourceFileMap getResourceFileMap();
public abstract ConnectionParameter getParameter();
protected abstract String getEditorName();
}