| /* |
| ----------------------------------------------------------------------- |
| -- CHESS core plugin -- |
| -- -- |
| -- Copyright (C) 2014 -- |
| -- University of Padova, ITALY -- |
| -- -- |
| -- Author: Alessandro Zovi azovi@math.unipd.it -- |
| -- -- |
| -- 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-v20.html -- |
| ----------------------------------------------------------------------- |
| */ |
| |
| package org.polarsys.chess.service.internal.service; |
| |
| import java.net.URL; |
| import java.util.Hashtable; |
| |
| |
| |
| |
| |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.emf.transaction.TransactionalEditingDomain; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.papyrus.editor.PapyrusMultiDiagramEditor; |
| import org.eclipse.papyrus.infra.core.resource.ModelSet; |
| import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer; |
| import org.eclipse.papyrus.infra.core.services.ServiceException; |
| import org.eclipse.papyrus.infra.core.services.ServicesRegistry; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.polarsys.chess.core.profiles.CHESSProfileManager; |
| import org.polarsys.chess.core.resourcelistener.ResourceSetListenerManager; |
| import org.polarsys.chess.core.resourcelistener.SelectionListenerManager; |
| import org.polarsys.chess.core.views.DiagramStatus; |
| import org.polarsys.chess.service.gui.utils.CHESSEditorUtils; |
| import org.polarsys.chess.service.internal.Activator; |
| |
| public class CHESSService { |
| private static final String ICON_LOCATION = "org.polarsys.chess.service"; |
| public static Hashtable<String, ImageDescriptor> viewIcons = new Hashtable<String, ImageDescriptor>(); |
| private ISashWindowsContainer container; |
| private ServicesRegistry serviceRegistry; |
| private DiagramStatus diagramStatus; |
| private SelectionListenerManager selectionListener; |
| private ResourceSetListenerManager resourceListener; |
| private TransactionalEditingDomain editingDomain; |
| private IEditorPart currentEditor; |
| private IWorkbenchPage currentPage; |
| |
| public CHESSService(ISashWindowsContainer container, ServicesRegistry registry) { |
| this.container = container; |
| serviceRegistry = registry; |
| } |
| |
| public boolean start(IWorkbenchPart part) { |
| |
| IEditorPart activeEditor = container.getActiveEditor(); |
| |
| |
| if (activeEditor!=null && CHESSEditorUtils.isCHESSProject(activeEditor)) { |
| initializeCHESS(activeEditor); |
| return true; |
| } |
| if (activeEditor == null) { |
| //waitForActiveEditor(); |
| //return true; |
| try { |
| if (part instanceof PapyrusMultiDiagramEditor){ |
| PapyrusMultiDiagramEditor editor = (PapyrusMultiDiagramEditor)part; |
| serviceRegistry = (ServicesRegistry)editor.getAdapter(ServicesRegistry.class); |
| container = serviceRegistry.getService(ISashWindowsContainer.class); |
| if (CHESSEditorUtils.isCHESSProject(editor)) { |
| initializeCHESS(editor); |
| return true; |
| } |
| } |
| |
| } catch (ServiceException e1) { |
| // TODO Auto-generated catch block |
| e1.printStackTrace(); |
| } |
| } |
| return false; |
| |
| } |
| |
| private void initializeCHESS(IEditorPart activeEditor) { |
| ModelSet modelSet = null; |
| //ISashWindowsContainer container = null; |
| try { |
| modelSet = serviceRegistry.getService(ModelSet.class); |
| |
| // container = serviceRegistry.getService(ISashWindowsContainer.class); |
| |
| // container = ServiceUtils.getInstance().getISashWindowsContainer( |
| // serviceRegistry); |
| |
| container = (ISashWindowsContainer)activeEditor.getAdapter(ISashWindowsContainer.class); |
| |
| if (container == null) |
| container = serviceRegistry.getService(ISashWindowsContainer.class); |
| |
| diagramStatus = new DiagramStatus( |
| container.getActiveSashWindowsPage()); |
| editingDomain = modelSet |
| .getTransactionalEditingDomain(); |
| |
| CHESSProfileManager |
| .loadCHESSProfile(editingDomain.getResourceSet()); |
| |
| //let plugins to load external profiles |
| CHESSProfileManager.loadExternalProfiles(editingDomain.getResourceSet()); |
| |
| resourceListener = new ResourceSetListenerManager( |
| serviceRegistry); |
| |
| editingDomain |
| .addResourceSetListener(resourceListener); |
| |
| //serviceRegistry.add(DiagramStatus.class, 5, diagramStatus); |
| |
| selectionListener = new SelectionListenerManager( |
| serviceRegistry); |
| currentEditor = activeEditor; |
| currentPage = currentEditor.getSite().getPage(); |
| currentPage.addSelectionListener(selectionListener); |
| |
| loadIcons(); |
| //System.err.println("CHESS Service initialized..."); |
| |
| //clean diagrams: useful when the .model is modified outside the CHESS editor |
| //TODO we should add a user-level preference to enable/disable this action |
| CHESSEditorUtils.cleanAllDiagrams(); |
| |
| |
| Activator.info("CHESS Service has been initialized."); |
| } catch (ServiceException e) { |
| Activator.error("Errors during CHESS service initialization", e); |
| } |
| } |
| |
| public void stopService(){ |
| currentPage.removeSelectionListener(selectionListener); |
| editingDomain.removeResourceSetListener(resourceListener); |
| //System.err.println("CHESS Service terminated."); |
| Activator.info("CHESS Service has been terminated."); |
| } |
| |
| private void loadIcons() { |
| // Load view icons |
| |
| if (!viewIcons.keySet().isEmpty()){ |
| return; |
| } |
| |
| URL nullFile = FileLocator.find(Platform |
| .getBundle(ICON_LOCATION), new Path( |
| "icons/NullView.gif"), null); |
| |
| ImageDescriptor icon = ImageDescriptor.createFromURL(nullFile); |
| viewIcons.put(CHESSProfileManager.NULL_VIEW, icon); |
| |
| for (String v : CHESSProfileManager.CHESS_VIEWS_LIST) { |
| URL file = FileLocator.find( |
| Platform.getBundle(ICON_LOCATION), |
| new Path("icons/" + v + ".gif"), null); |
| if (file != null) { |
| icon = ImageDescriptor.createFromURL(file); |
| } else { |
| icon = ImageDescriptor.createFromURL(nullFile); |
| } |
| viewIcons.put(v, icon); |
| } |
| } |
| |
| public void unload() { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| public DiagramStatus getDiagramStatus() { |
| return diagramStatus; |
| } |
| |
| } |