// ============================================================================
//
// 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.command.deploy;
import javax.xml.ws.WebServiceException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.mdm.repository.core.command.AbstractCommand;
import org.talend.mdm.repository.core.command.ICommand;
import org.talend.mdm.repository.core.command.param.ICommandParameter;
import org.talend.mdm.repository.core.service.DeployService.DeployStatus;
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.UserExceptionStackFilter;
import com.amalto.workbench.utils.Util;
/**
* DOC hbhong class global comment. Detailled comment
*/
public abstract class AbstractDeployCommand extends AbstractCommand {
private ICommandParameter parameter;
protected MDMServerDef serverDef;
public MDMServerDef getServerDef() {
return this.serverDef;
}
public void setServerDef(MDMServerDef serverDef) {
this.serverDef = serverDef;
}
protected ERepositoryObjectType getViewObjectType() {
return viewObject.getRepositoryObjectType();
}
@Override
public int getToRunPhase() {
return ICommand.PHASE_DEPLOY;
}
protected IStatus getDetailErrorMsg(String bindMsg, String typeLabel, String objectName, Exception e) {
Throwable cause = null;
if (e instanceof WebServiceException) {
cause = Util.analyseWebServiceException((WebServiceException) e);
} else {
cause = e.getCause();
}
IStatus status = null;
if (cause == null) {
status = buildErrorStatus(bindMsg, typeLabel, objectName, e);
} else {
status = DeployStatus.getErrorStatus(this, Messages.bind(bindMsg, typeLabel, objectName, e.getMessage()), e);
}
return status;
}
private IStatus buildErrorStatus(String bindMsg, String typeLabel, String objectName, Exception e) {
String msg = e.getMessage();
String[] exceptionMsgs = UserExceptionStackFilter.filterExceptionMsg(msg);
IStatus status = null;
if (exceptionMsgs.length == 0) {
String errorMsg = msg != null && !msg.trim().isEmpty() ? msg
: Messages.bind(Messages.Deploy_fail_text, typeLabel, objectName);
status = DeployStatus.getErrorStatus(this, errorMsg, null);
} else if (exceptionMsgs.length == 1) {
status = DeployStatus.getErrorStatus(this, Messages.bind(bindMsg, typeLabel, objectName, exceptionMsgs[0]), e);
} else {
status = new MultiStatus(RepositoryPlugin.PLUGIN_ID, Status.ERROR, exceptionMsgs[0], null);
for (int i = 1; i < exceptionMsgs.length; i++) {
DeployStatus errorStatus = DeployStatus.getErrorStatus(this, exceptionMsgs[i]);
((MultiStatus) status).add(errorStatus);
}
}
return status;
}
public ICommandParameter getParameter() {
return this.parameter;
}
public void setParameter(ICommandParameter parameter) {
this.parameter = parameter;
}
}