]> source.dussan.org Git - vaadin-framework.git/commitdiff
More Sampler.
authorMarc Englund <marc.englund@itmill.com>
Wed, 15 Oct 2008 12:40:45 +0000 (12:40 +0000)
committerMarc Englund <marc.englund@itmill.com>
Wed, 15 Oct 2008 12:40:45 +0000 (12:40 +0000)
svn changeset:5636/svn branch:trunk

src/com/itmill/toolkit/demo/sampler/APIResource.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/sampler/Feature.java
src/com/itmill/toolkit/demo/sampler/FeatureView.java
src/com/itmill/toolkit/demo/sampler/NamedExternalResource.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/sampler/SamplerApplication.java
src/com/itmill/toolkit/demo/sampler/features/DummyFeature.java
src/com/itmill/toolkit/demo/sampler/features/DummyFeature2.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/sampler/features/DummyFeatureExample.txt [new symlink]

diff --git a/src/com/itmill/toolkit/demo/sampler/APIResource.java b/src/com/itmill/toolkit/demo/sampler/APIResource.java
new file mode 100644 (file)
index 0000000..b360c6d
--- /dev/null
@@ -0,0 +1,31 @@
+package com.itmill.toolkit.demo.sampler;
+
+import com.itmill.toolkit.terminal.ExternalResource;
+
+public class APIResource extends ExternalResource {
+
+    private static final String BASE_URL = "http://toolkit.itmill.com/demo/doc/api/";
+
+    private String name;
+
+    public APIResource(Class clazz) {
+        this(BASE_URL, clazz);
+    }
+
+    public APIResource(String baseUrl, Class clazz) {
+        super(getJavadocUrl(baseUrl, clazz));
+        name = clazz.getSimpleName();
+    }
+
+    private static String getJavadocUrl(String baseUrl, Class clazz) {
+        if (!baseUrl.endsWith("/")) {
+            baseUrl += "/";
+        }
+        String path = clazz.getName().replaceAll("\\.", "/");
+        return baseUrl + path + ".html";
+    }
+
+    public String getName() {
+        return name;
+    }
+}
index 8772c0afd9fe08dec0913041da192bc6dbf4cd36..d2be3a0310170840552f399b30e3ac1695bdebcf 100644 (file)
@@ -1,13 +1,10 @@
-/**
- * 
- */
 package com.itmill.toolkit.demo.sampler;
 
+import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.Reader;
 
-import com.google.gwt.i18n.client.Messages.Example;
+import com.itmill.toolkit.ui.Component;
 
 abstract public class Feature {
 
@@ -15,53 +12,70 @@ abstract public class Feature {
     public static final Object PROPERTY_NAME = "Name";
     public static final Object PROPERTY_DESCRIPTION = "Description";
 
-    protected Example example = null;
-
-    public String getPathName() {
-        return getClass().getSimpleName();
-    }
-
-    /** Get the name of the feature. Override if needed. */
+    /**
+     * Gets the name of this feature. Defaults to class simplename, override if
+     * needed.
+     * 
+     * @return
+     */
     public String getName() {
         return getClass().getSimpleName();
     }
 
+    /**
+     * Gets the description for this feature. May contain HTML.
+     * 
+     * @return
+     */
     abstract public String getDescription();
 
+    abstract public NamedExternalResource[] getRelatedResources();
+
+    abstract public APIResource[] getRelatedAPI();
+
+    abstract public Class[] getRelatedFeatures();
+
+    /**
+     * 
+     * @return
+     */
     public String getIconName() {
-        String[] cn = this.getClass().getName().split("\\.");
-        String icon = cn[cn.length - 1] + ".gif";
+        String icon = getClass().getSimpleName() + ".gif";
         return icon;
     }
 
     /** Get the example instance. Override if instantiation needs parameters. */
-    public Example getExample() {
-        if (example == null) {
-            String className = this.getClass().getName() + "Example";
-            try {
-                Class<?> classObject = getClass().getClassLoader().loadClass(
-                        className);
-                example = (Example) classObject.newInstance();
-            } catch (ClassNotFoundException e) {
-                return null;
-            } catch (InstantiationException e) {
-                return null;
-            } catch (IllegalAccessException e) {
-                return null;
-            }
+    public Component getExample() {
+
+        String className = this.getClass().getName() + "Example";
+        try {
+            Class<?> classObject = getClass().getClassLoader().loadClass(
+                    className);
+            return (Component) classObject.newInstance();
+        } catch (ClassNotFoundException e) {
+            return null;
+        } catch (InstantiationException e) {
+            return null;
+        } catch (IllegalAccessException e) {
+            return null;
         }
-        return example;
+
     }
 
-    public Reader getSource() {
-        String className = this.getClass().getName() + "Example";
-        String javaFileName = className.replace(".", "/");
-        InputStream is = getClass().getClassLoader().getResourceAsStream(
-                javaFileName);
-        return new InputStreamReader(is);
+    public BufferedReader getSource() {
+
+        // TODO get's .txt for now, change to .java!
+        try {
+            InputStream is = getClass().getResourceAsStream(
+                    getClass().getSimpleName() + "Example.txt");
+            return new BufferedReader(new InputStreamReader(is));
+        } catch (Exception e) {
+            System.err.println("Could not read source for " + getPathName());
+        }
+        return null;
     }
 
-    public Reader getSourceHTML() {
+    public BufferedReader getSourceHTML() {
         return getSource();
     }
 
@@ -69,4 +83,8 @@ abstract public class Feature {
         return getName();
     }
 
+    public String getPathName() {
+        return getClass().getSimpleName();
+    }
+
 }
\ No newline at end of file
index 58e3f5aa9beccc1c92c8ec37bc289ce62b114b61..b8287c590db432163cecf170674008427f05e79c 100644 (file)
@@ -1,17 +1,53 @@
 package com.itmill.toolkit.demo.sampler;
 
+import java.io.BufferedReader;
+
+import com.itmill.toolkit.terminal.ExternalResource;
+import com.itmill.toolkit.ui.Button;
 import com.itmill.toolkit.ui.CustomLayout;
 import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Link;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Button.ClickEvent;
 
 public class FeatureView extends CustomLayout {
 
+    OrderedLayout controls;
+
+    Label sourceCode;
+
     public FeatureView() {
         super("sampler/featureview");
+
+        controls = new OrderedLayout();
+
+        controls.addComponent(new Label("Live example"));
+        Button b = new Button("Show java source", new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                // toggle source code
+                sourceCode.setVisible(!sourceCode.isVisible());
+                event.getButton().setCaption(
+                        (sourceCode.isVisible() ? "Hide java source"
+                                : "Show java source"));
+
+            }
+        });
+        b.setStyleName(Button.STYLE_LINK);
+        controls.addComponent(b);
+
+        sourceCode = new Label();
+        sourceCode.setVisible(false);
+        sourceCode.setContentMode(Label.CONTENT_PREFORMATTED);
+        controls.addComponent(sourceCode);
     }
 
     public void setFeature(Feature feature) {
         removeAllComponents();
 
+        addComponent(controls, "feature-controls");
+
+        addComponent(feature.getExample(), "feature-example");
+
         Label l = new Label(feature.getName());
         addComponent(l, "feature-name");
 
@@ -19,5 +55,55 @@ public class FeatureView extends CustomLayout {
         l.setContentMode(Label.CONTENT_XHTML);
         addComponent(l, "feature-desc");
 
+        StringBuffer src = new StringBuffer();
+        BufferedReader srcbr = feature.getSource();
+        try {
+            for (String line = srcbr.readLine(); null != line; line = srcbr
+                    .readLine()) {
+                src.append(line);
+                src.append("\n");
+            }
+        } catch (Exception e) {
+            src = new StringBuffer("Sorry, no source available right now.");
+        }
+        sourceCode.setValue(src.toString());
+
+        NamedExternalResource[] resources = feature.getRelatedResources();
+        if (resources != null) {
+            OrderedLayout res = new OrderedLayout();
+            res.setCaption("Resources");
+            for (NamedExternalResource r : resources) {
+                res.addComponent(new Link(r.getName(), r));
+            }
+            addComponent(res, "feature-res");
+        }
+
+        APIResource[] apis = feature.getRelatedAPI();
+        if (apis != null) {
+            OrderedLayout api = new OrderedLayout();
+            api.setCaption("Related Samples");
+            addComponent(api, "feature-api");
+            for (APIResource r : apis) {
+                api.addComponent(new Link(r.getName(), r));
+            }
+        }
+
+        Class[] features = feature.getRelatedFeatures();
+        if (features != null) {
+            OrderedLayout rel = new OrderedLayout();
+            rel.setCaption("Related Samples");
+            for (Class c : features) {
+                Feature f = SamplerApplication.getFeatureFor(c);
+                if (f != null) {
+                    String path = SamplerApplication.getPathFor(f);
+                    rel.addComponent(new Link(f.getName(),
+                            new ExternalResource(getApplication().getURL()
+                                    + path)));
+                }
+            }
+            addComponent(rel, "feature-rel");
+        }
+
     }
+
 }
diff --git a/src/com/itmill/toolkit/demo/sampler/NamedExternalResource.java b/src/com/itmill/toolkit/demo/sampler/NamedExternalResource.java
new file mode 100644 (file)
index 0000000..b50bdd9
--- /dev/null
@@ -0,0 +1,18 @@
+package com.itmill.toolkit.demo.sampler;
+
+import com.itmill.toolkit.terminal.ExternalResource;
+
+public class NamedExternalResource extends ExternalResource {
+
+    private String name;
+
+    public NamedExternalResource(String name, String sourceURL) {
+        super(sourceURL);
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+}
index c8f624b996dff6666007defbc79085f4ba921e06..c63869f22601d8035f43b43a76295797d58ce569 100644 (file)
@@ -14,6 +14,7 @@ import com.itmill.toolkit.data.util.HierarchicalContainer;
 import com.itmill.toolkit.data.util.ObjectProperty;
 import com.itmill.toolkit.demo.sampler.ModeSwitch.ModeSwitchEvent;
 import com.itmill.toolkit.demo.sampler.features.DummyFeature;
+import com.itmill.toolkit.demo.sampler.features.DummyFeature2;
 import com.itmill.toolkit.terminal.ClassResource;
 import com.itmill.toolkit.terminal.DownloadStream;
 import com.itmill.toolkit.terminal.ExternalResource;
@@ -42,18 +43,18 @@ public class SamplerApplication extends Application {
                     new FeatureSet("Patterns", new Feature[] {
                     // Patterns
                             new DummyFeature(), //
-                            new DummyFeature(), //
+                            new DummyFeature2(), //
 
                             new FeatureSet("c", new Feature[] {
                             // some group of patterns
                                     new DummyFeature(), //
-                                    new DummyFeature(), //
+                                    new DummyFeature2(), //
                             }),
 
                             new FeatureSet("d", new Feature[] {
                             // another group of patterns
                                     new DummyFeature(), //
-                                    new DummyFeature(), //
+                                    new DummyFeature2(), //
                             }),
 
                     }),
@@ -63,20 +64,22 @@ public class SamplerApplication extends Application {
                             new FeatureSet("ΓΆΓΆ", new Feature[] {
                             // some group of patterns
                                     new DummyFeature(), //
-                                    new DummyFeature(), //
-                            }), new DummyFeature(), //
+                                    new DummyFeature2(), //
+                            }),
+
                             new DummyFeature(), //
+                            new DummyFeature2(), //
 
                             new FeatureSet("c", new Feature[] {
                             // some group of patterns
                                     new DummyFeature(), //
-                                    new DummyFeature(), //
+                                    new DummyFeature2(), //
                             }),
 
                             new FeatureSet("d", new Feature[] {
                             // another group of patterns
                                     new DummyFeature(), //
-                                    new DummyFeature(), //
+                                    new DummyFeature2(), //
                             }),
 
                     }),
@@ -94,17 +97,21 @@ public class SamplerApplication extends Application {
 
     // Supports multiple browser windows
     public Window getWindow(String name) {
-        Window w = super.getWindow(name);
-        if (w == null) {
-            w = new SamplerWindow();
-            w.setName(name);
-            addWindow(w);
-            // secondary windows will support normal reload if this is
-            // enabled, but the url gets ugly:
-            // w.open(new ExternalResource(w.getURL()));
+        if (features.getFeatureByPath(name) != null) {
+            return null;
+        } else {
+            Window w = super.getWindow(name);
+            if (w == null) {
+                w = new SamplerWindow();
+                w.setName(name);
+                addWindow(w);
+                // secondary windows will support normal reload if this is
+                // enabled, but the url gets ugly:
+                // w.open(new ExternalResource(w.getURL()));
 
+            }
+            return w;
         }
-        return w;
     }
 
     /**
@@ -114,18 +121,29 @@ public class SamplerApplication extends Application {
      *            the Feature whose path to get, of null if not found
      * @return the path of the Feature
      */
-    String getPathFor(Feature f) {
+    public static String getPathFor(Feature f) {
         if (allFeatures.containsId(f)) {
             String path = f.getPathName();
             f = (Feature) allFeatures.getParent(f);
             while (f != null) {
                 path = f.getPathName() + "/" + path;
+                f = (Feature) allFeatures.getParent(f);
             }
             return path;
         }
         return null;
     }
 
+    public static Feature getFeatureFor(Class clazz) {
+        for (Iterator it = allFeatures.getItemIds().iterator(); it.hasNext();) {
+            Feature f = (Feature) it.next();
+            if (f.getClass() == clazz) {
+                return f;
+            }
+        }
+        return null;
+    }
+
     /**
      * The main window for Sampler, contains the full application UI.
      * 
@@ -569,6 +587,24 @@ public class SamplerApplication extends Application {
             return icon;
         }
 
+        @Override
+        public APIResource[] getRelatedAPI() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Class[] getRelatedFeatures() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public NamedExternalResource[] getRelatedResources() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
     }
 
 }
index 60136709b122852e8732947f60e909a92f0a2633..a753346e7903bea1a381741aaee87592e0150253 100644 (file)
@@ -1,6 +1,10 @@
 package com.itmill.toolkit.demo.sampler.features;
 
+import com.itmill.toolkit.demo.sampler.APIResource;
 import com.itmill.toolkit.demo.sampler.Feature;
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.Panel;
 
 public class DummyFeature extends Feature {
 
@@ -12,4 +16,24 @@ public class DummyFeature extends Feature {
         return "A description";
     }
 
+    @Override
+    public APIResource[] getRelatedAPI() {
+        return new APIResource[] { new APIResource(Panel.class),
+                new APIResource(Button.class) };
+    }
+
+    @Override
+    public Class[] getRelatedFeatures() {
+        return new Class[] { DummyFeature2.class };
+    }
+
+    @Override
+    public NamedExternalResource[] getRelatedResources() {
+        return new NamedExternalResource[] {
+        //
+        new NamedExternalResource("CSS", "../ITMILL/themes/example/styles.css")
+        //
+        };
+    }
+
 }
diff --git a/src/com/itmill/toolkit/demo/sampler/features/DummyFeature2.java b/src/com/itmill/toolkit/demo/sampler/features/DummyFeature2.java
new file mode 100644 (file)
index 0000000..13a8b4d
--- /dev/null
@@ -0,0 +1,43 @@
+package com.itmill.toolkit.demo.sampler.features;
+
+import com.itmill.toolkit.demo.sampler.APIResource;
+import com.itmill.toolkit.demo.sampler.Feature;
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;
+import com.itmill.toolkit.ui.Component;
+
+public class DummyFeature2 extends Feature {
+
+    public String getName() {
+        return "A second placeholder feature";
+    }
+
+    public String getDescription() {
+        return "A second description";
+    }
+
+    @Override
+    public APIResource[] getRelatedAPI() {
+        return null;
+    }
+
+    @Override
+    public Class[] getRelatedFeatures() {
+        return new Class[] { DummyFeature.class };
+    }
+
+    @Override
+    public NamedExternalResource[] getRelatedResources() {
+        return new NamedExternalResource[] {
+        //
+        new NamedExternalResource("CSS", "../ITMILL/themes/example/styles.css")
+        //
+        };
+    }
+
+    public Component getExample() {
+
+        return new DummyFeatureExample();
+
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/sampler/features/DummyFeatureExample.txt b/src/com/itmill/toolkit/demo/sampler/features/DummyFeatureExample.txt
new file mode 120000 (symlink)
index 0000000..6b3094d
--- /dev/null
@@ -0,0 +1 @@
+/home/marc/Projects/Toolkit5/src/com/itmill/toolkit/demo/sampler/features/DummyFeatureExample.java
\ No newline at end of file