// ============================================================================ // // 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.workbench.serverexplorer.ui.views; import java.net.MalformedURLException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.part.ViewPart; import org.talend.core.GlobalServiceRegister; import org.talend.core.IService; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef; import org.talend.mdm.repository.model.mdmproperties.MDMServerDefItem; import org.talend.mdm.workbench.serverexplorer.core.ServerDefService; import org.talend.mdm.workbench.serverexplorer.i18n.Messages; import org.talend.mdm.workbench.serverexplorer.plugin.MDMServerExplorerPlugin; import org.talend.mdm.workbench.serverexplorer.ui.actions.IEventMgrService; import org.talend.mdm.workbench.serverexplorer.ui.actions.ShowServerConsoleAction; import org.talend.mdm.workbench.serverexplorer.ui.dialogs.ServerDefDialog; import org.talend.mdm.workbench.serverexplorer.ui.providers.ServerSorter; import org.talend.mdm.workbench.serverexplorer.ui.providers.TreeContentProvider; import org.talend.mdm.workbench.serverexplorer.ui.providers.ViewerLabelProvider; import com.amalto.workbench.exadapter.ExAdapterManager; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; import com.amalto.workbench.service.MissingJarsException; import com.amalto.workbench.utils.XtentisException; /** * DOC hbhong class global comment. Detailled comment <br/> * */ public class ServerExplorer extends ViewPart { static final ImageDescriptor IMG_CHECK_CONNECT = MDMServerExplorerPlugin.imageDescriptorFromPlugin( MDMServerExplorerPlugin.PLUGIN_ID, "icons/client_network.png"); //$NON-NLS-1$ static final ImageDescriptor IMG_EVENTMANAGER = MDMServerExplorerPlugin.imageDescriptorFromPlugin( MDMServerExplorerPlugin.PLUGIN_ID, "icons/sub_engine.png"); //$NON-NLS-1$ public static final String ID = "org.talend.mdm.workbench.serverexplorer.ui.views.ServerExplorer"; //$NON-NLS-1$ private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); private TreeViewer treeViewer; private Tree tree; private static final Log log = LogFactory.getLog(ServerExplorer.class); private AddServerDefAction addServerDefAction; private List<Action> allActions = new LinkedList<Action>(); private EnableServerDefAction toEnableServerAction; private EnableServerDefAction toDisableServerAction; private IServerExplorerExAdapter exAdapter; public AddServerDefAction getAddServerDefAction() { return this.addServerDefAction; } public ServerExplorer() { } /** * Create contents of the view part. * * @param parent */ @Override public void createPartControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setLayout(new FillLayout(SWT.HORIZONTAL)); treeViewer = new TreeViewer(container, SWT.BORDER); treeViewer.setSorter(new ServerSorter()); tree = treeViewer.getTree(); tree.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { IRepositoryViewObject viewObject = getCurSelectedViewObject(); String name = null; if (viewObject != null) { MDMServerDefItem serverDefItem = getMDMItem(viewObject); name = serverDefItem.getServerDef().getName(); } editServerDef(); } }); toolkit.paintBordersFor(tree); treeViewer.setContentProvider(new TreeContentProvider()); treeViewer.setLabelProvider(new ViewerLabelProvider()); initAdapter(); initializeToolBar(); initializeMenu(); refreshServerDefs(); reInputPassword(); } private void initAdapter() { exAdapter = ExAdapterManager.getAdapter(this, IServerExplorerExAdapter.class); } private void reInputPassword() { List<IRepositoryViewObject> viewObjects = ServerDefService.getAllServerDefViewObjects(); for (IRepositoryViewObject viewObj : viewObjects) { MDMServerDefItem serverDefItem = getMDMItem(viewObj); MDMServerDef serverDef = serverDefItem.getServerDef(); if (serverDef.getPasswd().equals("")) { //$NON-NLS-1$ MessageDialog.openInformation(null, Messages.ServerExplorer_WarningText, Messages.bind(Messages.Reinput_Password, serverDef.getName())); editServerDef(viewObj); } } } @Override public void dispose() { toolkit.dispose(); super.dispose(); } /** * Initialize the toolbar. */ private void initializeToolBar() { IToolBarManager tbm = getViewSite().getActionBars().getToolBarManager(); } /** * Initialize the menu. */ private void initializeMenu() { initActions(); // Adds root context menu final MenuManager menuManager = new MenuManager(); menuManager.setRemoveAllWhenShown(true); menuManager.addMenuListener(getMenuListener()); // addAllActions(menuManager); // Context Menu contextMenu = menuManager.createContextMenu(tree); // Publish it tree.setMenu(contextMenu); getSite().registerContextMenu(menuManager, treeViewer); } private void initActions() { addServerDefAction = new AddServerDefAction(); allActions.add(addServerDefAction); allActions.add(new DeleteServerDefAction()); allActions.add(new EditServerDefAction()); allActions.add(new CheckConnectionAction()); allActions.add(new EventManageAction()); ShowServerConsoleAction showServerConsoleAction = new ShowServerConsoleAction(); showServerConsoleAction.initSelectionProvider(treeViewer); allActions.add(showServerConsoleAction); if (exAdapter != null) { exAdapter.initAction(allActions, treeViewer); } toEnableServerAction = new EnableServerDefAction(true); toDisableServerAction = new EnableServerDefAction(false); } private IMenuListener getMenuListener() { return new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { ISelection selection = treeViewer.getSelection(); boolean isEmpty = selection.isEmpty(); if (isEmpty) { manager.add(addServerDefAction); } else { addAllActions(manager); IRepositoryViewObject viewObject = getCurSelectedViewObject(); if (viewObject != null) { MDMServerDefItem mdmItem = getMDMItem(viewObject); if (mdmItem != null) { MDMServerDef serverDef = mdmItem.getServerDef(); manager.add(new Separator()); if (serverDef.isEnabled()) { manager.add(toDisableServerAction); } else { manager.add(toEnableServerAction); } } } } } }; } private void addAllActions(IMenuManager menuManager) { Iterator<Action> iterator = allActions.iterator(); while (iterator.hasNext()) { menuManager.add(iterator.next()); } } @Override public void setFocus() { if (treeViewer != null) { treeViewer.getTree().setFocus(); } refreshServerDefs(); } public void refreshServerDefs() { List<IRepositoryViewObject> viewObjects = ServerDefService.getAllServerDefViewObjects(true); if (viewObjects != null) { treeViewer.setInput(viewObjects); } } private MDMServerDefItem getMDMItem(IRepositoryViewObject viewObject) { if (viewObject != null) { return (MDMServerDefItem) (viewObject.getProperty().getItem()); } return null; } private IRepositoryViewObject getCurSelectedViewObject() { ISelection selection = treeViewer.getSelection(); if (!selection.isEmpty()) { Object firstElement = ((TreeSelection) selection).getFirstElement(); return (IRepositoryViewObject) firstElement; } return null; } public class AddServerDefAction extends Action { public AddServerDefAction() { setImageDescriptor(ImageCache.getImage(EImage.ADD_OBJ.getPath())); setText(Messages.ServerExplorer_AddServer); } @Override public void run() { ServerDefDialog dialog = new ServerDefDialog(getViewSite().getShell(), null); if (dialog.open() == IDialogConstants.OK_ID) { MDMServerDef serverDef = dialog.getServerDef(); String id = ServerDefService.createServerDef(serverDef); if (id != null) { String tempPasswd = serverDef.getTempPasswd(); ServerDefService.updateTempPassword(id, tempPasswd); refreshServerDefs(); } } } } class CheckConnectionAction extends Action { public CheckConnectionAction() { setImageDescriptor(IMG_CHECK_CONNECT); setText(Messages.ServerExplorer_CheckConnection); } @Override public void run() { IRepositoryViewObject viewObject = getCurSelectedViewObject(); if (viewObject != null) { MDMServerDefItem mdmItem = getMDMItem(viewObject); if (mdmItem != null) { MDMServerDef serverDef = mdmItem.getServerDef().getDecryptedServerDef(); try { ServerDefService.checkMDMConnection(serverDef); MessageDialog.openInformation(getSite().getShell(), Messages.ServerExplorer_CheckConnection, Messages.ServerExplorer_ConnectSuccessful); } catch (MissingJarsException e) { return; } catch (XtentisException e) { MessageDialog.openError(getSite().getShell(), Messages.ServerExplorer_CheckConnection, Messages.ServerExplorer_ConnectSSLFailed); } catch (MalformedURLException e) { MessageDialog.openError(getSite().getShell(), Messages.ServerExplorer_CheckConnection, Messages.ServerExplorer_ConnectFailed); } } } } } public class EventManageAction extends Action { public EventManageAction() { setImageDescriptor(IMG_EVENTMANAGER); setText(Messages.ServerExplorer_EventManager); } @Override public void run() { doOpenEventManagerAction(); } private void doOpenEventManagerAction() { IService service = GlobalServiceRegister.getDefault().getService(IEventMgrService.class); if (service != null) { IEventMgrService mgr = (IEventMgrService) service; IRepositoryViewObject curSelectedViewObject = getCurSelectedViewObject(); MDMServerDefItem item = (MDMServerDefItem) curSelectedViewObject.getProperty().getItem(); mgr.run(item.getServerDef().getDecryptedServerDef()); } } } class EditServerDefAction extends Action { public EditServerDefAction() { setImageDescriptor(ImageCache.getImage(EImage.EDIT_OBJ.getPath())); setText(Messages.ServerExplorer_EditServer); } @Override public void run() { IRepositoryViewObject viewObject = getCurSelectedViewObject(); String name = null; if (viewObject != null) { MDMServerDefItem serverDefItem = getMDMItem(viewObject); name = serverDefItem.getServerDef().getName(); } editServerDef(); } } private void editServerDef() { IRepositoryViewObject viewObject = getCurSelectedViewObject(); if (viewObject != null) { MDMServerDefItem mdmItem = getMDMItem(viewObject); if (mdmItem != null) { MDMServerDef serverDef = mdmItem.getServerDef(); ServerDefDialog dialog = new ServerDefDialog(getViewSite().getShell(), serverDef); if (dialog.open() == IDialogConstants.OK_ID) { String tempPasswd = serverDef.getTempPasswd(); ServerDefService.updateTempPassword(viewObject.getId(), tempPasswd); boolean result = ServerDefService.saveServeDef(mdmItem); if (result) { refreshServerDefs(); } } } } } private void editServerDef(IRepositoryViewObject viewObject) { if (viewObject != null) { MDMServerDefItem mdmItem = getMDMItem(viewObject); if (mdmItem != null) { MDMServerDef serverDef = mdmItem.getServerDef(); ServerDefDialog dialog = new ServerDefDialog(getViewSite().getShell(), serverDef); if (dialog.open() == IDialogConstants.OK_ID) { String tempPasswd = serverDef.getTempPasswd(); ServerDefService.updateTempPassword(viewObject.getId(), tempPasswd); boolean result = ServerDefService.saveServeDef(mdmItem); if (result) { refreshServerDefs(); } } } } } class DeleteServerDefAction extends Action { public DeleteServerDefAction() { setImageDescriptor(ImageCache.getImage(EImage.DELETE_OBJ.getPath())); setText(Messages.ServerExplorer_RemoveServer); } @Override public void run() { IRepositoryViewObject viewObject = getCurSelectedViewObject(); if (viewObject != null) { MDMServerDefItem serverDefItem = getMDMItem(viewObject); if (MessageDialog.openQuestion(getViewSite().getShell(), Messages.ServerExplorer_RemoveServer, Messages.bind(Messages.ServerExplorer_RemoveConfirm, serverDefItem.getServerDef().getName()))) { boolean result = ServerDefService.deleteServerDef(viewObject); if (result) { refreshServerDefs(); } // } } } } class EnableServerDefAction extends Action { private boolean toEnable; public EnableServerDefAction(boolean toEnable) { this.toEnable = toEnable; if (toEnable) { setText(Messages.ServerExplorer_Enable); } else { setText(Messages.ServerExplorer_Disable); } } @Override public void run() { IRepositoryViewObject viewObject = getCurSelectedViewObject(); if (viewObject != null) { MDMServerDefItem serverDefItem = getMDMItem(viewObject); serverDefItem.getServerDef().setEnabled(toEnable); ServerDefService.saveServeDef(serverDefItem); refreshServerDefs(); } } } }