Issue #239 Added ability to remove remote graphics functionality from
editor. Execute on session shutdown Former-commit-id:7c09df3cc0
[formerlycc6386f9f6
] [formerlybbb8d0e596
] [formerlyc64d84d1b5
[formerlybbb8d0e596
[formerly 8a2d8b0ce27364eae1bc7e696a5d1074e03169dc]]] Former-commit-id:c64d84d1b5
Former-commit-id: 4661f0efcc23248722873b2218c7e248eb554c0e [formerlyd4bff8bbc5
] Former-commit-id:f7616d9c15
This commit is contained in:
parent
347cf62f56
commit
add307f5bd
2 changed files with 86 additions and 32 deletions
|
@ -32,6 +32,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.event.ParticipantEventTyp
|
|||
import com.raytheon.uf.viz.collaboration.comm.identity.user.ParticipantRole;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.TransferRoleCommand;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.event.VenueParticipantEvent;
|
||||
import com.raytheon.uf.viz.collaboration.data.SessionContainer;
|
||||
import com.raytheon.uf.viz.collaboration.data.SharedDisplaySessionMgr;
|
||||
import com.raytheon.uf.viz.collaboration.ui.editor.EditorSetup;
|
||||
import com.raytheon.uf.viz.collaboration.ui.editor.SharedEditorData;
|
||||
|
@ -77,6 +78,8 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(DataProviderEventController.class);
|
||||
|
||||
private ResourceWrapperListener wrappingListener;
|
||||
|
||||
public DataProviderEventController(ISharedDisplaySession session) {
|
||||
super(session);
|
||||
}
|
||||
|
@ -212,6 +215,7 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
|||
public void startup() {
|
||||
super.startup();
|
||||
super.activateTelestrator();
|
||||
wrappingListener = new ResourceWrapperListener();
|
||||
for (IDisplayPaneContainer container : SharedDisplaySessionMgr
|
||||
.getSessionContainer(session.getSessionId()).getSharedEditors()) {
|
||||
// Replace pane resources that will be shared with
|
||||
|
@ -221,25 +225,8 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
|||
for (ResourcePair rp : pane.getDescriptor().getResourceList()) {
|
||||
wrapResourcePair(rp);
|
||||
}
|
||||
list.addPreAddListener(new AddListener() {
|
||||
@Override
|
||||
public void notifyAdd(ResourcePair rp) throws VizException {
|
||||
if (wrapResourcePair(rp)) {
|
||||
// Send event to venue to load
|
||||
sendSharedResource(rp, false);
|
||||
}
|
||||
}
|
||||
});
|
||||
list.addPostRemoveListener(new RemoveListener() {
|
||||
@Override
|
||||
public void notifyRemove(ResourcePair rp)
|
||||
throws VizException {
|
||||
if (rp.getResource() instanceof CollaborationWrapperResource) {
|
||||
// Send event to venue to unload
|
||||
sendSharedResource(rp, true);
|
||||
}
|
||||
}
|
||||
});
|
||||
list.addPreAddListener(wrappingListener);
|
||||
list.addPostRemoveListener(wrappingListener);
|
||||
}
|
||||
|
||||
// Inject remote graphics functionality in container
|
||||
|
@ -323,6 +310,17 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
|||
return false;
|
||||
}
|
||||
|
||||
private void unwrapResourcePair(ResourcePair rp) {
|
||||
if (rp.getResource() instanceof CollaborationWrapperResource) {
|
||||
rp.setResource(((CollaborationWrapperResource) rp.getResource())
|
||||
.getWrappedResource());
|
||||
}
|
||||
if (rp.getResourceData() instanceof CollaborationWrapperResourceData) {
|
||||
rp.setResourceData(((CollaborationWrapperResourceData) rp
|
||||
.getResourceData()).getWrappedResourceData());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
@ -334,7 +332,41 @@ public class DataProviderEventController extends AbstractRoleEventController {
|
|||
public void shutdown() {
|
||||
super.shutdown();
|
||||
super.deactivateTelestrator();
|
||||
SessionContainer sc = SharedDisplaySessionMgr
|
||||
.getSessionContainer(session.getSessionId());
|
||||
if (sc != null) {
|
||||
for (IDisplayPaneContainer container : sc.getSharedEditors()) {
|
||||
for (IDisplayPane pane : container.getDisplayPanes()) {
|
||||
ResourceList list = pane.getDescriptor().getResourceList();
|
||||
for (ResourcePair rp : list) {
|
||||
unwrapResourcePair(rp);
|
||||
}
|
||||
list.removePreAddListener(wrappingListener);
|
||||
list.removePostRemoveListener(wrappingListener);
|
||||
}
|
||||
DispatchingGraphicsFactory
|
||||
.extractRemoteFunctionality(container);
|
||||
}
|
||||
}
|
||||
// TODO should remove the SharedEditorIndiciatorRsc
|
||||
}
|
||||
|
||||
private class ResourceWrapperListener implements AddListener,
|
||||
RemoveListener {
|
||||
@Override
|
||||
public void notifyAdd(ResourcePair rp) throws VizException {
|
||||
if (wrapResourcePair(rp)) {
|
||||
// Send event to venue to load
|
||||
sendSharedResource(rp, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyRemove(ResourcePair rp) throws VizException {
|
||||
if (rp.getResource() instanceof CollaborationWrapperResource) {
|
||||
// Send event to venue to unload
|
||||
sendSharedResource(rp, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -162,20 +162,42 @@ public class DispatchingGraphicsFactory extends AbstractGraphicsFactoryAdapter {
|
|||
// Wrap the graphics adapter in dispatching one
|
||||
display.setGraphicsAdapter(new DispatchingGraphicsFactory(display
|
||||
.getGraphicsAdapter(), dispatcher));
|
||||
|
||||
// Force resetting of the pane's display
|
||||
pane.setRenderableDisplay(null);
|
||||
pane.setRenderableDisplay(display);
|
||||
|
||||
display.setup(pane.getTarget());
|
||||
|
||||
for (ResourcePair rp : pane.getDescriptor().getResourceList()) {
|
||||
if (rp.getResource() != null) {
|
||||
rp.getResource().recycle();
|
||||
}
|
||||
}
|
||||
pane.refresh();
|
||||
refreshPane(pane);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes remote graphics functionality from a display pane container
|
||||
*
|
||||
* @param container
|
||||
*/
|
||||
public static void extractRemoteFunctionality(
|
||||
IDisplayPaneContainer container) {
|
||||
for (IDisplayPane pane : container.getDisplayPanes()) {
|
||||
IRenderableDisplay display = pane.getRenderableDisplay();
|
||||
AbstractGraphicsFactoryAdapter adapter = display
|
||||
.getGraphicsAdapter();
|
||||
if (adapter instanceof DispatchingGraphicsFactory) {
|
||||
AbstractGraphicsFactoryAdapter wrapped = ((DispatchingGraphicsFactory) adapter).delegate;
|
||||
display.setGraphicsAdapter(wrapped);
|
||||
refreshPane(pane);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void refreshPane(IDisplayPane pane) {
|
||||
IRenderableDisplay display = pane.getRenderableDisplay();
|
||||
// Force resetting of the pane's display
|
||||
pane.setRenderableDisplay(null);
|
||||
pane.setRenderableDisplay(display);
|
||||
|
||||
display.setup(pane.getTarget());
|
||||
|
||||
for (ResourcePair rp : display.getDescriptor().getResourceList()) {
|
||||
if (rp.getResource() != null) {
|
||||
rp.getResource().recycle();
|
||||
}
|
||||
}
|
||||
pane.refresh();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue