// ============================================================================
//
// 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.mdm.repository.ui.editors;
import java.util.LinkedList;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.talend.core.model.properties.Item;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.core.IServerObjectRepositoryType;
import org.talend.mdm.repository.core.command.CommandManager;
import org.talend.mdm.repository.core.command.CommandStack;
import org.talend.mdm.repository.core.command.ICommand;
import org.talend.mdm.repository.core.service.DeployService;
import org.talend.mdm.repository.core.service.RepositoryWebServiceAdapter;
import org.talend.mdm.repository.core.service.wsimpl.transformplugin.AbstractPluginDetail;
import org.talend.mdm.repository.i18n.Messages;
import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef;
import org.talend.mdm.repository.ui.navigator.MDMRepositoryView;
import org.talend.mdm.repository.ui.widgets.xmleditor.infoholder.RepositoryExternalInfoHolder;
import org.talend.mdm.repository.utils.RepositoryResourceUtil;
import com.amalto.workbench.editors.TransformerMainPage;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.utils.XtentisException;
import com.amalto.workbench.webservices.TMDMService;
import com.amalto.workbench.webservices.WSTransformerPluginV2Details;
import com.amalto.workbench.webservices.WSTransformerPluginV2VariableDescriptor;
import com.amalto.workbench.webservices.WSTransformerV2;
import com.amalto.workbench.widgets.xmleditor.infoholder.ExternalInfoHolder;
/**
* DOC hbhong class global comment. Detailled comment
*/
public class TransformerMainPage2 extends TransformerMainPage {
XObjectEditor2 editor2;
/**
* DOC hbhong TransformerMainPage2 constructor comment.
*
* @param editor
*/
public TransformerMainPage2(FormEditor editor) {
super(editor);
this.editor2 = (XObjectEditor2) editor;
}
@Override
protected void initExternalInfoHolder() {
ExternalInfoHolder<?> allJobInfosHolder = RepositoryExternalInfoHolder.getAllJobInfosHolder(null);
ExternalInfoHolder<?> mdmServerInfoHolder = RepositoryExternalInfoHolder.getAllMDMServerInfoHolder2(null);
ExternalInfoHolder<?> allVarCandidatesHolder = RepositoryExternalInfoHolder
.getProcessAllCallJobVarsCandidatesHolder((WSTransformerV2) getXObject().getWsObject());
ExternalInfoHolder<?> workflowInfoHolder = RepositoryExternalInfoHolder.getAllWorkflowInfoHolder(null);
ExternalInfoHolder<?> allDataModelHolderProxy = RepositoryExternalInfoHolder.getAllDataModelInfoHolderProxy(getXObject());
initExternalInfoHolderForEachType("callJob", new ExternalInfoHolder<?>[] { allJobInfosHolder, mdmServerInfoHolder, //$NON-NLS-1$
allVarCandidatesHolder });
initExternalInfoHolderForEachType("workflowtrigger", new ExternalInfoHolder<?>[] { workflowInfoHolder, //$NON-NLS-1$
allDataModelHolderProxy });
initExternalInfoHolderForEachType("workflowcontexttrigger", new ExternalInfoHolder<?>[] { workflowInfoHolder, //$NON-NLS-1$
allDataModelHolderProxy });
}
@Override
protected void initTransformer() throws XtentisException {
TreeObject xObject = getXObject();
transformer = (WSTransformerV2) xObject.getWsObject();
}
@Override
protected void initPlugin() {
for (AbstractPluginDetail detail : RepositoryWebServiceAdapter.findAllTransformerPluginV2Details()) {
String jndi = detail.getJNDIName();
pluginsCombo.add(jndi);
pluginDescriptions.put(jndi, detail.getDescription());
// add input variables and output variables
java.util.List<String> input = new LinkedList<String>();
for (WSTransformerPluginV2VariableDescriptor v : detail.getInputVariableDescriptors()) {
input.add(v.getVariableName());
}
inputVariablesMap.put(jndi, input);
//
java.util.List<String> output = new LinkedList<String>();
for (WSTransformerPluginV2VariableDescriptor v : detail.getOutputVariableDescriptors()) {
output.add(v.getVariableName());
}
outputVariablesMap.put(jndi, output);
}
}
@Override
protected void executeProcess(FormToolkit toolkit) {
// if it is deployed before its execution
if (getLastServerDef() == null) {
MessageDialog.openWarning(null, Messages.Warning_text, Messages.RepositoryWebServiceAdapter_DeployFirst);
return;
}
super.executeProcess(toolkit);
}
@Override
protected void performSave() {
if (editor2.isDirty()) {
boolean isConfirmedToDeploy = openConfirmDialog();
if (isConfirmedToDeploy) {
editor2.doSave(new NullProgressMonitor());
deployAndRefresh();
}
} else if (isReferedViewObjModified()) {
boolean isConfirmedToDeploy = openConfirmDialog();
if (isConfirmedToDeploy) {
deployAndRefresh();
}
}
}
private void deployAndRefresh() {
DeployService deployService = DeployService.getInstance();
if (!deployService.isAutoDeploy()) {
editor2.autoDeployProcess(deployService);
// refresh after deploy
MDMRepositoryView view = MDMRepositoryView.show();
if (view != null) {
view.refreshRootNode(IServerObjectRepositoryType.TYPE_TRANSFORMERV2);
}
}
}
private boolean openConfirmDialog() {
String msg = null;
if (editor2.isDirty()) {
msg = Messages.TransformerMainPage_ConfirmContent;
} else {
msg = Messages.TransformerMainPage_ConfirmContent1;
}
return MessageDialog.openConfirm(getSite().getShell(), Messages.TransformerMainPage_ConfirmTitle, msg);
}
@Override
protected TMDMService getService() {
return RepositoryWebServiceAdapter.getMDMService(getSite().getShell(), getLastServerDef());
}
@Override
protected WSTransformerPluginV2Details getWsTransformerPluginV2Details(String jndi) {
return RepositoryWebServiceAdapter.findTransformerPluginV2Detail(jndi);
}
private MDMServerDef getLastServerDef() {
XObjectEditorInput2 input = (XObjectEditorInput2) editor2.getEditorInput();
Item item = input.getInputItem();
MDMServerDef lastServerDef = RepositoryResourceUtil.getLastServerDef(item);
return lastServerDef;
}
private boolean isReferedViewObjModified() {
IEditorInput editorInput = editor2.getEditorInput();
if (editorInput instanceof XObjectEditorInput2) {
XObjectEditorInput2 editorInput2 = (XObjectEditorInput2) editorInput;
IRepositoryViewObject viewObj = editorInput2.getViewObject();
CommandStack stack = CommandManager.getInstance().findCommandStack(viewObj.getId());
if (stack != null) {
ICommand command = stack.getValidDeployCommand();
if (command.getCommandType() == ICommand.CMD_MODIFY) {
return true;
}
}
}
return false;
}
}