// ============================================================================ // // 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.LinkedList; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.resource.ImageDescriptor; import org.talend.core.model.properties.Item; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.dataquality.properties.TDQMatchRuleItem; import org.talend.dataquality.rules.MatchRuleDefinition; import org.talend.mdm.repository.core.AbstractRepositoryAction; import org.talend.mdm.repository.core.service.DeployService; import org.talend.mdm.repository.core.service.IMatchRuleMapInfoService; import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef; import org.talend.mdm.repository.plugin.RepositoryPlugin; import org.talend.mdm.repository.ui.dialogs.deploy.DeployStatusDialog; import org.talend.mdm.repository.ui.dialogs.message.MultiStatusDialog; import org.talend.mdm.repository.utils.EclipseResourceManager; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.mdm.repository.utils.ServiceUtil; import org.talend.repository.model.IProxyRepositoryFactory; /** * DOC hbhong class global comment. Detailled comment */ public abstract class AbstractDeployAction extends AbstractRepositoryAction { private static final ImageDescriptor DEPLOY_IMG = EclipseResourceManager.getImageDescriptor(RepositoryPlugin.PLUGIN_ID, "/icons/deploy.png"); //$NON-NLS-1$ protected AbstractDeployAction(String text) { super(text); setImageDescriptor(DEPLOY_IMG); } protected IStatus deploy(MDMServerDef serverDef, List<IRepositoryViewObject> viewObjs, int defaultCmdType) { if (doCheckServerConnection(serverDef)) { return DeployService.getInstance().deploy(serverDef, viewObjs, defaultCmdType); } else { return Status.CANCEL_STATUS; } } protected boolean doCheckServerConnection(MDMServerDef serverDef) { return RepositoryResourceUtil.checkServerConnection(getShell(), serverDef); } protected void showDeployStatus(IStatus status) { int count = 0; if (status.isMultiStatus()) { for (IStatus child : status.getChildren()) { if (child.isMultiStatus()) { count += child.getChildren().length; } else { count++; } } } MultiStatusDialog dialog = new DeployStatusDialog(getShell(), status); dialog.open(); } @Override public String getGroupName() { return GROUP_DEPLOY; } protected void updateChangedStatus(IStatus status) { DeployService.getInstance().updateChangedStatus(status); } protected void updateLastServer(IStatus status, IProgressMonitor monitor) { DeployService.getInstance().updateLastServer(status, monitor); refreshDeployedViewObjects(); } protected void refreshDeployedViewObjects() { List<IRepositoryViewObject> viewObjs = getSelectedRepositoryViewObject(); for (IRepositoryViewObject viewObj : viewObjs) { commonViewer.refresh(viewObj); } } IProxyRepositoryFactory factory = CoreRuntimePlugin.getInstance().getProxyRepositoryFactory(); protected List<IRepositoryViewObject> getSelectedRepositoryViewObject() { List<IRepositoryViewObject> viewObjs = getSelectedRepositoryViewObject(getSelectedObject()); return viewObjs; } protected List<IRepositoryViewObject> getSelectedRepositoryViewObject(List inputObjs) { List<IRepositoryViewObject> viewObjs = new LinkedList<IRepositoryViewObject>(); for (Object obj : inputObjs) { if (obj instanceof IRepositoryViewObject) { IRepositoryViewObject viewObject = (IRepositoryViewObject) obj; viewObjs.add(viewObject); viewObjs.addAll(getAssociatedObjects(viewObject)); } } return viewObjs; } // remove match rule and add associated model objects protected void filterMatchRuleObjs(List<IRepositoryViewObject> viewObjs) { for (Object obj : viewObjs.toArray()) { if (obj instanceof IRepositoryViewObject) { IRepositoryViewObject viewObject = (IRepositoryViewObject) obj; Item item = viewObject.getProperty().getItem(); if (item instanceof TDQMatchRuleItem) { MatchRuleDefinition matchRule = ((TDQMatchRuleItem) item).getMatchRule(); String name = matchRule.getName(); if (getMapInfoService() != null) { List<IRepositoryViewObject> dataModels = service.findReferencedDataModels(name); viewObjs.remove(obj); for (IRepositoryViewObject modelObj : dataModels) { if (!viewObjs.contains(modelObj)) { viewObjs.add(modelObj); } } } } } } } private IMatchRuleMapInfoService service = null; private IMatchRuleMapInfoService getMapInfoService() { if (service == null) { this.service = ServiceUtil.getService(IMatchRuleMapInfoService.class); } return service; } protected List<IRepositoryViewObject> getAssociatedObjects(IRepositoryViewObject viewObject) { return DeployService.getInstance().getAssociatedObjects(viewObject); } }