--- /dev/null
+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;
+ }
+}
-/**
- *
- */
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 {
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();
}
return getName();
}
+ public String getPathName() {
+ return getClass().getSimpleName();
+ }
+
}
\ No newline at end of file
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");
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");
+ }
+
}
+
}
--- /dev/null
+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;
+ }
+
+}
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;
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(), //
}),
}),
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(), //
}),
}),
// 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;
}
/**
* 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.
*
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;
+ }
+
}
}
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 {
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")
+ //
+ };
+ }
+
}
--- /dev/null
+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();
+
+ }
+
+}
--- /dev/null
+/home/marc/Projects/Toolkit5/src/com/itmill/toolkit/demo/sampler/features/DummyFeatureExample.java
\ No newline at end of file