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.

Bug 85918 - Undo not working after some changes through navigator when bpel opens in source mode
Summary: Undo not working after some changes through navigator when bpel opens in sour...
Status: VERIFIED FIXED
Alias: None
Product: soa
Classification: Unclassified
Component: BPEL (show other bugs)
Version: 5.x
Hardware: All All
: P2 blocker (vote)
Assignee: Denis Anisimov
URL:
Keywords:
Depends on:
Blocks: 85928
  Show dependency tree
 
Reported: 2006-09-27 17:40 UTC by Andrey Yamkovoy
Modified: 2006-10-24 21:21 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Yamkovoy 2006-09-27 17:40:10 UTC
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.
Comment 1 Denis Anisimov 2006-09-28 07:45:50 UTC
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.
Comment 2 Denis Anisimov 2006-09-29 12:07:33 UTC
This is fixed locally.
Needs to commit into CVS.
Comment 3 Denis Anisimov 2006-09-29 15:58:02 UTC
Fixed in "dev" branch.
Needs to be fixed in release55 branch.
Comment 4 Denis Anisimov 2006-09-29 16:02:22 UTC
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  ));
+
     }
 }
 




---------
Comment 5 Vladimir Yaroslavskiy 2006-10-02 16:22:58 UTC
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.
Comment 6 Andrey Yamkovoy 2006-10-16 13:35:34 UTC
fixed