[kune-commits] r1025 - in trunk: . src/main/java/org/ourproject/kune/app/client src/main/java/org/ourproject/kune/platf/client/services src/main/java/org/ourproject/kune/workspace/client src/main/java/org/ourproject/kune/workspace/client/hello

vjrj vjrj at ourproject.org
Sun Jan 4 00:30:41 CET 2009


Author: vjrj
Date: 2009-01-04 00:30:40 +0100 (Sun, 04 Jan 2009)
New Revision: 1025

Added:
   trunk/src/main/java/org/ourproject/kune/workspace/client/hello/
   trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java
Modified:
   trunk/TODO
   trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneRegistryModule.java
Log:
Incomplete - task 186: HelloWorldModule 
http://ourproject.org/tracker/?group_id=407&func=detail&atid=139&aid=186

Modified: trunk/TODO
===================================================================
--- trunk/TODO	2009-01-03 18:45:49 UTC (rev 1024)
+++ trunk/TODO	2009-01-03 23:30:40 UTC (rev 1025)
@@ -62,6 +62,7 @@
 * MIND-TERM
 ** vjrj <v> Login: Follow incubation recomendations. See:
    http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/e8e14b16e57b266f
+** TODO <d> Inform to translators when original content changes
 ** TODO <v> extjs i18n
    http://extjs.com/deploy/ext/examples/locale/dutch-form.js
    http://groups.google.com/group/gwt-ext/browse_thread/thread/ebec316effea2b80/bfbdadc7239b4e5d?lnk=gst&q=i18n#bfbdadc7239b4e5d

Modified: trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java	2009-01-03 18:45:49 UTC (rev 1024)
+++ trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java	2009-01-03 23:30:40 UTC (rev 1025)
@@ -29,6 +29,7 @@
 import org.ourproject.kune.platf.client.services.KuneRegistryModule;
 import org.ourproject.kune.platf.client.services.KuneWorkspaceModule;
 import org.ourproject.kune.wiki.client.WikiClientModule;
+import org.ourproject.kune.workspace.client.hello.HelloWorldModule;
 
 import com.allen_sauer.gwt.log.client.Log;
 import com.calclab.emiteuimodule.client.EmiteUIModule;
@@ -66,5 +67,8 @@
         Suco.install(new KuneCoreModule(), new KuneRegistryModule(), new KunePlatformModule(),
                 new KuneWorkspaceModule(), new EmiteUIModule(), new DocumentClientModule(), new BlogClientModule(),
                 new WikiClientModule(), new GalleryClientModule(), new ChatClientModule(), new KuneModule());
+
+        // We install our HelloWorldModule
+        Suco.install(new HelloWorldModule());
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java	2009-01-03 18:45:49 UTC (rev 1024)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java	2009-01-03 23:30:40 UTC (rev 1025)
@@ -19,11 +19,8 @@
  */package org.ourproject.kune.platf.client.services;
 
 import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
 import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
 import org.ourproject.kune.platf.client.actions.ContextActionRegistry;
-import org.ourproject.kune.platf.client.actions.GroupActionRegistry;
-import org.ourproject.kune.platf.client.actions.UserActionRegistry;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionBuddiesSummaryToolbar;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionBuddiesSummaryToolbarPresenter;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionCntCtxToolbarPanel;
@@ -91,6 +88,7 @@
 import org.ourproject.kune.workspace.client.editor.insert.linklocal.TextEditorInsertLinkLocal;
 import org.ourproject.kune.workspace.client.editor.insert.linklocal.TextEditorInsertLinkLocalPanel;
 import org.ourproject.kune.workspace.client.editor.insert.linklocal.TextEditorInsertLinkLocalPresenter;
+import org.ourproject.kune.workspace.client.hello.HelloWorldModule.HelloWorld;
 import org.ourproject.kune.workspace.client.i18n.I18nTranslator;
 import org.ourproject.kune.workspace.client.i18n.I18nTranslatorPanel;
 import org.ourproject.kune.workspace.client.i18n.I18nTranslatorPresenter;
@@ -462,34 +460,6 @@
             }
         });
 
-        register(Singleton.class, new Factory<ContextActionRegistry>(ContextActionRegistry.class) {
-            @Override
-            public ContextActionRegistry create() {
-                return new ContextActionRegistry();
-            }
-        });
-
-        register(Singleton.class, new Factory<ContentActionRegistry>(ContentActionRegistry.class) {
-            @Override
-            public ContentActionRegistry create() {
-                return new ContentActionRegistry();
-            }
-        });
-
-        register(Singleton.class, new Factory<GroupActionRegistry>(GroupActionRegistry.class) {
-            @Override
-            public GroupActionRegistry create() {
-                return new GroupActionRegistry();
-            }
-        });
-
-        register(Singleton.class, new Factory<UserActionRegistry>(UserActionRegistry.class) {
-            @Override
-            public UserActionRegistry create() {
-                return new UserActionRegistry();
-            }
-        });
-
         register(NoDecoration.class, new Factory<ActionContentToolbar>(ActionContentToolbar.class) {
             @Override
             public ActionContentToolbar create() {
@@ -600,5 +570,6 @@
         $(ApplicationComponentGroup.class).createAll();
         $(ToolGroup.class).createAll();
         $(Application.class).start();
+        $(HelloWorld.class);
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneRegistryModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneRegistryModule.java	2009-01-03 18:45:49 UTC (rev 1024)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneRegistryModule.java	2009-01-03 23:30:40 UTC (rev 1025)
@@ -1,6 +1,10 @@
 package org.ourproject.kune.platf.client.services;
 
+import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
 import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
+import org.ourproject.kune.platf.client.actions.ContextActionRegistry;
+import org.ourproject.kune.platf.client.actions.GroupActionRegistry;
+import org.ourproject.kune.platf.client.actions.UserActionRegistry;
 import org.ourproject.kune.platf.client.registry.AclEditableRegistry;
 import org.ourproject.kune.platf.client.registry.AuthorableRegistry;
 import org.ourproject.kune.platf.client.registry.CanBeHomepageRegistry;
@@ -158,6 +162,32 @@
             }
         });
 
+        register(Singleton.class, new Factory<ContextActionRegistry>(ContextActionRegistry.class) {
+            @Override
+            public ContextActionRegistry create() {
+                return new ContextActionRegistry();
+            }
+        });
+
+        register(Singleton.class, new Factory<ContentActionRegistry>(ContentActionRegistry.class) {
+            @Override
+            public ContentActionRegistry create() {
+                return new ContentActionRegistry();
+            }
+        });
+
+        register(Singleton.class, new Factory<GroupActionRegistry>(GroupActionRegistry.class) {
+            @Override
+            public GroupActionRegistry create() {
+                return new GroupActionRegistry();
+            }
+        });
+
+        register(Singleton.class, new Factory<UserActionRegistry>(UserActionRegistry.class) {
+            @Override
+            public UserActionRegistry create() {
+                return new UserActionRegistry();
+            }
+        });
     }
-
 }

Added: trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java	2009-01-03 18:45:49 UTC (rev 1024)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java	2009-01-03 23:30:40 UTC (rev 1025)
@@ -0,0 +1,191 @@
+package org.ourproject.kune.workspace.client.hello;
+
+import org.ourproject.kune.platf.client.View;
+import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
+import org.ourproject.kune.platf.client.actions.UserActionRegistry;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.UserSimpleDTO;
+import org.ourproject.kune.platf.client.services.I18nTranslationService;
+import org.ourproject.kune.platf.client.services.I18nTranslationServiceMocked;
+import org.ourproject.kune.workspace.client.site.Site;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.ioc.decorator.Singleton;
+import com.calclab.suco.client.ioc.module.AbstractModule;
+import com.calclab.suco.client.ioc.module.Factory;
+import com.calclab.suco.client.listener.Listener;
+import com.google.gwt.user.client.ui.Label;
+
+/**
+ * This module is installed via Suco.install(new HelloWorldModule()). In kune we
+ * do this normally in KuneEntryPoint.onModuleLoadCont()
+ */
+public class HelloWorldModule extends AbstractModule {
+
+    /**
+     * 
+     * In this Module we include the HelloWorld/View/Panel/Presenter classes
+     * only for commodity reasons. They reflect our use of the MVN pattern.
+     * 
+     * Normally we generate a snippet for this pattern using:
+     * 
+     * <pre>
+     * script / generateBasicUIElements.sh
+     * </pre>
+     * 
+     * HelloWorld is the external interface of this four classes. We use it if
+     * other classes have to interact with HelloWorld.
+     * 
+     */
+    public interface HelloWorld {
+    }
+
+    /**
+     * In the Panel classes we do all the UI stuff (with none business logic)
+     * 
+     */
+    public class HelloWorldPanel implements HelloWorldView {
+        private final I18nTranslationService i18n;
+
+        public HelloWorldPanel(final HelloWorldPresenter presenter, final WorkspaceSkeleton ws,
+                final I18nTranslationService i18n) {
+            this.i18n = i18n;
+            /** We can directly insert something in the workspace skeleton **/
+            ws.getEntityWorkspace().getSubTitle().add(new Label(i18n.t("Hello world!")));
+        }
+
+        public void showMessage() {
+            /** i18n use with parameters **/
+            Site.info(i18n.t("Hello [%s]!", "world"));
+        }
+    }
+
+    public class HelloWorldPresenter implements HelloWorld {
+
+        private HelloWorldView view;
+        private final Provider<UserActionRegistry> actionRegistry;
+        private final I18nTranslationService i18n;
+
+        public HelloWorldPresenter(I18nTranslationService i18n, Provider<UserActionRegistry> actionRegistry) {
+            this.i18n = i18n;
+            this.actionRegistry = actionRegistry;
+            createActions();
+        }
+
+        public View getView() {
+            return view;
+        }
+
+        public void init(HelloWorldView view) {
+            this.view = view;
+        }
+
+        /**
+         * We add an menu action to users menus (like the buddies in Buddies
+         * Summary)
+         **/
+        private void createActions() {
+            ActionToolbarMenuDescriptor<UserSimpleDTO> helloWorldBuddiesAction = new ActionToolbarMenuDescriptor<UserSimpleDTO>(
+                    AccessRolDTO.Viewer, ActionToolbarPosition.bottombar, new Listener<UserSimpleDTO>() {
+                        public void onEvent(UserSimpleDTO parameter) {
+                            // We clicked:
+                            view.showMessage();
+                        }
+                    });
+            // AccessRolDTO.Viewer: any user can see this option and without be
+            // authenticated:
+            helloWorldBuddiesAction.setMustBeAuthenticated(false);
+            // We add a submenu in Options menu:
+            helloWorldBuddiesAction.setParentMenuTitle(i18n.t("Options"));
+            helloWorldBuddiesAction.setParentSubMenuTitle(i18n.t("Hello world submenu"));
+            helloWorldBuddiesAction.setTextDescription(i18n.t("Hello world menu item"));
+            helloWorldBuddiesAction.setIconUrl("images/info.gif");
+
+            // Lazy creation of objects:
+            //
+            // Using Provider<Class> we do lazy instantiation. When we call
+            // actionRegistry.get() it creates the instance if is not created
+            // yet.
+            actionRegistry.get().addAction(helloWorldBuddiesAction);
+        }
+    }
+
+    /**
+     * We use this interface between the Presenter and the Panel. In tests it
+     * cat be easy mocked.
+     */
+    public interface HelloWorldView extends View {
+        void showMessage();
+    }
+
+    /**
+     * This is the real part of the module (when we do how and when to create
+     * the above classes, how many instances (singleton, one per use), and so
+     * on).
+     * 
+     * The above clases are included here only for commodity purposes
+     */
+    @Override
+    protected void onInstall() {
+        /**
+         * 
+         * Now we register how to create instances of HelloWorld, and later we
+         * can use then from other objects.
+         * 
+         * If we want to use HelloWorld from other modules we can use:
+         * $(HelloWorld.class) to get a instance or $$(HelloWorld.class) to get
+         * a provider of the instance. This is useful when we want to do lazy
+         * creation of objects: http://en.wikipedia.org/wiki/Lazy_initialization
+         * 
+         **/
+        register(Singleton.class, new Factory<HelloWorld>(HelloWorld.class) {
+            /**
+             * Singleton.class decorator: creates only one instance of
+             * HelloWorld.class and when we use it the provider returns always
+             * the same instance.
+             * 
+             * NoDecorator.class: Use it if we need to create a new instance of
+             * HelloWorld.class in every use.
+             */
+            @Override
+            public HelloWorld create() {
+                final HelloWorldPresenter presenter = new HelloWorldPresenter($(I18nTranslationServiceMocked.class),
+                        $$(UserActionRegistry.class));
+                final HelloWorldPanel panel = new HelloWorldPanel(presenter, $(WorkspaceSkeleton.class),
+                        $(I18nTranslationServiceMocked.class));
+                presenter.init(panel);
+                return presenter;
+                // now Suco knows how to create HelloWorld instance when we use
+                // $(HelloWorld.class) or $$(HelloWorld.class in a module.
+            }
+
+            /**
+             * Optionally: we can do something after the instance is created
+             **/
+            @Override
+            public void onAfterCreated(HelloWorld instance) {
+                Log.info("HelloWorld singleton instance created");
+            }
+        });
+
+        /**
+         * we use a mock for i18n in this sample because we don't really want to
+         * translate this module messages. Normally we use:
+         * I18nTranslationService.class instead of the mock
+         **/
+        register(Singleton.class, new Factory<I18nTranslationServiceMocked>(I18nTranslationServiceMocked.class) {
+            @Override
+            public I18nTranslationServiceMocked create() {
+                return new I18nTranslationServiceMocked();
+            }
+        });
+
+        // And because nobody use this module, we get the class (to force the
+        // creation of the
+        // Helloworld instance):
+        // $(HelloWorld.class);
+    }
+}
\ No newline at end of file




More information about the kune-commits mailing list