// ============================================================================
//
// 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.core.service.interactive;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbench;
import org.talend.core.model.properties.PropertiesFactory;
import org.talend.core.model.properties.SpagoBiServer;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.engines.client.ui.wizards.DeployOnMDMExportWizard;
import org.talend.mdm.repository.core.command.deploy.AbstractDeployCommand;
import org.talend.mdm.repository.core.command.deploy.job.BatchDeployJobCommand;
import org.talend.mdm.repository.i18n.Messages;
import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef;
import org.talend.mdm.repository.plugin.RepositoryPlugin;
import org.talend.mdm.repository.utils.RepositoryResourceUtil;
import org.talend.repository.model.RepositoryNode;
import com.amalto.workbench.utils.HttpClientUtil;
import com.amalto.workbench.utils.Util;
import com.amalto.workbench.utils.XtentisException;
import com.amalto.workbench.webservices.TMDMService;
/**
* DOC hbhong class global comment. Detailled comment
*/
public class JobInteractiveHandler extends AbstractInteractiveHandler {
private RuntimeException deployException;
public ERepositoryObjectType getRepositoryObjectType() {
return ERepositoryObjectType.PROCESS;
}
public String getLabel() {
return Messages.JobInteractiveHandler_label;
}
@Override
public boolean deploy(AbstractDeployCommand cmd) throws XtentisException {
setToDefaultValue();
if (cmd instanceof BatchDeployJobCommand) {
BatchDeployJobCommand deployJobCommand = (BatchDeployJobCommand) cmd;
List<IRepositoryViewObject> viewObjects = deployJobCommand.getViewObjects();
if (viewObjects.isEmpty()) {
return true;
}
IStructuredSelection selection = getSelection(viewObjects);
//
final DeployOnMDMExportWizard publishWizard = new DeployOnMDMExportWizard();
SpagoBiServer server = getServer(deployJobCommand.getServerDef());
publishWizard.setMdmServer(server);
IWorkbench workbench = RepositoryPlugin.getDefault().getWorkbench();
publishWizard.setWindowTitle(Messages.JobInteractiveHandler_wizardTitle);
publishWizard.init(workbench, selection);
final Display display = Display.getDefault();
display.syncExec(new Runnable() {
public void run() {
Shell activeShell = display.getActiveShell();
WizardDialog dialog = new WizardDialog(activeShell, publishWizard);
int open = dialog.open();
if (open == IDialogConstants.CANCEL_ID) {
setDeployCancelled(true);
} else {
setResult(publishWizard.isDeploySucceed());
RuntimeException e = publishWizard.getDeployException();
if (e != null) {
setException(e);
}
}
}
});
}
if (deployCancelled) {
throw new OperationCanceledException();
}
if (deployException != null) {
throw deployException;
}
return result;
}
private void setException(RuntimeException re) {
this.deployException = re;
}
private boolean result = false;
private boolean deployCancelled = false;
public void setResult(boolean result) {
this.result = result;
}
public void setDeployCancelled(boolean cancelled) {
this.deployCancelled = cancelled;
}
private IStructuredSelection getSelection(List<IRepositoryViewObject> viewObjs) {
List<RepositoryNode> nodes = new LinkedList<RepositoryNode>();
for (IRepositoryViewObject viewObj : viewObjs) {
RepositoryNode node = RepositoryResourceUtil.convertToNode(viewObj);
nodes.add(node);
}
return new StructuredSelection(nodes);
}
private SpagoBiServer getServer(MDMServerDef serverDef) {
SpagoBiServer spagoBiServer = PropertiesFactory.eINSTANCE.createSpagoBiServer();
spagoBiServer.setShortDescription(serverDef.getName());
spagoBiServer.setHost(serverDef.getHost());
spagoBiServer.setPort(serverDef.getPort());
spagoBiServer.setLogin(serverDef.getUser());
spagoBiServer.setPassword(serverDef.getPasswd());
return spagoBiServer;
}
@Override
public boolean doRemove(TMDMService service, AbstractDeployCommand cmd) throws XtentisException {
MDMServerDef serverDef = cmd.getServerDef();
String name = cmd.getObjName();
String version = cmd.getViewObject().getVersion();
// delete server bar file
String filename = name + "_" + version + ".zip"; //$NON-NLS-1$ //$NON-NLS-2$
String contextPath = Util.getContextPath(serverDef.getPath());
String uploadURL = serverDef.getProtocol() + serverDef.getHost() + ":"//$NON-NLS-1$
+ serverDef.getPort() + contextPath + "/services/uploadFile?deletefile=" + filename;//$NON-NLS-1$
HttpClientUtil.uploadFileToAppServer(uploadURL, filename, serverDef.getUser(), serverDef.getPasswd());
filename = name + "_" + version + ".war"; //$NON-NLS-1$ //$NON-NLS-2$
uploadURL = serverDef.getProtocol() + serverDef.getHost() + ":"//$NON-NLS-1$
+ serverDef.getPort() + contextPath + "/services/uploadFile?deletefile=" + filename;//$NON-NLS-1$
HttpClientUtil.uploadFileToAppServer(uploadURL, filename, serverDef.getUser(), serverDef.getPasswd());
return true;
}
private void setToDefaultValue() {
result = false;
deployCancelled = false;
deployException = null;
}
}