Issue #697 Added support for procedure loading which magically made swapping appear to work too
Change-Id: I86c69781514709df4c6a23bdabfb63a2c103a9ed Former-commit-id: e1bf6a3b576da036478cd1415856a64ebc606640
This commit is contained in:
parent
ed0b70501f
commit
0776af95e7
7 changed files with 182 additions and 78 deletions
|
@ -25,7 +25,6 @@ import java.util.List;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.graphics.RGB;
|
import org.eclipse.swt.graphics.RGB;
|
||||||
import org.eclipse.swt.widgets.Event;
|
import org.eclipse.swt.widgets.Event;
|
||||||
import org.hibernate.InstantiationException;
|
|
||||||
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
|
@ -37,7 +36,9 @@ import com.raytheon.uf.viz.collaboration.comm.identity.event.IVenueParticipantEv
|
||||||
import com.raytheon.uf.viz.collaboration.comm.identity.event.ParticipantEventType;
|
import com.raytheon.uf.viz.collaboration.comm.identity.event.ParticipantEventType;
|
||||||
import com.raytheon.uf.viz.collaboration.comm.identity.user.SharedDisplayRole;
|
import com.raytheon.uf.viz.collaboration.comm.identity.user.SharedDisplayRole;
|
||||||
import com.raytheon.uf.viz.collaboration.comm.provider.TransferRoleCommand;
|
import com.raytheon.uf.viz.collaboration.comm.provider.TransferRoleCommand;
|
||||||
|
import com.raytheon.uf.viz.collaboration.display.editor.ReprojectEditor;
|
||||||
import com.raytheon.uf.viz.collaboration.display.editor.SharedEditorData;
|
import com.raytheon.uf.viz.collaboration.display.editor.SharedEditorData;
|
||||||
|
import com.raytheon.uf.viz.collaboration.ui.Activator;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.ColorChangeEvent;
|
import com.raytheon.uf.viz.collaboration.ui.ColorChangeEvent;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.SessionColorManager;
|
import com.raytheon.uf.viz.collaboration.ui.SessionColorManager;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.data.SessionContainer;
|
import com.raytheon.uf.viz.collaboration.ui.data.SessionContainer;
|
||||||
|
@ -50,6 +51,7 @@ import com.raytheon.uf.viz.collaboration.ui.rsc.CollaborationWrapperResource;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.rsc.CollaborationWrapperResourceData;
|
import com.raytheon.uf.viz.collaboration.ui.rsc.CollaborationWrapperResourceData;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.rsc.DataProviderRscData;
|
import com.raytheon.uf.viz.collaboration.ui.rsc.DataProviderRscData;
|
||||||
import com.raytheon.uf.viz.core.IDisplayPane;
|
import com.raytheon.uf.viz.core.IDisplayPane;
|
||||||
|
import com.raytheon.uf.viz.core.IRenderableDisplayChangedListener;
|
||||||
import com.raytheon.uf.viz.core.VizApp;
|
import com.raytheon.uf.viz.core.VizApp;
|
||||||
import com.raytheon.uf.viz.core.drawables.IRenderableDisplay;
|
import com.raytheon.uf.viz.core.drawables.IRenderableDisplay;
|
||||||
import com.raytheon.uf.viz.core.drawables.ResourcePair;
|
import com.raytheon.uf.viz.core.drawables.ResourcePair;
|
||||||
|
@ -66,6 +68,8 @@ import com.raytheon.viz.ui.EditorUtil;
|
||||||
import com.raytheon.viz.ui.editor.AbstractEditor;
|
import com.raytheon.viz.ui.editor.AbstractEditor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* TODO: This class is in severe need of a refactor!
|
||||||
|
*
|
||||||
* Handles the events of a session that are specific to the Data Provider role.
|
* Handles the events of a session that are specific to the Data Provider role.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
@ -83,13 +87,31 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class DataProviderEventController extends AbstractRoleEventController {
|
public class DataProviderEventController extends AbstractRoleEventController
|
||||||
|
implements IRenderableDisplayChangedListener {
|
||||||
|
|
||||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(DataProviderEventController.class);
|
.getHandler(DataProviderEventController.class);
|
||||||
|
|
||||||
private ResourceWrapperListener wrappingListener;
|
private ResourceWrapperListener wrappingListener;
|
||||||
|
|
||||||
|
private DispatcherFactory factory = new DispatcherFactory() {
|
||||||
|
@Override
|
||||||
|
public Dispatcher createNewDispatcher(IRenderableDisplay display)
|
||||||
|
throws InstantiationException {
|
||||||
|
try {
|
||||||
|
CollaborationDispatcher dispatcher = new CollaborationDispatcher(
|
||||||
|
session, display);
|
||||||
|
dispatchers.add(dispatcher);
|
||||||
|
return dispatcher;
|
||||||
|
} catch (CollaborationException e) {
|
||||||
|
throw new InstantiationException(
|
||||||
|
"Error constructing collaboration dispatcher: "
|
||||||
|
+ e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private List<CollaborationDispatcher> dispatchers = new LinkedList<CollaborationDispatcher>();
|
private List<CollaborationDispatcher> dispatchers = new LinkedList<CollaborationDispatcher>();
|
||||||
|
|
||||||
public DataProviderEventController(ISharedDisplaySession session) {
|
public DataProviderEventController(ISharedDisplaySession session) {
|
||||||
|
@ -249,6 +271,35 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
||||||
// Replace pane resources that will be shared with
|
// Replace pane resources that will be shared with
|
||||||
// CollaborationWrapperResource objects
|
// CollaborationWrapperResource objects
|
||||||
for (IDisplayPane pane : editor.getDisplayPanes()) {
|
for (IDisplayPane pane : editor.getDisplayPanes()) {
|
||||||
|
handleNewDisplay(pane);
|
||||||
|
setActiveDisplay(pane.getRenderableDisplay());
|
||||||
|
}
|
||||||
|
|
||||||
|
editor.addRenderableDisplayChangedListener(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setActiveDisplay(IRenderableDisplay display) {
|
||||||
|
for (CollaborationDispatcher dispatcher : dispatchers) {
|
||||||
|
dispatcher.setActiveDisplay(display);
|
||||||
|
}
|
||||||
|
ReprojectEditor event = new ReprojectEditor();
|
||||||
|
event.setTargetGeometry(display.getDescriptor().getGridGeometry());
|
||||||
|
try {
|
||||||
|
session.sendObjectToVenue(event);
|
||||||
|
} catch (CollaborationException e) {
|
||||||
|
Activator.statusHandler.handle(
|
||||||
|
Priority.PROBLEM,
|
||||||
|
"Error sending reprojection event: "
|
||||||
|
+ e.getLocalizedMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleNewDisplay(IDisplayPane pane) {
|
||||||
|
try {
|
||||||
|
if (DispatchingGraphicsFactory.injectRemoteFunctionality(pane,
|
||||||
|
factory)) {
|
||||||
|
// If we injected successfully, do resource management
|
||||||
ResourceList list = pane.getDescriptor().getResourceList();
|
ResourceList list = pane.getDescriptor().getResourceList();
|
||||||
for (ResourcePair rp : pane.getDescriptor().getResourceList()) {
|
for (ResourcePair rp : pane.getDescriptor().getResourceList()) {
|
||||||
wrapResourcePair(rp);
|
wrapResourcePair(rp);
|
||||||
|
@ -256,26 +307,8 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
||||||
list.addPreAddListener(wrappingListener);
|
list.addPreAddListener(wrappingListener);
|
||||||
list.addPostRemoveListener(wrappingListener);
|
list.addPostRemoveListener(wrappingListener);
|
||||||
}
|
}
|
||||||
|
} catch (InstantiationException e) {
|
||||||
// Inject remote graphics functionality in container
|
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||||
DispatchingGraphicsFactory.injectRemoteFunctionality(editor,
|
|
||||||
new DispatcherFactory() {
|
|
||||||
@Override
|
|
||||||
public Dispatcher createNewDispatcher(
|
|
||||||
IRenderableDisplay display)
|
|
||||||
throws InstantiationException {
|
|
||||||
try {
|
|
||||||
CollaborationDispatcher dispatcher = new CollaborationDispatcher(
|
|
||||||
session, display);
|
|
||||||
dispatchers.add(dispatcher);
|
|
||||||
return dispatcher;
|
|
||||||
} catch (CollaborationException e) {
|
|
||||||
throw new InstantiationException(
|
|
||||||
"Error creation collaboration dispatcher",
|
|
||||||
CollaborationDispatcher.class, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -383,10 +416,10 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
||||||
list.removePreAddListener(wrappingListener);
|
list.removePreAddListener(wrappingListener);
|
||||||
list.removePostRemoveListener(wrappingListener);
|
list.removePostRemoveListener(wrappingListener);
|
||||||
}
|
}
|
||||||
DispatchingGraphicsFactory.extractRemoteFunctionality(editor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dispatchers created are responsible for display extraction
|
||||||
for (CollaborationDispatcher dispatcher : dispatchers) {
|
for (CollaborationDispatcher dispatcher : dispatchers) {
|
||||||
dispatcher.dispose();
|
dispatcher.dispose();
|
||||||
}
|
}
|
||||||
|
@ -410,4 +443,22 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see com.raytheon.uf.viz.core.IRenderableDisplayChangedListener#
|
||||||
|
* renderableDisplayChanged(com.raytheon.uf.viz.core.IDisplayPane,
|
||||||
|
* com.raytheon.uf.viz.core.drawables.IRenderableDisplay,
|
||||||
|
* com.raytheon.uf.viz
|
||||||
|
* .core.IRenderableDisplayChangedListener.DisplayChangeType)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void renderableDisplayChanged(IDisplayPane pane,
|
||||||
|
IRenderableDisplay newRenderableDisplay, DisplayChangeType type) {
|
||||||
|
if (type == DisplayChangeType.ADD) {
|
||||||
|
handleNewDisplay(pane);
|
||||||
|
setActiveDisplay(newRenderableDisplay);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,6 @@ import com.raytheon.uf.viz.collaboration.ui.data.SessionContainer;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.data.SharedDisplaySessionMgr;
|
import com.raytheon.uf.viz.collaboration.ui.data.SharedDisplaySessionMgr;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.editor.EditorSetup;
|
import com.raytheon.uf.viz.collaboration.ui.editor.EditorSetup;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.editor.SharedResource;
|
import com.raytheon.uf.viz.collaboration.ui.editor.SharedResource;
|
||||||
import com.raytheon.uf.viz.collaboration.ui.rsc.CollaborationResource;
|
|
||||||
import com.raytheon.uf.viz.collaboration.ui.rsc.CollaborationResourceData;
|
import com.raytheon.uf.viz.collaboration.ui.rsc.CollaborationResourceData;
|
||||||
import com.raytheon.uf.viz.core.IDisplayPane;
|
import com.raytheon.uf.viz.core.IDisplayPane;
|
||||||
import com.raytheon.uf.viz.core.VizApp;
|
import com.raytheon.uf.viz.core.VizApp;
|
||||||
|
@ -65,8 +64,6 @@ public class ParticipantEventController extends AbstractRoleEventController {
|
||||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(ParticipantEventController.class);
|
.getHandler(ParticipantEventController.class);
|
||||||
|
|
||||||
private CollaborationResource collabRsc;
|
|
||||||
|
|
||||||
public ParticipantEventController(ISharedDisplaySession session) {
|
public ParticipantEventController(ISharedDisplaySession session) {
|
||||||
super(session);
|
super(session);
|
||||||
}
|
}
|
||||||
|
@ -111,21 +108,25 @@ public class ParticipantEventController extends AbstractRoleEventController {
|
||||||
CollaborationEditor editor = SharedDisplaySessionMgr
|
CollaborationEditor editor = SharedDisplaySessionMgr
|
||||||
.getSessionContainer(session.getSessionId())
|
.getSessionContainer(session.getSessionId())
|
||||||
.getCollaborationEditor();
|
.getCollaborationEditor();
|
||||||
for (IDisplayPane pane : editor.getDisplayPanes()) {
|
if (editor != null) {
|
||||||
IDescriptor desc = pane.getDescriptor();
|
// Only reproject if editor has been created
|
||||||
if (desc instanceof AbstractDescriptor) {
|
for (IDisplayPane pane : editor.getDisplayPanes()) {
|
||||||
try {
|
IDescriptor desc = pane.getDescriptor();
|
||||||
((AbstractDescriptor) desc).setGridGeometry(event
|
if (desc instanceof AbstractDescriptor) {
|
||||||
.getTargetGeometry());
|
try {
|
||||||
} catch (VizException e) {
|
((AbstractDescriptor) desc)
|
||||||
statusHandler.handle(Priority.PROBLEM,
|
.setGridGeometry(event
|
||||||
"Error reprojecting collaboration display: "
|
.getTargetGeometry());
|
||||||
+ e.getLocalizedMessage(), e);
|
} catch (VizException e) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
|
"Error reprojecting collaboration display: "
|
||||||
|
+ e.getLocalizedMessage(), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
pane.setZoomLevel(1.0);
|
||||||
|
pane.scaleToClientArea();
|
||||||
|
pane.refresh();
|
||||||
}
|
}
|
||||||
pane.setZoomLevel(1.0);
|
|
||||||
pane.scaleToClientArea();
|
|
||||||
pane.refresh();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -169,8 +170,6 @@ public class ParticipantEventController extends AbstractRoleEventController {
|
||||||
ResourcePair rp = ResourcePair.constructSystemResourcePair(crd);
|
ResourcePair rp = ResourcePair.constructSystemResourcePair(crd);
|
||||||
desc.getResourceList().add(rp);
|
desc.getResourceList().add(rp);
|
||||||
desc.getResourceList().instantiateResources(desc, true);
|
desc.getResourceList().instantiateResources(desc, true);
|
||||||
collabRsc = (CollaborationResource) rp.getResource();
|
|
||||||
this.session.registerEventHandler(collabRsc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -188,9 +187,6 @@ public class ParticipantEventController extends AbstractRoleEventController {
|
||||||
if (container != null) {
|
if (container != null) {
|
||||||
super.deactivateResources(container.getCollaborationEditor());
|
super.deactivateResources(container.getCollaborationEditor());
|
||||||
}
|
}
|
||||||
if (this.collabRsc != null) {
|
|
||||||
this.session.unRegisterEventHandler(collabRsc);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|
|
@ -44,6 +44,7 @@ import com.raytheon.uf.viz.core.drawables.IRenderableDisplay;
|
||||||
import com.raytheon.uf.viz.core.jobs.JobPool;
|
import com.raytheon.uf.viz.core.jobs.JobPool;
|
||||||
import com.raytheon.uf.viz.core.rsc.IInputHandler;
|
import com.raytheon.uf.viz.core.rsc.IInputHandler;
|
||||||
import com.raytheon.uf.viz.remote.graphics.Dispatcher;
|
import com.raytheon.uf.viz.remote.graphics.Dispatcher;
|
||||||
|
import com.raytheon.uf.viz.remote.graphics.DispatchingGraphicsFactory;
|
||||||
import com.raytheon.uf.viz.remote.graphics.events.AbstractDispatchingObjectEvent;
|
import com.raytheon.uf.viz.remote.graphics.events.AbstractDispatchingObjectEvent;
|
||||||
import com.raytheon.uf.viz.remote.graphics.events.AbstractRemoteGraphicsEvent;
|
import com.raytheon.uf.viz.remote.graphics.events.AbstractRemoteGraphicsEvent;
|
||||||
import com.raytheon.uf.viz.remote.graphics.events.ICreationEvent;
|
import com.raytheon.uf.viz.remote.graphics.events.ICreationEvent;
|
||||||
|
@ -126,6 +127,8 @@ public class CollaborationDispatcher extends Dispatcher {
|
||||||
|
|
||||||
private IRenderableDisplay display;
|
private IRenderableDisplay display;
|
||||||
|
|
||||||
|
private IRenderableDisplay activeDisplay;
|
||||||
|
|
||||||
public CollaborationDispatcher(ISharedDisplaySession session,
|
public CollaborationDispatcher(ISharedDisplaySession session,
|
||||||
IRenderableDisplay display) throws CollaborationException {
|
IRenderableDisplay display) throws CollaborationException {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
|
@ -139,6 +142,28 @@ public class CollaborationDispatcher extends Dispatcher {
|
||||||
// display.getContainer().registerMouseHandler(mouseCapturer);
|
// display.getContainer().registerMouseHandler(mouseCapturer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the active display to render for
|
||||||
|
*
|
||||||
|
* @param display
|
||||||
|
*/
|
||||||
|
public void setActiveDisplay(IRenderableDisplay active) {
|
||||||
|
if (display != active) {
|
||||||
|
disposeFrames();
|
||||||
|
}
|
||||||
|
this.activeDisplay = active;
|
||||||
|
display.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the IRenderableDisplay this dispatcher is dispatching for
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public IRenderableDisplay getDisplay() {
|
||||||
|
return display;
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void handleNeedsRenderFrameEvent(RenderFrameNeededEvent event) {
|
public void handleNeedsRenderFrameEvent(RenderFrameNeededEvent event) {
|
||||||
synchronized (previousFrames) {
|
synchronized (previousFrames) {
|
||||||
|
@ -173,7 +198,10 @@ public class CollaborationDispatcher extends Dispatcher {
|
||||||
@Override
|
@Override
|
||||||
public void dispatch(AbstractRemoteGraphicsEvent eventObject) {
|
public void dispatch(AbstractRemoteGraphicsEvent eventObject) {
|
||||||
if (eventObject instanceof IRenderFrameEvent) {
|
if (eventObject instanceof IRenderFrameEvent) {
|
||||||
send(eventObject);
|
if (activeDisplay == display) {
|
||||||
|
// Only dispatch render frame events IF we are active
|
||||||
|
send(eventObject);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Set PERSISTENCE to true if testing persisting capabilities
|
// Set PERSISTENCE to true if testing persisting capabilities
|
||||||
|
@ -291,10 +319,21 @@ public class CollaborationDispatcher extends Dispatcher {
|
||||||
Activator.statusHandler.handle(Priority.PROBLEM,
|
Activator.statusHandler.handle(Priority.PROBLEM,
|
||||||
e.getLocalizedMessage(), e);
|
e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
|
disposeFrames();
|
||||||
|
session.unRegisterEventHandler(this);
|
||||||
|
|
||||||
|
// Extract the remote functionality
|
||||||
|
for (IDisplayPane pane : display.getContainer().getDisplayPanes()) {
|
||||||
|
if (pane.getRenderableDisplay() == display) {
|
||||||
|
DispatchingGraphicsFactory.extractRemoteFunctionality(pane);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disposeFrames() {
|
||||||
for (RenderFrame frame : previousFrames) {
|
for (RenderFrame frame : previousFrames) {
|
||||||
frame.dispose();
|
frame.dispose();
|
||||||
}
|
}
|
||||||
previousFrames.clear();
|
previousFrames.clear();
|
||||||
session.unRegisterEventHandler(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -308,7 +308,7 @@ public class CollaborationObjectEventStorage implements
|
||||||
};
|
};
|
||||||
mkcol.setURI(folderPath);
|
mkcol.setURI(folderPath);
|
||||||
HttpClientResponse rsp = executeRequest(mkcol);
|
HttpClientResponse rsp = executeRequest(mkcol);
|
||||||
if (isSuccess(rsp.code) == false) {
|
if (isSuccess(rsp.code) == false && isDirExists(rsp.code) == false) {
|
||||||
throw new CollaborationException("Folder creation failed for "
|
throw new CollaborationException("Folder creation failed for "
|
||||||
+ folderPath + ": " + new String(rsp.data));
|
+ folderPath + ": " + new String(rsp.data));
|
||||||
}
|
}
|
||||||
|
@ -340,6 +340,10 @@ public class CollaborationObjectEventStorage implements
|
||||||
return code == 404 || code == 410;
|
return code == 404 || code == 410;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isDirExists(int code) {
|
||||||
|
return code == 405 || code == 301;
|
||||||
|
}
|
||||||
|
|
||||||
@DynamicSerialize
|
@DynamicSerialize
|
||||||
public static class CollaborationHttpPersistedObject {
|
public static class CollaborationHttpPersistedObject {
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,7 @@ public class CollaborationResource extends
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void disposeInternal() {
|
protected void disposeInternal() {
|
||||||
|
resourceData.getSession().unRegisterEventHandler(this);
|
||||||
dataManager.dispose();
|
dataManager.dispose();
|
||||||
renderingRouter = null;
|
renderingRouter = null;
|
||||||
}
|
}
|
||||||
|
@ -221,6 +222,7 @@ public class CollaborationResource extends
|
||||||
ParticipantInitializedEvent event = new ParticipantInitializedEvent();
|
ParticipantInitializedEvent event = new ParticipantInitializedEvent();
|
||||||
event.setUserId(session.getUserID().getFQName());
|
event.setUserId(session.getUserID().getFQName());
|
||||||
try {
|
try {
|
||||||
|
session.registerEventHandler(this);
|
||||||
session.sendObjectToPeer(session.getCurrentDataProvider(), event);
|
session.sendObjectToPeer(session.getCurrentDataProvider(), event);
|
||||||
} catch (CollaborationException e) {
|
} catch (CollaborationException e) {
|
||||||
Activator.statusHandler.handle(Priority.PROBLEM,
|
Activator.statusHandler.handle(Priority.PROBLEM,
|
||||||
|
|
|
@ -238,9 +238,11 @@ public class CollaborationDrawingResource extends
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void project(CoordinateReferenceSystem crs) throws VizException {
|
public void project(CoordinateReferenceSystem crs) throws VizException {
|
||||||
synchronized (layerMap) {
|
if (layerMap != null) {
|
||||||
for (DrawingToolLayer layer : layerMap.values()) {
|
synchronized (layerMap) {
|
||||||
layer.reproject(descriptor.getGridGeometry());
|
for (DrawingToolLayer layer : layerMap.values()) {
|
||||||
|
layer.reproject(descriptor.getGridGeometry());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ import org.opengis.coverage.grid.GridEnvelope;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
import com.raytheon.uf.viz.core.AbstractGraphicsFactoryAdapter;
|
import com.raytheon.uf.viz.core.AbstractGraphicsFactoryAdapter;
|
||||||
import com.raytheon.uf.viz.core.IDisplayPane;
|
import com.raytheon.uf.viz.core.IDisplayPane;
|
||||||
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
|
|
||||||
import com.raytheon.uf.viz.core.IExtent;
|
import com.raytheon.uf.viz.core.IExtent;
|
||||||
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
||||||
import com.raytheon.uf.viz.core.IView;
|
import com.raytheon.uf.viz.core.IView;
|
||||||
|
@ -154,42 +153,53 @@ public class DispatchingGraphicsFactory extends AbstractGraphicsFactoryAdapter {
|
||||||
return delegate.constrcutCanvas(canvasComp);
|
return delegate.constrcutCanvas(canvasComp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void injectRemoteFunctionality(
|
/**
|
||||||
IDisplayPaneContainer container, DispatcherFactory factory) {
|
* Injects the DispatchingGraphicsFactory into the given display
|
||||||
try {
|
*
|
||||||
for (IDisplayPane pane : container.getDisplayPanes()) {
|
* @param display
|
||||||
IRenderableDisplay display = pane.getRenderableDisplay();
|
* @param factory
|
||||||
Dispatcher dispatcher = factory.createNewDispatcher(display);
|
* @throws InstantiationException
|
||||||
// Wrap the graphics adapter in dispatching one
|
*/
|
||||||
display.setGraphicsAdapter(new DispatchingGraphicsFactory(
|
public static boolean injectRemoteFunctionality(IDisplayPane pane,
|
||||||
display.getGraphicsAdapter(), dispatcher));
|
DispatcherFactory factory) throws InstantiationException {
|
||||||
refreshPane(pane);
|
boolean injected = false;
|
||||||
}
|
IRenderableDisplay display = pane.getRenderableDisplay();
|
||||||
} catch (InstantiationException e) {
|
AbstractGraphicsFactoryAdapter currAdapter = display
|
||||||
extractRemoteFunctionality(container);
|
.getGraphicsAdapter();
|
||||||
throw new RuntimeException(e);
|
if (currAdapter instanceof DispatchingGraphicsFactory == false) {
|
||||||
|
// Wrap the graphics adapter in dispatching one
|
||||||
|
display.setGraphicsAdapter(new DispatchingGraphicsFactory(
|
||||||
|
currAdapter, factory.createNewDispatcher(display)));
|
||||||
|
refreshPane(pane);
|
||||||
|
injected = true;
|
||||||
}
|
}
|
||||||
|
return injected;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes remote graphics functionality from a display pane container
|
* Extracts the DispatchingGraphicsFactory from the given renderable display
|
||||||
*
|
*
|
||||||
* @param container
|
* @param display
|
||||||
*/
|
*/
|
||||||
public static void extractRemoteFunctionality(
|
public static boolean extractRemoteFunctionality(IDisplayPane pane) {
|
||||||
IDisplayPaneContainer container) {
|
boolean extracted = false;
|
||||||
for (IDisplayPane pane : container.getDisplayPanes()) {
|
IRenderableDisplay display = pane.getRenderableDisplay();
|
||||||
IRenderableDisplay display = pane.getRenderableDisplay();
|
AbstractGraphicsFactoryAdapter adapter = display.getGraphicsAdapter();
|
||||||
AbstractGraphicsFactoryAdapter adapter = display
|
if (adapter instanceof DispatchingGraphicsFactory) {
|
||||||
.getGraphicsAdapter();
|
AbstractGraphicsFactoryAdapter wrapped = ((DispatchingGraphicsFactory) adapter).delegate;
|
||||||
if (adapter instanceof DispatchingGraphicsFactory) {
|
display.setGraphicsAdapter(wrapped);
|
||||||
AbstractGraphicsFactoryAdapter wrapped = ((DispatchingGraphicsFactory) adapter).delegate;
|
refreshPane(pane);
|
||||||
display.setGraphicsAdapter(wrapped);
|
extracted = true;
|
||||||
refreshPane(pane);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return extracted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refresh the IDisplayPane and recycle the resources on the pane. Should be
|
||||||
|
* executed after graphics injection
|
||||||
|
*
|
||||||
|
* @param pane
|
||||||
|
*/
|
||||||
private static void refreshPane(IDisplayPane pane) {
|
private static void refreshPane(IDisplayPane pane) {
|
||||||
IRenderableDisplay display = pane.getRenderableDisplay();
|
IRenderableDisplay display = pane.getRenderableDisplay();
|
||||||
IDescriptor descriptor = display.getDescriptor();
|
IDescriptor descriptor = display.getDescriptor();
|
||||||
|
|
Loading…
Add table
Reference in a new issue