From 9bae52d59c74680fd3f0015aebed8ede90bc6768 Mon Sep 17 00:00:00 2001
From: Raphael Girardot <raphael.girardot@synchrotron-soleil.fr>
Date: Wed, 9 Oct 2013 13:29:51 +0000
Subject: [PATCH] some code refactoring

---
 .../docking/view/AbstractViewFactory.java      | 18 ++++++++++++++++++
 .../fr/soleil/docking/view/IViewFactory.java   | 12 ++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/dockingcore/src/main/java/fr/soleil/docking/view/AbstractViewFactory.java b/dockingcore/src/main/java/fr/soleil/docking/view/AbstractViewFactory.java
index 63c8488..bcfbb06 100644
--- a/dockingcore/src/main/java/fr/soleil/docking/view/AbstractViewFactory.java
+++ b/dockingcore/src/main/java/fr/soleil/docking/view/AbstractViewFactory.java
@@ -14,6 +14,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.prefs.Preferences;
 
 import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.JComponent;
 
 import fr.soleil.docking.action.ViewAction;
 
@@ -111,6 +113,22 @@ public abstract class AbstractViewFactory implements IViewFactory {
         return toRemove;
     }
 
+    @Override
+    public IView addView(String title, Icon icon, Component component, Object id) {
+        return addView(title, icon, component, id, null);
+    }
+
+    @Override
+    public IView addView(String title, Icon icon, Component component, Object id, JComponent dockingArea) {
+        IView view = createView(title, icon, component, id);
+        updateViewForDockingArea(view, dockingArea);
+        return addView(view);
+    }
+
+    protected abstract IView createView(String title, Icon icon, Component component, Object id);
+
+    protected abstract void updateViewForDockingArea(IView view, JComponent dockingArea);
+
     @Override
     public boolean removeView(IView view) {
         boolean result;
diff --git a/dockingcore/src/main/java/fr/soleil/docking/view/IViewFactory.java b/dockingcore/src/main/java/fr/soleil/docking/view/IViewFactory.java
index cbd6037..b3d59f7 100644
--- a/dockingcore/src/main/java/fr/soleil/docking/view/IViewFactory.java
+++ b/dockingcore/src/main/java/fr/soleil/docking/view/IViewFactory.java
@@ -78,6 +78,18 @@ public interface IViewFactory {
 
     public IView addView(IView view);
 
+    /**
+     * Creates an {@link IView} for a given {@link Component}, adds it in the list of views, and
+     * tries to put it in the docking area
+     * 
+     * @param title The {@link IView} title
+     * @param icon The {@link IView} {@link Icon}
+     * @param component The concerned {@link Component}
+     * @param id The {@link IView} id
+     * @return The {@link IView} if it was successfully created and added, <code>null</code> otherwise
+     */
+    public IView addView(String title, Icon icon, Component component, Object id);
+
     /**
      * Creates an {@link IView} for a given {@link Component}, adds it in the list of views, and
      * tries to put it in a docking area
-- 
GitLab