/******************************************************************************* * Copyright (c) 2008, 2013 * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Javier Canovas (javier.canovas@inria.fr) *******************************************************************************/ package fr.inria.atlanmod.collaboro.ui.views; import java.util.List; import org.eclipse.core.internal.resources.File; import org.eclipse.emf.common.util.EList; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.internal.EditorReference; import org.eclipse.ui.part.ViewPart; import fr.inria.atlanmod.collaboro.history.Collaboration; import fr.inria.atlanmod.collaboro.history.Version; import fr.inria.atlanmod.collaboro.ui.CollaboroPlugin; import fr.inria.atlanmod.collaboro.ui.Controller; /** * @author Javier Canovas (javier.canovas@inria.fr) * */ @SuppressWarnings("restriction") public class VersionView extends ViewPart implements ISelectionListener, IPartListener2 { public static final String ID = "atlanmod.collaboro.ui.versionView"; public static final String LOGIN_ACTION_ICON = "icons/loginAction.png"; public static final String LOGOUT_ACTION_ICON = "icons/logoutAction.png"; public static final String FILTER_ACTION_ICON = "icons/filterAction.png"; public static final String CREATE_ACTION_ICON = "icons/createAction.png"; public static final String VERSIONS_ICON = "icons/versions.png"; public static final String DELETE_ICON = "icons/delete.png"; public static final String ECORE_PLUGIN_ID = "org.eclipse.emf.ecore.presentation.EcoreEditorID"; public static final String PACKAGE_EXPLORER_PLUGIN_ID = "org.eclipse.jdt.ui.PackageExplorer"; public static final String PROJECT_EXPLORER_PLUGIN_ID = "org.eclipse.ui.navigator.ProjectExplorer"; public static final String CDO_SESSIONS_VIEW = "org.eclipse.emf.cdo.ui.CDOSessionsView"; public static final String CDO_EDITOR = "org.eclipse.emf.cdo.ui.CDOEditor"; private TreeViewer collaborationsViewer; /** * The constructor */ public VersionView() { } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ @Override public void createPartControl(Composite parent) { collaborationsViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); collaborationsViewer.setContentProvider(new VersionViewContentProvider()); collaborationsViewer.setLabelProvider(new VersionViewLabelProvider()); collaborationsViewer.setInput(getViewSite()); // Contributing ActionBars Action loginAction = new Action() { public void run() { InputDialog loginDialog = null; boolean logged = Controller.INSTANCE.isLogged(); if (!logged) { do { loginDialog = new InputDialog(collaborationsViewer.getControl().getShell(), "Collaboro login", "Username", "Developer 1", null); if (loginDialog.open() == Window.OK) { boolean userExists = Controller.INSTANCE.loginUser(loginDialog.getValue()); if(!userExists) { MessageDialog.openError(collaborationsViewer.getControl().getShell(), "Login error", "The user does not exist"); } else { logged = true; this.setImageDescriptor(CollaboroPlugin.getImage(LOGOUT_ACTION_ICON)); this.setText("Logout"); this.setToolTipText("Logout"); } } else { logged = true; this.setImageDescriptor(CollaboroPlugin.getImage(LOGOUT_ACTION_ICON)); this.setText("Logout"); this.setToolTipText("Logout"); } } while (!logged); } else { Controller.INSTANCE.logout(); this.setImageDescriptor(CollaboroPlugin.getImage(LOGIN_ACTION_ICON)); this.setText("Login"); this.setToolTipText("Login"); } } }; loginAction.setText("Login"); loginAction.setToolTipText("Login"); loginAction.setImageDescriptor(CollaboroPlugin.getImage(LOGIN_ACTION_ICON)); Action changeVersionAction = new Action() { public void run() { if(Controller.INSTANCE.isLogged()) { ElementListSelectionDialog dialog = new ElementListSelectionDialog(collaborationsViewer.getControl().getShell(), new LabelProvider() { @Override public String getText(Object element) { if (element instanceof Version) { Version version = (Version) element; return version.getId(); } return super.getText(element); } }); List<Version> versions = Controller.INSTANCE.getHistory().getHistories().get(Controller.INSTANCE.getHistoryTracked()).getVersions(); dialog.setElements(versions.toArray()); dialog.setTitle("Select the version to change:"); if(dialog.open() == Window.OK) { Object[] result = dialog.getResult(); if(result.length > 0) { Object selectedResult = result[0]; if (selectedResult instanceof Version) { Version selectedVersion = (Version) selectedResult; Controller.INSTANCE.changeVersion(selectedVersion); } } } } else { MessageDialog.openInformation(collaborationsViewer.getControl().getShell(), "Not looged in", "You are not logged in"); } } }; changeVersionAction.setText("Change Version"); changeVersionAction.setToolTipText("Change Version"); changeVersionAction.setImageDescriptor(CollaboroPlugin.getImage(VERSIONS_ICON)); Action filterAction = new Action() { public void run() { MessageDialog.openInformation(collaborationsViewer.getControl().getShell(), "Under development", "This action will allow filter the view"); } }; filterAction.setText("Filters"); filterAction.setToolTipText("Filters"); filterAction.setImageDescriptor(CollaboroPlugin.getImage(FILTER_ACTION_ICON)); Action createProposalAction = new Action() { public void run() { if(Controller.INSTANCE.isLogged()) { Controller.INSTANCE.createProposal(); collaborationsViewer.refresh(); } else { MessageDialog.openInformation(collaborationsViewer.getControl().getShell(), "Not looged in", "You are not logged in"); } } }; createProposalAction.setText("Create proposal"); createProposalAction.setToolTipText("Create proposal"); createProposalAction.setImageDescriptor(CollaboroPlugin.getImage(CREATE_ACTION_ICON)); Action deleteProposalAction = new Action() { public void run() { if(Controller.INSTANCE.isLogged()) { ITreeSelection selection = (ITreeSelection) collaborationsViewer.getSelection(); Object object = selection.getFirstElement(); if(object != null && object instanceof Collaboration) { Controller.INSTANCE.deleteCollaboration((Collaboration) object); collaborationsViewer.refresh(); } } else { MessageDialog.openInformation(collaborationsViewer.getControl().getShell(), "Not looged in", "You are not logged in"); } } }; deleteProposalAction.setText("Delete proposal"); deleteProposalAction.setToolTipText("Delete proposal"); deleteProposalAction.setImageDescriptor(CollaboroPlugin.getImage(DELETE_ICON)); IActionBars bars = getViewSite().getActionBars(); bars.getMenuManager().add(loginAction); bars.getToolBarManager().add(loginAction); bars.getMenuManager().add(changeVersionAction); bars.getToolBarManager().add(changeVersionAction); bars.getMenuManager().add(filterAction); bars.getToolBarManager().add(filterAction); bars.getMenuManager().add(createProposalAction); bars.getToolBarManager().add(createProposalAction); bars.getMenuManager().add(deleteProposalAction); bars.getToolBarManager().add(deleteProposalAction); // Contributing Contex menu MenuManager contextMenu = new MenuManager("#ViewerPopupMenu"); // contextMenu.setRemoveAllWhenShown(true); // contextMenu.addMenuListener(new IMenuListener() { // public void menuAboutToShow(IMenuManager manager) { // manager.add(loginAction); // manager.add(new Separator()); // manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); // } // }); Menu menu = contextMenu.createContextMenu(collaborationsViewer.getControl()); collaborationsViewer.getControl().setMenu(menu); getSite().registerContextMenu(contextMenu, collaborationsViewer); // Providing events getSite().setSelectionProvider(collaborationsViewer); // Listening events getSite().getPage().addSelectionListener(this); // getSite().getPage().addSelectionListener("org.eclipse.jdt.ui.PackageExplorer", this); // getSite().getPage().addSelectionListener("org.eclipse.emf.ecore.presentation.EcoreEditorID", this); getSite().getPage().addPartListener(this); Controller.INSTANCE.setVersionView(this); } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#setFocus() */ @Override public void setFocus() { // TODO Auto-generated method stub } @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { // System.out.println("\nSe detecto un cambio en la vista principal desde " + this.ID + "\n" + part.getSite().getId() + " - " + selection); if(part.getSite().getId().equals(ECORE_PLUGIN_ID)) { // System.out.println(selection.getClass().getCanonicalName()); TreeSelection treeSelection = (TreeSelection) selection; for(TreePath treePath : treeSelection.getPaths()) { // System.out.println("treepath: " + treePath.getLastSegment()); } Object element = treeSelection.getFirstElement(); // System.out.println("object: " + element); collaborationsViewer.refresh(); } if(part.getSite().getId().equals(PACKAGE_EXPLORER_PLUGIN_ID) || part.getSite().getId().equals(PROJECT_EXPLORER_PLUGIN_ID)) { TreeSelection treeSelection = (TreeSelection) selection; Object element = treeSelection.getFirstElement(); if (element instanceof File) { File file = (File) element; java.io.File ioFile = new java.io.File(file.getLocation().toOSString()); Controller.INSTANCE.loadHistory(ioFile); } collaborationsViewer.refresh(); } if(part.getSite().getId().equals(CDO_SESSIONS_VIEW)) { if(selection != null) { Object element = ((TreeSelection) selection).getFirstElement(); if(element != null) { System.out.println(element.getClass().getName()); Controller.INSTANCE.loadHistory(element); } } collaborationsViewer.refresh(); } } public void refresh() { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { collaborationsViewer.refresh(); } }); } @Override public void partActivated(IWorkbenchPartReference partRef) { // System.out.println("partActivated " + partRef); } @Override public void partBroughtToTop(IWorkbenchPartReference partRef) { // System.out.println("partBroughtToTop " + partRef); } @Override public void partClosed(IWorkbenchPartReference partRef) { Controller.INSTANCE.saveHistory(); } @Override public void partDeactivated(IWorkbenchPartReference partRef) { // System.out.println("partDeactivated " + partRef); } @Override public void partOpened(IWorkbenchPartReference partRef) { // System.out.println("partOpened " + partRef); } @Override public void partHidden(IWorkbenchPartReference partRef) { // System.out.println("partHidden " + partRef); } @Override public void partVisible(IWorkbenchPartReference partRef) { // System.out.println("partVisible " + partRef); } @Override public void partInputChanged(IWorkbenchPartReference partRef) { // System.out.println("partInputChanged " + partRef); } }