From: Marc Englund Date: Wed, 15 Oct 2008 12:40:45 +0000 (+0000) Subject: More Sampler. X-Git-Tag: 6.7.0.beta1~3992 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=dbf8f3ea0814aaaf714ac3cf3d604442770b8a74;p=vaadin-framework.git More Sampler. svn changeset:5636/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/demo/sampler/APIResource.java b/src/com/itmill/toolkit/demo/sampler/APIResource.java new file mode 100644 index 0000000000..b360c6d947 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/APIResource.java @@ -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; + } +} diff --git a/src/com/itmill/toolkit/demo/sampler/Feature.java b/src/com/itmill/toolkit/demo/sampler/Feature.java index 8772c0afd9..d2be3a0310 100644 --- a/src/com/itmill/toolkit/demo/sampler/Feature.java +++ b/src/com/itmill/toolkit/demo/sampler/Feature.java @@ -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 diff --git a/src/com/itmill/toolkit/demo/sampler/FeatureView.java b/src/com/itmill/toolkit/demo/sampler/FeatureView.java index 58e3f5aa9b..b8287c590d 100644 --- a/src/com/itmill/toolkit/demo/sampler/FeatureView.java +++ b/src/com/itmill/toolkit/demo/sampler/FeatureView.java @@ -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 index 0000000000..b50bdd91b9 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/NamedExternalResource.java @@ -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; + } + +} diff --git a/src/com/itmill/toolkit/demo/sampler/SamplerApplication.java b/src/com/itmill/toolkit/demo/sampler/SamplerApplication.java index c8f624b996..c63869f226 100644 --- a/src/com/itmill/toolkit/demo/sampler/SamplerApplication.java +++ b/src/com/itmill/toolkit/demo/sampler/SamplerApplication.java @@ -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; + } + } } diff --git a/src/com/itmill/toolkit/demo/sampler/features/DummyFeature.java b/src/com/itmill/toolkit/demo/sampler/features/DummyFeature.java index 60136709b1..a753346e79 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/DummyFeature.java +++ b/src/com/itmill/toolkit/demo/sampler/features/DummyFeature.java @@ -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 index 0000000000..13a8b4d1ed --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/DummyFeature2.java @@ -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 index 0000000000..6b3094d758 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/DummyFeatureExample.txt @@ -0,0 +1 @@ +/home/marc/Projects/Toolkit5/src/com/itmill/toolkit/demo/sampler/features/DummyFeatureExample.java \ No newline at end of file