blob: ecd3f368f9e222a62ae731da47c2ef8b5409cbcf [file] [log] [blame]
/*
* Copyright 2002,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.jelly.demos;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import org.apache.commons.jelly.JellyContext;
import org.apache.commons.jelly.XMLOutput;
/**
* A sample Swing program that demonstrates the use of Jelly as a templating mechanism
*
* @author Otto von Wachter
*/
public class HomepageBuilder extends JPanel {
JTextField nameField;
JTextField urlField;
JTextField addField;
JTextField colorField;
JComboBox templateList;
JList interestList;
DefaultListModel listModel;
public HomepageBuilder() {
System.out.println("Starting Homepage Builder");
JPanel leftPanel = new JPanel();
leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
leftPanel.add(new JLabel("Name:"));
nameField= new JTextField("James Bond");
leftPanel.add(nameField);
leftPanel.add(new JLabel("Favorite Color:"));
colorField = new JTextField("#007007");
leftPanel.add(colorField);
leftPanel.add(new JLabel("Picture URL:"));
urlField = new JTextField("http://www.ianfleming.org/007news/images3/c2002_pierce1.jpg");
leftPanel.add(urlField);
leftPanel.add(new JLabel("Choose template:"));
templateList = new JComboBox(new String[] {"template1.jelly","template2.jelly"});
leftPanel.add(templateList);
// JPanel rightPanel = new JPanel();
// rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
leftPanel.add(new JLabel("Add a Hobby:"));
addField = new JTextField();
leftPanel.add(addField);
JButton addButton = new JButton("Add >>>");
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
listModel.addElement(addField.getText());
}
});
leftPanel.add(addButton);
listModel = new DefaultListModel();
listModel.addElement("Killing bad guys");
listModel.addElement("Wrecking cars");
listModel.addElement("Eating jelly");
interestList = new JList(listModel);
JButton submit = new JButton("Build and preview your page!");
submit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buildPage(templateList.getSelectedItem().toString(),new JellyContext());
showPage();
}
});
// Layout the demo
setLayout(new BorderLayout());
add(submit, BorderLayout.SOUTH);
add(leftPanel, BorderLayout.WEST);
add(new JScrollPane(interestList), BorderLayout.EAST);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}
public void buildPage(String template, JellyContext ctx) {
// try {
//
// Embedded embedded = new Embedded();
// embedded.setOutputStream(new FileOutputStream("out.html"));
// //embedded.setVariable("some-var","some-object");
//
// embedded.setScript("file:///anoncvs/jakarta-commons-sandbox/jelly/sample.jelly");
// //or one can do.
// //embedded.setScript(scriptAsInputStream);
//
// boolean bStatus=embedded.execute();
// if(!bStatus) //if error
// {
// System.out.println(embedded.getErrorMsg());
// }
//
// } catch (Exception e) {
// e.printStackTrace();
// }
try {
OutputStream output = new FileOutputStream("demopage.html");
JellyContext context = new JellyContext();
context.setVariable("name",nameField.getText());
context.setVariable("background",colorField.getText());
context.setVariable("url",urlField.getText());
Vector v = new Vector();
Enumeration items = listModel.elements();
while (items.hasMoreElements()) {
v.add(items.nextElement());
}
context.setVariable("hobbies", v);
XMLOutput xmlOutput = XMLOutput.createXMLOutput(output);
context.runScript( resolveURL("src/test/org/apache/commons/jelly/demos/"+template), xmlOutput );
xmlOutput.flush();
System.out.println("Finished merging template");
} catch (Exception e) {
e.printStackTrace();
}
}
void showPage() {
//open new window
JFrame frame = new JFrame("Your Homepage");
//add html pane
try {
URL url = resolveURL("demopage.html");
JEditorPane htmlPane = new JEditorPane(url);
htmlPane.setEditable(false);
frame.setContentPane(new JScrollPane(htmlPane));
} catch(Exception ioe) {
System.err.println("Error displaying page");
}
frame.pack();
frame.setSize(500,500);
frame.setVisible(true);
}
/***
* @return the URL for the relative file name or absolute URL
*/
protected URL resolveURL(String name) throws MalformedURLException {
File file = new File(name);
if (file.exists()) {
return file.toURL();
}
return new URL(name);
}
public static void main(String s[]) {
JFrame frame = new JFrame("Homepage Builder");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
frame.setContentPane(new HomepageBuilder());
frame.pack();
frame.setVisible(true);
}
}