Community
Participate
Working Groups
During my work on synchronizing src and design tabs for Flow I’ve found a little inconsistency in o.e.bpel.ui.editparts.ActivityEditPart.addAllAdapters(): protected void addAllAdapters() { super.addAllAdapters(); Sources sources = getActivity().getSources(); if (sources != null) { adapter.addToObject(sources); for (Iterator it = sources.getChildren().iterator(); it.hasNext(); ) { Source source = (Source)it.next(); // also include the link, if there is one (since we indirectly // control the activation of the LinkEditPart) if (source.getLink() != null) adapter.addToObject(source.getLink()); // Okay--the real problem here, is that the Activity might be // referred to by a Source object, but the Activity is not going // to find out about the creation of a new Sources that references // it. Therefore, our model listeners don't know what to do! // TODO: temporarily hacked around in FlowEditPart.FlowContentAdapter. // TODO: also include any parent flows, and the Links object of // any parent flows that have one. ! // TODO: in future, use a global listener to handle refreshing the // correct source editpart. } } Targets targets = getActivity().getTargets(); if (targets != null) { adapter.addToObject(targets); for (Iterator it = targets.getChildren().iterator(); it.hasNext(); ) { adapter.addToObject((Target)it.next()); } } } Please note that if you remove all the comments then the method will look this way: protected void addAllAdapters() { super.addAllAdapters(); Sources sources = getActivity().getSources(); if (sources != null) { adapter.addToObject(sources); for (Iterator it = sources.getChildren().iterator(); it.hasNext(); ) { Source source = (Source)it.next(); if (source.getLink() != null) adapter.addToObject(source.getLink()); } } Targets targets = getActivity().getTargets(); if (targets != null) { adapter.addToObject(targets); for (Iterator it = targets.getChildren().iterator(); it.hasNext(); ) { adapter.addToObject((Target)it.next()); } } } This inconsistent behavior leads to different sets of eAdapters created for SourceImpl and TargetImpl (try to set breakpoints at the end of SourceImpl.setActivity() and TargetImpl.setActivity() to ensure that. The different sets of eAdapters is an obstacle for restoring links in the design tab when editing the source tab. The question: is there any reason not to make the ‘sources’ part of the method be similar to the ‘target’ part, i.e. the method will look this way: protected void addAllAdapters() { super.addAllAdapters(); Sources sources = getActivity().getSources(); if (sources != null) { adapter.addToObject(sources); for (Iterator it = sources.getChildren().iterator(); it.hasNext(); ) { adapter.addToObject((Source)it.next()); } } Targets targets = getActivity().getTargets(); if (targets != null) { adapter.addToObject(targets); for (Iterator it = targets.getChildren().iterator(); it.hasNext(); ) { adapter.addToObject((Target)it.next()); } } } Add/remove/Undo/redo/ seems to be working fine if the proposed patch is applied.
Created attachment 76023 [details] a patch that fixes the bug
Reviewed the patch and checked in in (HEAD stream only)
Comment on attachment 76023 [details] a patch that fixes the bug Updated iplog flag for v1.0 release review.