From 35e332f89a82b6683038cbd6699a9dbb6c2cb0fa Mon Sep 17 00:00:00 2001 From: Max Schenkelberg Date: Thu, 14 Jun 2012 11:16:11 -0500 Subject: [PATCH] Issue #697 added drawing indicator for shared display for data provider, fixed shutdown issue Change-Id: Iccfb92e3155e8be5c780e601fb8c31ef2c74f39f Former-commit-id: e92eb6366e6c22da1154fe4495c5d2710b36d599 [formerly e92eb6366e6c22da1154fe4495c5d2710b36d599 [formerly c00c45f5ba1ae3bb0a0a246d1435bd10b3a8aa51]] Former-commit-id: 4c8b468854023a7760543f54a85a7830edbad457 Former-commit-id: c2d278d75bb36950a592f774439c2a8fc01f1828 --- .../display/IRemoteDisplayContainer.java | 6 + .../display/data/SessionContainer.java | 23 +-- .../roles/AbstractRoleEventController.java | 161 ++---------------- .../roles/DataProviderEventController.java | 20 +-- .../roles/ParticipantEventController.java | 41 +---- .../dataprovider/SharedEditorsManager.java | 26 +-- .../dataprovider/rsc/DataProviderRsc.java | 39 ++++- .../display/rsc/CollaborationResource.java | 14 +- .../rsc/CollaborationResourceData.java | 15 +- .../ui/CollaborationGroupView.java | 52 +++--- .../ui/editor/CollaborationEditor.java | 25 ++- .../ui/session/CollaborationSessionView.java | 63 ++----- 12 files changed, 189 insertions(+), 296 deletions(-) diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/IRemoteDisplayContainer.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/IRemoteDisplayContainer.java index 4501b94a64..9accc6236a 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/IRemoteDisplayContainer.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/IRemoteDisplayContainer.java @@ -19,6 +19,8 @@ **/ package com.raytheon.uf.viz.collaboration.display; +import org.eclipse.ui.IEditorPart; + import com.raytheon.uf.viz.core.drawables.IRenderableDisplay; /** @@ -86,4 +88,8 @@ public interface IRemoteDisplayContainer { IRemoteDisplayChangedListener listener); public RemoteDisplay getActiveDisplay(); + + public IEditorPart getActiveDisplayEditor(); + + public void disposeContainer(); } diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/data/SessionContainer.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/data/SessionContainer.java index 5eb6974054..479d16b7ba 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/data/SessionContainer.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/data/SessionContainer.java @@ -20,7 +20,7 @@ package com.raytheon.uf.viz.collaboration.display.data; import com.raytheon.uf.viz.collaboration.comm.identity.ISharedDisplaySession; -import com.raytheon.uf.viz.collaboration.display.editor.ICollaborationEditor; +import com.raytheon.uf.viz.collaboration.display.IRemoteDisplayContainer; import com.raytheon.uf.viz.collaboration.display.roles.IRoleEventController; /** @@ -54,11 +54,7 @@ public class SessionContainer { private SessionColorManager colorManager; - /** - * the editor associated with a session, only valid if not fulfilling the - * Data Provider role - **/ - private ICollaborationEditor collaborationEditor; + private IRemoteDisplayContainer displayContainer; public ISharedDisplaySession getSession() { return session; @@ -76,12 +72,19 @@ public class SessionContainer { this.roleEventController = roleEventController; } - public ICollaborationEditor getCollaborationEditor() { - return collaborationEditor; + /** + * @return the displayContainer + */ + public IRemoteDisplayContainer getDisplayContainer() { + return displayContainer; } - public void setCollaborationEditor(ICollaborationEditor collaborationEditor) { - this.collaborationEditor = collaborationEditor; + /** + * @param displayContainer + * the displayContainer to set + */ + public void setDisplayContainer(IRemoteDisplayContainer displayContainer) { + this.displayContainer = displayContainer; } public String getSessionId() { diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/AbstractRoleEventController.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/AbstractRoleEventController.java index 4dc4c1a6fd..bc63d528f8 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/AbstractRoleEventController.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/AbstractRoleEventController.java @@ -19,26 +19,10 @@ **/ package com.raytheon.uf.viz.collaboration.display.roles; -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - -import org.eclipse.ui.IPartListener; -import org.eclipse.ui.IWorkbenchPart; - -import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.collaboration.comm.identity.ISharedDisplaySession; -import com.raytheon.uf.viz.collaboration.display.Activator; -import com.raytheon.uf.viz.core.IDisplayPane; -import com.raytheon.uf.viz.core.drawables.IDescriptor; -import com.raytheon.uf.viz.core.drawables.IRenderableDisplay; -import com.raytheon.uf.viz.core.drawables.ResourcePair; -import com.raytheon.uf.viz.core.exception.VizException; -import com.raytheon.uf.viz.core.rsc.AbstractVizResource; -import com.raytheon.uf.viz.core.rsc.ResourceList; -import com.raytheon.uf.viz.core.rsc.ResourceList.RemoveListener; -import com.raytheon.viz.ui.editor.AbstractEditor; +import com.raytheon.uf.viz.collaboration.display.IRemoteDisplayContainer; +import com.raytheon.uf.viz.collaboration.display.data.SessionContainer; +import com.raytheon.uf.viz.collaboration.display.data.SharedDisplaySessionMgr; /** * Abstract role event controller that shares fields and methods that are common @@ -58,14 +42,12 @@ import com.raytheon.viz.ui.editor.AbstractEditor; * @version 1.0 */ -public abstract class AbstractRoleEventController implements - IRoleEventController, IPartListener, RemoveListener { +public abstract class AbstractRoleEventController + implements IRoleEventController { protected ISharedDisplaySession session; - protected List resourcesAdded = new ArrayList(); - - private List resourceEditors = new CopyOnWriteArrayList(); + protected T container; protected AbstractRoleEventController(ISharedDisplaySession session) { this.session = session; @@ -74,137 +56,18 @@ public abstract class AbstractRoleEventController implements @Override public void startup() { session.registerEventHandler(this); + SessionContainer sc = SharedDisplaySessionMgr + .getSessionContainer(session.getSessionId()); + container = createDisplayContainer(); + sc.setDisplayContainer(container); } @Override public void shutdown() { session.unregisterEventHandler(this); - - // Orphaned tellestrators, not sure what to do yet about clear - for (AbstractEditor editor : resourceEditors) { - deactivateResources(editor); - } - for (ResourcePair rp : resourcesAdded) { - AbstractVizResource resource = rp.getResource(); - if (resource != null) { - resource.getDescriptor().getResourceList() - .removePostRemoveListener(this); - resource.unload(); - } - } - resourcesAdded.clear(); - resourceEditors.clear(); + container.disposeContainer(); } - protected void activateResources(AbstractEditor editor) { - for (IDisplayPane pane : editor.getDisplayPanes()) { - activateResources(pane.getRenderableDisplay()); - } - resourceEditors.add(editor); - editor.getSite().getPage().addPartListener(this); - } - - protected void activateResources(IRenderableDisplay display) { - try { - IDescriptor descriptor = display.getDescriptor(); - for (ResourcePair resource : getResourcesToAdd()) { - if (resource.getResource() == null) { - resource.setResource(resource.getResourceData().construct( - resource.getLoadProperties(), descriptor)); - } - descriptor.getResourceList().add(resource); - descriptor.getResourceList().addPostRemoveListener(this); - resourcesAdded.add(resource); - } - } catch (VizException e) { - Activator.statusHandler.handle(Priority.PROBLEM, - "Error adding drawing resource to pane", e); - } - } - - protected void deactivateResources(AbstractEditor editor) { - partClosed(editor); - editor.getSite().getPage().removePartListener(this); - } - - protected List getResourcesToAdd() { - List resources = new ArrayList(); - return resources; - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.core.rsc.ResourceList.RemoveListener#notifyRemove - * (com.raytheon.uf.viz.core.drawables.ResourcePair) - */ - @Override - public void notifyRemove(ResourcePair rp) throws VizException { - if (resourcesAdded.contains(rp)) { - try { - Class clazz = rp.getResource().getClass(); - Constructor constructor = clazz.getConstructor(clazz); - ResourcePair newPair = new ResourcePair(); - newPair.setLoadProperties(rp.getLoadProperties()); - newPair.setProperties(rp.getProperties()); - newPair.setResourceData(rp.getResourceData()); - newPair.setResource((AbstractVizResource) constructor - .newInstance(rp.getResource())); - rp.getResource().getDescriptor().getResourceList().add(newPair); - } catch (Exception e) { - Activator.statusHandler - .handle(Priority.PROBLEM, - "Cannot manage resources from being unloaded that do not have copy constructor", - e); - } - } - } - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart) - */ - @Override - public void partClosed(IWorkbenchPart part) { - for (AbstractEditor editor : resourceEditors) { - if (editor == part) { - for (IDisplayPane pane : editor.getDisplayPanes()) { - deactivateResources(pane.getRenderableDisplay()); - } - resourceEditors.remove(editor); - } - } - } - - protected void deactivateResources(IRenderableDisplay display) { - ResourceList list = display.getDescriptor().getResourceList(); - list.removePostRemoveListener(this); - for (ResourcePair rp : list) { - if (resourcesAdded.contains(rp)) { - resourcesAdded.remove(rp); - list.remove(rp); - } - } - } - - // Unneeded part events - @Override - public void partActivated(IWorkbenchPart part) { - } - - @Override - public void partBroughtToTop(IWorkbenchPart part) { - } - - @Override - public void partDeactivated(IWorkbenchPart part) { - } - - @Override - public void partOpened(IWorkbenchPart part) { - } + protected abstract T createDisplayContainer(); } diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/DataProviderEventController.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/DataProviderEventController.java index cba63445ba..1fe4aa201e 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/DataProviderEventController.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/DataProviderEventController.java @@ -58,7 +58,8 @@ import com.raytheon.viz.ui.editor.AbstractEditor; * @version 1.0 */ -public class DataProviderEventController extends AbstractRoleEventController { +public class DataProviderEventController extends + AbstractRoleEventController { private static final transient IUFStatusHandler statusHandler = UFStatus .getHandler(DataProviderEventController.class); @@ -72,14 +73,12 @@ public class DataProviderEventController extends AbstractRoleEventController { if (event.getEventType().equals(ParticipantEventType.ARRIVED) && !event.getParticipant().equals(session.getUserID())) { try { - SharedEditorsManager sem = SharedEditorsManager - .getManager(session); - AbstractEditor active = sem.getActiveSharedEditor(); + AbstractEditor active = container.getActiveSharedEditor(); if (active != null) { IDisplayPane activePane = active.getActiveDisplayPane(); if (activePane != null) { ActivateRemoteDisplay arde = new ActivateRemoteDisplay(); - arde.setDisplayId(sem.getDisplayId(activePane + arde.setDisplayId(container.getDisplayId(activePane .getRenderableDisplay())); session.sendObjectToPeer(event.getParticipant(), arde); } @@ -117,7 +116,7 @@ public class DataProviderEventController extends AbstractRoleEventController { if (active != null && SharedEditorsManager.isBeingShared(active) == false) { try { - SharedEditorsManager.getManager(session).shareEditor(active); + container.shareEditor(active); } catch (CollaborationException e) { statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); @@ -129,13 +128,12 @@ public class DataProviderEventController extends AbstractRoleEventController { * (non-Javadoc) * * @see - * com.raytheon.uf.viz.collaboration.ui.role.AbstractRoleEventController - * #shutdown() + * com.raytheon.uf.viz.collaboration.display.roles.AbstractRoleEventController + * #createDisplayContainer() */ @Override - public void shutdown() { - super.shutdown(); - SharedEditorsManager.getManager(session).dispose(); + protected SharedEditorsManager createDisplayContainer() { + return SharedEditorsManager.getManager(session); } } diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/ParticipantEventController.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/ParticipantEventController.java index 1306e47e60..849bf891d9 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/ParticipantEventController.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/ParticipantEventController.java @@ -22,8 +22,6 @@ package com.raytheon.uf.viz.collaboration.display.roles; import org.eclipse.ui.PartInitException; import com.raytheon.uf.viz.collaboration.comm.identity.ISharedDisplaySession; -import com.raytheon.uf.viz.collaboration.display.data.SessionContainer; -import com.raytheon.uf.viz.collaboration.display.data.SharedDisplaySessionMgr; import com.raytheon.uf.viz.collaboration.display.editor.CollaborationEditorInput; import com.raytheon.uf.viz.collaboration.display.editor.ICollaborationEditor; import com.raytheon.viz.ui.VizWorkbenchManager; @@ -45,7 +43,8 @@ import com.raytheon.viz.ui.VizWorkbenchManager; * @version 1.0 */ -public class ParticipantEventController extends AbstractRoleEventController { +public class ParticipantEventController extends + AbstractRoleEventController { public ParticipantEventController(ISharedDisplaySession session) { super(session); @@ -55,44 +54,20 @@ public class ParticipantEventController extends AbstractRoleEventController { * (non-Javadoc) * * @see - * com.raytheon.uf.viz.collaboration.ui.role.AbstractRoleEventController - * #startup() + * com.raytheon.uf.viz.collaboration.display.roles.AbstractRoleEventController + * #createDisplayContainer() */ @Override - public void startup() { - super.startup(); + protected ICollaborationEditor createDisplayContainer() { CollaborationEditorInput input = new CollaborationEditorInput( session.getSessionId(), session.getVenue().getInfo() .getVenueDescription()); try { - ICollaborationEditor editor = (ICollaborationEditor) VizWorkbenchManager - .getInstance().getCurrentWindow().getActivePage() + return (ICollaborationEditor) VizWorkbenchManager.getInstance() + .getCurrentWindow().getActivePage() .openEditor(input, ICollaborationEditor.EDITOR_ID); - SessionContainer sc = SharedDisplaySessionMgr - .getSessionContainer(session.getSessionId()); - sc.setCollaborationEditor(editor); } catch (PartInitException e) { - throw new RuntimeException("Unable to open collaboration editor", e); - } - - } - - /* - * (non-Javadoc) - * - * @see - * com.raytheon.uf.viz.collaboration.ui.role.AbstractRoleEventController - * #shutdown() - */ - @Override - public void shutdown() { - super.shutdown(); - SessionContainer sc = SharedDisplaySessionMgr - .getSessionContainer(session.getSessionId()); - if (sc != null) { - sc.getCollaborationEditor().getSite().getPage() - .closeEditor(sc.getCollaborationEditor(), false); + throw new RuntimeException("Error opening collaboration editor", e); } } - } diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/dataprovider/SharedEditorsManager.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/dataprovider/SharedEditorsManager.java index dd9f7776b7..fbd41fe0e4 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/dataprovider/SharedEditorsManager.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/dataprovider/SharedEditorsManager.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; @@ -370,11 +371,6 @@ public class SharedEditorsManager implements IRemoteDisplayContainer { + session.getVenue().getInfo().getVenueDescription() + ")"; } - public void registerRemoteRenderableDisplayChangedListener( - IRenderableDisplayChangedListener listener) { - - } - public int getDisplayId(IRenderableDisplay display) { int displayId = -1; DisplayData data = displayData.get(display); @@ -480,10 +476,8 @@ public class SharedEditorsManager implements IRemoteDisplayContainer { } } - /** - * Disposes the object, removes all shared editors - */ - public void dispose() { + @Override + public void disposeContainer() { List copy = new ArrayList(sharedEditors); for (AbstractEditor editor : copy) { try { @@ -500,7 +494,7 @@ public class SharedEditorsManager implements IRemoteDisplayContainer { IRenderableDisplay display = d.display; IDisplayPaneContainer container = display.getContainer(); for (IDisplayPane pane : container.getDisplayPanes()) { - if (pane.getDisplay() == display) { + if (pane.getRenderableDisplay() == display) { removeDisplay(pane); break; } @@ -508,6 +502,7 @@ public class SharedEditorsManager implements IRemoteDisplayContainer { } session.unregisterEventHandler(eventHandler); + managerMap.remove(session.getSessionId()); } /** @@ -801,4 +796,15 @@ public class SharedEditorsManager implements IRemoteDisplayContainer { .getActiveDisplayPane().getRenderableDisplay()); return new RemoteDisplay(data.displayId, data.display); } + + /* + * (non-Javadoc) + * + * @see com.raytheon.uf.viz.collaboration.display.IRemoteDisplayContainer# + * getActiveDisplayEditor() + */ + @Override + public IEditorPart getActiveDisplayEditor() { + return activeSharedEditor; + } } diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/dataprovider/rsc/DataProviderRsc.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/dataprovider/rsc/DataProviderRsc.java index 0f793aa63c..32286390f9 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/dataprovider/rsc/DataProviderRsc.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/roles/dataprovider/rsc/DataProviderRsc.java @@ -19,6 +19,7 @@ **/ package com.raytheon.uf.viz.collaboration.display.roles.dataprovider.rsc; +import org.eclipse.swt.graphics.RGB; import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.raytheon.uf.common.status.UFStatus.Priority; @@ -26,15 +27,23 @@ import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException; import com.raytheon.uf.viz.collaboration.comm.identity.ISharedDisplaySession; import com.raytheon.uf.viz.collaboration.comm.identity.info.IVenueInfo; import com.raytheon.uf.viz.collaboration.display.Activator; +import com.raytheon.uf.viz.collaboration.display.data.SessionColorManager; import com.raytheon.uf.viz.collaboration.display.data.SessionContainer; import com.raytheon.uf.viz.collaboration.display.data.SharedDisplaySessionMgr; import com.raytheon.uf.viz.collaboration.display.editor.ReprojectRemoteDisplay; +import com.raytheon.uf.viz.core.DrawableString; +import com.raytheon.uf.viz.core.IExtent; import com.raytheon.uf.viz.core.IGraphicsTarget; +import com.raytheon.uf.viz.core.IGraphicsTarget.HorizontalAlignment; +import com.raytheon.uf.viz.core.IGraphicsTarget.TextStyle; +import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment; import com.raytheon.uf.viz.core.drawables.IDescriptor; +import com.raytheon.uf.viz.core.drawables.IFont; import com.raytheon.uf.viz.core.drawables.PaintProperties; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.rsc.AbstractVizResource; import com.raytheon.uf.viz.core.rsc.LoadProperties; +import com.raytheon.uf.viz.remote.graphics.DispatchGraphicsTarget; /** * A resource that is added to an editor that the Data Provider is sharing. It @@ -64,6 +73,10 @@ public class DataProviderRsc extends private ISharedDisplaySession session; + private SessionColorManager colorManager; + + private IFont font; + public DataProviderRsc(DataProviderRscData resourceData, LoadProperties loadProperties) { super(resourceData, loadProperties); @@ -71,6 +84,7 @@ public class DataProviderRsc extends .getSessionContainer(resourceData.getSessionId()); if (container != null) { session = container.getSession(); + colorManager = container.getColorManager(); IVenueInfo info = session.getVenue().getInfo(); roomName = info.getVenueDescription(); subject = info.getVenueDescription(); @@ -79,18 +93,39 @@ public class DataProviderRsc extends @Override protected void disposeInternal() { - + font.dispose(); } @Override protected void paintInternal(IGraphicsTarget target, PaintProperties paintProps) throws VizException { + if (target instanceof DispatchGraphicsTarget) { + target = ((DispatchGraphicsTarget) target).getWrappedObject(); + } + target.clearClippingPlane(); + IExtent extent = paintProps.getView().getExtent(); + RGB color = colorManager.getColorFromUser(session.getUserID()); + target.drawRect(extent, color, 3.0f, 1.0f); + DrawableString string = new DrawableString(getName(), color); + string.horizontalAlignment = HorizontalAlignment.CENTER; + string.verticallAlignment = VerticalAlignment.BOTTOM; + string.setCoordinates(extent.getMinX() + extent.getWidth() / 2, + extent.getMaxY()); + string.font = font; + string.textStyle = TextStyle.BLANKED; + target.drawStrings(string); + + target.setupClippingPlane(paintProps.getClippingPane()); } @Override protected void initInternal(IGraphicsTarget target) throws VizException { - + if (target instanceof DispatchGraphicsTarget) { + target = ((DispatchGraphicsTarget) target).getWrappedObject(); + } + font = target.getDefaultFont().deriveWithSize(11.0f); + font.setScaleFont(true); } /* diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/rsc/CollaborationResource.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/rsc/CollaborationResource.java index a219d30bc0..cb2a31051e 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/rsc/CollaborationResource.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/rsc/CollaborationResource.java @@ -40,8 +40,6 @@ import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException; import com.raytheon.uf.viz.collaboration.comm.identity.ISharedDisplaySession; import com.raytheon.uf.viz.collaboration.comm.storage.IPersistedEvent; import com.raytheon.uf.viz.collaboration.display.Activator; -import com.raytheon.uf.viz.collaboration.display.data.SharedDisplaySessionMgr; -import com.raytheon.uf.viz.collaboration.display.editor.ICollaborationEditor; import com.raytheon.uf.viz.collaboration.display.roles.dataprovider.event.FrameDisposed; import com.raytheon.uf.viz.collaboration.display.roles.dataprovider.event.IRenderFrameEvent; import com.raytheon.uf.viz.collaboration.display.roles.dataprovider.event.MouseLocationEvent; @@ -392,20 +390,16 @@ public class CollaborationResource extends .getRenderableDisplay(); final BeginFrameEvent bfe = (BeginFrameEvent) renderable; display.setBackgroundColor(bfe.getColor()); - final ICollaborationEditor editor = SharedDisplaySessionMgr - .getSessionContainer( - resourceData.getSession() - .getSessionId()) - .getCollaborationEditor(); if (previousBounds == null || previousBounds.equals(bfe.getBounds()) == false) { previousBounds = bfe.getBounds(); VizApp.runAsync(new Runnable() { @Override public void run() { - editor.setCanvasBounds( - bfe.getDisplayId(), - bfe.getBounds()); + resourceData.getEditor() + .setCanvasBounds( + bfe.getDisplayId(), + bfe.getBounds()); display.getView().setExtent( bfe.getExtent()); } diff --git a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/rsc/CollaborationResourceData.java b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/rsc/CollaborationResourceData.java index c923a3a57b..30a73bb510 100644 --- a/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/rsc/CollaborationResourceData.java +++ b/cave/com.raytheon.uf.viz.collaboration.display/src/com/raytheon/uf/viz/collaboration/display/rsc/CollaborationResourceData.java @@ -20,6 +20,7 @@ package com.raytheon.uf.viz.collaboration.display.rsc; import com.raytheon.uf.viz.collaboration.comm.identity.ISharedDisplaySession; +import com.raytheon.uf.viz.collaboration.display.editor.ICollaborationEditor; import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.rsc.AbstractResourceData; @@ -46,6 +47,8 @@ import com.raytheon.uf.viz.core.rsc.LoadProperties; public class CollaborationResourceData extends AbstractResourceData { + private ICollaborationEditor editor; + private ISharedDisplaySession session; private int displayId; @@ -54,10 +57,11 @@ public class CollaborationResourceData extends AbstractResourceData { * @param session2 * @param displayId2 */ - public CollaborationResourceData(ISharedDisplaySession session, - int displayId) { + public CollaborationResourceData(ICollaborationEditor editor, + ISharedDisplaySession session, int displayId) { this.session = session; this.displayId = displayId; + this.editor = editor; } /* @@ -112,6 +116,13 @@ public class CollaborationResourceData extends AbstractResourceData { return true; } + /** + * @return the editor + */ + public ICollaborationEditor getEditor() { + return editor; + } + /** * @return the session */ diff --git a/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/CollaborationGroupView.java b/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/CollaborationGroupView.java index 2da130a0d1..0a819f378e 100644 --- a/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/CollaborationGroupView.java +++ b/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/CollaborationGroupView.java @@ -85,6 +85,7 @@ import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewReference; +import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; @@ -109,9 +110,10 @@ import com.raytheon.uf.viz.collaboration.comm.identity.user.IQualifiedID; import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection; import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter; import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId; -import com.raytheon.uf.viz.collaboration.display.data.SessionContainer; +import com.raytheon.uf.viz.collaboration.display.IRemoteDisplayContainer; import com.raytheon.uf.viz.collaboration.display.data.SharedDisplaySessionMgr; import com.raytheon.uf.viz.collaboration.display.editor.ICollaborationEditor; +import com.raytheon.uf.viz.collaboration.display.roles.dataprovider.SharedEditorsManager; import com.raytheon.uf.viz.collaboration.ui.data.AlertWordWrapper; import com.raytheon.uf.viz.collaboration.ui.data.CollaborationGroupContainer; import com.raytheon.uf.viz.collaboration.ui.data.SessionGroupContainer; @@ -127,6 +129,7 @@ import com.raytheon.uf.viz.collaboration.ui.session.SessionMsgArchive; import com.raytheon.uf.viz.collaboration.ui.session.SessionView; import com.raytheon.uf.viz.core.VizApp; import com.raytheon.uf.viz.core.icon.IconUtil; +import com.raytheon.viz.ui.editor.AbstractEditor; import com.raytheon.viz.ui.views.CaveFloatingView; /** @@ -1548,26 +1551,37 @@ public class CollaborationGroupView extends CaveFloatingView implements if (linkToEditorAction.isChecked()) { IWorkbenchPage page = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); - if (part instanceof ICollaborationEditor) { - String sessionId = ((ICollaborationEditor) part).getSessionId(); - for (IViewReference ref : page.getViewReferences()) { - if (ref.getPart(false) instanceof CollaborationSessionView) { - CollaborationSessionView view = (CollaborationSessionView) ref - .getPart(false); - if (view.getSessionId().equals(sessionId)) { - page.bringToTop(view); - break; - } + if (part instanceof CollaborationSessionView) { + IRemoteDisplayContainer container = ((CollaborationSessionView) part) + .getDisplayContainer(); + if (container != null) { + IEditorPart editor = container.getActiveDisplayEditor(); + if (editor != null) { + page.bringToTop(editor); } } - } else if (part instanceof CollaborationSessionView) { - String sessionId = ((CollaborationSessionView) part) - .getSessionId(); - ICollaborationEditor editor = SharedDisplaySessionMgr - .getSessionContainer(sessionId) - .getCollaborationEditor(); - if (editor != null) { - page.bringToTop(editor); + } else { + String sessionId = null; + if (part instanceof ICollaborationEditor) { + sessionId = ((ICollaborationEditor) part).getSessionId(); + } else if (part instanceof AbstractEditor) { + ISharedDisplaySession session = SharedEditorsManager + .getSharedEditorSession((AbstractEditor) part); + if (session != null) { + sessionId = session.getSessionId(); + } + } + if (sessionId != null) { + for (IViewReference ref : page.getViewReferences()) { + if (CollaborationSessionView.ID.equals(ref.getId())) { + CollaborationSessionView view = (CollaborationSessionView) ref + .getPart(false); + if (sessionId.equals(view.getSessionId())) { + page.bringToTop(view); + break; + } + } + } } } } diff --git a/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/editor/CollaborationEditor.java b/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/editor/CollaborationEditor.java index 0d1044be69..5a40cb4132 100644 --- a/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/editor/CollaborationEditor.java +++ b/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/editor/CollaborationEditor.java @@ -29,6 +29,7 @@ import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.ISaveablePart2; import org.eclipse.ui.PartInitException; @@ -140,7 +141,7 @@ public class CollaborationEditor extends EditorPart implements for (ResourcePair rp : display.getDescriptor().getResourceList()) { rp.getProperties().setSystemResource(true); } - CollaborationResourceData crd = new CollaborationResourceData( + CollaborationResourceData crd = new CollaborationResourceData(this, session, displayId); ResourcePair rp = ResourcePair.constructSystemResourcePair(crd); display.getDescriptor().getResourceList().add(rp); @@ -401,4 +402,26 @@ public class CollaborationEditor extends EditorPart implements } return new RemoteDisplay(currentActiveDisplay, display); } + + /* + * (non-Javadoc) + * + * @see com.raytheon.uf.viz.collaboration.display.IRemoteDisplayContainer# + * getActiveDisplayEditor() + */ + @Override + public IEditorPart getActiveDisplayEditor() { + return this; + } + + /* + * (non-Javadoc) + * + * @see com.raytheon.uf.viz.collaboration.display.IRemoteDisplayContainer# + * disposeContainer() + */ + @Override + public void disposeContainer() { + getSite().getPage().closeEditor(this, false); + } } diff --git a/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/session/CollaborationSessionView.java b/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/session/CollaborationSessionView.java index 941d6e538e..72d8062543 100644 --- a/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/session/CollaborationSessionView.java +++ b/cave/com.raytheon.uf.viz.collaboration.ui/src/com/raytheon/uf/viz/collaboration/ui/session/CollaborationSessionView.java @@ -20,9 +20,7 @@ package com.raytheon.uf.viz.collaboration.ui.session; * further licensing information. **/ -import java.util.ArrayList; import java.util.IdentityHashMap; -import java.util.List; import java.util.Map; import org.eclipse.ecf.presence.roster.IRosterEntry; @@ -39,10 +37,8 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.ToolItem; -import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IViewSite; -import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; @@ -66,8 +62,6 @@ import com.raytheon.uf.viz.collaboration.display.IRemoteDisplayContainer.RemoteD import com.raytheon.uf.viz.collaboration.display.data.ColorChangeEvent; import com.raytheon.uf.viz.collaboration.display.data.SessionContainer; import com.raytheon.uf.viz.collaboration.display.data.SharedDisplaySessionMgr; -import com.raytheon.uf.viz.collaboration.display.editor.ICollaborationEditor; -import com.raytheon.uf.viz.collaboration.display.roles.dataprovider.SharedEditorsManager; import com.raytheon.uf.viz.collaboration.display.rsc.SelfAddingSystemResourceListener; import com.raytheon.uf.viz.collaboration.display.rsc.telestrator.CollaborationDrawingEvent; import com.raytheon.uf.viz.collaboration.display.rsc.telestrator.CollaborationDrawingResource; @@ -80,7 +74,6 @@ import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.icon.IconUtil; import com.raytheon.uf.viz.drawing.DrawingToolLayer; import com.raytheon.uf.viz.drawing.DrawingToolLayer.DrawMode; -import com.raytheon.viz.ui.VizWorkbenchManager; /** * View class for a collaboration session @@ -140,6 +133,10 @@ public class CollaborationSessionView extends SessionView implements private Map listeners = new IdentityHashMap(); + public IRemoteDisplayContainer getDisplayContainer() { + return container; + } + public CollaborationDrawingResource getCurrentDrawingResource() { CollaborationDrawingResource currentResource = null; if (currentDisplay != null) { @@ -176,16 +173,14 @@ public class CollaborationSessionView extends SessionView implements .getSessionContainer(sessionId); if (sc != null) { session = sc.getSession(); - if (sc.getCollaborationEditor() != null) { - container = sc.getCollaborationEditor(); - } else { - container = SharedEditorsManager.getManager(session); - } - container.addRemoteDisplayChangedListener(this); - RemoteDisplay remoteDisplay = container.getActiveDisplay(); - if (remoteDisplay != null) { - remoteDisplayChanged(container.getActiveDisplay(), - RemoteDisplayChangeType.ACTIVATED); + container = sc.getDisplayContainer(); + if (container != null) { + container.addRemoteDisplayChangedListener(this); + RemoteDisplay remoteDisplay = container.getActiveDisplay(); + if (remoteDisplay != null) { + remoteDisplayChanged(container.getActiveDisplay(), + RemoteDisplayChangeType.ACTIVATED); + } } } } @@ -503,16 +498,6 @@ public class CollaborationSessionView extends SessionView implements @Override public void dispose() { - ICollaborationEditor assocEditor = SharedDisplaySessionMgr - .getSessionContainer(session.getSessionId()) - .getCollaborationEditor(); - if (assocEditor != null) { - IWorkbenchPage page = VizWorkbenchManager.getInstance() - .getCurrentWindow().getActivePage(); - if (page != null) { - page.closeEditor(assocEditor, false); - } - } SharedDisplaySessionMgr.exitSession(session.getSessionId()); session.close(); super.dispose(); @@ -533,17 +518,7 @@ public class CollaborationSessionView extends SessionView implements @Override public void partActivated(IWorkbenchPart part) { // only done if we care about the part that was activated - SessionContainer sc = SharedDisplaySessionMgr - .getSessionContainer(sessionId); - List editors = new ArrayList(); - if (sc.getCollaborationEditor() == null) { - editors.addAll(SharedEditorsManager.getManager(sc.getSession()) - .getSharedEditors()); - } else { - editors.add(sc.getCollaborationEditor()); - } - - if (this == part || editors.contains(part)) { + if (container != null && container.getActiveDisplayEditor() == part) { ContextManager .getInstance(getSite().getPage().getWorkbenchWindow()) .activateContexts(this); @@ -581,17 +556,7 @@ public class CollaborationSessionView extends SessionView implements @Override public void partDeactivated(IWorkbenchPart part) { // only done if we care about the part that was deactivated - SessionContainer sc = SharedDisplaySessionMgr - .getSessionContainer(sessionId); - List editors = new ArrayList(); - if (sc.getCollaborationEditor() == null) { - editors.addAll(SharedEditorsManager.getManager(sc.getSession()) - .getSharedEditors()); - } else { - editors.add(sc.getCollaborationEditor()); - } - - if (this == part || editors.contains(part)) { + if (container != null && container.getActiveDisplayEditor() == part) { ContextManager .getInstance(getSite().getPage().getWorkbenchWindow()) .deactivateContexts(this);