// ============================================================================ // // 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 com.amalto.workbench.editors; import java.util.ArrayList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.PartInitException; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.editor.IFormPage; import org.talend.mdm.commmon.util.webapp.XSystemObjects; import com.amalto.workbench.availablemodel.AvailableModelUtil; import com.amalto.workbench.availablemodel.IAvailableModel; import com.amalto.workbench.i18n.Messages; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; import com.amalto.workbench.models.IXObjectModelListener; import com.amalto.workbench.models.TreeObject; import com.amalto.workbench.providers.XObjectBrowserInput; public class XObjectBrowser extends FormEditor implements IXObjectModelListener { private static Log log = LogFactory.getLog(XObjectBrowser.class); public static String ID = "com.amalto.workbench.editors.XObjectBrowser";//$NON-NLS-1$ private ArrayList<IFormPage> formPages = new ArrayList<IFormPage>(); private TreeObject initialXObject = null; // backup private TdEditorToolBar toolBar; public void setName(String name) { setPartName(name); } /* * (non-Javadoc) * * @see org.eclipse.ui.forms.editor.FormEditor#addPages() */ @Override protected void addPages() { try { updateTitle(); TreeObject xobject = (TreeObject) ((XObjectBrowserInput) this.getEditorInput()).getModel(); if (!xobject.isXObject()) { return; } // register model listener in order to close the browser when object is removed xobject.addListener(this); // available models java.util.List<IAvailableModel> availablemodels = AvailableModelUtil.getAvailableModels(isLocalInput()); ; for (IAvailableModel model : availablemodels) { model.addPage(xobject, this); } addPageForXObject(xobject); } catch (PartInitException e) { MessageDialog.openError(this.getSite().getShell(), Messages._Error, Messages.bind(Messages.XObjectBrowser_ErrorMsg, e.getLocalizedMessage())); } } protected void addPageForXObject(TreeObject xobject) throws PartInitException { switch (xobject.getType()) { case TreeObject.VIEW: addPage(new ViewBrowserMainPage(this)); break; case TreeObject.DATA_CLUSTER: if (xobject.getDisplayName() != null && xobject.getDisplayName().equals(XSystemObjects.DC_MDMITEMSTRASH.getName())) { addPage(new ItemsTrashBrowserMainPage(this)); break; } addPage(new DataClusterBrowserMainPage(this)); break; case TreeObject.SUBSCRIPTION_ENGINE: try { addPage(new RoutingEngineV2BrowserMainPage(this)); } catch (PartInitException e) { log.error(e.getMessage(), e); } break; }// switch } protected void createToolbar(final Composite parent) { toolBar = new TdEditorToolBar(parent); FormData data = new FormData(); data.top = new FormAttachment(0, 0); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); toolBar.getToolbarControl().setLayoutData(data); toolBar.addResizeListener(new ControlListener() { public void controlMoved(ControlEvent e) { } public void controlResized(ControlEvent e) { parent.getParent().layout(true); parent.layout(true); } }); } @Override protected Composite createPageContainer(Composite parent) { GridLayout gridLayout = new GridLayout(); gridLayout.verticalSpacing = 0; gridLayout.numColumns = 1; gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; parent.setLayout(gridLayout); Composite barComp = new Composite(parent, SWT.NONE); GridData gdData = new GridData(GridData.FILL_HORIZONTAL); barComp.setLayoutData(gdData); barComp.setLayout(new FormLayout()); createToolbar(barComp); toolBar.addActions(new RefreshSectionAction()); Composite mainParent = new Composite(parent, SWT.NONE); GridData gdData1 = new GridData(GridData.FILL_BOTH); gdData1.grabExcessVerticalSpace = true; mainParent.setLayoutData(gdData1); return super.createPageContainer(mainParent); } // Overloaded - Fixes issues with getEditor() @Override public int addPage(IFormPage page) throws PartInitException { formPages.add(page); return super.addPage(page); } /* * (non-Javadoc) * * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) */ @Override public void doSave(IProgressMonitor monitor) { // NO saving on browsers } /* * (non-Javadoc) * * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() */ @Override public boolean isSaveAsAllowed() { return false; } @Override public void doSaveAs() { } private void updateTitle() { IEditorInput input = this.getEditorInput(); setPartName(input.getName()); setContentDescription("");//$NON-NLS-1$ } @Override public void dispose() { // save space TreeObject xobject = (TreeObject) ((XObjectBrowserInput) this.getEditorInput()).getModel(); if (xobject != null) { xobject.setWsObject(null); // xobject.removeListener(this); } formPages.clear(); super.dispose(); } /** * Model Listener */ /* * public void handleEvent(int type, TreeObject parent, TreeObject child) { * System.out.println("XObjectBrowser Handle Event "+child.getDisplayName()+" - "+type); TreeObject xobject = * (TreeObject)((XObjectBrowserInput)this.getEditorInput()).getModel(); switch(type) { case * IXObjectModelListener.DELETE: if (xobject.equals(child)) this.close(false); break; case * IXObjectModelListener.SAVE: case IXObjectModelListener.UPDATE: if (xobject.equals(child)) { * //((AFormPage)getActivePageInstance()).refreshPage(); for (int i = formPages.size()-1; i >=0 ; i--) { * ((AFormPage) formPages.get(i)).refreshPage(); } } default: } } */ public TreeObject getInitialXObject() { return initialXObject; } @Override protected void pageChange(int newPageIndex) { super.pageChange(newPageIndex); AFormPage page = (AFormPage) formPages.get(newPageIndex); page.refreshPage(); } @Override public Image getTitleImage() { TreeObject object = (TreeObject) ((XObjectBrowserInput) this.getEditorInput()).getModel(); if (object.getType() == TreeObject._SERVER_) { return ImageCache.getCreatedImage(EImage.TALEND_PICTO_SMALL.getPath()); } else if (object.getType() == TreeObject.DATA_CLUSTER) { return ImageCache.getCreatedImage(EImage.DATA_CLUSTER_WHITE.getPath()); } else if (object.getType() == TreeObject.DATA_MODEL) { return ImageCache.getCreatedImage(EImage.DATA_MODEL_WHITE.getPath()); } else if (object.getType() == TreeObject.MENU) { return ImageCache.getCreatedImage(EImage.MENU_WHITE.getPath()); } else if (object.getType() == TreeObject.TRANSFORMER) { return ImageCache.getCreatedImage(EImage.TRANSFORMER_WHITE.getPath()); } else if (object.getType() == TreeObject.ROLE) { return ImageCache.getCreatedImage(EImage.ROLE_WHITE.getPath()); } else if (object.getType() == TreeObject.STORED_PROCEDURE) { return ImageCache.getCreatedImage(EImage.STORED_PROCEDURE_WHITE.getPath()); } else if (object.getType() == TreeObject.ROUTING_RULE) { return ImageCache.getCreatedImage(EImage.ROUTING_RULE_WHITE.getPath()); } else if (object.getType() == TreeObject.VIEW) { return ImageCache.getCreatedImage(EImage.VIEW_WHITE.getPath()); } else if (object.getType() == TreeObject.DOCUMENT) { return ImageCache.getCreatedImage(EImage.DOCUMENTS.getPath()); } else if (object.getType() == TreeObject.SUBSCRIPTION_ENGINE) { return ImageCache.getCreatedImage(EImage.SUBSCRIPTION_ENGINE_WHITE.getPath()); } else if (object.getType() == TreeObject.WORKFLOW_PROCESS) { return ImageCache.getCreatedImage(EImage.WORKFLOW_PROCESS_WHITE.getPath()); } else if (object.getType() == TreeObject.JOB) { return ImageCache.getCreatedImage(EImage.JOB.getPath()); } return ImageCache.getCreatedImage(EImage.ERROR.getPath()); } /** * Model Listener */ public void handleEvent(int type, TreeObject parent, TreeObject child) { TreeObject xobject = (TreeObject) ((XObjectBrowserInput) this.getEditorInput()).getModel(); switch (type) { case IXObjectModelListener.DELETE: if (xobject.equals(child)) { this.close(false); } break; /* * case IXObjectModelListener.SAVE: if (saveInProgress) this.editorDirtyStateChanged(); break; case * IXObjectModelListener.UPDATE: if (xobject.equals(child)) { * ((AFormPage)getActivePageInstance()).refreshPage(); } */ default: } } public boolean isLocalInput() { return false; } private class RefreshSectionAction extends Action { public RefreshSectionAction() { super("Refresh"); //$NON-NLS-1$ setToolTipText(Messages.XObjectBrowser_Refresh); this.setImageDescriptor(ImageCache.getImage(EImage.REFRESH.getPath())); } @Override public void run() { IFormPage page = formPages.get(getCurrentPage()); if (page != null && page instanceof AFormPage) { ((AFormPage) page).refreshPage(); } } } public IFormPage getPage(int index) { return formPages.get(index); } public TdEditorToolBar getToolBar() { return toolBar; } }