This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Steps to reproduce: - Create Synchronous sample project. - Open bpel in source mode. - Go to Navigator and do some changes with bpel from Navigator (for example delete main sequence). - Go to bpel source window and try to Undo the changes. It's impossible.
Great bug. I don't know why it is discovered only now because it always presented. The problem as always in absence of Undo/Redo manager for Navigator panel. Undo/Redo manager is changed when Design TopComponent is switched to editor and vise versa. When source editor is active then undo/redo actions are related only to actions in editor. But there was action performed via OM and in this case UndoManager doesn't listen OM. This cannot be corrected since undo/redo manager should not listen both : source and OM changes. The problem will not appear if NavigatorPanel would have its own undo/redo manager. But it haven't. So this is problem: we should not change OM ( via OM methods ) while source editor is active. There can be decision: when focus is on navigator one needs to attach undo/redo manager to OM. It seems it is possible since both Navigator and design mutliview are in the same module. Vitaliy, please contact me about this problem. We need to fix this together if it is possible at all.
This is fixed locally. Needs to commit into CVS.
Fixed in "dev" branch. Needs to be fixed in release55 branch.
File Changes: Directory: /enterprise/bpel/editors/src/org/netbeans/modules/bpel/design/ ========================================================================= File [changed]: DnDHandler.java Url: http://enterprise.netbeans.org/source/browse/enterprise/bpel/editors/src/org/netbeans/modules/bpel/design/DnDHandler.java?r1=1.1.2.24&r2=1.1.2.24.2.1 Delta lines: +4 -3 ------------------- --- DnDHandler.java 25 Sep 2006 16:24:34 -0000 1.1.2.24 +++ DnDHandler.java 29 Sep 2006 14:59:37 -0000 1.1.2.24.2.1 @@ -285,7 +285,8 @@ //BpelEntity be = getBpelEntity(dtde.getTransferable()); - + getDesignView().getTopComponent().requestActive(); + getDesignView().requestFocusInWindow(); getGhostSelection().clear(); @@ -311,6 +312,7 @@ }; } + try { if (callable != null){ designView.getBPELModel().invoke(callable, this); @@ -320,8 +322,7 @@ } - getDesignView().getTopComponent().requestActive(); - getDesignView().requestFocusInWindow(); + } Directory: /enterprise/bpel/editors/src/org/netbeans/modules/bpel/editors/multiview/ ==================================================================================== File [changed]: DesignerMultiViewElement.java Url: http://enterprise.netbeans.org/source/browse/enterprise/bpel/editors/src/org/netbeans/modules/bpel/editors/multiview/DesignerMultiViewElement.java?r1=1.1.2.28&r2=1.1.2.28.2.1 Delta lines: +15 -25 --------------------- --- DesignerMultiViewElement.java 20 Sep 2006 16:09:41 -0000 1.1.2.28 +++ DesignerMultiViewElement.java 29 Sep 2006 14:59:37 -0000 1.1.2.28.2.1 @@ -69,6 +69,7 @@ import org.netbeans.modules.bpel.model.api.Assign; import org.netbeans.modules.bpel.model.api.BpelEntity; import org.openide.util.Lookup; +import org.openide.util.WeakListeners; import org.openide.util.lookup.Lookups; import org.openide.util.lookup.ProxyLookup; import org.openide.nodes.Node; @@ -119,12 +120,14 @@ import org.netbeans.modules.bpel.model.api.Variable; import org.netbeans.modules.bpel.model.api.VariableContainer; import org.netbeans.modules.bpel.model.api.VariableDeclarationScope; +import org.netbeans.modules.bpel.model.api.events.ChangeEventListener; import org.netbeans.modules.bpel.model.api.events.ChangeEventListenerAdapter; import org.netbeans.modules.bpel.model.api.events.PropertyUpdateEvent; import org.netbeans.modules.bpel.palette.SoaPaletteFactory; import org.netbeans.modules.bpel.properties.PropertyNodeFactory; import org.netbeans.modules.xml.validation.ValidateAction; import org.netbeans.modules.xml.validation.ValidateAction.RunAction; +import org.netbeans.modules.xml.xam.Model; import org.netbeans.modules.xml.xam.Model.State; import org.netbeans.modules.xml.xam.spi.Validator.ResultItem; import org.netbeans.modules.xml.xam.ui.undo.QuietUndoManager; @@ -252,7 +255,7 @@ super.componentDeactivated(); // Don't touch undo manager when cpmponent still present showing // but just lost focus.... - //removeUndoManager(); + removeUndoManager(); } public void componentHidden() { @@ -556,38 +559,23 @@ requestVisible(); } + /** - * Adds the undo/redo manager to the schema model as an undoable + * Adds the undo/redo manager to the bpel model as an undoable * edit listener, so it receives the edits onto the queue. */ private void addUndoManager() { - BpelModel model = getBpelModel(); - if (model != null) { - BPELDataEditorSupport editor = getDataObject().getEditorSupport(); - QuietUndoManager undo = editor.getUndoManager(); - // Ensure the listener is not added twice. - model.removeUndoableEditListener(undo); - model.addUndoableEditListener(undo); - // Ensure the model is sync'd when undo/redo is invoked, - // otherwise the edits are added to the queue and eventually - // cause exceptions. - undo.setModel(model); - } + UndoRedoManagerUtils.addUndoManager( getBpelModel() , + myDataObject.getEditorSupport()); } /** * Removes the undo/redo manager undoable edit listener from the - * schema model, to stop receiving undoable edits. + * bpel model, to stop receiving undoable edits. */ private void removeUndoManager() { - BpelModel model = getBpelModel(); - if (model != null) { - BPELDataEditorSupport editor = getDataObject().getEditorSupport(); - QuietUndoManager undo = editor.getUndoManager(); - model.removeUndoableEditListener(undo); - // Must unset the model when leaving model view. - undo.setModel(null); - } + UndoRedoManagerUtils.removeUndoManager( getBpelModel() , + myDataObject.getEditorSupport()); } private BpelModel getBpelModel() { @@ -693,8 +681,10 @@ @Override public void notifyPropertyUpdated( PropertyUpdateEvent event ) { - if ( BpelModel.STATE_PROPERTY.equals( event.getName()) ) { - // TODO : write code for replacing view. + if ( BpelModel.STATE.equals( event.getName()) && + Model.State.NOT_WELL_FORMED.equals(event.getNewValue()) ) + { + setActivatedNodes(new Node[] {getDataObject().getNodeDelegate()}); } } File [added]: UndoRedoManagerUtils.java Url: http://enterprise.netbeans.org/source/browse/enterprise/bpel/editors/src/org/netbeans/modules/bpel/editors/multiview/UndoRedoManagerUtils.java?rev=1.1.2.1&content-type=text/vnd.viewcvs-markup Added lines: 0 -------------- Directory: /enterprise/bpel/editors/src/org/netbeans/modules/bpel/navigator/ ============================================================================ File [changed]: BpelModelLogicalBeanTree.java Url: http://enterprise.netbeans.org/source/browse/enterprise/bpel/editors/src/org/netbeans/modules/bpel/navigator/BpelModelLogicalBeanTree.java?r1=1.1.2.10&r2=1.1.2.10.4.1 Delta lines: +38 -9 -------------------- --- BpelModelLogicalBeanTree.java 24 Jul 2006 07:05:31 -0000 1.1.2.10 +++ BpelModelLogicalBeanTree.java 29 Sep 2006 14:59:38 -0000 1.1.2.10.4.1 @@ -23,12 +23,15 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyVetoException; + import javax.swing.SwingUtilities; import javax.swing.tree.TreeSelectionModel; + +import org.netbeans.modules.bpel.core.BPELDataEditorSupport; +import org.netbeans.modules.bpel.design.nodes.NodeType; +import org.netbeans.modules.bpel.editors.multiview.UndoRedoManagerUtils; import org.netbeans.modules.bpel.model.api.BpelEntity; import org.netbeans.modules.bpel.model.api.BpelModel; -import org.netbeans.modules.bpel.model.api.PartnerLink; -import org.netbeans.modules.bpel.design.nodes.NodeType; import org.netbeans.modules.bpel.model.api.events.ArrayUpdateEvent; import org.netbeans.modules.bpel.model.api.events.ChangeEventListener; import org.netbeans.modules.bpel.model.api.events.EntityInsertEvent; @@ -36,14 +39,13 @@ import org.netbeans.modules.bpel.model.api.events.EntityUpdateEvent; import org.netbeans.modules.bpel.model.api.events.PropertyRemoveEvent; import org.netbeans.modules.bpel.model.api.events.PropertyUpdateEvent; +import org.netbeans.modules.bpel.nodes.BpelNode; +import org.netbeans.modules.bpel.nodes.BpelProcessNode; import org.netbeans.modules.bpel.nodes.navigator.Util; import org.netbeans.modules.bpel.nodes.refactoring.UsageFilterNode; import org.netbeans.modules.bpel.properties.NodeUtils; -import org.netbeans.modules.bpel.nodes.BpelNode; -import org.netbeans.modules.bpel.nodes.BpelProcessNode; import org.netbeans.modules.xml.xam.Model; import org.openide.ErrorManager; - import org.openide.explorer.ExplorerManager; import org.openide.explorer.view.BeanTreeView; import org.openide.nodes.Node; @@ -69,9 +71,6 @@ private BpelModel myBpelModel; //context lookup private Lookup myContextLookup; - private PartnerLink[] myPartnerLinks; - //true mean to send selection event to other subscribed components..... - private boolean isSendSelectionEvent = true; private BeanTreeView myBeanTreeView; private ExplorerManager myExplorerManager; @@ -184,7 +183,16 @@ TopComponent navigatorTopComponent = BpelNavigatorController.getNavigatorTC(); - if (propertyName.equals(TopComponent.Registry.PROP_ACTIVATED_NODES)) { + if (propertyName.equals(TopComponent.Registry.PROP_ACTIVATED)) { + if (TopComponent.getRegistry().getActivated() == navigatorTopComponent) { + removeUndoManager(); + addUndoManager(); + } + else { + removeUndoManager(); + } + } + else if (propertyName.equals(TopComponent.Registry.PROP_ACTIVATED_NODES)) { if (TopComponent.getRegistry().getActivated() != navigatorTopComponent) { doTreeNodeSelectionByActiveNode(); } @@ -270,6 +278,27 @@ } catch (PropertyVetoException ex) { //JUST IGNORE } + } + + /** + * Adds the undo/redo manager to the schema model as an undoable + * edit listener, so it receives the edits onto the queue. + */ + private void addUndoManager() { + UndoRedoManagerUtils.addUndoManager( myBpelModel , + (BPELDataEditorSupport)myContextLookup. + lookup( BPELDataEditorSupport.class )); + } + + /** + * Removes the undo/redo manager undoable edit listener from the + * schema model, to stop receiving undoable edits. + */ + private void removeUndoManager() { + UndoRedoManagerUtils.removeUndoManager( myBpelModel , + (BPELDataEditorSupport)myContextLookup. + lookup( BPELDataEditorSupport.class )); + } } ---------
I've reviewed fix for these issues: http://www.netbeans.org/issues/show_bug.cgi?id=85928 http://www.netbeans.org/issues/show_bug.cgi?id=85918 Everything looks okey.
fixed