// ============================================================================
//
// 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.actions;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.talend.commons.utils.VersionUtils;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.core.service.DeployService;
import org.talend.mdm.repository.i18n.Messages;
import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef;
import org.talend.mdm.repository.ui.dialogs.SelectVersionDialog;
import org.talend.mdm.repository.ui.dialogs.lock.LockedDirtyObjectDialog;
import org.talend.mdm.workbench.serverexplorer.ui.dialogs.SelectServerDefDialog;
import com.amalto.workbench.service.MissingJarService;
/**
* DOC Administrator class global comment. Detailled comment
*/
public class DeployAnotherVersionAction extends AbstractDeployAction {
public DeployAnotherVersionAction() {
super(Messages.DeployAnotherVersionAction_deployAnother);
}
@Override
protected void doRun() {
boolean checkMissingJar = MissingJarService.getInstance().checkMissingJar(true);
if (!checkMissingJar) {
return;
}
List<IRepositoryViewObject> viewObjs = getSelectedRepositoryViewObject();
if (viewObjs.size() == 0) {
return;
}
String originVersion = viewObjs.get(0).getProperty().getVersion();
// open the version dialog
SelectVersionDialog versionDialog = new SelectVersionDialog(getShell(),
Messages.DeployAnotherVersionAction_selectAnother, viewObjs.get(0));
versionDialog.create();
if (versionDialog.open() == IDialogConstants.OK_ID) {
if (versionDialog.getSelection() != null) {
viewObjs = new ArrayList<IRepositoryViewObject>();
IRepositoryViewObject modelviewObj = versionDialog.getSelection();
viewObjs.add(modelviewObj);
viewObjs.addAll(getAssociatedObjects(modelviewObj));
}
SelectServerDefDialog dialog = new SelectServerDefDialog(getShell());
if (dialog.open() == IDialogConstants.OK_ID) {
// save editors
LockedDirtyObjectDialog lockDirtyDialog = new LockedDirtyObjectDialog(getShell(),
Messages.AbstractDeployAction_promptToSaveEditors, viewObjs);
if (lockDirtyDialog.needShowDialog() && lockDirtyDialog.open() == IDialogConstants.CANCEL_ID) {
return;
}
lockDirtyDialog.saveDirtyObjects();
// deploy
MDMServerDef serverDef = dialog.getSelectedServerDef();
if (doCheckServerConnection(serverDef)) {
IStatus status = DeployService.getInstance().deployAnotherVersion(serverDef, viewObjs);
if (status.isMultiStatus()) {
showDeployStatus(status);
}
if (isLatestVersion(viewObjs.get(0), originVersion)) {
updateChangedStatus(status);
updateLastServer(status, new NullProgressMonitor());
}
}
}
}
}
private boolean isLatestVersion(IRepositoryViewObject viewObject, String originalVersion) {
String openVersion = viewObject.getProperty().getVersion();
return VersionUtils.compareTo(openVersion, originalVersion) >= 0;
}
@Override
public boolean isVisible(IRepositoryViewObject viewObj) {
return getSelectedObject().size() == 1;
}
}