// ============================================================================ // // 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.editors; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.widgets.FormToolkit; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.Property; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.mdm.repository.core.IServerObjectRepositoryType; import org.talend.mdm.repository.core.command.CommandManager; import org.talend.mdm.repository.core.command.CommandStack; import org.talend.mdm.repository.core.command.ICommand; import org.talend.mdm.repository.core.service.ContainerCacheService; import org.talend.mdm.repository.core.service.DeployService; import org.talend.mdm.repository.core.service.RepositoryQueryService; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef; import org.talend.mdm.repository.ui.navigator.MDMRepositoryView; import org.talend.mdm.repository.ui.widgets.TisTableViewerR; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import com.amalto.workbench.editors.ViewMainPage; import com.amalto.workbench.utils.XtentisException; import com.amalto.workbench.webservices.WSConceptKey; import com.amalto.workbench.webservices.WSGetBusinessConceptKey; import com.amalto.workbench.webservices.WSView; import com.amalto.workbench.widgets.ComplexTableViewerColumn; import com.amalto.workbench.widgets.TisTableViewer; /** * DOC hbhong class global comment. Detailled comment */ public class ViewMainPage2 extends ViewMainPage { private static Logger log = Logger.getLogger(ViewMainPage2.class); /** * DOC hbhong ViewMainPage2 constructor comment. * * @param editor */ public ViewMainPage2(FormEditor editor) { super(editor); } @Override protected void createCharacteristicsContent(FormToolkit toolkit, Composite charComposite) { super.createCharacteristicsContent(toolkit, charComposite); TableViewer viewer = conditionViewer.getViewer(); viewer.setCellModifier(new UserSecurityCellModifier(getSite(), this, viewer, conditionsColumns)); } @Override protected void initProcessCombo() throws XtentisException { List<String> processNames = RepositoryQueryService.findAllProcessNames(); cboProcessList.setItems(processNames.toArray(new String[0])); } @Override protected TisTableViewer getNewTisTableViewer(Composite parent, FormToolkit toolkit, List<ComplexTableViewerColumn> columns) { return new TisTableViewerR(columns, toolkit, parent); } @Override protected WSView getWsViewObject() { return (WSView) getXObject().getWsObject(); } @Override protected List<String> getAvailableDataModel() { return RepositoryQueryService.getDataModel(null, concept); } @Override protected WSConceptKey getBusinessConceptKey(WSGetBusinessConceptKey businessConcepKey) throws XtentisException { return RepositoryResourceUtil.getBusinessConceptKey(businessConcepKey); } @Override protected void runTest() { if (getLastServerDef() == null) { MessageDialog.openWarning(null, Messages.Warning_text, Messages.RepositoryWebServiceAdapter_DeployFirst); return; } performSave(); openTestView(); } private void openTestView() { XObjectEditorInput2 input = (XObjectEditorInput2) getEditor().getEditorInput(); Property prop = input.getInputItem().getProperty(); IRepositoryViewObject viewObject = ContainerCacheService.get(prop); IWorkbenchPage page = getEditor().getEditorSite().getPage(); ViewBrowserInput browserInput = new ViewBrowserInput(viewObject); browserInput.setServerDef(getLastServerDef()); try { IEditorPart oldEditor = page.findEditor(browserInput); if (oldEditor != null) { page.closeEditor(oldEditor, false); } page.openEditor(browserInput, XObjectBrowser2.EDITOR_ID); } catch (PartInitException e) { log.error(e.getMessage(), e); } } private MDMServerDef getLastServerDef() { XObjectEditorInput2 input = (XObjectEditorInput2) getEditor().getEditorInput(); Item item = input.getInputItem(); MDMServerDef lastServerDef = RepositoryResourceUtil.getLastServerDef(item); return lastServerDef; } protected void performSave() { if (getEditor().isDirty()) { boolean isConfirmedToDeploy = openConfirmDialog(); if (isConfirmedToDeploy) { getEditor().doSave(new NullProgressMonitor()); deployAndRefresh(); } } else if (isReferedViewObjModified()) { boolean isConfirmedToDeploy = openConfirmDialog(); if (isConfirmedToDeploy) { deployAndRefresh(); } } } private void deployAndRefresh() { DeployService deployService = DeployService.getInstance(); if (!deployService.isAutoDeploy()) { autoDeployProcess(deployService); // refresh after deploy MDMRepositoryView view = MDMRepositoryView.show(); if (view != null) { view.refreshRootNode(IServerObjectRepositoryType.TYPE_TRANSFORMERV2); } } } private void autoDeployProcess(DeployService deployService) { XObjectEditorInput2 theInput = (XObjectEditorInput2) getEditorInput(); IRepositoryViewObject viewObj = theInput.getViewObject(); deployService.autoDeploy(getSite().getShell(), viewObj); } private boolean openConfirmDialog() { String msg = null; if (getEditor().isDirty()) { msg = Messages.ViewMainPage_needSaveAndDeploy; } else { msg = Messages.ViewMainPage_needDeploy; } return MessageDialog.openConfirm(getSite().getShell(), Messages.ViewMainPage_testView, msg); } private boolean isReferedViewObjModified() { XObjectEditorInput2 editorInput2 = (XObjectEditorInput2) getEditor().getEditorInput(); IRepositoryViewObject viewObj = editorInput2.getViewObject(); CommandStack stack = CommandManager.getInstance().findCommandStack(viewObj.getId()); if (stack != null) { ICommand command = stack.getValidDeployCommand(); if (command.getCommandType() == ICommand.CMD_MODIFY) { return true; } } return false; } }