changeset 7908:2def7cb07a48

[SCENEBUILDER] Going on fixing DTL-6783: Rationalize job implementation between Hierarchy and Content Panels => Adapt Set Document Root jobs
author slions
date Fri, 29 Aug 2014 08:58:44 +0200
parents f3731ef0c7f4
children 3d617cc276d6
files apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/SetDocumentRootJob.java apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/atomic/SetFxomRootJob.java
diffstat 2 files changed, 134 insertions(+), 86 deletions(-) [+]
line wrap: on
line diff
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/SetDocumentRootJob.java	Fri Aug 29 08:57:15 2014 +0200
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/SetDocumentRootJob.java	Fri Aug 29 08:58:44 2014 +0200
@@ -29,118 +29,61 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 package com.oracle.javafx.scenebuilder.kit.editor.job;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.selection.Selection;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
+import com.oracle.javafx.scenebuilder.kit.editor.job.atomic.SetFxomRootJob;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.ObjectSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  *
  */
-public class SetDocumentRootJob extends Job {
+public class SetDocumentRootJob extends BatchSelectionJob {
 
     private final FXOMObject newRoot;
-    private FXOMObject oldRoot;
-    private Job trimJob;
-    
+
     public SetDocumentRootJob(FXOMObject newRoot, EditorController editorController) {
         super(editorController);
-        
+
         assert editorController.getFxomDocument() != null;
         assert (newRoot == null) || (newRoot.getFxomDocument() == editorController.getFxomDocument());
-        
+
         this.newRoot = newRoot;
     }
 
     public FXOMObject getNewRoot() {
         return newRoot;
     }
-    
-    
-    /*
-     * Job
-     */
-    
+
     @Override
-    public boolean isExecutable() {
-        return newRoot != getEditorController().getFxomDocument().getFxomRoot();
+    protected List<Job> makeSubJobs() {
+        final List<Job> result = new ArrayList<>();
+        if (newRoot != getEditorController().getFxomDocument().getFxomRoot()) {
+            // Before setting newRoot as the root of the fxom document,
+            // we must remove its static properties.
+            // We create a RemovePropertyJob for each existing static property
+            if (newRoot != null) {
+                result.add(new PrunePropertiesJob(newRoot, null, getEditorController()));
+            }
+            result.add(new SetFxomRootJob(newRoot, getEditorController()));
+        }
+        return result;
     }
 
     @Override
-    public void execute() {
-        assert oldRoot == null;
-        assert trimJob == null;
-        
-        // Saves the current root
-        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
-        oldRoot = fxomDocument.getFxomRoot();
-        
-        // Before setting newRoot as the root of the fxom document,
-        // we must remove its static properties.
-        // We create a RemovePropertyJob for each existing static property
-        if (newRoot != null) {
-            trimJob = new PrunePropertiesJob(newRoot, null, getEditorController());
-            if (trimJob.isExecutable() == false) {
-                trimJob = null;
-            }
-        }
-        
-        // Now execute jobs
-        final Selection selection = getEditorController().getSelection();
-        selection.beginUpdate();
-        fxomDocument.beginUpdate();
-        if (trimJob != null) {
-            trimJob.execute();
-        }
-        fxomDocument.setFxomRoot(newRoot);
-        fxomDocument.endUpdate();
-        selection.endUpdate();
+    protected String makeDescription() {
+        // Not expected to reach the user
+        return getClass().getSimpleName();
     }
 
     @Override
-    public void undo() {
-        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
-        final Selection selection = getEditorController().getSelection();
-        
-        assert fxomDocument.getFxomRoot() == newRoot;
-        
-        selection.beginUpdate();
-        fxomDocument.beginUpdate();
-        fxomDocument.setFxomRoot(oldRoot);
-        if (trimJob != null) {
-            trimJob.undo();
-        }
-        fxomDocument.endUpdate();
-        selection.endUpdate();
-        
-        assert fxomDocument.getFxomRoot() == oldRoot;
-    }
-
-    @Override
-    public void redo() {
-        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
-        final Selection selection = getEditorController().getSelection();
-        
-        assert fxomDocument.getFxomRoot() == oldRoot;
-        
-        selection.beginUpdate();
-        fxomDocument.beginUpdate();
-        if (trimJob != null) {
-            trimJob.redo();
-        }
-        fxomDocument.setFxomRoot(newRoot);
-        fxomDocument.endUpdate();
-        selection.endUpdate();
-        
-        assert fxomDocument.getFxomRoot() == newRoot;
-    }
-
-    @Override
-    public String getDescription() {
-        // Not expected to reach the user
-        return getClass().getSimpleName();
+    protected AbstractSelectionGroup getNewSelectionGroup() {
+        List<FXOMObject> newObjects = new ArrayList<>();
+        newObjects.add(newRoot);
+        return new ObjectSelectionGroup(newObjects, newRoot, null);
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/atomic/SetFxomRootJob.java	Fri Aug 29 08:58:44 2014 +0200
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.oracle.javafx.scenebuilder.kit.editor.job.atomic;
+
+import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
+import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
+import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
+import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
+
+/**
+ */
+public class SetFxomRootJob extends Job {
+
+    private final FXOMObject newRoot;
+    private FXOMObject oldRoot;
+
+    public SetFxomRootJob(FXOMObject newRoot, EditorController editorController) {
+        super(editorController);
+
+        assert editorController.getFxomDocument() != null;
+        assert (newRoot == null) || (newRoot.getFxomDocument() == editorController.getFxomDocument());
+
+        this.newRoot = newRoot;
+    }
+
+    /*
+     * Job
+     */
+    @Override
+    public boolean isExecutable() {
+        return newRoot != getEditorController().getFxomDocument().getFxomRoot();
+    }
+
+    @Override
+    public void execute() {
+        assert oldRoot == null;
+
+        // Saves the current root
+        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
+        oldRoot = fxomDocument.getFxomRoot();
+
+        fxomDocument.beginUpdate();
+        fxomDocument.setFxomRoot(newRoot);
+        fxomDocument.endUpdate();
+    }
+
+    @Override
+    public void undo() {
+        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
+        assert fxomDocument.getFxomRoot() == newRoot;
+
+        fxomDocument.beginUpdate();
+        fxomDocument.setFxomRoot(oldRoot);
+        fxomDocument.endUpdate();
+
+        assert fxomDocument.getFxomRoot() == oldRoot;
+    }
+
+    @Override
+    public void redo() {
+        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
+        assert fxomDocument.getFxomRoot() == oldRoot;
+
+        fxomDocument.beginUpdate();
+        fxomDocument.setFxomRoot(newRoot);
+        fxomDocument.endUpdate();
+
+        assert fxomDocument.getFxomRoot() == newRoot;
+    }
+
+    @Override
+    public String getDescription() {
+        // Not expected to reach the user
+        return getClass().getSimpleName();
+    }
+}