org.apache.commons.jelly.demos.HomepageBuilder.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.commons.jelly.demos.HomepageBuilder.java

Source

/*
 * 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);
    }
}