// ============================================================================
//
// 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.List;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.core.command.ICommand;
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.models.FolderRepositoryObject;
import org.talend.mdm.repository.ui.dialogs.lock.LockedDirtyObjectDialog;
import org.talend.mdm.repository.utils.RepositoryResourceUtil;
import org.talend.mdm.workbench.serverexplorer.ui.dialogs.SelectServerDefDialog;
import com.amalto.workbench.exadapter.ExAdapterManager;
import com.amalto.workbench.service.MissingJarService;
/**
* DOC hbhong class global comment. Detailled comment
*/
public class DeployToLastServerAction extends AbstractDeployAction {
IDeployActionExAdapter<DeployToAction> exAdapter;
private static Logger log = Logger.getLogger(DeployToLastServerAction.class);
public DeployToLastServerAction() {
super(Messages.DeployToLastServerAction_deployToLastServer);
exAdapter = ExAdapterManager.getAdapter(this, IDeployActionExAdapter.class);
}
@Override
protected void doRun() {
boolean checkMissingJar = MissingJarService.getInstance().checkMissingJar(true);
if (!checkMissingJar) {
return;
}
List<IRepositoryViewObject> viewObjs = getSelectedRepositoryViewObject();
if (exAdapter != null) {
viewObjs = exAdapter.showDependencyConfigDialog(viewObjs);
if (viewObjs == null) {
return;
}
// TO add match rule object
viewObjs = getSelectedRepositoryViewObject(viewObjs);
filterMatchRuleObjs(viewObjs);
}
LockedDirtyObjectDialog lockDirtyDialog = new LockedDirtyObjectDialog(getShell(),
Messages.AbstractDeployAction_promptToSaveEditors, viewObjs);
if (lockDirtyDialog.needShowDialog() && lockDirtyDialog.open() == IDialogConstants.CANCEL_ID) {
return;
}
lockDirtyDialog.saveDirtyObjects();
//
MDMServerDef currentServerDef = getLastServer(viewObjs);
// handle last server is null case
boolean isLostedServer = false;
if (currentServerDef == null) {
isLostedServer = true;
boolean isDeployToAnother = MessageDialog.openQuestion(getShell(), null,
Messages.DeployToLastServerAction_askReselectServerMsg);
if (isDeployToAnother) {
SelectServerDefDialog dialog = new SelectServerDefDialog(getShell());
if (dialog.open() == IDialogConstants.OK_ID) {
currentServerDef = dialog.getSelectedServerDef();
} else {
return;
}
} else {
return;
}
}
// check last server
if (!currentServerDef.isEnabled()) {
MessageDialog.openWarning(Display.getDefault().getActiveShell(), null,
Messages.DeployService_CanNotDeployToDisabledServer);
return;
}
// deploy
IStatus status = deploy(currentServerDef, viewObjs, ICommand.CMD_MODIFY);
if (status.getSeverity() != IStatus.CANCEL) {
if (status.isMultiStatus()) {
showDeployStatus(status);
}
if (isLostedServer) {
updateLastServer(status, new NullProgressMonitor());
}
DeployService.getInstance().updateChangedStatus(status, false);
for (IRepositoryViewObject viewObject : viewObjs) {
commonViewer.refresh(viewObject);
}
}
}
private MDMServerDef getLastServer(List<IRepositoryViewObject> viewObjs) {
for (IRepositoryViewObject viewObj : viewObjs) {
MDMServerDef serverDef = RepositoryResourceUtil.getLastServerDef(viewObj);
if (serverDef != null) {
return serverDef;
}
}
return null;
}
@Override
public boolean isVisible(IRepositoryViewObject viewObj) {
MDMServerDef firstDef = null;
for (Object obj : getSelectedObject()) {
if (obj instanceof IRepositoryViewObject) {
if (obj instanceof FolderRepositoryObject) {
return false;
}
MDMServerDef currentServerDef = RepositoryResourceUtil.getLastServerDef((IRepositoryViewObject) obj);
if (currentServerDef == null) {
return false;
}
if (firstDef == null) {
firstDef = currentServerDef;
} else {
if (!isSameServer(firstDef, currentServerDef)) {
return false;
}
}
}
}
return true;
}
private boolean isSameServer(MDMServerDef s1, MDMServerDef s2) {
return s1.getHost().equals(s2.getHost()) && s1.getPort().equals(s2.getPort());
}
}