Demo showing cooperation of Spring and Lookup
authorJaroslav Tulach <jtulach@netbeans.org>
Sun, 26 Apr 2009 21:18:14 +0200
changeset 576ba2d4fa4aa87
parent 575 456d3b07cdf3
child 577 01bd68f5251f
Demo showing cooperation of Spring and Lookup
.hgignore
anagramdemo/anagrambase/pom.xml
anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/About.form
anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/About.java
anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/Anagrams.form
anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/Anagrams.java
anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/Main.java
anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/Scrambler.java
anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/UI.java
anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/WordLibrary.java
anagramdemo/pom.xml
anagramdemo/simplescrambler/pom.xml
anagramdemo/simplescrambler/src/main/java/org/apidesign/demo/anagramwithspringandlookup/simplescrambler/SimpleScrambler.java
anagramdemo/staticwordlibrary/pom.xml
anagramdemo/staticwordlibrary/src/main/java/org/apidesign/demo/anagramwithspringandlookup/staticwordlibrary/StaticWordLibrary.java
pom.xml
     1.1 --- a/.hgignore	Sun Apr 26 13:49:06 2009 +0200
     1.2 +++ b/.hgignore	Sun Apr 26 21:18:14 2009 +0200
     1.3 @@ -1,4 +1,4 @@
     1.4 -lookup/target/.*
     1.5 +.*/target/.*
     1.6  .*~
     1.7  
     1.8  .*\.orig$
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/anagramdemo/anagrambase/pom.xml	Sun Apr 26 21:18:14 2009 +0200
     2.3 @@ -0,0 +1,89 @@
     2.4 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2.5 +  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     2.6 +  <modelVersion>4.0.0</modelVersion>
     2.7 +  <groupId>org.apidesign</groupId>
     2.8 +  <packaging>jar</packaging>
     2.9 +  <version>1.0</version>
    2.10 +  <url>http://maven.apache.org</url>
    2.11 +  <repositories>
    2.12 +      <repository>
    2.13 +          <id>netbeans</id>
    2.14 +          <url>http://bits.netbeans.org/maven2/</url>
    2.15 +      </repository>
    2.16 +  </repositories>
    2.17 +    <build>
    2.18 +        <plugins>
    2.19 +            <plugin>
    2.20 +                <groupId>org.apache.maven.plugins</groupId>
    2.21 +                <artifactId>maven-compiler-plugin</artifactId>
    2.22 +                <version>2.0.2</version>
    2.23 +                <configuration>
    2.24 +                    <source>1.5</source>
    2.25 +                    <target>1.5</target>
    2.26 +                </configuration>
    2.27 +            </plugin>
    2.28 +            <plugin>
    2.29 +                <groupId>org.apache.maven.plugins</groupId>
    2.30 +                <artifactId>maven-surefire-plugin</artifactId>
    2.31 +                <version>2.4.2</version>
    2.32 +                <configuration>
    2.33 +                    <includes>
    2.34 +                        <include>**/*Test.java</include>
    2.35 +                    </includes>
    2.36 +                </configuration>
    2.37 +            </plugin>
    2.38 +            <plugin>
    2.39 +                <groupId>org.apache.maven.plugins</groupId>
    2.40 +                <artifactId>maven-javadoc-plugin</artifactId>
    2.41 +                <version>2.5</version>
    2.42 +                <configuration>
    2.43 +                    <excludePackageNames>org.netbeans.modules.spring.lookup</excludePackageNames>
    2.44 +                </configuration>
    2.45 +            </plugin>
    2.46 +        </plugins>
    2.47 +    </build>
    2.48 +    <dependencies>
    2.49 +        <dependency>
    2.50 +            <groupId>org.apidesign</groupId>
    2.51 +            <artifactId>lookup</artifactId>
    2.52 +            <version>7.22.0</version>
    2.53 +        </dependency>
    2.54 +        <dependency>
    2.55 +            <groupId>org.netbeans.api</groupId>
    2.56 +            <artifactId>org-netbeans-modules-nbjunit</artifactId>
    2.57 +            <version>RELEASE65</version>
    2.58 +            <scope>test</scope>
    2.59 +        </dependency>
    2.60 +        <dependency>
    2.61 +            <groupId>org.netbeans.modules</groupId>
    2.62 +            <artifactId>org-netbeans-insane</artifactId>
    2.63 +            <version>RELEASE65</version>
    2.64 +            <scope>test</scope>
    2.65 +        </dependency>
    2.66 +        <dependency>
    2.67 +            <groupId>org.springframework</groupId>
    2.68 +            <artifactId>spring-core</artifactId>
    2.69 +            <version>2.5.6</version>
    2.70 +        </dependency>
    2.71 +        <dependency>
    2.72 +            <groupId>org.springframework</groupId>
    2.73 +            <artifactId>spring-beans</artifactId>
    2.74 +            <version>2.5.6</version>
    2.75 +        </dependency>
    2.76 +        <dependency>
    2.77 +            <groupId>org.springframework</groupId>
    2.78 +            <artifactId>spring-context</artifactId>
    2.79 +            <version>2.5.6</version>
    2.80 +        </dependency>
    2.81 +        <dependency>
    2.82 +            <groupId>org.apidesign</groupId>
    2.83 +            <artifactId>spring-lookup</artifactId>
    2.84 +            <version>1.2</version>
    2.85 +        </dependency>
    2.86 +    </dependencies>
    2.87 +    <name>Anagram Game with Spring and Lookup</name>
    2.88 +    <description>This project provides an example of combination
    2.89 +of the Spring's dependency injection and Lookup
    2.90 +META-INF/services registration.</description>
    2.91 +    <artifactId>anagram-spring-lookup</artifactId>
    2.92 +</project>
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/About.form	Sun Apr 26 21:18:14 2009 +0200
     3.3 @@ -0,0 +1,78 @@
     3.4 +<?xml version="1.0" encoding="UTF-8" ?>
     3.5 +
     3.6 +<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
     3.7 +  <Properties>
     3.8 +    <Property name="defaultCloseOperation" type="int" value="2"/>
     3.9 +    <Property name="title" type="java.lang.String" value="About Anagrams"/>
    3.10 +  </Properties>
    3.11 +  <SyntheticProperties>
    3.12 +    <SyntheticProperty name="formSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-25,0,0,1,53"/>
    3.13 +    <SyntheticProperty name="formSizePolicy" type="int" value="0"/>
    3.14 +    <SyntheticProperty name="generateSize" type="boolean" value="true"/>
    3.15 +    <SyntheticProperty name="generateCenter" type="boolean" value="true"/>
    3.16 +  </SyntheticProperties>
    3.17 +  <Events>
    3.18 +    <EventHandler event="windowClosing" listener="java.awt.event.WindowListener" parameters="java.awt.event.WindowEvent" handler="exitForm"/>
    3.19 +  </Events>
    3.20 +  <AuxValues>
    3.21 +    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
    3.22 +    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
    3.23 +    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
    3.24 +    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
    3.25 +    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
    3.26 +    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
    3.27 +    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
    3.28 +    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
    3.29 +  </AuxValues>
    3.30 +
    3.31 +  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
    3.32 +  <SubComponents>
    3.33 +    <Container class="javax.swing.JPanel" name="jPanel1">
    3.34 +      <Properties>
    3.35 +        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
    3.36 +          <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
    3.37 +            <EmptyBorder bottom="12" left="11" right="12" top="11"/>
    3.38 +          </Border>
    3.39 +        </Property>
    3.40 +      </Properties>
    3.41 +      <Constraints>
    3.42 +        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
    3.43 +          <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
    3.44 +        </Constraint>
    3.45 +      </Constraints>
    3.46 +
    3.47 +      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
    3.48 +      <SubComponents>
    3.49 +        <Component class="javax.swing.JTextArea" name="jTextArea1">
    3.50 +          <Properties>
    3.51 +            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
    3.52 +              <Color blue="cc" green="cc" id="Panel.background" palette="3" red="cc" type="palette"/>
    3.53 +            </Property>
    3.54 +            <Property name="editable" type="boolean" value="false"/>
    3.55 +            <Property name="lineWrap" type="boolean" value="true"/>
    3.56 +            <Property name="text" type="java.lang.String" value="Anagrams&#xa;&#xa;Copyright (c) 2003  Irritable Enterprises, Inc."/>
    3.57 +            <Property name="wrapStyleWord" type="boolean" value="true"/>
    3.58 +          </Properties>
    3.59 +          <Constraints>
    3.60 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
    3.61 +              <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="12" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
    3.62 +            </Constraint>
    3.63 +          </Constraints>
    3.64 +        </Component>
    3.65 +        <Component class="javax.swing.JButton" name="jButton1">
    3.66 +          <Properties>
    3.67 +            <Property name="text" type="java.lang.String" value="Close"/>
    3.68 +          </Properties>
    3.69 +          <Events>
    3.70 +            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
    3.71 +          </Events>
    3.72 +          <Constraints>
    3.73 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
    3.74 +              <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="0.0" weightY="0.0"/>
    3.75 +            </Constraint>
    3.76 +          </Constraints>
    3.77 +        </Component>
    3.78 +      </SubComponents>
    3.79 +    </Container>
    3.80 +  </SubComponents>
    3.81 +</Form>
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/About.java	Sun Apr 26 21:18:14 2009 +0200
     4.3 @@ -0,0 +1,87 @@
     4.4 +package org.apidesign.demo.anagramwithspringandlookup;
     4.5 +
     4.6 +/**
     4.7 + *
     4.8 + * @author  Dirk Ruiz
     4.9 + */
    4.10 +public class About extends javax.swing.JFrame {
    4.11 +    
    4.12 +    /** Creates new form About */
    4.13 +    public About() {
    4.14 +        initComponents();
    4.15 +    }
    4.16 +    
    4.17 +    /** This method is called from within the constructor to
    4.18 +     * initialize the form.
    4.19 +     * WARNING: Do NOT modify this code. The content of this method is
    4.20 +     * always regenerated by the Form Editor.
    4.21 +     */
    4.22 +    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    4.23 +    private void initComponents() {
    4.24 +        java.awt.GridBagConstraints gridBagConstraints;
    4.25 +
    4.26 +        jPanel1 = new javax.swing.JPanel();
    4.27 +        jTextArea1 = new javax.swing.JTextArea();
    4.28 +        jButton1 = new javax.swing.JButton();
    4.29 +
    4.30 +        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    4.31 +        setTitle("About Anagrams");
    4.32 +        addWindowListener(new java.awt.event.WindowAdapter() {
    4.33 +            public void windowClosing(java.awt.event.WindowEvent evt) {
    4.34 +                exitForm(evt);
    4.35 +            }
    4.36 +        });
    4.37 +        getContentPane().setLayout(new java.awt.GridBagLayout());
    4.38 +
    4.39 +        jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(11, 11, 12, 12));
    4.40 +        jPanel1.setLayout(new java.awt.GridBagLayout());
    4.41 +
    4.42 +        jTextArea1.setBackground(javax.swing.UIManager.getDefaults().getColor("Panel.background"));
    4.43 +        jTextArea1.setEditable(false);
    4.44 +        jTextArea1.setLineWrap(true);
    4.45 +        jTextArea1.setText("Anagrams\n\nCopyright (c) 2003  Irritable Enterprises, Inc.");
    4.46 +        jTextArea1.setWrapStyleWord(true);
    4.47 +        gridBagConstraints = new java.awt.GridBagConstraints();
    4.48 +        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    4.49 +        gridBagConstraints.weightx = 1.0;
    4.50 +        gridBagConstraints.weighty = 1.0;
    4.51 +        gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 0);
    4.52 +        jPanel1.add(jTextArea1, gridBagConstraints);
    4.53 +
    4.54 +        jButton1.setText("Close");
    4.55 +        jButton1.addActionListener(new java.awt.event.ActionListener() {
    4.56 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
    4.57 +                jButton1ActionPerformed(evt);
    4.58 +            }
    4.59 +        });
    4.60 +        gridBagConstraints = new java.awt.GridBagConstraints();
    4.61 +        gridBagConstraints.gridx = 0;
    4.62 +        gridBagConstraints.gridy = 1;
    4.63 +        jPanel1.add(jButton1, gridBagConstraints);
    4.64 +
    4.65 +        gridBagConstraints = new java.awt.GridBagConstraints();
    4.66 +        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    4.67 +        gridBagConstraints.weightx = 1.0;
    4.68 +        gridBagConstraints.weighty = 1.0;
    4.69 +        getContentPane().add(jPanel1, gridBagConstraints);
    4.70 +
    4.71 +        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    4.72 +        setBounds((screenSize.width-309)/2, (screenSize.height-231)/2, 309, 231);
    4.73 +    }// </editor-fold>//GEN-END:initComponents
    4.74 +
    4.75 +    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
    4.76 +        this.hide();
    4.77 +    }//GEN-LAST:event_jButton1ActionPerformed
    4.78 +    
    4.79 +    /** Exit the Application */
    4.80 +    private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
    4.81 +        //System.exit(0);
    4.82 +    }//GEN-LAST:event_exitForm
    4.83 +    
    4.84 +    // Variables declaration - do not modify//GEN-BEGIN:variables
    4.85 +    private javax.swing.JButton jButton1;
    4.86 +    private javax.swing.JPanel jPanel1;
    4.87 +    private javax.swing.JTextArea jTextArea1;
    4.88 +    // End of variables declaration//GEN-END:variables
    4.89 +    
    4.90 +}
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/Anagrams.form	Sun Apr 26 21:18:14 2009 +0200
     5.3 @@ -0,0 +1,163 @@
     5.4 +<?xml version="1.0" encoding="UTF-8" ?>
     5.5 +
     5.6 +<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
     5.7 +  <NonVisualComponents>
     5.8 +    <Menu class="javax.swing.JMenuBar" name="mainMenu">
     5.9 +      <SubComponents>
    5.10 +        <Menu class="javax.swing.JMenu" name="File">
    5.11 +          <Properties>
    5.12 +            <Property name="text" type="java.lang.String" value="File"/>
    5.13 +          </Properties>
    5.14 +          <SubComponents>
    5.15 +            <MenuItem class="javax.swing.JMenuItem" name="jMenuItem1">
    5.16 +              <Properties>
    5.17 +                <Property name="text" type="java.lang.String" value="About"/>
    5.18 +                <Property name="toolTipText" type="java.lang.String" value="About"/>
    5.19 +              </Properties>
    5.20 +              <Events>
    5.21 +                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jMenuItem1ActionPerformed"/>
    5.22 +              </Events>
    5.23 +            </MenuItem>
    5.24 +            <MenuItem class="javax.swing.JMenuItem" name="jMenuItem2">
    5.25 +              <Properties>
    5.26 +                <Property name="text" type="java.lang.String" value="Exit"/>
    5.27 +                <Property name="toolTipText" type="java.lang.String" value="Quit Team, Quit!"/>
    5.28 +              </Properties>
    5.29 +              <Events>
    5.30 +                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jMenuItem2ActionPerformed"/>
    5.31 +              </Events>
    5.32 +            </MenuItem>
    5.33 +          </SubComponents>
    5.34 +        </Menu>
    5.35 +      </SubComponents>
    5.36 +    </Menu>
    5.37 +  </NonVisualComponents>
    5.38 +  <Properties>
    5.39 +    <Property name="title" type="java.lang.String" value="Anagrams"/>
    5.40 +  </Properties>
    5.41 +  <SyntheticProperties>
    5.42 +    <SyntheticProperty name="menuBar" type="java.lang.String" value="mainMenu"/>
    5.43 +    <SyntheticProperty name="formSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-6,0,0,1,-112"/>
    5.44 +    <SyntheticProperty name="formSizePolicy" type="int" value="0"/>
    5.45 +    <SyntheticProperty name="generateSize" type="boolean" value="true"/>
    5.46 +    <SyntheticProperty name="generateCenter" type="boolean" value="true"/>
    5.47 +  </SyntheticProperties>
    5.48 +  <Events>
    5.49 +    <EventHandler event="windowClosing" listener="java.awt.event.WindowListener" parameters="java.awt.event.WindowEvent" handler="exitForm"/>
    5.50 +  </Events>
    5.51 +  <AuxValues>
    5.52 +    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
    5.53 +    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
    5.54 +    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
    5.55 +    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
    5.56 +    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
    5.57 +    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
    5.58 +    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
    5.59 +    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
    5.60 +  </AuxValues>
    5.61 +
    5.62 +  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
    5.63 +  <SubComponents>
    5.64 +    <Container class="javax.swing.JPanel" name="mainPanel">
    5.65 +      <Properties>
    5.66 +        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
    5.67 +          <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
    5.68 +            <EmptyBorder bottom="12" left="11" right="12" top="11"/>
    5.69 +          </Border>
    5.70 +        </Property>
    5.71 +        <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
    5.72 +          <Dimension value="[297, 200]"/>
    5.73 +        </Property>
    5.74 +        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
    5.75 +          <Dimension value="[297, 200]"/>
    5.76 +        </Property>
    5.77 +      </Properties>
    5.78 +      <Constraints>
    5.79 +        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
    5.80 +          <BorderConstraints direction="Center"/>
    5.81 +        </Constraint>
    5.82 +      </Constraints>
    5.83 +
    5.84 +      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
    5.85 +      <SubComponents>
    5.86 +        <Component class="javax.swing.JLabel" name="scrambledLabel">
    5.87 +          <Properties>
    5.88 +            <Property name="text" type="java.lang.String" value="Scrambled Word:"/>
    5.89 +          </Properties>
    5.90 +          <Constraints>
    5.91 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
    5.92 +              <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="12" insetsLeft="12" insetsBottom="12" insetsRight="6" anchor="17" weightX="0.0" weightY="0.0"/>
    5.93 +            </Constraint>
    5.94 +          </Constraints>
    5.95 +        </Component>
    5.96 +        <Component class="javax.swing.JLabel" name="guessLabel">
    5.97 +          <Properties>
    5.98 +            <Property name="text" type="java.lang.String" value="Your Guess:"/>
    5.99 +          </Properties>
   5.100 +          <Constraints>
   5.101 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   5.102 +              <GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="12" insetsBottom="12" insetsRight="6" anchor="17" weightX="0.0" weightY="0.0"/>
   5.103 +            </Constraint>
   5.104 +          </Constraints>
   5.105 +        </Component>
   5.106 +        <Component class="javax.swing.JLabel" name="feedbackLabel">
   5.107 +          <Properties>
   5.108 +            <Property name="text" type="java.lang.String" value=" "/>
   5.109 +          </Properties>
   5.110 +          <Constraints>
   5.111 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   5.112 +              <GridBagConstraints gridX="1" gridY="2" gridWidth="2" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="6" insetsRight="6" anchor="10" weightX="1.0" weightY="0.0"/>
   5.113 +            </Constraint>
   5.114 +          </Constraints>
   5.115 +        </Component>
   5.116 +        <Component class="javax.swing.JButton" name="guessButton">
   5.117 +          <Properties>
   5.118 +            <Property name="mnemonic" type="int" value="71"/>
   5.119 +            <Property name="text" type="java.lang.String" value="Guess"/>
   5.120 +            <Property name="toolTipText" type="java.lang.String" value="Guess the scrambled word."/>
   5.121 +          </Properties>
   5.122 +          <Events>
   5.123 +            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="guessedWordActionPerformed"/>
   5.124 +          </Events>
   5.125 +          <Constraints>
   5.126 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   5.127 +              <GridBagConstraints gridX="2" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="11" insetsRight="6" anchor="13" weightX="0.0" weightY="0.0"/>
   5.128 +            </Constraint>
   5.129 +          </Constraints>
   5.130 +        </Component>
   5.131 +        <Component class="javax.swing.JTextField" name="scrambledWord">
   5.132 +          <Properties>
   5.133 +            <Property name="editable" type="boolean" value="false"/>
   5.134 +          </Properties>
   5.135 +          <Constraints>
   5.136 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   5.137 +              <GridBagConstraints gridX="-1" gridY="-1" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="12" insetsLeft="0" insetsBottom="12" insetsRight="11" anchor="10" weightX="1.0" weightY="0.0"/>
   5.138 +            </Constraint>
   5.139 +          </Constraints>
   5.140 +        </Component>
   5.141 +        <Component class="javax.swing.JTextField" name="guessedWord">
   5.142 +          <Constraints>
   5.143 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   5.144 +              <GridBagConstraints gridX="1" gridY="1" gridWidth="3" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="12" insetsRight="11" anchor="10" weightX="1.0" weightY="0.0"/>
   5.145 +            </Constraint>
   5.146 +          </Constraints>
   5.147 +        </Component>
   5.148 +        <Component class="javax.swing.JButton" name="nextTrial">
   5.149 +          <Properties>
   5.150 +            <Property name="mnemonic" type="int" value="78"/>
   5.151 +            <Property name="text" type="java.lang.String" value="New Word"/>
   5.152 +            <Property name="toolTipText" type="java.lang.String" value="Fetch a new word."/>
   5.153 +          </Properties>
   5.154 +          <Events>
   5.155 +            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="nextTrialActionPerformed"/>
   5.156 +          </Events>
   5.157 +          <Constraints>
   5.158 +            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
   5.159 +              <GridBagConstraints gridX="3" gridY="3" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="11" insetsRight="11" anchor="10" weightX="0.0" weightY="0.0"/>
   5.160 +            </Constraint>
   5.161 +          </Constraints>
   5.162 +        </Component>
   5.163 +      </SubComponents>
   5.164 +    </Container>
   5.165 +  </SubComponents>
   5.166 +</Form>
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/Anagrams.java	Sun Apr 26 21:18:14 2009 +0200
     6.3 @@ -0,0 +1,260 @@
     6.4 +package org.apidesign.demo.anagramwithspringandlookup;
     6.5 +
     6.6 +import org.springframework.beans.factory.annotation.Autowired;
     6.7 +
     6.8 +/** 
     6.9 + */
    6.10 +public class Anagrams extends javax.swing.JFrame implements UI {
    6.11 +    private WordLibrary wordLibrary;
    6.12 +    private Scrambler scrambler;
    6.13 +
    6.14 +    @Autowired
    6.15 +    public Anagrams(WordLibrary w, Scrambler s) {
    6.16 +        wordLibrary = w;
    6.17 +        scrambler = s;
    6.18 +    }
    6.19 +    
    6.20 +    private WordLibrary getWordLibrary() {
    6.21 +        return wordLibrary;
    6.22 +    }
    6.23 +    private Scrambler getScrambler() {
    6.24 +        return scrambler;
    6.25 +    }
    6.26 +    
    6.27 +    public void display() {
    6.28 +        initWord();
    6.29 +        setVisible(true);
    6.30 +    }
    6.31 +    int wordIdx = 0;
    6.32 +    String original;
    6.33 +    String scrambled;
    6.34 +    
    6.35 +    public Anagrams() {
    6.36 +        initComponents();        
    6.37 +        getRootPane().setDefaultButton(guessButton);
    6.38 +        
    6.39 +        String version = System.getProperty("anagram.version");
    6.40 +        if (version != null) {
    6.41 +            if (version.startsWith("app-")) {
    6.42 +                version = version.substring(4);
    6.43 +            }
    6.44 +            setTitle("Anagrams - " + version + " version");
    6.45 +        }
    6.46 +    }
    6.47 +    
    6.48 +    public final String getOriginalWord() {
    6.49 +        return original;
    6.50 +    }
    6.51 +    
    6.52 +    public final String getScrambledWord() {
    6.53 +        return scrambled;
    6.54 +    }
    6.55 +    
    6.56 +    /** This method is called from within the constructor to
    6.57 +     * initialize the form.
    6.58 +     * WARNING: Do NOT modify this code. The content of this method is
    6.59 +     * always regenerated by the Form Editor.
    6.60 +     */
    6.61 +    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    6.62 +    private void initComponents() {
    6.63 +        java.awt.GridBagConstraints gridBagConstraints;
    6.64 +
    6.65 +        mainPanel = new javax.swing.JPanel();
    6.66 +        scrambledLabel = new javax.swing.JLabel();
    6.67 +        guessLabel = new javax.swing.JLabel();
    6.68 +        feedbackLabel = new javax.swing.JLabel();
    6.69 +        guessButton = new javax.swing.JButton();
    6.70 +        scrambledWord = new javax.swing.JTextField();
    6.71 +        guessedWord = new javax.swing.JTextField();
    6.72 +        nextTrial = new javax.swing.JButton();
    6.73 +        mainMenu = new javax.swing.JMenuBar();
    6.74 +        File = new javax.swing.JMenu();
    6.75 +        jMenuItem1 = new javax.swing.JMenuItem();
    6.76 +        jMenuItem2 = new javax.swing.JMenuItem();
    6.77 +
    6.78 +        setTitle("Anagrams");
    6.79 +        addWindowListener(new java.awt.event.WindowAdapter() {
    6.80 +            public void windowClosing(java.awt.event.WindowEvent evt) {
    6.81 +                exitForm(evt);
    6.82 +            }
    6.83 +        });
    6.84 +
    6.85 +        mainPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(11, 11, 12, 12));
    6.86 +        mainPanel.setMinimumSize(new java.awt.Dimension(297, 200));
    6.87 +        mainPanel.setPreferredSize(new java.awt.Dimension(297, 200));
    6.88 +        mainPanel.setLayout(new java.awt.GridBagLayout());
    6.89 +
    6.90 +        scrambledLabel.setText("Scrambled Word:");
    6.91 +        gridBagConstraints = new java.awt.GridBagConstraints();
    6.92 +        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    6.93 +        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    6.94 +        gridBagConstraints.insets = new java.awt.Insets(12, 12, 12, 6);
    6.95 +        mainPanel.add(scrambledLabel, gridBagConstraints);
    6.96 +
    6.97 +        guessLabel.setText("Your Guess:");
    6.98 +        gridBagConstraints = new java.awt.GridBagConstraints();
    6.99 +        gridBagConstraints.gridx = 0;
   6.100 +        gridBagConstraints.gridy = 1;
   6.101 +        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
   6.102 +        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
   6.103 +        gridBagConstraints.insets = new java.awt.Insets(0, 12, 12, 6);
   6.104 +        mainPanel.add(guessLabel, gridBagConstraints);
   6.105 +
   6.106 +        feedbackLabel.setText(" ");
   6.107 +        gridBagConstraints = new java.awt.GridBagConstraints();
   6.108 +        gridBagConstraints.gridx = 1;
   6.109 +        gridBagConstraints.gridy = 2;
   6.110 +        gridBagConstraints.gridwidth = 2;
   6.111 +        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
   6.112 +        gridBagConstraints.weightx = 1.0;
   6.113 +        gridBagConstraints.insets = new java.awt.Insets(0, 0, 6, 6);
   6.114 +        mainPanel.add(feedbackLabel, gridBagConstraints);
   6.115 +
   6.116 +        guessButton.setMnemonic('G');
   6.117 +        guessButton.setText("Guess");
   6.118 +        guessButton.setToolTipText("Guess the scrambled word.");
   6.119 +        guessButton.addActionListener(new java.awt.event.ActionListener() {
   6.120 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   6.121 +                guessedWordActionPerformed(evt);
   6.122 +            }
   6.123 +        });
   6.124 +        gridBagConstraints = new java.awt.GridBagConstraints();
   6.125 +        gridBagConstraints.gridx = 2;
   6.126 +        gridBagConstraints.gridy = 3;
   6.127 +        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
   6.128 +        gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 6);
   6.129 +        mainPanel.add(guessButton, gridBagConstraints);
   6.130 +
   6.131 +        scrambledWord.setEditable(false);
   6.132 +        gridBagConstraints = new java.awt.GridBagConstraints();
   6.133 +        gridBagConstraints.gridwidth = 3;
   6.134 +        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
   6.135 +        gridBagConstraints.weightx = 1.0;
   6.136 +        gridBagConstraints.insets = new java.awt.Insets(12, 0, 12, 11);
   6.137 +        mainPanel.add(scrambledWord, gridBagConstraints);
   6.138 +        gridBagConstraints = new java.awt.GridBagConstraints();
   6.139 +        gridBagConstraints.gridx = 1;
   6.140 +        gridBagConstraints.gridy = 1;
   6.141 +        gridBagConstraints.gridwidth = 3;
   6.142 +        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
   6.143 +        gridBagConstraints.weightx = 1.0;
   6.144 +        gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 11);
   6.145 +        mainPanel.add(guessedWord, gridBagConstraints);
   6.146 +
   6.147 +        nextTrial.setMnemonic('N');
   6.148 +        nextTrial.setText("New Word");
   6.149 +        nextTrial.setToolTipText("Fetch a new word.");
   6.150 +        nextTrial.addActionListener(new java.awt.event.ActionListener() {
   6.151 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   6.152 +                nextTrialActionPerformed(evt);
   6.153 +            }
   6.154 +        });
   6.155 +        gridBagConstraints = new java.awt.GridBagConstraints();
   6.156 +        gridBagConstraints.gridx = 3;
   6.157 +        gridBagConstraints.gridy = 3;
   6.158 +        gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 11);
   6.159 +        mainPanel.add(nextTrial, gridBagConstraints);
   6.160 +
   6.161 +        getContentPane().add(mainPanel, java.awt.BorderLayout.CENTER);
   6.162 +
   6.163 +        File.setText("File");
   6.164 +
   6.165 +        jMenuItem1.setText("About");
   6.166 +        jMenuItem1.setToolTipText("About");
   6.167 +        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
   6.168 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   6.169 +                jMenuItem1ActionPerformed(evt);
   6.170 +            }
   6.171 +        });
   6.172 +        File.add(jMenuItem1);
   6.173 +
   6.174 +        jMenuItem2.setText("Exit");
   6.175 +        jMenuItem2.setToolTipText("Quit Team, Quit!");
   6.176 +        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
   6.177 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
   6.178 +                jMenuItem2ActionPerformed(evt);
   6.179 +            }
   6.180 +        });
   6.181 +        File.add(jMenuItem2);
   6.182 +
   6.183 +        mainMenu.add(File);
   6.184 +
   6.185 +        setJMenuBar(mainMenu);
   6.186 +
   6.187 +        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
   6.188 +        setBounds((screenSize.width-400)/2, (screenSize.height-250)/2, 400, 250);
   6.189 +    }// </editor-fold>//GEN-END:initComponents
   6.190 +
   6.191 +    private void nextTrialActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextTrialActionPerformed
   6.192 +        wordIdx++;
   6.193 +        
   6.194 +        feedbackLabel.setText(" ");
   6.195 +        initWord();
   6.196 +        guessedWord.setText("");
   6.197 +        getRootPane().setDefaultButton(guessButton);        
   6.198 +        
   6.199 +        guessedWord.requestFocus();
   6.200 +    }//GEN-LAST:event_nextTrialActionPerformed
   6.201 +
   6.202 +    protected final void initWord() {
   6.203 +        
   6.204 +        String[] words = getWordLibrary().getWords();
   6.205 +        int index = wordIdx % words.length;
   6.206 +        
   6.207 +        original = words[index];
   6.208 +        Scrambler scrambler = getScrambler();
   6.209 +        scrambled = scrambler != null ? scrambler.scramble(original) : original;
   6.210 +        
   6.211 +        scrambledWord.setText(scrambled);
   6.212 +    }
   6.213 +    
   6.214 +    private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
   6.215 +        System.exit(0);
   6.216 +    }//GEN-LAST:event_jMenuItem2ActionPerformed
   6.217 +
   6.218 +    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
   6.219 +        new About().show();
   6.220 +    }//GEN-LAST:event_jMenuItem1ActionPerformed
   6.221 +        
   6.222 +    private void guessedWordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guessedWordActionPerformed
   6.223 +        
   6.224 +        if(guessedWord.getText().equals(original)) {
   6.225 +            feedbackLabel.setText("Correct! Try a new word!");
   6.226 +            getRootPane().setDefaultButton(nextTrial);
   6.227 +        } else {
   6.228 +            feedbackLabel.setText("Incorrect! Try again!");
   6.229 +            guessedWord.setText("");
   6.230 +        }
   6.231 +        
   6.232 +        guessedWord.requestFocus();
   6.233 +    }//GEN-LAST:event_guessedWordActionPerformed
   6.234 +    
   6.235 +    /** Exit the Application */
   6.236 +    private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
   6.237 +        System.exit(0);
   6.238 +    }//GEN-LAST:event_exitForm
   6.239 +
   6.240 +    @Override
   6.241 +    public void setVisible(boolean v) {
   6.242 +        super.setVisible(v);
   6.243 +        if (v) {
   6.244 +            guessedWord.requestFocus();
   6.245 +        }
   6.246 +    }
   6.247 +    
   6.248 +    // Variables declaration - do not modify//GEN-BEGIN:variables
   6.249 +    private javax.swing.JMenu File;
   6.250 +    private javax.swing.JLabel feedbackLabel;
   6.251 +    private javax.swing.JButton guessButton;
   6.252 +    private javax.swing.JLabel guessLabel;
   6.253 +    private javax.swing.JTextField guessedWord;
   6.254 +    private javax.swing.JMenuItem jMenuItem1;
   6.255 +    private javax.swing.JMenuItem jMenuItem2;
   6.256 +    private javax.swing.JMenuBar mainMenu;
   6.257 +    private javax.swing.JPanel mainPanel;
   6.258 +    private javax.swing.JButton nextTrial;
   6.259 +    private javax.swing.JLabel scrambledLabel;
   6.260 +    private javax.swing.JTextField scrambledWord;
   6.261 +    // End of variables declaration//GEN-END:variables
   6.262 +    
   6.263 +}
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/Main.java	Sun Apr 26 21:18:14 2009 +0200
     7.3 @@ -0,0 +1,18 @@
     7.4 +package org.apidesign.demo.anagramwithspringandlookup;
     7.5 +
     7.6 +import org.apidesign.spring.SpringAndLookup;
     7.7 +import org.openide.util.Lookup;
     7.8 +import org.springframework.context.ApplicationContext;
     7.9 +import org.springframework.context.support.StaticApplicationContext;
    7.10 +
    7.11 +public final class Main {
    7.12 +    private Main() { }
    7.13 +
    7.14 +    public static void main(String[] args) throws Exception {
    7.15 +        ApplicationContext context = SpringAndLookup.create(Lookup.getDefault(), "global");
    7.16 +        StaticApplicationContext c = new StaticApplicationContext(context);
    7.17 +        c.registerPrototype("ui", Anagrams.class);
    7.18 +        UI ui = (UI)context.getBean("ui", UI.class);
    7.19 +        ui.display();
    7.20 +    }
    7.21 +}
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/Scrambler.java	Sun Apr 26 21:18:14 2009 +0200
     8.3 @@ -0,0 +1,6 @@
     8.4 +
     8.5 +package org.apidesign.demo.anagramwithspringandlookup;
     8.6 +
     8.7 +public interface Scrambler {
     8.8 +    public String scramble(String word);
     8.9 +}
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/UI.java	Sun Apr 26 21:18:14 2009 +0200
     9.3 @@ -0,0 +1,6 @@
     9.4 +
     9.5 +package org.apidesign.demo.anagramwithspringandlookup;
     9.6 +
     9.7 +public interface UI {
     9.8 +    public void display();
     9.9 +}
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/anagramdemo/anagrambase/src/main/java/org/apidesign/demo/anagramwithspringandlookup/WordLibrary.java	Sun Apr 26 21:18:14 2009 +0200
    10.3 @@ -0,0 +1,6 @@
    10.4 +
    10.5 +package org.apidesign.demo.anagramwithspringandlookup;
    10.6 +
    10.7 +public interface WordLibrary {
    10.8 +    public String[] getWords();
    10.9 +}
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/anagramdemo/pom.xml	Sun Apr 26 21:18:14 2009 +0200
    11.3 @@ -0,0 +1,17 @@
    11.4 +<?xml version="1.0" encoding="UTF-8"?>
    11.5 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0                       http://maven.apache.org/xsd/maven-4.0.0.xsd">
    11.6 +  <modelVersion>4.0.0</modelVersion>
    11.7 +  <packaging>pom</packaging>
    11.8 +  <groupId>org.apidesign</groupId>
    11.9 +  <artifactId>anagramdemo</artifactId>
   11.10 +  <version>2.0</version>
   11.11 +  <modules>
   11.12 +    <module>anagrambase</module>
   11.13 +    <module>staticwordlibrary</module>
   11.14 +    <module>simplescrambler</module>
   11.15 +  </modules>
   11.16 +    <name>Anagram Game via Lookup and Spring</name>
   11.17 +    <description>Shows benefits of cooperation of Spring
   11.18 +and Lookup by writing a modular application for Anagram Game.
   11.19 +</description>
   11.20 +</project>
   11.21 \ No newline at end of file
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/anagramdemo/simplescrambler/pom.xml	Sun Apr 26 21:18:14 2009 +0200
    12.3 @@ -0,0 +1,42 @@
    12.4 +<?xml version="1.0" encoding="UTF-8"?>
    12.5 +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    12.6 +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    12.7 +  <modelVersion>4.0.0</modelVersion>
    12.8 +  <parent>
    12.9 +    <artifactId>anagramdemo</artifactId>
   12.10 +    <groupId>org.apidesign</groupId>
   12.11 +    <version>2.0</version>
   12.12 +  </parent>
   12.13 +  <groupId>org.apidesign</groupId>
   12.14 +  <artifactId>simplescrambler</artifactId>
   12.15 +  <version>1.0</version>
   12.16 +  <url>http://maven.apache.org</url>
   12.17 +    <build>
   12.18 +        <plugins>
   12.19 +            <plugin>
   12.20 +                <groupId>org.apache.maven.plugins</groupId>
   12.21 +                <artifactId>maven-compiler-plugin</artifactId>
   12.22 +                <version>2.0.2</version>
   12.23 +                <configuration>
   12.24 +                    <source>1.5</source>
   12.25 +                    <target>1.5</target>
   12.26 +                </configuration>
   12.27 +            </plugin>
   12.28 +        </plugins>
   12.29 +    </build>
   12.30 +    <dependencies>
   12.31 +    <dependency>
   12.32 +      <groupId>junit</groupId>
   12.33 +      <artifactId>junit</artifactId>
   12.34 +      <version>3.8.1</version>
   12.35 +      <scope>test</scope>
   12.36 +    </dependency>
   12.37 +    <dependency>
   12.38 +      <groupId>org.apidesign</groupId>
   12.39 +      <artifactId>anagram-spring-lookup</artifactId>
   12.40 +      <version>1.0</version>
   12.41 +    </dependency>
   12.42 +  </dependencies>
   12.43 +    <name>Simple Scrambler</name>
   12.44 +    <description>Replaces two letters in provided words.</description>
   12.45 +</project>
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/anagramdemo/simplescrambler/src/main/java/org/apidesign/demo/anagramwithspringandlookup/simplescrambler/SimpleScrambler.java	Sun Apr 26 21:18:14 2009 +0200
    13.3 @@ -0,0 +1,30 @@
    13.4 +package org.apidesign.demo.anagramwithspringandlookup.simplescrambler;
    13.5 +
    13.6 +import java.util.Random;
    13.7 +import org.apidesign.demo.anagramwithspringandlookup.Scrambler;
    13.8 +import org.openide.util.lookup.ServiceProvider;
    13.9 +
   13.10 +@ServiceProvider(service=Scrambler.class)
   13.11 +public class SimpleScrambler implements Scrambler {
   13.12 +    private static final Random random = new Random();
   13.13 +
   13.14 +    public String scramble(String word) {
   13.15 +        for (;;) {
   13.16 +            int index1 = random.nextInt(word.length());
   13.17 +            int index2 = random.nextInt(word.length());
   13.18 +
   13.19 +            if (index1 == index2) {
   13.20 +                continue;
   13.21 +            }
   13.22 +
   13.23 +            char char1 = word.charAt(index1);
   13.24 +            char char2 = word.charAt(index2);
   13.25 +            
   13.26 +            StringBuilder sb = new StringBuilder(word);
   13.27 +            sb.setCharAt(index1, char2);
   13.28 +            sb.setCharAt(index2, char1);
   13.29 +            return sb.toString();
   13.30 +        }
   13.31 +    }
   13.32 +
   13.33 +}
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/anagramdemo/staticwordlibrary/pom.xml	Sun Apr 26 21:18:14 2009 +0200
    14.3 @@ -0,0 +1,50 @@
    14.4 +<?xml version="1.0" encoding="UTF-8"?>
    14.5 +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    14.6 +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    14.7 +  <modelVersion>4.0.0</modelVersion>
    14.8 +  <parent>
    14.9 +    <artifactId>all-lookup</artifactId>
   14.10 +    <groupId>org.apidesign</groupId>
   14.11 +    <version>2.0</version>
   14.12 +  </parent>
   14.13 +  <groupId>org.apidesign</groupId>
   14.14 +  <artifactId>anagramdemowordlibrary</artifactId>
   14.15 +  <version>1.0</version>
   14.16 +  <url>http://maven.apache.org</url>
   14.17 +  <dependencies>
   14.18 +    <dependency>
   14.19 +      <groupId>junit</groupId>
   14.20 +      <artifactId>junit</artifactId>
   14.21 +      <version>3.8.1</version>
   14.22 +      <scope>test</scope>
   14.23 +    </dependency>
   14.24 +    <dependency>
   14.25 +      <groupId>org.apidesign</groupId>
   14.26 +      <artifactId>lookup</artifactId>
   14.27 +      <version>7.22.0</version>
   14.28 +    </dependency>
   14.29 +      <dependency>
   14.30 +          <groupId>org.apidesign</groupId>
   14.31 +          <artifactId>anagram-spring-lookup</artifactId>
   14.32 +          <version>1.0</version>
   14.33 +      </dependency>
   14.34 +  </dependencies>
   14.35 +    <name>Static Word Library</name>
   14.36 +    <description>Provides an implementation of WordLibrary interface and registers it
   14.37 +via Java Extension Mechanism, so it is it visible to Lookup.getDefault()
   14.38 +implementation.
   14.39 +</description>
   14.40 +    <build>
   14.41 +        <plugins>
   14.42 +            <plugin>
   14.43 +                <groupId>org.apache.maven.plugins</groupId>
   14.44 +                <artifactId>maven-compiler-plugin</artifactId>
   14.45 +                <version>2.0.2</version>
   14.46 +                <configuration>
   14.47 +                    <source>1.5</source>
   14.48 +                    <target>1.5</target>
   14.49 +                </configuration>
   14.50 +            </plugin>
   14.51 +        </plugins>
   14.52 +    </build>
   14.53 +</project>
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/anagramdemo/staticwordlibrary/src/main/java/org/apidesign/demo/anagramwithspringandlookup/staticwordlibrary/StaticWordLibrary.java	Sun Apr 26 21:18:14 2009 +0200
    15.3 @@ -0,0 +1,59 @@
    15.4 +
    15.5 +package org.apidesign.demo.anagramwithspringandlookup.staticwordlibrary;
    15.6 +
    15.7 +import org.apidesign.demo.anagramwithspringandlookup.WordLibrary;
    15.8 +import org.openide.util.lookup.ServiceProvider;
    15.9 +
   15.10 +@ServiceProvider(service=WordLibrary.class)
   15.11 +public class StaticWordLibrary implements WordLibrary {
   15.12 +    private static String wordList[] = {
   15.13 +        "abstraction",
   15.14 +        "ambiguous",
   15.15 +        "arithmetic",
   15.16 +        "backslash",
   15.17 +        "bitmap",
   15.18 +        "circumstance",
   15.19 +        "combination",
   15.20 +        "consequently",
   15.21 +        "consortium",
   15.22 +        "decrementing",
   15.23 +        "dependency",
   15.24 +        "disambiguate",
   15.25 +        "dynamic",
   15.26 +        "encapsulation",
   15.27 +        "equivalent",
   15.28 +        "expression",
   15.29 +        "facilitate",
   15.30 +        "fragment",
   15.31 +        "hexadecimal",
   15.32 +        "implementation",
   15.33 +        "indistinguishable",
   15.34 +        "inheritance",
   15.35 +        "internet",
   15.36 +        "java",
   15.37 +        "localization",
   15.38 +        "microprocessor",
   15.39 +        "navigation",
   15.40 +        "optimization",
   15.41 +        "parameter",
   15.42 +        "patrick",
   15.43 +        "pickle",
   15.44 +        "polymorphic",
   15.45 +        "rigorously",
   15.46 +        "simultaneously",
   15.47 +        "specification",
   15.48 +        "structure",
   15.49 +        "lexical",
   15.50 +        "likewise",
   15.51 +        "management",
   15.52 +        "manipulate",
   15.53 +        "mathematics",
   15.54 +        "hotjava",
   15.55 +        "vertex",
   15.56 +        "unsigned",
   15.57 +        "traditional"};
   15.58 +
   15.59 +    public String[] getWords() {
   15.60 +        return wordList;
   15.61 +    }
   15.62 +}
    16.1 --- a/pom.xml	Sun Apr 26 13:49:06 2009 +0200
    16.2 +++ b/pom.xml	Sun Apr 26 21:18:14 2009 +0200
    16.3 @@ -1,7 +1,5 @@
    16.4 -<project xmlns="http://maven.apache.org/POM/4.0.0"
    16.5 -  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    16.6 -  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    16.7 -                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
    16.8 +<?xml version="1.0" encoding="UTF-8"?>
    16.9 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0                       http://maven.apache.org/xsd/maven-4.0.0.xsd">
   16.10    <modelVersion>4.0.0</modelVersion>
   16.11    <packaging>pom</packaging>
   16.12    <groupId>org.apidesign</groupId>
   16.13 @@ -10,6 +8,7 @@
   16.14    <modules>
   16.15      <module>lookup</module>
   16.16      <module>spring.lookup</module>
   16.17 +    <module>anagramdemo</module>
   16.18    </modules>
   16.19      <name>Lookup related projects from apidesign.org</name>
   16.20      <description>Master project that agregates all lookup related