import java.net.URI;
import java.net.URL;
import java.text.MessageFormat;
import javax.swing.GroupLayout;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jdesktop.application.Resource;
import org.jdesktop.application.SingleFrameApplication;

/*
 * Torutk Learning Project for Swing Application Framework.
 *
 * $Id: FieldInjectApplication.java 105 2007-10-08 21:53:30Z toru $
 */

public class FieldInjectApplication extends SingleFrameApplication {

    @Override protected void startup() {
        getContext().getResourceMap().injectFields(this);
        JComponent component = createMainPanel();
        show(component);
    }

    private JComponent createMainPanel() {
        JPanel panel = new JPanel();
        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        JLabel booleanLabel = new JLabel();
        booleanLabel.setName("booleanLabel");
        JTextField booleanField = new JTextField(String.valueOf(booleanValue));
        JLabel byteLabel = new JLabel();
        byteLabel.setName("byteLabel");
        JTextField byteField = new JTextField(String.valueOf(byteValue));
        JLabel charLabel = new JLabel();
        charLabel.setName("charLabel");
        //JTextField charField = new JTextField(String.valueOf(charValue));
        JTextField charField = new JTextField("Don't support");
        JLabel shortLabel = new JLabel();
        shortLabel.setName("shortLabel");
        JTextField shortField = new JTextField(String.valueOf(shortValue));
        JLabel intLabel = new JLabel();
        intLabel.setName("intLabel");
        JTextField intField = new JTextField(String.valueOf(intValue));
        JLabel longLabel = new JLabel();
        longLabel.setName("longLabel");
        JTextField longField = new JTextField(String.valueOf(longValue));
        JLabel floatLabel = new JLabel();
        floatLabel.setName("floatLabel");
        JTextField floatField = new JTextField(String.valueOf(floatValue));
        JLabel doubleLabel = new JLabel();
        doubleLabel.setName("doubleLabel");
        JTextField doubleField = new JTextField(String.valueOf(doubleValue));
        JLabel stringLabel = new JLabel();
        stringLabel.setName("stringLabel");
        JTextField stringField = new JTextField(String.valueOf(stringValue));
        JLabel messageFormatLabel = new JLabel();
        messageFormatLabel.setName("messageFormatLabel");
        Object[] messageArgs = { "Thomas", "James" };
        JTextField messageFormatField = new JTextField(
            messageFormatValue.format(messageArgs)
        );
        JLabel urlLabel = new JLabel();
        urlLabel.setName("urlLabel");
        JTextField urlField = new JTextField(String.valueOf(urlValue));
        JLabel uriLabel = new JLabel();
        uriLabel.setName("uriLabel");
        JTextField uriField = new JTextField(String.valueOf(uriValue));

        GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
        hGroup.addGroup(layout.createParallelGroup()
                        .addComponent(booleanLabel)
                        .addComponent(byteLabel)
                        .addComponent(charLabel)
                        .addComponent(shortLabel)
                        .addComponent(intLabel)
                        .addComponent(longLabel)
                        .addComponent(floatLabel)
                        .addComponent(doubleLabel)
                        .addComponent(stringLabel)
                        .addComponent(messageFormatLabel)
                        .addComponent(urlLabel)
                        .addComponent(uriLabel)
        );
        hGroup.addGroup(layout.createParallelGroup()
                        .addComponent(booleanField)
                        .addComponent(byteField)
                        .addComponent(charField)
                        .addComponent(shortField)
                        .addComponent(intField)
                        .addComponent(longField)
                        .addComponent(floatField)
                        .addComponent(doubleField)
                        .addComponent(stringField)
                        .addComponent(messageFormatField)
                        .addComponent(urlField)
                        .addComponent(uriField)
        );
        layout.setHorizontalGroup(hGroup);

        GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(booleanLabel)
            .addComponent(booleanField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(byteLabel)
            .addComponent(byteField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(charLabel)
            .addComponent(charField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(shortLabel)
            .addComponent(shortField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(intLabel)
            .addComponent(intField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(longLabel)
            .addComponent(longField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(floatLabel)
            .addComponent(floatField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(doubleLabel)
            .addComponent(doubleField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(stringLabel)
            .addComponent(stringField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(messageFormatLabel)
            .addComponent(messageFormatField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(urlLabel)
            .addComponent(urlField)
        );
        vGroup.addGroup(
            layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(uriLabel)
            .addComponent(uriField)
        );
        layout.setVerticalGroup(vGroup);

        return panel;
    }

    public static void main(final String[] args) {
        launch(FieldInjectApplication.class, args);
    }

    @Resource private boolean booleanValue;
    @Resource private byte byteValue;
    //    @Resource private char charValue;
    @Resource private short shortValue;
    @Resource private int intValue;
    @Resource private long longValue;
    @Resource private float floatValue;
    @Resource private double doubleValue;
    @Resource private String stringValue;
    @Resource private MessageFormat messageFormatValue;
    @Resource private URL urlValue;
    @Resource private URI uriValue;
}

