New Upstream Snapshot - uncommons-watchmaker
Ready changes
Summary
Merged new upstream version: 0.7.1+git20171206.1.33d9423+ds (was: 0.7.1).
Resulting package
Built on 2023-01-20T11:56 (took 7m4s)
The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:
apt install -t fresh-snapshots libuncommons-watchmaker-framework-javaapt install -t fresh-snapshots libuncommons-watchmaker-swing-java
Diff
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..59ccb45
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+watchmaker
\ No newline at end of file
diff --git a/.idea/ant.xml b/.idea/ant.xml
new file mode 100644
index 0000000..313b0c0
--- /dev/null
+++ b/.idea/ant.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="AntConfiguration">
+ <buildFile url="file://$PROJECT_DIR$/build.xml" />
+ </component>
+</project>
+
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..c04517b
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="CompilerConfiguration">
+ <option name="DEFAULT_COMPILER" value="Javac" />
+ <resourceExtensions />
+ <wildcardResourcePatterns>
+ <entry name="?*.properties" />
+ <entry name="?*.xml" />
+ <entry name="?*.gif" />
+ <entry name="?*.png" />
+ <entry name="?*.jpeg" />
+ <entry name="?*.jpg" />
+ <entry name="?*.html" />
+ <entry name="?*.dtd" />
+ <entry name="?*.tld" />
+ <entry name="?*.ftl" />
+ </wildcardResourcePatterns>
+ <annotationProcessing>
+ <profile default="true" name="Default" enabled="false">
+ <processorPath useClasspath="true" />
+ </profile>
+ <profile default="false" name="Maven default annotation processors profile" enabled="true">
+ <sourceOutputDir name="target/generated-sources/annotations" />
+ <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+ <outputRelativeToContentRoot value="true" />
+ <processorPath useClasspath="true" />
+ <module name="watchmaker-examples" />
+ <module name="watchmaker-framework" />
+ <module name="watchmaker-swing" />
+ </profile>
+ </annotationProcessing>
+ <bytecodeTargetLevel>
+ <module name="watchmaker" target="1.6" />
+ <module name="watchmaker-examples" target="1.6" />
+ <module name="watchmaker-framework" target="1.6" />
+ <module name="watchmaker-swing" target="1.6" />
+ </bytecodeTargetLevel>
+ </component>
+</project>
+
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..3572571
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,5 @@
+<component name="CopyrightManager">
+ <settings default="">
+ <module2copyright />
+ </settings>
+</component>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..2a99e95
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false">
+ <file url="file://$PROJECT_DIR$" charset="UTF-8" />
+ <file url="file://$PROJECT_DIR$/examples" charset="UTF-8" />
+ <file url="file://$PROJECT_DIR$/framework" charset="UTF-8" />
+ <file url="file://$PROJECT_DIR$/swing" charset="UTF-8" />
+ </component>
+</project>
+
diff --git a/.idea/libraries/Maven__com_beust_jcommander_1_12.xml b/.idea/libraries/Maven__com_beust_jcommander_1_12.xml
new file mode 100644
index 0000000..2b9ea17
--- /dev/null
+++ b/.idea/libraries/Maven__com_beust_jcommander_1_12.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: com.beust:jcommander:1.12">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.12/jcommander-1.12.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.12/jcommander-1.12-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.12/jcommander-1.12-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_collections_google_collections_1_0.xml b/.idea/libraries/Maven__com_google_collections_google_collections_1_0.xml
new file mode 100644
index 0000000..7ed5d20
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_collections_google_collections_1_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: com.google.collections:google-collections:1.0">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/com/google/collections/google-collections/1.0/google-collections-1.0.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/com/google/collections/google-collections/1.0/google-collections-1.0-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/com/google/collections/google-collections/1.0/google-collections-1.0-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jfree_jcommon_1_0_12.xml b/.idea/libraries/Maven__jfree_jcommon_1_0_12.xml
new file mode 100644
index 0000000..80156ee
--- /dev/null
+++ b/.idea/libraries/Maven__jfree_jcommon_1_0_12.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: jfree:jcommon:1.0.12">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jcommon/1.0.12/jcommon-1.0.12.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jcommon/1.0.12/jcommon-1.0.12-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jcommon/1.0.12/jcommon-1.0.12-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jfree_jfreechart_1_0_13.xml b/.idea/libraries/Maven__jfree_jfreechart_1_0_13.xml
new file mode 100644
index 0000000..c91b3c0
--- /dev/null
+++ b/.idea/libraries/Maven__jfree_jfreechart_1_0_13.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: jfree:jfreechart:1.0.13">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.13/jfreechart-1.0.13.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.13/jfreechart-1.0.13-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.13/jfreechart-1.0.13-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jfree_jfreechart_1_0_8.xml b/.idea/libraries/Maven__jfree_jfreechart_1_0_8.xml
new file mode 100644
index 0000000..4e53d16
--- /dev/null
+++ b/.idea/libraries/Maven__jfree_jfreechart_1_0_8.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: jfree:jfreechart:1.0.8">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.8/jfreechart-1.0.8.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.8/jfreechart-1.0.8-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.8/jfreechart-1.0.8-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_3_8_1.xml b/.idea/libraries/Maven__junit_junit_3_8_1.xml
new file mode 100644
index 0000000..71b2993
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_3_8_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: junit:junit:3.8.1">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/junit/junit/3.8.1/junit-3.8.1.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/junit/junit/3.8.1/junit-3.8.1-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/junit/junit/3.8.1/junit-3.8.1-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_jcip_jcip_annotations_1_0.xml b/.idea/libraries/Maven__net_jcip_jcip_annotations_1_0.xml
new file mode 100644
index 0000000..d29c82f
--- /dev/null
+++ b/.idea/libraries/Maven__net_jcip_jcip_annotations_1_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: net.jcip:jcip-annotations:1.0">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_beanshell_bsh_2_0b4.xml b/.idea/libraries/Maven__org_beanshell_bsh_2_0b4.xml
new file mode 100644
index 0000000..d6f17aa
--- /dev/null
+++ b/.idea/libraries/Maven__org_beanshell_bsh_2_0b4.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: org.beanshell:bsh:2.0b4">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_easytesting_fest_assert_1_2.xml b/.idea/libraries/Maven__org_easytesting_fest_assert_1_2.xml
new file mode 100644
index 0000000..e0eb7e5
--- /dev/null
+++ b/.idea/libraries/Maven__org_easytesting_fest_assert_1_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: org.easytesting:fest-assert:1.2">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-assert/1.2/fest-assert-1.2.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-assert/1.2/fest-assert-1.2-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-assert/1.2/fest-assert-1.2-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_easytesting_fest_reflect_1_2.xml b/.idea/libraries/Maven__org_easytesting_fest_reflect_1_2.xml
new file mode 100644
index 0000000..2d5ea79
--- /dev/null
+++ b/.idea/libraries/Maven__org_easytesting_fest_reflect_1_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: org.easytesting:fest-reflect:1.2">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-reflect/1.2/fest-reflect-1.2.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-reflect/1.2/fest-reflect-1.2-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-reflect/1.2/fest-reflect-1.2-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_easytesting_fest_swing_1_2_1.xml b/.idea/libraries/Maven__org_easytesting_fest_swing_1_2_1.xml
new file mode 100644
index 0000000..8651372
--- /dev/null
+++ b/.idea/libraries/Maven__org_easytesting_fest_swing_1_2_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: org.easytesting:fest-swing:1.2.1">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-swing/1.2.1/fest-swing-1.2.1.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-swing/1.2.1/fest-swing-1.2.1-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-swing/1.2.1/fest-swing-1.2.1-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_easytesting_fest_util_1_1_3.xml b/.idea/libraries/Maven__org_easytesting_fest_util_1_1_3.xml
new file mode 100644
index 0000000..f54cc10
--- /dev/null
+++ b/.idea/libraries/Maven__org_easytesting_fest_util_1_1_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: org.easytesting:fest-util:1.1.3">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-util/1.1.3/fest-util-1.1.3.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-util/1.1.3/fest-util-1.1.3-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-util/1.1.3/fest-util-1.1.3-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_testng_testng_6_2_1.xml b/.idea/libraries/Maven__org_testng_testng_6_2_1.xml
new file mode 100644
index 0000000..16c6f53
--- /dev/null
+++ b/.idea/libraries/Maven__org_testng_testng_6_2_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: org.testng:testng:6.2.1">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.2.1/testng-6.2.1.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.2.1/testng-6.2.1-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.2.1/testng-6.2.1-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_uncommons_maths_uncommons_maths_1_2_2.xml b/.idea/libraries/Maven__org_uncommons_maths_uncommons_maths_1_2_2.xml
new file mode 100644
index 0000000..38581b9
--- /dev/null
+++ b/.idea/libraries/Maven__org_uncommons_maths_uncommons_maths_1_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: org.uncommons.maths:uncommons-maths:1.2.2">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/uncommons/maths/uncommons-maths/1.2.2/uncommons-maths-1.2.2.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/org/uncommons/maths/uncommons-maths/1.2.2/uncommons-maths-1.2.2-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/uncommons/maths/uncommons-maths/1.2.2/uncommons-maths-1.2.2-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_6.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_6.xml
new file mode 100644
index 0000000..0f8bd19
--- /dev/null
+++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_6.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+ <library name="Maven: org.yaml:snakeyaml:1.6">
+ <CLASSES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.6/snakeyaml-1.6.jar!/" />
+ </CLASSES>
+ <JAVADOC>
+ <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.6/snakeyaml-1.6-javadoc.jar!/" />
+ </JAVADOC>
+ <SOURCES>
+ <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.6/snakeyaml-1.6-sources.jar!/" />
+ </SOURCES>
+ </library>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..75e1580
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="EntryPointsManager">
+ <entry_points version="2.0" />
+ </component>
+ <component name="MavenProjectsManager">
+ <option name="originalFiles">
+ <list>
+ <option value="$PROJECT_DIR$/pom.xml" />
+ </list>
+ </option>
+ <option name="ignoredFiles">
+ <set>
+ <option value="$PROJECT_DIR$/pom.xml" />
+ </set>
+ </option>
+ </component>
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
+ <output url="file://$PROJECT_DIR$/classes" />
+ </component>
+</project>
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f314de0
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ProjectModuleManager">
+ <modules>
+ <module fileurl="file://$PROJECT_DIR$/book/book.iml" filepath="$PROJECT_DIR$/book/book.iml" />
+ <module fileurl="file://$PROJECT_DIR$/examples/examples.iml" filepath="$PROJECT_DIR$/examples/examples.iml" />
+ <module fileurl="file://$PROJECT_DIR$/framework/framework.iml" filepath="$PROJECT_DIR$/framework/framework.iml" />
+ <module fileurl="file://$PROJECT_DIR$/swing/swing.iml" filepath="$PROJECT_DIR$/swing/swing.iml" />
+ </modules>
+ </component>
+</project>
+
diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml
new file mode 100644
index 0000000..922003b
--- /dev/null
+++ b/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+<component name="DependencyValidationManager">
+ <state>
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+ </state>
+</component>
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..3b00020
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="Palette2">
+ <group name="Swing">
+ <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+ </item>
+ <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+ </item>
+ <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+ <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+ <initial-values>
+ <property name="text" value="Button" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="RadioButton" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="CheckBox" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="Label" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+ <preferred-size width="200" height="200" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+ <preferred-size width="200" height="200" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+ </item>
+ <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+ <preferred-size width="-1" height="20" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+ </item>
+ <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+ </item>
+ </group>
+ </component>
+</project>
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..c80f219
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
+ </component>
+</project>
+
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 2fe05ce..e83d970 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,15 @@
+Changes in version 0.7.2
+------------------------
+
+* Fix for StatusBar timer being reset at each epoch in island evolution
+ (ISSUE#19).
+
+* Added RandomMigration as an alternative strategy for island evolution.
+
+* Added generic type parameter to Migration interface to make it easier to
+ implement type-specific migration strategies.
+
+
Changes in version 0.7.1
------------------------
diff --git a/README.txt b/README.txt
index 2de80c5..3ddaeb2 100644
--- a/README.txt
+++ b/README.txt
@@ -1,8 +1,8 @@
_______________________________________________________________________________
- The Watchmaker Framework for Evolutionary Computation - Version 0.7.0
+ The Watchmaker Framework for Evolutionary Computation - Version 0.7.1
(http://watchmaker.uncommons.org)
- Copyright 2006-2009 Daniel W. Dyer (http://www.dandyer.co.uk)
+ Copyright 2006-2010 Daniel W. Dyer (http://www.dandyer.co.uk)
_______________________________________________________________________________
@@ -18,7 +18,7 @@ Source code for several example programs is included in the distribution.
The examples can be run with the following command:
- java -jar watchmaker-examples-0.7.0.jar
+ java -jar watchmaker-examples-0.7.1.jar
This will list the names of available example applications. Then just run the
command again with one of those names as an argument.
@@ -30,17 +30,17 @@ command again with one of those names as an argument.
The following bundled JAR files are required by all programs that use the
Watchmaker Framework:
- watchmaker-framework-0.7.0.jar (Apache Licence 2.0)
+ watchmaker-framework-0.7.1.jar (Apache Licence 2.0)
uncommons-maths-1.2.1.jar (Apache Licence 2.0)
google-collect-1.0.jar (Apache Licence 2.0)
These additional JAR files are required to use the Watchmaker Framework Swing
components:
- watchmaker-swing-0.7.0.jar (Apache Licence 2.0)
+ watchmaker-swing-0.7.1.jar (Apache Licence 2.0)
jfreechart-1.0.13.jar (GNU LGPL 2.1)
jcommon-1.0.16.jar (GNU LGPL 2.1)
-Example applications are included in the watchmaker-examples-0.7.0.jar file.
+Example applications are included in the watchmaker-examples-0.7.1.jar file.
This file is not required by other applications that use the Watchmaker
Framework.
diff --git a/etc/intellij/book.iml b/book/book.iml
similarity index 60%
rename from etc/intellij/book.iml
rename to book/book.iml
index 42b42b8..d5c0743 100644
--- a/etc/intellij/book.iml
+++ b/book/book.iml
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
+<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
- <content url="file://$MODULE_DIR$/../../book" />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+ </content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
diff --git a/book/src/resources/docbook.css b/book/src/resources/docbook.css
index a38ae04..018291b 100644
--- a/book/src/resources/docbook.css
+++ b/book/src/resources/docbook.css
@@ -32,4 +32,4 @@ h3.author {font-variant: normal; margin-top: 2em; margin-bottom: 0;}
.mediaobject {display: inline-block;}
.caption p {margin: 0; text-align: right; font-size: small;}
-.navfooter table tr td {width: 33.33%}
\ No newline at end of file
+.navfooter table tr td {width: 33.33%;}
\ No newline at end of file
diff --git a/book/src/xml/classifiers.xml b/book/src/xml/classifiers.xml
index be852be..79a433a 100644
--- a/book/src/xml/classifiers.xml
+++ b/book/src/xml/classifiers.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Learning Classifier Systems</title>
diff --git a/book/src/xml/distributed.xml b/book/src/xml/distributed.xml
index 553c82e..08c54c0 100644
--- a/book/src/xml/distributed.xml
+++ b/book/src/xml/distributed.xml
@@ -1,5 +1,4 @@
<appendix xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Distributed Evolutionary Algorithms</title>
diff --git a/book/src/xml/evolution.xml b/book/src/xml/evolution.xml
index 4f2cc3f..0c134aa 100644
--- a/book/src/xml/evolution.xml
+++ b/book/src/xml/evolution.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
diff --git a/book/src/xml/furtherreading.xml b/book/src/xml/furtherreading.xml
index 4e12fc8..c0ab4c3 100644
--- a/book/src/xml/furtherreading.xml
+++ b/book/src/xml/furtherreading.xml
@@ -1,5 +1,4 @@
<appendix xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Further Reading</title>
diff --git a/book/src/xml/geneticprogramming.xml b/book/src/xml/geneticprogramming.xml
index 334589b..cb37ed6 100644
--- a/book/src/xml/geneticprogramming.xml
+++ b/book/src/xml/geneticprogramming.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Genetic Programming</title>
diff --git a/book/src/xml/gui.xml b/book/src/xml/gui.xml
index f3b5e28..f339f77 100644
--- a/book/src/xml/gui.xml
+++ b/book/src/xml/gui.xml
@@ -1,5 +1,4 @@
<appendix xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Building Graphical User Interfaces for Evolutionary Programs</title>
diff --git a/book/src/xml/interactive.xml b/book/src/xml/interactive.xml
index a9f5053..fa7369a 100644
--- a/book/src/xml/interactive.xml
+++ b/book/src/xml/interactive.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Interactive Evolutionary Algorithms</title>
diff --git a/book/src/xml/islands.xml b/book/src/xml/islands.xml
index c0c4aec..e7943f8 100644
--- a/book/src/xml/islands.xml
+++ b/book/src/xml/islands.xml
@@ -1,7 +1,175 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Island Models</title>
- <para>TODO</para>
+ <indexterm><primary>island models</primary></indexterm>
+ <indexterm><primary>Australia</primary></indexterm>
+ <para>
+ In the natural world, populations of organisms might be separated by geography. Left to evolve in isolation
+ over millions of years, vastly different species will occur in different locations. Consider Australia,
+ an island continent protected by its seas. With little opportunity for outside organisms to
+ interfere, and few opportunities for its land-based organisms to migrate to other land masses, Australian
+ wildlife evolved to be distinctly different from that of other continents and countries. The majority of
+ Australia's plant and animal species, including 84% of its mammals, are endemic. They occur nowhere else
+ in the world.
+ </para>
+ <indexterm><primary>Darwin, Charles</primary></indexterm>
+ <indexterm><primary>Galápagos Islands</primary></indexterm>
+ <para>
+ Australia is not the only island to exhibit such levels of endemism. It was a visit to the Galápagos
+ Islands in 1835 that started Charles Darwin on the path to formulating his theory of evolution. Darwin
+ noticed the pronounced differences between the species of mocking birds and tortoises present on the
+ different islands of the archipelago and began to speculate on how such variations might have occurred.
+ </para>
+ <para>
+ In the world of evolutionary computation we can mimic this idea of having multiple isolated populations
+ evolving in parallel. Having additional populations would increase the likelihood of finding a solution that
+ is close to the global optimum. However, it is not just a question of having a larger global population.
+ A system of 10 islands each with a population of 50 individuals is not equivalent to a single island with a
+ population of 500. The reason for this is that the island system partitions the search. If one island
+ prematurely converges on a sub-optimal solution it does not affect the evolution happening on the other
+ islands; they are following their own paths. A single large population does not have this in-built
+ resilience.
+ </para>
+ <section>
+ <title>Migration</title>
+ <indexterm><primary>migration</primary></indexterm>
+ <indexterm><primary>island models</primary><secondary>migration</secondary></indexterm>
+ <para>
+ There is of course no real difference between evolving 10 completely separate islands in parallel and running
+ the same single-population evolution 10 times in a row, other than how the computing resources are utilised.
+ In practice the populations are not kept permanently isolated from each other and there are occasional
+ opportunities for individuals to migrate between islands.
+ </para>
+ <para>
+ In nature external species have been introduced to foreign ecosystems in several ways. In an ice age the waters
+ that previously separated two land masses might freeze providing a route for land animals to migrate to
+ previously unreachable places. Microorganisms and insects have often strayed beyond their usual environment by
+ hitching a ride with larger species.
+ </para>
+ <indexterm><primary>rabbits</primary></indexterm>
+ <indexterm><primary>Austin, Thomas</primary></indexterm>
+ <para>
+ The effect of introducing a foreign species to a new environment can vary. The new species might be
+ ill-adapted to its new surroundings and quickly perish. Alternatively, a lack of natural predators
+ may cause it to flourish, often to the detriment of indigenous species. One such example is the
+ introduction of rabbits to Australia. Australia was a land without rabbits until the arrival of European
+ settlers. An Englishman named Thomas Austin released 24 rabbits into the wild of Victoria in October 1859
+ with the intention of hunting them. If rabbits are famous for one thing it is for reproducing prodigiously.
+ The mild winters allowed year-round breeding and the absence of any natural rabbit predators, such as foxes,
+ allowed the Australian rabbit population to explode unchecked. Within 10 years an annual cull of two million
+ rabbits was having no noticeable effect on rabbit numbers and the habitats of some native animals were being
+ destroyed by the floppy-eared pests. Today there are hundreds of millions of rabbits in Australia, despite
+ efforts to reduce the population, and the name of Thomas Austin is widely cursed for his catastrophic lack
+ of foresight.
+ </para>
+ <para>
+ While such invasions of separate species provide a useful analogy for what can happen when we introduce migration
+ into island model evolutionary algorithms, we are specifically interested in the effects of migration involving
+ genetically different members of the same species. This is because, in our simplified model of evolution,
+ all individuals are compatible and can reproduce. The island model of evolution provides the isolation necessary
+ for diversity to thrive while still providing opportunities for diverse individuals to be combined to produce
+ potentially fitter offspring.
+ </para>
+ <para>
+ In an island model, the isolation of the separate populations often leads to different traits originating on
+ different islands. Migration brings these diverse individuals together occasionally to see what happens when
+ they are combined. Remember that, even if the immigrants are weak, cross-over can result in offspring that are
+ fitter than either of their parents. In this way, the introduction to the population of new genetic building
+ blocks may result in evolutionary progress even if the immigrants themselves are not viable in the new
+ population.
+ </para>
+ </section>
+ <section>
+ <title>Islands in the Watchmaker Framework</title>
+ <indexterm><primary><classname>IslandEvolution</classname></primary></indexterm>
+ <para>
+ The Watchmaker Framework for Evolutionary Computation supports islands models via the
+ <classname>IslandEvolution</classname> class. Each island is a self-contained
+ <classname>EvolutionEngine</classname> just like those we have been using previously for single-population
+ evolutionary algorithms. The evolution is divided into <emphasis>epochs</emphasis>. Each epoch consists
+ of a fixed number of generations that each island completes in isolation. At the end of an epoch migration
+ occurs. Then, if the termination conditions are not yet satisfied, a new epoch begins.
+ </para>
+ <para>
+ The <classname>IslandEvolution</classname> supports pluggable migration strategies via different implementations
+ of the <interfacename>Migration</interfacename> interface. An island version of the string evolution example
+ from <xref linkend="watchmaker_chapter" /> might look something like this:
+ </para>
+ <indexterm><primary><interfacename>Migration</interfacename></primary></indexterm>
+ <indexterm><primary><classname>RingMigration</classname></primary></indexterm>
+ <informalexample>
+ <programlisting language="java">
+<![CDATA[IslandEvolution<String> engine
+ = new IslandEvolution<String>(5, // Number of islands.
+ new RingMigration(),
+ candidateFactory,
+ evolutionaryOperator,
+ fitnessEvaluator,
+ selectionStrategy,
+ rng);
+
+engine.evolve(100, // Population size per island.
+ 5, // Elitism for each island.
+ 50, // Epoch length (no. generations).
+ 3, // Migrations from each island at each epoch.
+ new TargetFitness(0, false));]]>
+ </programlisting>
+ </informalexample>
+ <indexterm><primary><interfacename>IslandEvolutionObserver</interfacename></primary></indexterm>
+ <indexterm><primary><methodname>populationUpdate</methodname></primary></indexterm>
+ <indexterm><primary><methodname>islandPopulationUpdate</methodname></primary></indexterm>
+ <para>
+ We can add listeners to an <classname>IslandEvolution</classname> object, just as we can with individual
+ <interfacename>EvolutionEngine</interfacename>s. We use a different interface for this though,
+ <interfacename>IslandEvolutionObserver</interfacename>, which provides two call-backs.
+ The <methodname>populationUpdate</methodname> method reports the global state of the combined population
+ of all islands at the end of each epoch. The <methodname>islandPopulationUpdate</methodname> method reports
+ the state of individual island populations at the end of each generation.
+ </para>
+ <section>
+ <title>Advanced Usage</title>
+ <indexterm><primary><classname>GenerationalEvolutionEngine</classname></primary><secondary>island evolution</secondary></indexterm>
+ <para>
+ In the example code above we specified how many islands we wanted to use and the
+ <classname>IslandEvolution</classname> class created one <classname>GenerationalEvolutionEngine</classname>
+ for each island. Using this approach all of the islands have the same configuration; they use the same
+ candidate factory, evolutionary operator(s) and selection strategy. This is the easiest way to create an
+ island system but it is also possible to construct each island individually for ultimate flexibility.
+ </para>
+ <informalexample>
+ <programlisting language="java">
+<![CDATA[List<EvolutionEngine<String>> islands
+ = new ArrayList<EvolutionEngine<String>>();
+
+// Create individual islands here and add them to the list.
+// ...
+
+IslandEvolution<String> engine
+ = new IslandEvolution<String>(islands,
+ new RingMigration(),
+ false, // Natural fitness?
+ rng);]]>
+ </programlisting>
+ </informalexample>
+ <para>
+ One reason you might choose to construct the islands explicitly is that it makes it possible to configure
+ individual islands differently. You may choose to have different islands use different parameters
+ for evolutionary operators, or even to use different evolutionary operators all together. Alternatively,
+ you could use the same evolutionary operators and parameters but have different selection strategies so that
+ some islands have stronger selection pressure than others. You should generally use the same fitness function
+ for all islands though, otherwise you might get some strange results.
+ </para>
+ <indexterm><primary><classname>SteadyStateEvolutionEngine</classname></primary><secondary>island evolution</secondary></indexterm>
+ <indexterm><primary><classname>EvolutionStrategyEngine</classname></primary><secondary>island evolution</secondary></indexterm>
+ <para>
+ Another possible reason for creating the islands explicitly is so you don't have to use the standard
+ <classname>GenerationalEvolutionEngine</classname> for the islands. You can choose to use any implementation
+ of the <interfacename>EvolutionEngine</interfacename> interface, such as the
+ <classname>SteadyStateEvolutionEngine</classname> class or the <classname>EvolutionStrategyEngine</classname>
+ class. You can even use a mixture of different island types with the same
+ <classname>IslandEvolution</classname> object.
+ </para>
+ </section>
+ </section>
</chapter>
diff --git a/book/src/xml/multiobjective.xml b/book/src/xml/multiobjective.xml
index e79c323..d453c0f 100644
--- a/book/src/xml/multiobjective.xml
+++ b/book/src/xml/multiobjective.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Multi-Objective Optimisations</title>
diff --git a/book/src/xml/performance.xml b/book/src/xml/performance.xml
index 828f4b9..6f050bb 100644
--- a/book/src/xml/performance.xml
+++ b/book/src/xml/performance.xml
@@ -1,5 +1,4 @@
<appendix xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Optimising for Performance</title>
diff --git a/book/src/xml/preface.xml b/book/src/xml/preface.xml
index e2d3e3b..9d2e1ec 100644
--- a/book/src/xml/preface.xml
+++ b/book/src/xml/preface.xml
@@ -1,5 +1,4 @@
<preface xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Preface</title>
diff --git a/book/src/xml/salesman.xml b/book/src/xml/salesman.xml
index c41f4d9..9eac594 100644
--- a/book/src/xml/salesman.xml
+++ b/book/src/xml/salesman.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>The Travelling Salesman</title>
diff --git a/book/src/xml/selection.xml b/book/src/xml/selection.xml
index 4ab5f2a..95525b1 100644
--- a/book/src/xml/selection.xml
+++ b/book/src/xml/selection.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd"
id="selection_chapter">
diff --git a/book/src/xml/steadystate.xml b/book/src/xml/steadystate.xml
index c6e8094..2e032c8 100644
--- a/book/src/xml/steadystate.xml
+++ b/book/src/xml/steadystate.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>Steady-State Evolutionary Algorithms</title>
diff --git a/book/src/xml/sudoku.xml b/book/src/xml/sudoku.xml
index 204c18e..9c86740 100644
--- a/book/src/xml/sudoku.xml
+++ b/book/src/xml/sudoku.xml
@@ -1,5 +1,4 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
<title>An Evolutionary Sudoku Solver</title>
diff --git a/book/src/xml/watchmaker.xml b/book/src/xml/watchmaker.xml
index 99be924..b18cb39 100644
--- a/book/src/xml/watchmaker.xml
+++ b/book/src/xml/watchmaker.xml
@@ -1,8 +1,8 @@
<chapter xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
+ xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd"
+ id="watchmaker_chapter">
<title>The Watchmaker Framework</title>
<indexterm significance="preferred"><primary>Watchmaker Framework</primary></indexterm>
<para>
@@ -19,8 +19,8 @@
</para>
<section>
<title>The Evolution Engine</title>
- <indexterm><primary>GenerationalEvolutionEngine</primary></indexterm>
- <indexterm><primary>EvolutionEngine</primary></indexterm>
+ <indexterm><primary><classname>GenerationalEvolutionEngine</classname></primary></indexterm>
+ <indexterm><primary><interfacename>EvolutionEngine</interfacename></primary></indexterm>
<para>
The central object of an evolutionary program built with the Watchmaker Framework is
the evolution engine.
@@ -67,7 +67,7 @@
</section>
<section>
<title>The Candidate Factory</title>
- <indexterm><primary>CandidateFactory</primary></indexterm>
+ <indexterm significance="preferred"><primary><interfacename>CandidateFactory</interfacename></primary></indexterm>
<para>
The first object that needs to be plugged into the evolution engine is a candidate
factory. Every evolutionary simulation must start with an initial population of
@@ -83,7 +83,7 @@
arrays, you may be able to use a ready-made factory from the
<package>org.uncommons.watchmaker.framework.factories</package> package.
</para>
- <indexterm><primary>StringFactory</primary></indexterm>
+ <indexterm><primary><classname>StringFactory</classname></primary></indexterm>
<para>
For our "Hello World" program, we can use the provided
<classname>StringFactory</classname>:
@@ -103,7 +103,7 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);]]>
</programlisting>
</informalexample>
<tip>
- <indexterm><primary>AbstractCandidateFactory</primary></indexterm>
+ <indexterm significance="preferred"><primary><classname>AbstractCandidateFactory</classname></primary></indexterm>
<para>
When writing your own <interfacename>CandidateFactory</interfacename> implementations,
it is easiest to extend the provided <classname>AbstractCandidateFactory</classname>
@@ -113,7 +113,7 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);]]>
</section>
<section>
<title>Evolutionary Operators</title>
- <indexterm><primary>EvolutionaryOperator</primary></indexterm>
+ <indexterm significance="preferred"><primary><interfacename>EvolutionaryOperator</interfacename></primary></indexterm>
<para>
Evolutionary operators are the components that perform the actual evolution of a
population. Cross-over is an evolutionary operator, as is mutation.
@@ -126,8 +126,8 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);]]>
individual at a time, whereas others will process individuals in groups
(cross-over processes two individuals at a time).
</para>
- <indexterm><primary>StringCrossover</primary></indexterm>
- <indexterm><primary>StringMutation</primary></indexterm>
+ <indexterm><primary><classname>StringCrossover</classname></primary></indexterm>
+ <indexterm><primary><classname>StringMutation</classname></primary></indexterm>
<para>
As with candidate factories, evolutionary operators have associated types that
must be compatible with the type of the evolution engine that they are used with.
@@ -140,7 +140,7 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);]]>
</para>
<section>
<title>The Evolution Pipeline</title>
- <indexterm><primary>EvolutionPipeline</primary></indexterm>
+ <indexterm significance="preferred"><primary><classname>EvolutionPipeline</classname></primary></indexterm>
<para>
Alert readers will have noticed that the evolution engine constructor only accepts
a single evolutionary operator. So how can we use both cross-over and mutation?
@@ -173,7 +173,7 @@ EvolutionaryOperator<String> pipeline
</section>
<section>
<title>The Fitness Evaluator</title>
- <indexterm><primary>FitnessEvaluator</primary></indexterm>
+ <indexterm significance="preferred"><primary><interfacename>FitnessEvaluator</interfacename></primary></indexterm>
<para>
So far we've been able to build our evolutionary program by simply combining instances
of classes provided by the framework. There is one part of the program that we will
@@ -315,8 +315,8 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);
// Create a pipeline that applies cross-over then mutation.
List<EvolutionaryOperator<String>> operators
= new LinkedList<EvolutionaryOperator<String>>();
-operators.add(new StringMutation(chars, new Probability(0.02)));
operators.add(new StringCrossover())
+operators.add(new StringMutation(chars, new Probability(0.02)));
EvolutionaryOperator<String> pipeline
= new EvolutionPipeline<String>(operators);
@@ -365,7 +365,7 @@ EvolutionEngine<String> engine
</para>
<informalexample>
<programlisting language="java">
-<![CDATA[String result = engine.evolve(10, 0, new TargetFitness(11));
+<![CDATA[String result = engine.evolve(10, 0, new TargetFitness(11, true));
System.out.println(result);]]>
</programlisting>
</informalexample>
diff --git a/book/src/xml/website.xml b/book/src/xml/website.xml
index f6caf8c..724e586 100644
--- a/book/src/xml/website.xml
+++ b/book/src/xml/website.xml
@@ -36,6 +36,7 @@
<xi:include href="evolution.xml" />
<xi:include href="watchmaker.xml" />
<xi:include href="selection.xml" />
+ <xi:include href="islands.xml" />
<!-- Appendices -->
<xi:include href="performance.xml" />
diff --git a/build.xml b/build.xml
index 23f61ed..6292b47 100755
--- a/build.xml
+++ b/build.xml
@@ -54,7 +54,7 @@
classpathref="tool.path"/>
- <property name="version" value="0.7.1"/>
+ <property name="version" value="0.7.2"/>
<property name="artifact.identifier" value="watchmaker-framework-${version}"/>
<!-- This is the minimum coverage percentage (for both lines and
@@ -112,7 +112,7 @@
<uncommons:compile module="examples" />
<uncommons:jar module="examples"
jarfile="watchmaker-examples-${version}.jar"
- classpath="${artifact.identifier}.jar lib/uncommons-maths-1.2.1.jar lib/google-collect-1.0.jar watchmaker-swing-${version}.jar lib/jfreechart-1.0.13.jar lib/jcommon-1.0.16.jar"
+ classpath="${artifact.identifier}.jar lib/uncommons-maths-1.2.2.jar lib/google-collect-1.0.jar watchmaker-swing-${version}.jar lib/jfreechart-1.0.13.jar lib/jcommon-1.0.16.jar"
mainclass="org.uncommons.watchmaker.examples.Launcher" />
</target>
@@ -220,7 +220,7 @@
<additionalconfig>
<group title="Watchmaker Evolution Framework" packages="org.uncommons.watchmaker.framework:org.uncommons.watchmaker.framework.*"/>
<group title="Watchmaker Swing Classes" packages="org.uncommons.swing:org.uncommons.swing.*:org.uncommons.watchmaker.swing:org.uncommons.watchmaker.swing.*"/>
- <link href="https://uncommons-maths.dev.java.net/nonav/api/"/>
+ <link href="http://maths.uncommons.org/api/"/>
</additionalconfig>
</uncommons:javadoc>
</target>
@@ -262,7 +262,7 @@
<additionalconfig>
<group title="Watchmaker Evolution Framework" packages="org.uncommons.watchmaker.framework:org.uncommons.watchmaker.framework.*"/>
<group title="Watchmaker Swing Classes" packages="org.uncommons.swing:org.uncommons.swing.*:org.uncommons.watchmaker.swing:org.uncommons.watchmaker.swing.*"/>
- <link href="https://uncommons-maths.dev.java.net/nonav/api/"/>
+ <link href="http://maths.uncommons.org/api/"/>
</additionalconfig>
</uncommons:javadoc>
diff --git a/debian/changelog b/debian/changelog
index 75bf1a4..e6f3d75 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+uncommons-watchmaker (0.7.1+git20171206.1.33d9423+ds-1) UNRELEASED; urgency=low
+
+ * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk> Fri, 20 Jan 2023 11:53:14 -0000
+
uncommons-watchmaker (0.7.1-3) unstable; urgency=medium
* Team upload.
diff --git a/etc/intellij/examples.iml b/etc/intellij/examples.iml
deleted file mode 100644
index ebf7e67..0000000
--- a/etc/intellij/examples.iml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" inherit-compiler-output="false">
- <output url="file://$MODULE_DIR$/../../examples/build/classes/main" />
- <output-test url="file://$MODULE_DIR$/../../examples/build/classes/test" />
- <exclude-output />
- <content url="file://$MODULE_DIR$/../../examples">
- <sourceFolder url="file://$MODULE_DIR$/../../examples/src/java/main" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/../../examples/src/java/resources" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/../../examples/src/java/test" isTestSource="true" />
- <excludeFolder url="file://$MODULE_DIR$/../../examples/build" />
- </content>
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="module" module-name="framework" />
- <orderEntry type="module" module-name="swing" />
- <orderEntry type="library" name="testng-5.10-jdk15" level="project" />
- <orderEntry type="library" name="fest-swing-1.1" level="project" />
- </component>
-</module>
-
diff --git a/etc/intellij/framework.iml b/etc/intellij/framework.iml
deleted file mode 100644
index ac8cf22..0000000
--- a/etc/intellij/framework.iml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" inherit-compiler-output="false">
- <output url="file://$MODULE_DIR$/../../framework/build/classes/main" />
- <output-test url="file://$MODULE_DIR$/../../framework/build/classes/test" />
- <exclude-output />
- <content url="file://$MODULE_DIR$/../../framework">
- <sourceFolder url="file://$MODULE_DIR$/../../framework/src/java/main" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/../../framework/src/java/test" isTestSource="true" />
- <excludeFolder url="file://$MODULE_DIR$/../../framework/build" />
- </content>
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="library" exported="" name="uncommons-maths-1.2.1" level="project" />
- <orderEntry type="module-library">
- <library>
- <CLASSES>
- <root url="jar://$MODULE_DIR$/../../framework/lib/runtime/google-collect-1.0.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="library" name="testng-5.10-jdk15" level="project" />
- </component>
-</module>
-
diff --git a/etc/intellij/global.iml b/etc/intellij/global.iml
deleted file mode 100644
index 9e20af6..0000000
--- a/etc/intellij/global.iml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" inherit-compiler-output="true">
- <exclude-output />
- <content url="file://$MODULE_DIR$/../..">
- <excludeFolder url="file://$MODULE_DIR$/../../dist" />
- <excludeFolder url="file://$MODULE_DIR$/../../docs" />
- <excludeFolder url="file://$MODULE_DIR$/../../examples" />
- <excludeFolder url="file://$MODULE_DIR$/../../framework" />
- <excludeFolder url="file://$MODULE_DIR$/../../swing" />
- <excludeFolder url="file://$MODULE_DIR$/../../temp" />
- <excludeFolder url="file://$MODULE_DIR$/../../website" />
- </content>
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- </component>
-</module>
-
diff --git a/etc/intellij/swing.iml b/etc/intellij/swing.iml
deleted file mode 100644
index 4178876..0000000
--- a/etc/intellij/swing.iml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" inherit-compiler-output="false">
- <output url="file://$MODULE_DIR$/../../swing/build/classes/main" />
- <output-test url="file://$MODULE_DIR$/../../swing/build/classes/test" />
- <exclude-output />
- <content url="file://$MODULE_DIR$/../../swing">
- <sourceFolder url="file://$MODULE_DIR$/../../swing/src/java/main" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/../../swing/src/java/test" isTestSource="true" />
- <excludeFolder url="file://$MODULE_DIR$/../../swing/build" />
- </content>
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="module" module-name="framework" />
- <orderEntry type="module-library">
- <library>
- <CLASSES>
- <root url="jar://$MODULE_DIR$/../../swing/lib/runtime/jfreechart-1.0.13.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="module-library">
- <library>
- <CLASSES>
- <root url="jar://$MODULE_DIR$/../../swing/lib/runtime/jcommon-1.0.16.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="library" name="testng-5.10-jdk15" level="project" />
- <orderEntry type="library" name="fest-swing-1.1" level="project" />
- </component>
-</module>
-
diff --git a/etc/intellij/watchmaker.ipr b/etc/intellij/watchmaker.ipr
deleted file mode 100644
index 9a1af2e..0000000
--- a/etc/intellij/watchmaker.ipr
+++ /dev/null
@@ -1,1054 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project relativePaths="true" version="4">
- <component name="AntConfiguration">
- <defaultAnt bundledAnt="true" />
- <buildFile url="file://$PROJECT_DIR$/../../build.xml">
- <additionalClassPath />
- <antReference projectDefault="true" />
- <customJdkName value="" />
- <maximumHeapSize value="128" />
- <maximumStackSize value="32" />
- <properties />
- <executeOn event="beforeRun" target="dist" />
- <executeOn event="beforeRun" target="dist" runConfigurationType="Applet" runConfigurationName="Mona Lisa Applet" />
- </buildFile>
- </component>
- <component name="BuildJarProjectSettings">
- <option name="BUILD_JARS_ON_MAKE" value="false" />
- </component>
- <component name="CodeStyleProjectProfileManger">
- <option name="PROJECT_PROFILE" />
- <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
- </component>
- <component name="CodeStyleSettingsManager">
- <option name="PER_PROJECT_SETTINGS">
- <value>
- <ADDITIONAL_INDENT_OPTIONS fileType="java">
- <option name="INDENT_SIZE" value="4" />
- <option name="CONTINUATION_INDENT_SIZE" value="8" />
- <option name="TAB_SIZE" value="4" />
- <option name="USE_TAB_CHARACTER" value="false" />
- <option name="SMART_TABS" value="false" />
- <option name="LABEL_INDENT_SIZE" value="0" />
- <option name="LABEL_INDENT_ABSOLUTE" value="false" />
- </ADDITIONAL_INDENT_OPTIONS>
- <ADDITIONAL_INDENT_OPTIONS fileType="js">
- <option name="INDENT_SIZE" value="4" />
- <option name="CONTINUATION_INDENT_SIZE" value="8" />
- <option name="TAB_SIZE" value="4" />
- <option name="USE_TAB_CHARACTER" value="false" />
- <option name="SMART_TABS" value="false" />
- <option name="LABEL_INDENT_SIZE" value="0" />
- <option name="LABEL_INDENT_ABSOLUTE" value="false" />
- </ADDITIONAL_INDENT_OPTIONS>
- <ADDITIONAL_INDENT_OPTIONS fileType="jsp">
- <option name="INDENT_SIZE" value="4" />
- <option name="CONTINUATION_INDENT_SIZE" value="8" />
- <option name="TAB_SIZE" value="4" />
- <option name="USE_TAB_CHARACTER" value="false" />
- <option name="SMART_TABS" value="false" />
- <option name="LABEL_INDENT_SIZE" value="0" />
- <option name="LABEL_INDENT_ABSOLUTE" value="false" />
- </ADDITIONAL_INDENT_OPTIONS>
- <ADDITIONAL_INDENT_OPTIONS fileType="sql">
- <option name="INDENT_SIZE" value="2" />
- <option name="CONTINUATION_INDENT_SIZE" value="8" />
- <option name="TAB_SIZE" value="4" />
- <option name="USE_TAB_CHARACTER" value="false" />
- <option name="SMART_TABS" value="false" />
- <option name="LABEL_INDENT_SIZE" value="0" />
- <option name="LABEL_INDENT_ABSOLUTE" value="false" />
- </ADDITIONAL_INDENT_OPTIONS>
- <ADDITIONAL_INDENT_OPTIONS fileType="xml">
- <option name="INDENT_SIZE" value="4" />
- <option name="CONTINUATION_INDENT_SIZE" value="8" />
- <option name="TAB_SIZE" value="4" />
- <option name="USE_TAB_CHARACTER" value="false" />
- <option name="SMART_TABS" value="false" />
- <option name="LABEL_INDENT_SIZE" value="0" />
- <option name="LABEL_INDENT_ABSOLUTE" value="false" />
- </ADDITIONAL_INDENT_OPTIONS>
- </value>
- </option>
- <option name="USE_PER_PROJECT_SETTINGS" value="false" />
- </component>
- <component name="CompilerConfiguration">
- <option name="DEFAULT_COMPILER" value="Javac" />
- <option name="DEPLOY_AFTER_MAKE" value="0" />
- <resourceExtensions>
- <entry name=".+\.(properties|xml|html|dtd|tld)" />
- <entry name=".+\.(gif|png|jpeg|jpg)" />
- </resourceExtensions>
- <wildcardResourcePatterns>
- <entry name="?*.properties" />
- <entry name="?*.xml" />
- <entry name="?*.gif" />
- <entry name="?*.png" />
- <entry name="?*.jpeg" />
- <entry name="?*.jpg" />
- <entry name="?*.html" />
- <entry name="?*.dtd" />
- <entry name="?*.tld" />
- </wildcardResourcePatterns>
- </component>
- <component name="CopyrightManager" default="Apache Licence">
- <copyright>
- <option name="notice" value="Copyright 2006-2010 Daniel W. Dyer 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." />
- <option name="keyword" value="Copyright" />
- <option name="myName" value="Apache Licence" />
- <option name="myLocal" value="true" />
- </copyright>
- <module2copyright />
- <LanguageOptions name="JAVA">
- <option name="fileTypeOverride" value="3" />
- <option name="relativeBefore" value="true" />
- <option name="addBlankAfter" value="false" />
- <option name="fileLocation" value="1" />
- <option name="block" value="false" />
- <option name="separateBefore" value="true" />
- <option name="separateAfter" value="true" />
- <option name="prefixLines" value="false" />
- <option name="lenBefore" value="79" />
- <option name="lenAfter" value="79" />
- <option name="box" value="false" />
- <option name="filler" value="=" />
- </LanguageOptions>
- <LanguageOptions name="XML">
- <option name="fileTypeOverride" value="3" />
- <option name="relativeBefore" value="true" />
- <option name="addBlankAfter" value="true" />
- <option name="fileLocation" value="1" />
- <option name="block" value="true" />
- <option name="separateBefore" value="true" />
- <option name="separateAfter" value="true" />
- <option name="prefixLines" value="false" />
- <option name="lenBefore" value="79" />
- <option name="lenAfter" value="79" />
- <option name="box" value="false" />
- <option name="filler" value="=" />
- </LanguageOptions>
- </component>
- <component name="CppTools.Loader" reportImplicitCastToBool="false" warnedAboutFileOutOfSourceRoot="true" version="2" currentProject="$PROJECT_DIR$/../docbook/Makefile" compilerSelect="AUTO" />
- <component name="DependenciesAnalyzeManager">
- <option name="myForwardDirection" value="false" />
- </component>
- <component name="DependencyValidationManager">
- <scope name="Inspections" pattern="!file[global]:*//*&&!file[swing]:src/java/test//*&&!file[framework]:src/java/test//*&&!file[examples]:src/java/test//*" />
- <option name="SKIP_IMPORT_STATEMENTS" value="false" />
- </component>
- <component name="EclipseCompilerSettings">
- <option name="DEBUGGING_INFO" value="true" />
- <option name="GENERATE_NO_WARNINGS" value="true" />
- <option name="DEPRECATION" value="false" />
- <option name="ADDITIONAL_OPTIONS_STRING" value="" />
- <option name="MAXIMUM_HEAP_SIZE" value="128" />
- </component>
- <component name="EclipseEmbeddedCompilerSettings">
- <option name="DEBUGGING_INFO" value="true" />
- <option name="GENERATE_NO_WARNINGS" value="true" />
- <option name="DEPRECATION" value="false" />
- <option name="ADDITIONAL_OPTIONS_STRING" value="" />
- <option name="MAXIMUM_HEAP_SIZE" value="128" />
- </component>
- <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
- <component name="EntryPointsManager">
- <entry_points version="2.0" />
- </component>
- <component name="ExportToHTMLSettings">
- <option name="PRINT_LINE_NUMBERS" value="false" />
- <option name="OPEN_IN_BROWSER" value="false" />
- <option name="OUTPUT_DIRECTORY" />
- </component>
- <component name="IdProvider" IDEtalkID="0D0AA9419EF81876CD8BD46BC2DFC45D" />
- <component name="InspectionProjectProfileManager">
- <option name="PROJECT_PROFILE" value="Project Default" />
- <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
- <scopes />
- <profiles>
- <profile version="1.0" is_locked="false">
- <option name="myName" value="Project Default" />
- <option name="myLocal" value="false" />
- <inspection_tool class="InstanceofChain" level="WARNING" enabled="true" />
- <inspection_tool class="ClassReferencesSubclass" level="WARNING" enabled="true" />
- <inspection_tool class="DeclareCollectionAsInterface" level="WARNING" enabled="true">
- <option name="ignoreLocalVariables" value="false" />
- <option name="ignorePrivateMethodsAndFields" value="false" />
- </inspection_tool>
- <inspection_tool class="InstanceofThis" level="WARNING" enabled="true" />
- <inspection_tool class="OverlyStrongTypeCast" level="WARNING" enabled="true">
- <option name="ignoreInMatchingInstanceof" value="false" />
- </inspection_tool>
- <inspection_tool class="MethodOnlyUsedFromInnerClass" level="WARNING" enabled="true">
- <option name="ignoreMethodsAccessedFromAnonymousClass" value="true" />
- </inspection_tool>
- <inspection_tool class="ReplaceAssignmentWithOperatorAssignment" level="WARNING" enabled="true">
- <option name="ignoreLazyOperators" value="true" />
- <option name="ignoreObscureOperators" value="false" />
- </inspection_tool>
- <inspection_tool class="AssignmentToForLoopParameter" level="WARNING" enabled="true">
- <option name="m_checkForeachParameters" value="false" />
- </inspection_tool>
- <inspection_tool class="AssignmentToCatchBlockParameter" level="WARNING" enabled="true" />
- <inspection_tool class="AssignmentToMethodParameter" level="WARNING" enabled="true">
- <option name="ignoreTransformationOfOriginalParameter" value="false" />
- </inspection_tool>
- <inspection_tool class="AssignmentToStaticFieldFromInstanceMethod" level="WARNING" enabled="true" />
- <inspection_tool class="AssignmentUsedAsCondition" level="WARNING" enabled="true" />
- <inspection_tool class="NestedAssignment" level="WARNING" enabled="true" />
- <inspection_tool class="ClassNameDiffersFromFileName" level="WARNING" enabled="true" />
- <inspection_tool class="ClassInTopLevelPackage" level="WARNING" enabled="true" />
- <inspection_tool class="EmptyClass" level="WARNING" enabled="true" />
- <inspection_tool class="MarkerInterface" level="WARNING" enabled="true" />
- <inspection_tool class="MultipleTopLevelClassesInFile" level="WARNING" enabled="true" />
- <inspection_tool class="MissingOverrideAnnotation" level="WARNING" enabled="true" />
- <inspection_tool class="MissingDeprecatedAnnotation" level="WARNING" enabled="true" />
- <inspection_tool class="ProtectedMemberInFinalClass" level="WARNING" enabled="true" />
- <inspection_tool class="PublicConstructorInNonPublicClass" level="WARNING" enabled="true" />
- <inspection_tool class="StaticNonFinalField" level="WARNING" enabled="true" />
- <inspection_tool class="CloneCallsConstructors" level="WARNING" enabled="true" />
- <inspection_tool class="CloneInNonCloneableClass" level="WARNING" enabled="true" />
- <inspection_tool class="CloneableImplementsClone" level="WARNING" enabled="true">
- <option name="m_ignoreCloneableDueToInheritance" value="false" />
- </inspection_tool>
- <inspection_tool class="ObsoleteCollection" level="WARNING" enabled="true">
- <option name="ignoreLibraryArguments" value="true" />
- </inspection_tool>
- <inspection_tool class="CallToStringConcatCanBeReplacedByOperator" level="WARNING" enabled="true" />
- <inspection_tool class="CStyleArrayDeclaration" level="WARNING" enabled="true" />
- <inspection_tool class="ChainedEquality" level="WARNING" enabled="true" />
- <inspection_tool class="ConfusingOctalEscape" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessaryConstantArrayCreationExpression" level="WARNING" enabled="true" />
- <inspection_tool class="ControlFlowStatementWithoutBraces" level="WARNING" enabled="true" />
- <inspection_tool class="ListIndexOfReplaceableByContains" level="WARNING" enabled="true" />
- <inspection_tool class="MissortedModifiers" level="WARNING" enabled="true">
- <option name="m_requireAnnotationsFirst" value="true" />
- </inspection_tool>
- <inspection_tool class="MultipleDeclaration" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessaryCallToStringValueOf" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessarilyQualifiedStaticUsage" level="WARNING" enabled="true">
- <option name="m_ignoreStaticFieldAccesses" value="false" />
- <option name="m_ignoreStaticMethodCalls" value="false" />
- <option name="m_ignoreStaticAccessFromStaticContext" value="false" />
- </inspection_tool>
- <inspection_tool class="UnnecessarySuperQualifier" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessaryInterfaceModifier" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessaryFullyQualifiedName" level="WARNING" enabled="true">
- <option name="m_ignoreJavadoc" value="true" />
- </inspection_tool>
- <inspection_tool class="UnnecessarySuperConstructor" level="WARNING" enabled="true" />
- <inspection_tool class="ClassMayBeInterface" level="WARNING" enabled="true" />
- <inspection_tool class="ConstantDeclaredInInterface" level="WARNING" enabled="true" />
- <inspection_tool class="Singleton" level="WARNING" enabled="true" />
- <inspection_tool class="UtilityClassWithPublicConstructor" level="WARNING" enabled="true" />
- <inspection_tool class="UtilityClassWithoutPrivateConstructor" level="WARNING" enabled="true">
- <option name="ignoreClassesWithOnlyMain" value="false" />
- </inspection_tool>
- <inspection_tool class="ThreadDumpStack" level="WARNING" enabled="true" />
- <inspection_tool class="FieldMayBeFinal" level="WARNING" enabled="true" />
- <inspection_tool class="RedundantImplements" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessaryConstructor" level="WARNING" enabled="true" />
- <inspection_tool class="ReturnThis" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessaryBlockStatement" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessaryEnumModifier" level="WARNING" enabled="true" />
- <inspection_tool class="MultipleTypedDeclaration" level="WARNING" enabled="true" />
- <inspection_tool class="BreakStatementWithLabel" level="WARNING" enabled="true" />
- <inspection_tool class="ConditionalExpressionWithIdenticalBranches" level="WARNING" enabled="true" />
- <inspection_tool class="NegatedConditional" level="WARNING" enabled="true">
- <option name="m_ignoreNegatedNullComparison" value="true" />
- </inspection_tool>
- <inspection_tool class="ContinueStatement" level="WARNING" enabled="true" />
- <inspection_tool class="ContinueStatementWithLabel" level="WARNING" enabled="true" />
- <inspection_tool class="DefaultNotLastCaseInSwitch" level="WARNING" enabled="true" />
- <inspection_tool class="DoubleNegation" level="WARNING" enabled="true" />
- <inspection_tool class="DuplicateCondition" level="WARNING" enabled="true">
- <option name="ignoreMethodCalls" value="false" />
- </inspection_tool>
- <inspection_tool class="DuplicateBooleanBranch" level="WARNING" enabled="true" />
- <inspection_tool class="EnumSwitchStatementWhichMissesCases" level="WARNING" enabled="true">
- <option name="ignoreSwitchStatementsWithDefault" value="true" />
- </inspection_tool>
- <inspection_tool class="ForLoopReplaceableByWhile" level="WARNING" enabled="true">
- <option name="m_ignoreLoopsWithoutConditions" value="false" />
- </inspection_tool>
- <inspection_tool class="ForLoopWithMissingComponent" level="WARNING" enabled="true">
- <option name="ignoreCollectionLoops" value="false" />
- </inspection_tool>
- <inspection_tool class="IfStatementWithIdenticalBranches" level="WARNING" enabled="true" />
- <inspection_tool class="NegatedIfElse" level="WARNING" enabled="true">
- <option name="m_ignoreNegatedNullComparison" value="true" />
- </inspection_tool>
- <inspection_tool class="IfStatementWithTooManyBranches" level="WARNING" enabled="true">
- <option name="m_limit" value="3" />
- </inspection_tool>
- <inspection_tool class="LabeledStatement" level="WARNING" enabled="true" />
- <inspection_tool class="SwitchStatementWithConfusingDeclaration" level="WARNING" enabled="true" />
- <inspection_tool class="LoopConditionNotUpdatedInsideLoop" level="WARNING" enabled="true">
- <option name="ignoreIterators" value="false" />
- </inspection_tool>
- <inspection_tool class="LoopWithImplicitTerminationCondition" level="WARNING" enabled="true" />
- <inspection_tool class="NestedSwitchStatement" level="WARNING" enabled="true" />
- <inspection_tool class="PointlessIndexOfComparison" level="WARNING" enabled="true" />
- <inspection_tool class="SwitchStatementsWithoutDefault" level="WARNING" enabled="true">
- <option name="m_ignoreFullyCoveredEnums" value="true" />
- </inspection_tool>
- <inspection_tool class="TooBroadScope" level="WARNING" enabled="true">
- <option name="m_allowConstructorAsInitializer" value="false" />
- <option name="m_onlyLookAtBlocks" value="false" />
- </inspection_tool>
- <inspection_tool class="ConstantValueVariableUse" level="WARNING" enabled="true" />
- <inspection_tool class="ReuseOfLocalVariable" level="WARNING" enabled="true" />
- <inspection_tool class="ReuseOfLocalVariableJS" level="WARNING" enabled="true" />
- <inspection_tool class="RedundantSuppression" level="WARNING" enabled="true" />
- <inspection_tool class="RedundantThrowsDeclaration" level="WARNING" enabled="true" />
- <inspection_tool class="UnusedLibrary" level="WARNING" enabled="true" />
- <inspection_tool class="PackageVisibleField" level="WARNING" enabled="true" />
- <inspection_tool class="PublicField" level="WARNING" enabled="true">
- <option name="ignoreEnums" value="false" />
- </inspection_tool>
- <inspection_tool class="ReturnOfCollectionField" level="WARNING" enabled="true">
- <option name="ignorePrivateMethods" value="true" />
- </inspection_tool>
- <inspection_tool class="ReturnOfDateField" level="WARNING" enabled="true" />
- <inspection_tool class="CatchGenericClass" level="WARNING" enabled="true" />
- <inspection_tool class="ErrorRethrown" level="WARNING" enabled="true" />
- <inspection_tool class="ThreadDeathRethrown" level="WARNING" enabled="true" />
- <inspection_tool class="NonFinalFieldOfException" level="WARNING" enabled="true" />
- <inspection_tool class="TooBroadCatch" level="WARNING" enabled="true">
- <option name="onlyWarnOnRootExceptions" value="false" />
- </inspection_tool>
- <inspection_tool class="BadExceptionCaught" level="WARNING" enabled="true">
- <option name="exceptionsString" value="java.lang.NullPointerException,java.lang.IllegalMonitorStateException,java.lang.ArrayIndexOutOfBoundsException" />
- </inspection_tool>
- <inspection_tool class="ThrowCaughtLocally" level="WARNING" enabled="true">
- <option name="ignoreRethrownExceptions" value="false" />
- </inspection_tool>
- <inspection_tool class="ExceptionFromCatchWhichDoesntWrap" level="WARNING" enabled="true">
- <option name="ignoreGetMessage" value="true" />
- </inspection_tool>
- <inspection_tool class="EmptyCatchBlockJS" level="WARNING" enabled="true" />
- <inspection_tool class="EmptyTryBlockJS" level="WARNING" enabled="true" />
- <inspection_tool class="EmptyFinallyBlockJS" level="WARNING" enabled="true" />
- <inspection_tool class="FinalizeNotProtected" level="WARNING" enabled="true" />
- <inspection_tool class="EqualsAndHashcode" level="WARNING" enabled="true" />
- <inspection_tool class="NonJREEmulationClassesInClientCode" level="ERROR" enabled="false" />
- <inspection_tool class="GwtDeprecatedPropertyKeyJavadocTag" level="WARNING" enabled="false" />
- <inspection_tool class="GwtObsoleteTypeArgsJavadocTag" level="WARNING" enabled="false" />
- <inspection_tool class="GwtServiceNotRegistered" level="ERROR" enabled="false" />
- <inspection_tool class="GwtInconsistentI18nInterface" level="ERROR" enabled="false" />
- <inspection_tool class="GWTRemoteServiceAsyncCheck" level="ERROR" enabled="false" />
- <inspection_tool class="GwtInconsistentSerializableClass" level="ERROR" enabled="false" />
- <inspection_tool class="GwtMethodWithParametersInConstantsInterface" level="ERROR" enabled="false" />
- <inspection_tool class="NonSerializableServiceParameters" level="ERROR" enabled="false" />
- <inspection_tool class="gwtRawAsyncCallback" level="WARNING" enabled="false" />
- <inspection_tool class="GwtJavaScriptReferences" level="ERROR" enabled="false" />
- <inspection_tool class="GWTStyleCheck" level="ERROR" enabled="false" />
- <inspection_tool class="GwtToHtmlReferences" level="ERROR" enabled="false" />
- <inspection_tool class="HibernateMappingDatasourceDomInspection" level="ERROR" enabled="false" />
- <inspection_tool class="HibernateConfigDomInspection" level="ERROR" enabled="false" />
- <inspection_tool class="HibernateMappingDomInspection" level="ERROR" enabled="false" />
- <inspection_tool class="OnDemandImport" level="WARNING" enabled="true" />
- <inspection_tool class="SamePackageImport" level="WARNING" enabled="true" />
- <inspection_tool class="JavaLangImport" level="WARNING" enabled="true" />
- <inspection_tool class="RedundantImport" level="WARNING" enabled="true" />
- <inspection_tool class="AbstractMethodOverridesConcreteMethod" level="WARNING" enabled="true" />
- <inspection_tool class="AbstractMethodOverridesAbstractMethod" level="WARNING" enabled="true" />
- <inspection_tool class="RedundantMethodOverride" level="WARNING" enabled="true" />
- <inspection_tool class="NonProtectedConstructorInAbstractClass" level="WARNING" enabled="true">
- <option name="m_ignoreNonPublicClasses" value="false" />
- </inspection_tool>
- <inspection_tool class="StaticInheritance" level="WARNING" enabled="true" />
- <inspection_tool class="AbstractMethodCallInConstructor" level="WARNING" enabled="true" />
- <inspection_tool class="InstanceVariableUninitializedUse" level="WARNING" enabled="true">
- <option name="m_ignorePrimitives" value="false" />
- </inspection_tool>
- <inspection_tool class="NonFinalStaticVariableUsedInClassInitialization" level="WARNING" enabled="true" />
- <inspection_tool class="OverridableMethodCallDuringObjectConstruction" level="WARNING" enabled="true" />
- <inspection_tool class="OverriddenMethodCallDuringObjectConstruction" level="WARNING" enabled="true" />
- <inspection_tool class="StaticVariableInitialization" level="WARNING" enabled="true">
- <option name="m_ignorePrimitives" value="false" />
- </inspection_tool>
- <inspection_tool class="StaticVariableUninitializedUse" level="WARNING" enabled="true">
- <option name="m_ignorePrimitives" value="false" />
- </inspection_tool>
- <inspection_tool class="ThisEscapedInConstructor" level="WARNING" enabled="true" />
- <inspection_tool class="NonThreadSafeLazyInitialization" level="WARNING" enabled="true" />
- <inspection_tool class="DateToString" level="WARNING" enabled="true" />
- <inspection_tool class="TimeToString" level="WARNING" enabled="true" />
- <inspection_tool class="SimplifiableIfStatement" level="WARNING" enabled="false" />
- <inspection_tool class="CollectionsFieldAccessReplaceableByMethodCall" level="WARNING" enabled="true" />
- <inspection_tool class="IndexOfReplaceableByContains" level="WARNING" enabled="true" />
- <inspection_tool class="RawUseOfParameterizedType" level="WARNING" enabled="true">
- <option name="ignoreObjectConstruction" value="true" />
- <option name="ignoreTypeCasts" value="false" />
- </inspection_tool>
- <inspection_tool class="EnumerationCanBeIteration" level="WARNING" enabled="true" />
- <inspection_tool class="ELValidationInJSP" level="WARNING" enabled="false" />
- <inspection_tool class="JspDirectiveInspection" level="ERROR" enabled="false" />
- <inspection_tool class="ELSpecValidationInJSP" level="WARNING" enabled="false" />
- <inspection_tool class="JspPropertiesInspection" level="ERROR" enabled="false" />
- <inspection_tool class="ReferencesToClassesFromDefaultPackagesInJSPFile" level="ERROR" enabled="false" />
- <inspection_tool class="SelfIncludingJspFiles" level="ERROR" enabled="false" />
- <inspection_tool class="ClassWithMultipleLoggers" level="WARNING" enabled="true">
- <option name="loggerClassName" value="java.util.logging.Logger" />
- </inspection_tool>
- <inspection_tool class="NonStaticFinalLogger" level="WARNING" enabled="true">
- <option name="loggerClassName" value="java.util.logging.Logger" />
- </inspection_tool>
- <inspection_tool class="ZeroLengthArrayInitialization" level="WARNING" enabled="true" />
- <inspection_tool class="AnnotationNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[A-Z][A-Za-z\d]*" />
- <option name="m_minLength" value="8" />
- <option name="m_maxLength" value="64" />
- </inspection_tool>
- <inspection_tool class="BooleanMethodNameMustStartWithQuestion" level="WARNING" enabled="true">
- <option name="questionString" value="is,can,has,should,could,will,shall,check,contains,equals,add,put,remove,startsWith,endsWith" />
- </inspection_tool>
- <inspection_tool class="ClassNameSameAsAncestorName" level="WARNING" enabled="true" />
- <inspection_tool class="ClassNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[A-Z][A-Za-z\d]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="64" />
- </inspection_tool>
- <inspection_tool class="ConfusingMainMethod" level="WARNING" enabled="true" />
- <inspection_tool class="ConstantNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[A-Z_\d]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="32" />
- </inspection_tool>
- <inspection_tool class="EnumeratedClassNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[A-Z][A-Za-z\d]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="64" />
- </inspection_tool>
- <inspection_tool class="EnumeratedConstantNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[A-Z][A-Z\d]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="32" />
- </inspection_tool>
- <inspection_tool class="ExceptionNameDoesntEndWithException" level="WARNING" enabled="true" />
- <inspection_tool class="InstanceMethodNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[a-z][A-Za-z\d]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="64" />
- </inspection_tool>
- <inspection_tool class="InstanceVariableNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[a-z][A-Za-z\d]*" />
- <option name="m_minLength" value="2" />
- <option name="m_maxLength" value="32" />
- </inspection_tool>
- <inspection_tool class="InterfaceNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[A-Z][A-Za-z\d]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="64" />
- </inspection_tool>
- <inspection_tool class="LocalVariableNamingConvention" level="WARNING" enabled="true">
- <option name="m_ignoreForLoopParameters" value="false" />
- <option name="m_ignoreCatchParameters" value="false" />
- <option name="m_regex" value="[a-z][A-Za-z\d]*" />
- <option name="m_minLength" value="1" />
- <option name="m_maxLength" value="64" />
- </inspection_tool>
- <inspection_tool class="MethodNameSameAsParentName" level="WARNING" enabled="true" />
- <inspection_tool class="MethodNamesDifferOnlyByCase" level="WARNING" enabled="true" />
- <inspection_tool class="ParameterNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[a-z][A-Za-z\d]*" />
- <option name="m_minLength" value="1" />
- <option name="m_maxLength" value="64" />
- </inspection_tool>
- <inspection_tool class="NonBooleanMethodNameMayNotStartWithQuestion" level="WARNING" enabled="true">
- <option name="questionString" value="is,can,has,should,could,will,shall,contains,equals,startsWith,endsWith" />
- </inspection_tool>
- <inspection_tool class="UpperCaseFieldNameNotConstant" level="WARNING" enabled="true" />
- <inspection_tool class="NonExceptionNameEndsWithException" level="WARNING" enabled="true" />
- <inspection_tool class="ParameterNameDiffersFromOverriddenParameter" level="WARNING" enabled="false">
- <option name="m_ignoreSingleCharacterNames" value="false" />
- <option name="m_ignoreOverridesOfLibraryMethods" value="true" />
- </inspection_tool>
- <inspection_tool class="StaticMethodNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[a-z][A-Za-z\d]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="32" />
- </inspection_tool>
- <inspection_tool class="StaticVariableNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[a-z][A-Za-z\d]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="32" />
- </inspection_tool>
- <inspection_tool class="TypeParameterNamingConvention" level="WARNING" enabled="true">
- <option name="m_regex" value="[A-Z\d]" />
- <option name="m_minLength" value="1" />
- <option name="m_maxLength" value="1" />
- </inspection_tool>
- <inspection_tool class="DollarSignInName" level="WARNING" enabled="true" />
- <inspection_tool class="FunctionNamingConventionJS" level="WARNING" enabled="false">
- <option name="m_regex" value="[a-z][A-Za-z]*" />
- <option name="m_minLength" value="3" />
- <option name="m_maxLength" value="32" />
- </inspection_tool>
- <inspection_tool class="ComparisonOfShortAndChar" level="WARNING" enabled="true" />
- <inspection_tool class="ComparisonToNaN" level="WARNING" enabled="true" />
- <inspection_tool class="ConfusingFloatingPointLiteral" level="WARNING" enabled="true" />
- <inspection_tool class="ConstantMathCall" level="WARNING" enabled="true" />
- <inspection_tool class="DivideByZero" level="WARNING" enabled="true" />
- <inspection_tool class="BigDecimalEquals" level="WARNING" enabled="true" />
- <inspection_tool class="ImplicitNumericConversion" level="WARNING" enabled="false">
- <option name="ignoreWideningConversions" value="true" />
- <option name="ignoreCharConversions" value="false" />
- </inspection_tool>
- <inspection_tool class="IntegerDivisionInFloatingPointContext" level="WARNING" enabled="true" />
- <inspection_tool class="LongLiteralsEndingWithLowercaseL" level="WARNING" enabled="true" />
- <inspection_tool class="CachedNumberConstructorCall" level="WARNING" enabled="true" />
- <inspection_tool class="BadOddness" level="WARNING" enabled="true" />
- <inspection_tool class="UnaryPlus" level="WARNING" enabled="true" />
- <inspection_tool class="UnnecessaryUnaryMinus" level="WARNING" enabled="true" />
- <inspection_tool class="UnpredictableBigDecimalConstructorCall" level="WARNING" enabled="true" />
- <inspection_tool class="PackageInMultipleModules" level="WARNING" enabled="true" />
- <inspection_tool class="TrivialStringConcatenation" level="WARNING" enabled="true" />
- <inspection_tool class="StringBufferReplaceableByString" level="WARNING" enabled="true" />
- <inspection_tool class="EqualsHashCodeCalledOnUrl" level="WARNING" enabled="true" />
- <inspection_tool class="FieldMayBeStatic" level="WARNING" enabled="true" />
- <inspection_tool class="InnerClassMayBeStatic" level="WARNING" enabled="true" />
- <inspection_tool class="KeySetIterationMayUseEntrySet" level="WARNING" enabled="true" />
- <inspection_tool class="CollectionContainsUrl" level="WARNING" enabled="true" />
- <inspection_tool class="MapReplaceableByEnumMap" level="WARNING" enabled="true" />
- <inspection_tool class="StringReplaceableByStringBuffer" level="WARNING" enabled="true">
- <option name="onlyWarnOnLoop" value="true" />
- </inspection_tool>
- <inspection_tool class="SubstringZero" level="WARNING" enabled="true" />
- <inspection_tool class="SetReplaceableByEnumSet" level="WARNING" enabled="true" />
- <inspection_tool class="LengthOneStringsInConcatenation" level="WARNING" enabled="true" />
- <inspection_tool class="LengthOneStringInIndexOf" level="WARNING" enabled="true" />
- <inspection_tool class="SizeReplaceableByIsEmpty" level="WARNING" enabled="true">
- <option name="ignoreNegations" value="false" />
- </inspection_tool>
- <inspection_tool class="StringConcatenationInLoops" level="WARNING" enabled="true">
- <option name="m_ignoreUnlessAssigned" value="false" />
- </inspection_tool>
- <inspection_tool class="StringEqualsEmptyString" level="WARNING" enabled="true" />
- <inspection_tool class="StringBufferReplaceableByStringBuilder" level="WARNING" enabled="true" />
- <inspection_tool class="StringBufferToStringInConcatenation" level="WARNING" enabled="true" />
- <inspection_tool class="TailRecursion" level="WARNING" enabled="true" />
- <inspection_tool class="RandomDoubleForRandomInteger" level="WARNING" enabled="true" />
- <inspection_tool class="HardcodedLineSeparators" level="WARNING" enabled="true" />
- <inspection_tool class="UseOfSunClasses" level="WARNING" enabled="true" />
- <inspection_tool class="OctalIntegerJS" level="WARNING" enabled="true" />
- <inspection_tool class="BlockStatementJS" level="WARNING" enabled="true" />
- <inspection_tool class="CallerJS" level="WARNING" enabled="true" />
- <inspection_tool class="VoidExpressionJS" level="WARNING" enabled="true" />
- <inspection_tool class="WithStatementJS" level="WARNING" enabled="true" />
- <inspection_tool class="ObjectToString" level="WARNING" enabled="true" />
- <inspection_tool class="CastConflictsWithInstanceof" level="WARNING" enabled="true" />
- <inspection_tool class="CastToIncompatibleInterface" level="WARNING" enabled="true" />
- <inspection_tool class="CollectionAddedToSelf" level="WARNING" enabled="true" />
- <inspection_tool class="ComparableImplementedButEqualsNotOverridden" level="WARNING" enabled="true" />
- <inspection_tool class="CovariantCompareTo" level="WARNING" enabled="true" />
- <inspection_tool class="CovariantEquals" level="WARNING" enabled="true" />
- <inspection_tool class="EmptyInitializer" level="WARNING" enabled="true" />
- <inspection_tool class="ForLoopThatDoesntUseLoopVariable" level="WARNING" enabled="true" />
- <inspection_tool class="InstanceofIncompatibleInterface" level="WARNING" enabled="true" />
- <inspection_tool class="CompareToUsesNonFinalVariable" level="WARNING" enabled="true" />
- <inspection_tool class="HashCodeUsesNonFinalVariable" level="WARNING" enabled="true" />
- <inspection_tool class="EqualsUsesNonFinalVariable" level="WARNING" enabled="true" />
- <inspection_tool class="NonShortCircuitBoolean" level="WARNING" enabled="true" />
- <inspection_tool class="SubtractionInCompareTo" level="WARNING" enabled="true" />
- <inspection_tool class="StaticCallOnSubclass" level="WARNING" enabled="true" />
- <inspection_tool class="SuspiciousIndentAfterControlStatement" level="WARNING" enabled="true" />
- <inspection_tool class="TextLabelInSwitchStatement" level="WARNING" enabled="true" />
- <inspection_tool class="ArchaicSystemPropertyAccess" level="WARNING" enabled="true" />
- <inspection_tool class="UseOfPropertiesAsHashtable" level="WARNING" enabled="true" />
- <inspection_tool class="SocketResource" level="WARNING" enabled="true" />
- <inspection_tool class="IOResource" level="WARNING" enabled="true" />
- <inspection_tool class="LoadLibraryWithNonConstantString" level="WARNING" enabled="true" />
- <inspection_tool class="PublicStaticCollectionField" level="WARNING" enabled="true" />
- <inspection_tool class="PublicStaticArrayField" level="WARNING" enabled="true" />
- <inspection_tool class="ComparatorNotSerializable" level="WARNING" enabled="true" />
- <inspection_tool class="SerializableWithUnconstructableAncestor" level="WARNING" enabled="true" />
- <inspection_tool class="SerializableInnerClassWithNonSerializableOuterClass" level="WARNING" enabled="true">
- <option name="superClassString" value="java.awt.Component" />
- </inspection_tool>
- <inspection_tool class="SerializableInnerClassHasSerialVersionUIDField" level="WARNING" enabled="true">
- <option name="superClassString" value="java.awt.Component" />
- </inspection_tool>
- <inspection_tool class="SerialVersionUIDNotStaticFinal" level="WARNING" enabled="true" />
- <inspection_tool class="TransientFieldInNonSerializableClass" level="WARNING" enabled="true" />
- <inspection_tool class="NonSerializableObjectPassedToObjectStream" level="WARNING" enabled="true" />
- <inspection_tool class="NonSerializableObjectBoundToHttpSession" level="WARNING" enabled="true" />
- <inspection_tool class="NonSerializableFieldInSerializableClass" level="WARNING" enabled="true">
- <option name="superClassString" value="java.awt.Component" />
- </inspection_tool>
- <inspection_tool class="NonSerializableWithSerialVersionUIDField" level="WARNING" enabled="true" />
- <inspection_tool class="NonSerializableWithSerializationMethods" level="WARNING" enabled="true" />
- <inspection_tool class="ConvertOldAnnotations" level="WARNING" enabled="true" />
- <inspection_tool class="AccessToNonThreadSafeStaticFieldFromInstance" level="WARNING" enabled="true">
- <option name="nonThreadSafeTypes" value="java.text.DateFormat,java.util.Calendar" />
- </inspection_tool>
- <inspection_tool class="AccessToStaticFieldLockedOnInstance" level="WARNING" enabled="true" />
- <inspection_tool class="ArithmeticOnVolatileField" level="WARNING" enabled="true" />
- <inspection_tool class="AwaitNotInLoop" level="WARNING" enabled="true" />
- <inspection_tool class="AwaitWithoutCorrespondingSignal" level="WARNING" enabled="true" />
- <inspection_tool class="BusyWait" level="WARNING" enabled="true" />
- <inspection_tool class="ObjectNotify" level="WARNING" enabled="true" />
- <inspection_tool class="ConditionSignal" level="WARNING" enabled="true" />
- <inspection_tool class="SystemRunFinalizersOnExit" level="WARNING" enabled="true" />
- <inspection_tool class="ThreadRun" level="WARNING" enabled="true" />
- <inspection_tool class="SleepWhileHoldingLock" level="WARNING" enabled="true" />
- <inspection_tool class="ThreadStartInConstruction" level="WARNING" enabled="true" />
- <inspection_tool class="ThreadStopSuspendResume" level="WARNING" enabled="true" />
- <inspection_tool class="ThreadYield" level="WARNING" enabled="true" />
- <inspection_tool class="CallToNativeMethodWhileLocked" level="WARNING" enabled="true" />
- <inspection_tool class="ExtendsThread" level="WARNING" enabled="true" />
- <inspection_tool class="DoubleCheckedLocking" level="WARNING" enabled="true">
- <option name="ignoreOnVolatileVariables" value="false" />
- </inspection_tool>
- <inspection_tool class="EmptySynchronizedStatement" level="WARNING" enabled="true" />
- <inspection_tool class="FieldAccessedSynchronizedAndUnsynchronized" level="WARNING" enabled="true">
- <option name="countGettersAndSetters" value="false" />
- </inspection_tool>
- <inspection_tool class="ThreadWithDefaultRunMethod" level="WARNING" enabled="true" />
- <inspection_tool class="SafeLock" level="WARNING" enabled="true" />
- <inspection_tool class="PublicFieldAccessedInSynchronizedContext" level="WARNING" enabled="true" />
- <inspection_tool class="NestedSynchronizedStatement" level="WARNING" enabled="true" />
- <inspection_tool class="NonSynchronizedMethodOverridesSynchronizedMethod" level="WARNING" enabled="true" />
- <inspection_tool class="NotifyCalledOnCondition" level="WARNING" enabled="true" />
- <inspection_tool class="NotifyNotInSynchronizedContext" level="WARNING" enabled="true" />
- <inspection_tool class="NotifyWithoutCorrespondingWait" level="WARNING" enabled="true" />
- <inspection_tool class="NakedNotify" level="WARNING" enabled="true" />
- <inspection_tool class="SignalWithoutCorrespondingAwait" level="WARNING" enabled="true" />
- <inspection_tool class="SynchronizeOnThis" level="WARNING" enabled="true" />
- <inspection_tool class="SynchronizeOnLock" level="WARNING" enabled="true" />
- <inspection_tool class="SynchronizedOnLiteralObject" level="WARNING" enabled="true" />
- <inspection_tool class="SynchronizedMethod" level="WARNING" enabled="true">
- <option name="m_includeNativeMethods" value="true" />
- </inspection_tool>
- <inspection_tool class="UnconditionalWait" level="WARNING" enabled="true" />
- <inspection_tool class="VolatileArrayField" level="WARNING" enabled="true" />
- <inspection_tool class="VolatileLongOrDoubleField" level="WARNING" enabled="true" />
- <inspection_tool class="WaitCalledOnCondition" level="WARNING" enabled="true" />
- <inspection_tool class="WaitNotInLoop" level="WARNING" enabled="true" />
- <inspection_tool class="WaitOrAwaitWithoutTimeout" level="WARNING" enabled="true" />
- <inspection_tool class="WaitWhileHoldingTwoLocks" level="WARNING" enabled="true" />
- <inspection_tool class="WaitNotInSynchronizedContext" level="WARNING" enabled="true" />
- <inspection_tool class="WaitWithoutCorrespondingNotify" level="WARNING" enabled="true" />
- <inspection_tool class="WhileLoopSpinsOnField" level="WARNING" enabled="true">
- <option name="ignoreNonEmtpyLoops" value="false" />
- </inspection_tool>
- <inspection_tool class="BoundFieldAssignment" level="WARNING" enabled="false" />
- <inspection_tool class="OneButtonGroup" level="WARNING" enabled="false" />
- <inspection_tool class="DuplicateMnemonic" level="WARNING" enabled="false" />
- <inspection_tool class="MissingMnemonic" level="WARNING" enabled="false" />
- <inspection_tool class="NoLabelFor" level="WARNING" enabled="false" />
- <inspection_tool class="NoButtonGroup" level="WARNING" enabled="false" />
- <inspection_tool class="NoScrollPane" level="WARNING" enabled="false" />
- <inspection_tool class="JSUntypedDeclaration" level="WARNING" enabled="false" />
- <inspection_tool class="JSDeprecatedSymbols" level="INFO" enabled="false" />
- <inspection_tool class="JSDuplicatedDeclaration" level="WARNING" enabled="false" />
- <inspection_tool class="JSUndeclaredVariable" level="INFO" enabled="false" />
- <inspection_tool class="JSUnresolvedFunction" level="INFO" enabled="false" />
- <inspection_tool class="JSUnresolvedVariable" level="INFO" enabled="false" />
- <inspection_tool class="JSUnusedLocalSymbols" level="WARNING" enabled="false" />
- <inspection_tool class="DuplicateCaseLabelJS" level="WARNING" enabled="false" />
- <inspection_tool class="DuplicatePropertyOnObjectJS" level="WARNING" enabled="false" />
- <inspection_tool class="BadExpressionStatementJS" level="WARNING" enabled="false" />
- <inspection_tool class="FunctionWithInconsistentReturnsJS" level="WARNING" enabled="false" />
- <inspection_tool class="ReservedWordUsedAsNameJS" level="WARNING" enabled="false" />
- <inspection_tool class="ThisExpressionReferencesGlobalObjectJS" level="WARNING" enabled="false" />
- <inspection_tool class="UnreachableCodeJS" level="WARNING" enabled="false" />
- <inspection_tool class="InfiniteLoopJS" level="WARNING" enabled="false" />
- <inspection_tool class="InfiniteRecursionJS" level="WARNING" enabled="false" />
- <inspection_tool class="VtlFileReferencesInspection" level="WARNING" enabled="false" />
- <inspection_tool class="VtlReferencesInspection" level="WARNING" enabled="false" />
- <inspection_tool class="VtlTypesInspection" level="WARNING" enabled="false" />
- <inspection_tool class="VtlInterpolationsInspection" level="ERROR" enabled="false" />
- <inspection_tool class="XsltDeclarations" level="ERROR" enabled="false" />
- <inspection_tool class="XsltTemplateInvocation" level="ERROR" enabled="false" />
- <inspection_tool class="XsltUnusedDeclaration" level="WARNING" enabled="false" />
- <inspection_tool class="CheckNodeTest" level="WARNING" enabled="false" />
- <inspection_tool class="HardwiredNamespacePrefix" level="WARNING" enabled="false" />
- <inspection_tool class="ImplicitTypeConversion" level="WARNING" enabled="false">
- <option name="BITS" value="1720" />
- <option name="FLAG_EXPLICIT_CONVERSION" value="true" />
- <option name="IGNORE_NODESET_TO_BOOLEAN_VIA_STRING" value="true" />
- </inspection_tool>
- <inspection_tool class="RedundantTypeConversion" level="WARNING" enabled="false">
- <option name="CHECK_ANY" value="true" />
- </inspection_tool>
- <inspection_tool class="IndexZeroUsage" level="WARNING" enabled="false" />
- <inspection_tool class="NoResourceMethodsFound" level="WARNING" enabled="false" />
- <inspection_tool class="AnnotationHasWrongMIMEType" level="WARNING" enabled="false" />
- <inspection_tool class="EmptyWebServiceClass" level="WARNING" enabled="false" />
- <inspection_tool class="VoidMethodAnnotatedWithGET" level="WARNING" enabled="false" />
- <inspection_tool class="OneWayWebMethod" level="ERROR" enabled="false" />
- <inspection_tool class="ResourceMethodInNonResourceClass" level="WARNING" enabled="false" />
- <inspection_tool class="ImplicitlyExposedWebServiceMethods" level="INFO" enabled="false" />
- <inspection_tool class="NonJaxWsWebServices" level="WARNING" enabled="false" />
- <inspection_tool class="AmbiguousPathAnnotation" level="WARNING" enabled="false" />
- <inspection_tool class="ValidExternallyBoundObject" level="ERROR" enabled="false" />
- <inspection_tool class="JpaDataSourceORMInspection" level="ERROR" enabled="false" />
- <inspection_tool class="JpaDataSourceORMDomInspection" level="ERROR" enabled="false" />
- <inspection_tool class="EjbErrorInspection" level="ERROR" enabled="false" />
- <inspection_tool class="EjbWarningInspection" level="WARNING" enabled="false" />
- <inspection_tool class="EjbDomInspection" level="ERROR" enabled="false" />
- <inspection_tool class="EjbQlInspection" level="ERROR" enabled="false" />
- <inspection_tool class="JavaeeApplicationDomInspection" level="ERROR" enabled="false" />
- <inspection_tool class="MimeType" level="ERROR" enabled="false" />
- <inspection_tool class="JpaORMDomInspection" level="ERROR" enabled="false" />
- <inspection_tool class="JpaModelErrorInspection" level="ERROR" enabled="false" />
- <inspection_tool class="JpaModelWarningInspection" level="WARNING" enabled="false" />
- <inspection_tool class="JpaQlInspection" level="ERROR" enabled="false" />
- <inspection_tool class="JpaQueryApiInspection" level="ERROR" enabled="false" />
- <inspection_tool class="JpaDomInspection" level="ERROR" enabled="false" />
- <inspection_tool class="WebProperties" level="ERROR" enabled="false" />
- <inspection_tool class="WebWarnings" level="WARNING" enabled="false" />
- <inspection_tool class="ConstantConditionalExpressionJS" level="WARNING" enabled="false" />
- <inspection_tool class="ConstantIfStatementJS" level="WARNING" enabled="false" />
- <inspection_tool class="FallthroughInSwitchStatementJS" level="WARNING" enabled="false" />
- <inspection_tool class="LoopStatementThatDoesntLoopJS" level="WARNING" enabled="false" />
- <inspection_tool class="PointlessBooleanExpressionJS" level="WARNING" enabled="false" />
- <inspection_tool class="TrivialIfJS" level="WARNING" enabled="false" />
- <inspection_tool class="TrivialConditionalJS" level="WARNING" enabled="false" />
- <inspection_tool class="UnnecessaryContinueJS" level="WARNING" enabled="false" />
- <inspection_tool class="UnnecessaryReturnJS" level="WARNING" enabled="false" />
- <inspection_tool class="UnnecessaryLabelJS" level="WARNING" enabled="false" />
- <inspection_tool class="UnnecessaryLabelOnBreakStatementJS" level="WARNING" enabled="false" />
- <inspection_tool class="UnnecessaryLabelOnContinueStatementJS" level="WARNING" enabled="false" />
- <inspection_tool class="UnterminatedStatementJS" level="WARNING" enabled="false" />
- <inspection_tool class="IncompatibleMaskJS" level="WARNING" enabled="false" />
- <inspection_tool class="PointlessBitwiseExpressionJS" level="WARNING" enabled="false">
- <option name="m_ignoreExpressionsContainingConstants" value="false" />
- </inspection_tool>
- <inspection_tool class="ShiftOutOfRangeJS" level="WARNING" enabled="false" />
- <inspection_tool class="SillyAssignmentJS" level="WARNING" enabled="false" />
- <inspection_tool class="HtmlDeprecatedTag" level="WARNING" enabled="false" />
- <inspection_tool class="CheckEmptyScriptTag" level="WARNING" enabled="false" />
- <inspection_tool class="HtmlExtraClosingTag" level="ERROR" enabled="false" />
- <inspection_tool class="CheckImageSize" level="WARNING" enabled="false" />
- <inspection_tool class="CheckValidXmlInScriptTagBody" level="ERROR" enabled="false" />
- <inspection_tool class="RequiredAttributes" level="WARNING" enabled="false">
- <option name="myAdditionalRequiredHtmlAttributes" value="" />
- </inspection_tool>
- <inspection_tool class="HtmlUnknownTag" level="WARNING" enabled="false">
- <option name="myValues">
- <value>
- <list size="5">
- <item index="0" class="java.lang.String" itemvalue="embed" />
- <item index="1" class="java.lang.String" itemvalue="nobr" />
- <item index="2" class="java.lang.String" itemvalue="noembed" />
- <item index="3" class="java.lang.String" itemvalue="comment" />
- <item index="4" class="java.lang.String" itemvalue="script" />
- </list>
- </value>
- </option>
- <option name="myCustomValuesEnabled" value="true" />
- </inspection_tool>
- <inspection_tool class="HtmlUnknownAttribute" level="WARNING" enabled="false">
- <option name="myValues">
- <value>
- <list size="5">
- <item index="0" class="java.lang.String" itemvalue="type" />
- <item index="1" class="java.lang.String" itemvalue="wmode" />
- <item index="2" class="java.lang.String" itemvalue="src" />
- <item index="3" class="java.lang.String" itemvalue="width" />
- <item index="4" class="java.lang.String" itemvalue="height" />
- </list>
- </value>
- </option>
- <option name="myCustomValuesEnabled" value="true" />
- </inspection_tool>
- <inspection_tool class="SameParameterValue" level="WARNING" enabled="false" />
- <inspection_tool class="WeakerAccess" level="WARNING" enabled="true">
- <option name="SUGGEST_PACKAGE_LOCAL_FOR_MEMBERS" value="false" />
- <option name="SUGGEST_PACKAGE_LOCAL_FOR_TOP_CLASSES" value="true" />
- <option name="SUGGEST_PRIVATE_FOR_INNERS" value="false" />
- </inspection_tool>
- <inspection_tool class="FloatingPointEquality" level="WARNING" enabled="true" />
- </profile>
- </profiles>
- <list size="4">
- <item index="0" class="java.lang.String" itemvalue="SERVER PROBLEM" />
- <item index="1" class="java.lang.String" itemvalue="INFO" />
- <item index="2" class="java.lang.String" itemvalue="WARNING" />
- <item index="3" class="java.lang.String" itemvalue="ERROR" />
- </list>
- </component>
- <component name="JavacSettings">
- <option name="DEBUGGING_INFO" value="true" />
- <option name="GENERATE_NO_WARNINGS" value="false" />
- <option name="DEPRECATION" value="true" />
- <option name="ADDITIONAL_OPTIONS_STRING" value="" />
- <option name="MAXIMUM_HEAP_SIZE" value="128" />
- </component>
- <component name="JavadocGenerationManager">
- <option name="OUTPUT_DIRECTORY" />
- <option name="OPTION_SCOPE" value="protected" />
- <option name="OPTION_HIERARCHY" value="true" />
- <option name="OPTION_NAVIGATOR" value="true" />
- <option name="OPTION_INDEX" value="true" />
- <option name="OPTION_SEPARATE_INDEX" value="true" />
- <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
- <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
- <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
- <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
- <option name="OPTION_DEPRECATED_LIST" value="true" />
- <option name="OTHER_OPTIONS" value="" />
- <option name="HEAP_SIZE" />
- <option name="LOCALE" />
- <option name="OPEN_IN_BROWSER" value="true" />
- </component>
- <component name="JikesSettings">
- <option name="JIKES_PATH" value="" />
- <option name="DEBUGGING_INFO" value="true" />
- <option name="DEPRECATION" value="true" />
- <option name="GENERATE_NO_WARNINGS" value="false" />
- <option name="IS_EMACS_ERRORS_MODE" value="true" />
- <option name="ADDITIONAL_OPTIONS_STRING" value="" />
- </component>
- <component name="LogConsolePreferences">
- <option name="FILTER_ERRORS" value="false" />
- <option name="FILTER_WARNINGS" value="false" />
- <option name="FILTER_INFO" value="true" />
- <option name="CUSTOM_FILTER" />
- </component>
- <component name="MavenBuildProjectComponent">
- <option name="mavenExecutable" value="" />
- <option name="Settings File" value="" />
- <option name="mavenCommandLineParams" value="" />
- <option name="vmOptions" value="" />
- <option name="useMavenEmbedder" value="false" />
- <option name="useFilter" value="false" />
- <option name="Batch Mode" value="false" />
- <option name="Check Plugin Updates" value="false" />
- <option name="Debug" value="false" />
- <option name="Errors" value="false" />
- <option name="Fail At End" value="false" />
- <option name="Fail Fast" value="false" />
- <option name="Fail Never" value="false" />
- <option name="Lax Checksums" value="false" />
- <option name="No Plugin Registry" value="false" />
- <option name="No Plugin Updates" value="false" />
- <option name="Non Recursive" value="false" />
- <option name="Offline" value="false" />
- <option name="Reactor" value="false" />
- <option name="Strict Checksums" value="false" />
- <option name="Update Plugins" value="false" />
- <option name="Update Snapshots" value="false" />
- <option name="Skip Tests" value="false" />
- <pom-list />
- </component>
- <component name="Palette2">
- <group name="Swing">
- <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
- <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
- </item>
- <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
- <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
- </item>
- <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
- <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
- </item>
- <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
- <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
- </item>
- <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
- <initial-values>
- <property name="text" value="Button" />
- </initial-values>
- </item>
- <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
- <initial-values>
- <property name="text" value="RadioButton" />
- </initial-values>
- </item>
- <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
- <initial-values>
- <property name="text" value="CheckBox" />
- </initial-values>
- </item>
- <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
- <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
- <initial-values>
- <property name="text" value="Label" />
- </initial-values>
- </item>
- <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
- <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
- <preferred-size width="150" height="-1" />
- </default-constraints>
- </item>
- <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
- <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
- <preferred-size width="150" height="-1" />
- </default-constraints>
- </item>
- <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
- <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
- <preferred-size width="150" height="-1" />
- </default-constraints>
- </item>
- <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
- <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
- <preferred-size width="150" height="50" />
- </default-constraints>
- </item>
- <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
- <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
- <preferred-size width="150" height="50" />
- </default-constraints>
- </item>
- <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
- <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
- <preferred-size width="150" height="50" />
- </default-constraints>
- </item>
- <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
- <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
- </item>
- <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
- <preferred-size width="150" height="50" />
- </default-constraints>
- </item>
- <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
- <preferred-size width="150" height="50" />
- </default-constraints>
- </item>
- <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
- <preferred-size width="150" height="50" />
- </default-constraints>
- </item>
- <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
- <preferred-size width="200" height="200" />
- </default-constraints>
- </item>
- <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
- <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
- <preferred-size width="200" height="200" />
- </default-constraints>
- </item>
- <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
- <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
- </item>
- <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
- </item>
- <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
- <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
- </item>
- <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
- </item>
- <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
- <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
- <preferred-size width="-1" height="20" />
- </default-constraints>
- </item>
- <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
- <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
- </item>
- <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
- <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
- </item>
- </group>
- </component>
- <component name="ProjectDetails">
- <option name="projectName" value="watchmaker" />
- </component>
- <component name="ProjectFileVersion" converted="true" />
- <component name="ProjectKey">
- <option name="state" value="https://watchmaker.dev.java.net/svn/watchmaker/trunk/etc/intellij/watchmaker.ipr" />
- </component>
- <component name="ProjectModuleManager">
- <modules>
- <module fileurl="file://$PROJECT_DIR$/book.iml" filepath="$PROJECT_DIR$/book.iml" group="modules" />
- <module fileurl="file://$PROJECT_DIR$/examples.iml" filepath="$PROJECT_DIR$/examples.iml" group="modules" />
- <module fileurl="file://$PROJECT_DIR$/framework.iml" filepath="$PROJECT_DIR$/framework.iml" group="modules" />
- <module fileurl="file://$PROJECT_DIR$/global.iml" filepath="$PROJECT_DIR$/global.iml" />
- <module fileurl="file://$PROJECT_DIR$/swing.iml" filepath="$PROJECT_DIR$/swing.iml" group="modules" />
- <module fileurl="file://$PROJECT_DIR$/website.iml" filepath="$PROJECT_DIR$/website.iml" group="modules" />
- </modules>
- </component>
- <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.5" project-jdk-type="JavaSDK">
- <output url="file://$PROJECT_DIR$/../../framework/build/classes/main" />
- </component>
- <component name="RmicSettings">
- <option name="IS_EANABLED" value="false" />
- <option name="DEBUGGING_INFO" value="true" />
- <option name="GENERATE_NO_WARNINGS" value="false" />
- <option name="GENERATE_IIOP_STUBS" value="false" />
- <option name="ADDITIONAL_OPTIONS_STRING" value="" />
- </component>
- <component name="SvnBranchConfigurationManager">
- <option name="myConfigurationMap">
- <map>
- <entry key="$PROJECT_DIR$/../..">
- <value>
- <SvnBranchConfiguration>
- <option name="branchUrls">
- <list>
- <option value="https://watchmaker.dev.java.net/svn/watchmaker/branches" />
- <option value="https://watchmaker.dev.java.net/svn/watchmaker/tags" />
- </list>
- </option>
- <option name="trunkUrl" value="https://watchmaker.dev.java.net/svn/watchmaker/trunk" />
- </SvnBranchConfiguration>
- </value>
- </entry>
- </map>
- </option>
- <option name="myVersion" value="124" />
- <option name="mySupportsUserInfoFilter" value="true" />
- </component>
- <component name="VcsDirectoryMappings">
- <mapping directory="" vcs="svn" />
- <mapping directory="$PROJECT_DIR$/../../website" vcs="Git" />
- </component>
- <component name="WebServicesPlugin" addRequiredLibraries="true" />
- <component name="com.intellij.jsf.UserDefinedFacesConfigs">
- <option name="USER_DEFINED_CONFIGS">
- <value>
- <list size="0" />
- </value>
- </option>
- </component>
- <component name="com.sixrr.metrics.MetricsReloaded">
- <option name="selectedProfile" value="Lines of code metrics" />
- <option name="autoscroll" value="false" />
- <option name="calculateMetrics" value="true" />
- <option name="includeTestClasses" value="false" />
- <option name="flattenInnerClasses" value="true" />
- <option name="cycleTableSpecificationString" value="" />
- <option name="shortCycleTableSpecificationString" value="" />
- </component>
- <component name="libraryTable">
- <library name="uncommons-maths-1.2.1">
- <CLASSES>
- <root url="jar://$PROJECT_DIR$/../../lib/runtime/uncommons-maths-1.2.1.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- <library name="testng-5.10-jdk15">
- <CLASSES>
- <root url="jar://$PROJECT_DIR$/../../lib/compiletime/testng/testng-5.10-jdk15.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- <library name="fest-swing-1.1">
- <CLASSES>
- <root url="jar://$PROJECT_DIR$/../../lib/compiletime/fest/fest-swing-1.1.jar!/" />
- <root url="jar://$PROJECT_DIR$/../../lib/compiletime/fest/fest-util-1.0.jar!/" />
- <root url="jar://$PROJECT_DIR$/../../lib/compiletime/fest/fest-reflect-1.1.jar!/" />
- <root url="jar://$PROJECT_DIR$/../../lib/compiletime/fest/fest-assert-1.0.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </component>
-</project>
-
diff --git a/etc/intellij/website.iml b/etc/intellij/website.iml
deleted file mode 100644
index cca03f7..0000000
--- a/etc/intellij/website.iml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" inherit-compiler-output="true">
- <exclude-output />
- <content url="file://$MODULE_DIR$/../../website" />
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- </component>
-</module>
-
diff --git a/etc/nbproject/project.xml b/etc/nbproject/project.xml
deleted file mode 100644
index c9cd91a..0000000
--- a/etc/nbproject/project.xml
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
- <type>org.netbeans.modules.ant.freeform</type>
- <configuration>
- <general-data xmlns="http://www.netbeans.org/ns/freeform-project/1">
- <name>watchmaker</name>
- </general-data>
- <general-data xmlns="http://www.netbeans.org/ns/freeform-project/2">
- <!-- Do not use Project Properties customizer when editing this file manually. -->
- <name>watchmaker</name>
- <properties>
- <property name="project.dir">..</property>
- <property name="ant.script">${project.dir}/build.xml</property>
- </properties>
- <folders>
- <source-folder>
- <label>watchmaker</label>
- <location>${project.dir}</location>
- </source-folder>
- <source-folder>
- <label>swing/src/java/test</label>
- <location>${project.dir}/swing/src/java/test</location>
- </source-folder>
- <source-folder>
- <label>swing/src/java/main</label>
- <location>${project.dir}/swing/src/java/main</location>
- </source-folder>
- <source-folder>
- <label>util/src/java/test</label>
- <location>${project.dir}/util/src/java/test</location>
- </source-folder>
- <source-folder>
- <label>util/src/java/main</label>
- <location>${project.dir}/util/src/java/main</location>
- </source-folder>
- <source-folder>
- <label>watchmaker</label>
- <location>.</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- <source-folder>
- <label>framework/src/java/main</label>
- <type>java</type>
- <location>${project.dir}/framework/src/java/main</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- <source-folder>
- <label>framework/src/java/test</label>
- <type>java</type>
- <location>${project.dir}/framework/src/java/test</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- <source-folder>
- <label>util/src/java/main</label>
- <type>java</type>
- <location>${project.dir}/util/src/java/main</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- <source-folder>
- <label>swing/src/java/main</label>
- <type>java</type>
- <location>${project.dir}/swing/src/java/main</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- <source-folder>
- <label>examples/src/java/main</label>
- <type>java</type>
- <location>${project.dir}/examples/src/java/main</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- <source-folder>
- <label>util/src/java/test</label>
- <type>java</type>
- <location>${project.dir}/util/src/java/test</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- <source-folder>
- <label>swing/src/java/test</label>
- <type>java</type>
- <location>${project.dir}/swing/src/java/test</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- <source-folder>
- <label>examples/src/java/test</label>
- <type>java</type>
- <location>${project.dir}/examples/src/java/test</location>
- <encoding>UTF-8</encoding>
- </source-folder>
- </folders>
- <ide-actions>
- <action name="build">
- <script>${ant.script}</script>
- <target>dist</target>
- </action>
- <action name="clean">
- <script>${ant.script}</script>
- <target>clean</target>
- </action>
- <action name="javadoc">
- <script>${ant.script}</script>
- <target>docs</target>
- </action>
- <action name="test">
- <script>${ant.script}</script>
- <target>test</target>
- </action>
- <action name="rebuild">
- <script>${ant.script}</script>
- <target>clean</target>
- <target>dist</target>
- </action>
- </ide-actions>
- <export>
- <type>folder</type>
- <location>${project.dir}/framework/build/classes/main</location>
- <script>${ant.script}</script>
- <build-target>dist</build-target>
- </export>
- <export>
- <type>folder</type>
- <location>${project.dir}/examples/build/classes/main</location>
- <script>${ant.script}</script>
- <build-target>dist</build-target>
- </export>
- <export>
- <type>folder</type>
- <location>${project.dir}/framework/build/classes/test</location>
- <script>${ant.script}</script>
- <build-target>dist</build-target>
- </export>
- <export>
- <type>folder</type>
- <location>${project.dir}/examples/build/classes/test</location>
- <script>${ant.script}</script>
- <build-target>dist</build-target>
- </export>
- <export>
- <type>folder</type>
- <location>${project.dir}/util/build/classes/main</location>
- <script>${ant.script}</script>
- <build-target>dist</build-target>
- </export>
- <export>
- <type>folder</type>
- <location>${project.dir}/swing/build/classes/main</location>
- <script>${ant.script}</script>
- <build-target>dist</build-target>
- </export>
- <export>
- <type>folder</type>
- <location>${project.dir}/util/build/classes/test</location>
- <script>${ant.script}</script>
- <build-target>dist</build-target>
- </export>
- <export>
- <type>folder</type>
- <location>${project.dir}/swing/build/classes/test</location>
- <script>${ant.script}</script>
- <build-target>dist</build-target>
- </export>
- <view>
- <items>
- <source-folder style="packages">
- <label>framework/src/java/main</label>
- <location>${project.dir}/framework/src/java/main</location>
- </source-folder>
- <source-folder style="packages">
- <label>framework/src/java/test</label>
- <location>${project.dir}/framework/src/java/test</location>
- </source-folder>
- <source-folder style="packages">
- <label>util/src/java/main</label>
- <location>${project.dir}/util/src/java/main</location>
- </source-folder>
- <source-folder style="packages">
- <label>swing/src/java/main</label>
- <location>${project.dir}/swing/src/java/main</location>
- </source-folder>
- <source-folder style="packages">
- <label>examples/src/java/main</label>
- <location>${project.dir}/examples/src/java/main</location>
- </source-folder>
- <source-folder style="packages">
- <label>util/src/java/test</label>
- <location>${project.dir}/util/src/java/test</location>
- </source-folder>
- <source-folder style="packages">
- <label>swing/src/java/test</label>
- <location>${project.dir}/swing/src/java/test</location>
- </source-folder>
- <source-folder style="packages">
- <label>examples/src/java/test</label>
- <location>${project.dir}/examples/src/java/test</location>
- </source-folder>
- <source-file>
- <location>${ant.script}</location>
- </source-file>
- </items>
- <context-menu>
- <ide-action name="build"/>
- <ide-action name="clean"/>
- <ide-action name="javadoc"/>
- <ide-action name="test"/>
- <ide-action name="rebuild"/>
- </context-menu>
- </view>
- <subprojects/>
- </general-data>
- <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/2">
- <compilation-unit>
- <package-root>${project.dir}/framework/src/java/main</package-root>
- <classpath mode="compile">${project.dir}/util/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar</classpath>
- <built-to>${project.dir}/framework/build/classes/main</built-to>
- <source-level>1.5</source-level>
- </compilation-unit>
- <compilation-unit>
- <package-root>${project.dir}/examples/src/java/main</package-root>
- <classpath mode="compile">${project.dir}/framework/build/classes/main:${project.dir}/util/build/classes/main:${project.dir}/swing/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar</classpath>
- <built-to>${project.dir}/examples/build/classes/main</built-to>
- <source-level>1.5</source-level>
- </compilation-unit>
- <compilation-unit>
- <package-root>${project.dir}/framework/src/java/test</package-root>
- <unit-tests/>
- <classpath mode="compile">${project.dir}/framework/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar:${project.dir}/lib/compiletime/testng/testng-5.7-jdk15.jar</classpath>
- <built-to>${project.dir}/framework/build/classes/test</built-to>
- <source-level>1.5</source-level>
- </compilation-unit>
- <compilation-unit>
- <package-root>${project.dir}/examples/src/java/test</package-root>
- <unit-tests/>
- <classpath mode="compile">${project.dir}/examples/build/classes/main:${project.dir}/framework/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar:${project.dir}/lib/compiletime/testng/testng-5.7-jdk15.jar:${project.dir}/lib/compiletime/fest/fest-swing-1.0b1.jar</classpath>
- <built-to>${project.dir}/examples/build/classes/test</built-to>
- <source-level>1.5</source-level>
- </compilation-unit>
- <compilation-unit>
- <package-root>${project.dir}/util/src/java/main</package-root>
- <built-to>${project.dir}/util/build/classes/main</built-to>
- <source-level>1.5</source-level>
- </compilation-unit>
- <compilation-unit>
- <package-root>${project.dir}/swing/src/java/main</package-root>
- <classpath mode="compile">${project.dir}/framework/build/classes/main:${project.dir}/lib/runtime/jfreechart-1.0.6.jar:${project.dir}/lib/runtime/jcommon-1.0.10.jar:${project.dir}/lib/runtime/uncommons-maths-1.1.jar</classpath>
- <built-to>${project.dir}/swing/build/classes/main</built-to>
- <source-level>1.5</source-level>
- </compilation-unit>
- <compilation-unit>
- <package-root>${project.dir}/util/src/java/test</package-root>
- <unit-tests/>
- <classpath mode="compile">${project.dir}/util/build/classes/main:${project.dir}/lib/compiletime/testng/testng-5.7-jdk15.jar</classpath>
- <built-to>${project.dir}/util/build/classes/test</built-to>
- <source-level>1.5</source-level>
- </compilation-unit>
- <compilation-unit>
- <package-root>${project.dir}/swing/src/java/test</package-root>
- <unit-tests/>
- <classpath mode="compile">${project.dir}/swing/build/classes/main:${project.dir}/framework/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar:${project.dir}/lib/compiletime/testng/testng-5.7-jdk15.jar:${project.dir}/lib/compiletime/fest/fest-swing-1.0b1.jar</classpath>
- <built-to>${project.dir}/swing/build/classes/test</built-to>
- <source-level>1.5</source-level>
- </compilation-unit>
- </java-data>
- </configuration>
-</project>
diff --git a/examples/examples.iml b/examples/examples.iml
new file mode 100644
index 0000000..6f94484
--- /dev/null
+++ b/examples/examples.iml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/target/classes" />
+ <output-test url="file://$MODULE_DIR$/target/test-classes" />
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/java/main" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/java/resources" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/java/test" isTestSource="true" />
+ <excludeFolder url="file://$MODULE_DIR$/target" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module" module-name="swing" />
+ <orderEntry type="module" module-name="framework" />
+ <orderEntry type="library" name="Maven: org.uncommons.maths:uncommons-maths:1.2.2" level="project" />
+ <orderEntry type="library" name="Maven: jfree:jcommon:1.0.12" level="project" />
+ <orderEntry type="library" name="Maven: jfree:jfreechart:1.0.13" level="project" />
+ <orderEntry type="library" name="Maven: com.google.collections:google-collections:1.0" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.testng:testng:6.2.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: junit:junit:3.8.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.beanshell:bsh:2.0b4" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: com.beust:jcommander:1.12" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.yaml:snakeyaml:1.6" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-swing:1.2.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-assert:1.2" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-util:1.1.3" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-reflect:1.2" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: net.jcip:jcip-annotations:1.0" level="project" />
+ </component>
+</module>
+
diff --git a/examples/nb-configuration.xml b/examples/nb-configuration.xml
new file mode 100644
index 0000000..ae35717
--- /dev/null
+++ b/examples/nb-configuration.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+ <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+ <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+ <!--
+Properties that influence various parts of the IDE, especially code formatting and the like.
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+ <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>words</org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>0</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>
+ </properties>
+</project-shared-configuration>
diff --git a/examples/pom.xml b/examples/pom.xml
new file mode 100644
index 0000000..773b7d2
--- /dev/null
+++ b/examples/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--===========================================================================
+ Copyright 2006-2010 Daniel W. Dyer
+
+ 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.
+ ==========================================================================-->
+<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/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.uncommons.watchmaker</groupId>
+ <artifactId>watchmaker</artifactId>
+ <version>0.7.2</version>
+ </parent>
+ <artifactId>watchmaker-examples</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>watchmaker-swing</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>6.2.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.easytesting</groupId>
+ <artifactId>fest-swing</artifactId>
+ <version>1.2.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/java/main</sourceDirectory>
+ <testSourceDirectory>src/java/test</testSourceDirectory>
+ <resources>
+ <resource>
+ <directory>src/java/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/EvolutionLogger.java b/examples/src/java/main/org/uncommons/watchmaker/examples/EvolutionLogger.java
index 4b7c443..5c47146 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/EvolutionLogger.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/EvolutionLogger.java
@@ -15,8 +15,8 @@
//=============================================================================
package org.uncommons.watchmaker.examples;
-import org.uncommons.watchmaker.framework.EvolutionObserver;
import org.uncommons.watchmaker.framework.PopulationData;
+import org.uncommons.watchmaker.framework.islands.IslandEvolutionObserver;
/**
* Trivial evolution observer for displaying information at the end
@@ -24,10 +24,16 @@ import org.uncommons.watchmaker.framework.PopulationData;
* @param <T> The type of entity being evolved.
* @author Daniel Dyer
*/
-public class EvolutionLogger<T> implements EvolutionObserver<T>
+public class EvolutionLogger<T> implements IslandEvolutionObserver<T>
{
public void populationUpdate(PopulationData<? extends T> data)
{
System.out.println("Generation " + data.getGenerationNumber() + ": " + data.getBestCandidateFitness());
}
+
+
+ public void islandPopulationUpdate(int islandIndex, PopulationData<? extends T> populationData)
+ {
+ // Do nothing.
+ }
}
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/biomorphs/BiomorphApplet.java b/examples/src/java/main/org/uncommons/watchmaker/examples/biomorphs/BiomorphApplet.java
index b2af7db..0766422 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/biomorphs/BiomorphApplet.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/biomorphs/BiomorphApplet.java
@@ -51,7 +51,7 @@ import org.uncommons.watchmaker.framework.termination.GenerationCount;
import org.uncommons.watchmaker.swing.SwingConsole;
/**
- * Watchmaker Framework implementation of Dawkin's biomorph program.
+ * Watchmaker Framework implementation of Dawkin's biomorph program.
* @author Daniel Dyer
*/
public class BiomorphApplet extends AbstractExampleApplet
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/GeneticProgrammingExample.java b/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/GeneticProgrammingExample.java
index 5a6fa17..c060d49 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/GeneticProgrammingExample.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/GeneticProgrammingExample.java
@@ -31,7 +31,7 @@ import org.uncommons.watchmaker.framework.termination.TargetFitness;
/**
* Simple tree-based genetic programming application based on the first example
- * in Chapter 11 of Toby Segaran's Progamming Collective Intelligence.
+ * in Chapter 11 of Toby Segaran's Programming Collective Intelligence.
* @author Daniel Dyer
*/
public class GeneticProgrammingExample
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/Multiplication.java b/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/Multiplication.java
index 1731366..bd5dd60 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/Multiplication.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/Multiplication.java
@@ -22,7 +22,7 @@ package org.uncommons.watchmaker.examples.geneticprogramming;
public class Multiplication extends BinaryNode
{
/**
- * Creates a node that evaluates to the sum of the values of its two
+ * Creates a node that evaluates to the product of the values of its two
* child nodes ({@literal left} and {@literal right}).
* @param left The first operand.
* @param right The second operand.
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/sudoku/SudokuApplet.java b/examples/src/java/main/org/uncommons/watchmaker/examples/sudoku/SudokuApplet.java
index d301b81..2a856e9 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/sudoku/SudokuApplet.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/sudoku/SudokuApplet.java
@@ -25,6 +25,7 @@ import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
+import java.util.concurrent.TimeUnit;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
@@ -53,6 +54,7 @@ import org.uncommons.watchmaker.framework.selection.TournamentSelection;
import org.uncommons.watchmaker.framework.termination.TargetFitness;
import org.uncommons.watchmaker.swing.AbortControl;
import org.uncommons.watchmaker.swing.ProbabilityParameterControl;
+import org.uncommons.watchmaker.swing.SwingEvolutionObserver;
import org.uncommons.watchmaker.swing.evolutionmonitor.StatusBar;
/**
@@ -158,7 +160,7 @@ public class SudokuApplet extends AbstractExampleApplet
selectionStrategy = new TournamentSelection(selectionPressure.getNumberGenerator());
innerPanel.add(selectionPressure.getControl());
innerPanel.add(new JLabel("Population Size: "));
- populationSizeSpinner = new JSpinner(new SpinnerNumberModel(500, 10, 50000, 1));
+ populationSizeSpinner = new JSpinner(new SpinnerNumberModel(500, 10, 50000, 1));
innerPanel.add(populationSizeSpinner);
SpringUtilities.makeCompactGrid(innerPanel, 3, 2, 0, 6, 6, 6);
innerPanel.setBorder(BorderFactory.createTitledBorder("Configuration"));
@@ -175,7 +177,7 @@ public class SudokuApplet extends AbstractExampleApplet
solveButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ev)
- {
+ {
int populationSize = (Integer) populationSizeSpinner.getValue();
puzzleCombo.setEnabled(false);
populationSizeSpinner.setEnabled(false);
@@ -226,7 +228,9 @@ public class SudokuApplet extends AbstractExampleApplet
new SudokuEvaluator(),
selectionStrategy,
rng);
- engine.addEvolutionObserver(new GridViewUpdater());
+ engine.addEvolutionObserver(new SwingEvolutionObserver<Sudoku>(new GridViewUpdater(),
+ 100,
+ TimeUnit.MILLISECONDS));
engine.addEvolutionObserver(statusBar);
return engine.evolve(populationSize,
eliteCount,
@@ -234,7 +238,7 @@ public class SudokuApplet extends AbstractExampleApplet
abortControl.getTerminationCondition()); // ...or the user aborts.
}
-
+
@Override
protected void postProcessing(Sudoku result)
{
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/travellingsalesman/EvolutionaryTravellingSalesman.java b/examples/src/java/main/org/uncommons/watchmaker/examples/travellingsalesman/EvolutionaryTravellingSalesman.java
index a1785a5..6814101 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/travellingsalesman/EvolutionaryTravellingSalesman.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/travellingsalesman/EvolutionaryTravellingSalesman.java
@@ -91,7 +91,7 @@ public class EvolutionaryTravellingSalesman implements TravellingSalesmanStrateg
*/
public String getDescription()
{
- String selectionName = selectionStrategy.getClass().getSimpleName();
+ String selectionName = selectionStrategy.toString();
return "Evolution (pop: " + populationSize + ", gen: " + generationCount
+ ", elite: " + eliteCount + ", " + selectionName + ")";
}
@@ -135,16 +135,16 @@ public class EvolutionaryTravellingSalesman implements TravellingSalesmanStrateg
new RouteEvaluator(distances),
selectionStrategy,
rng);
- engine.addEvolutionObserver(new EvolutionObserver<List<String>>()
+ if (progressListener != null)
{
- public void populationUpdate(PopulationData<? extends List<String>> data)
+ engine.addEvolutionObserver(new EvolutionObserver<List<String>>()
{
- if (progressListener != null)
+ public void populationUpdate(PopulationData<? extends List<String>> data)
{
progressListener.updateProgress(((double) data.getGenerationNumber() + 1) / generationCount * 100);
}
- }
- });
+ });
+ }
return engine.evolve(populationSize,
eliteCount,
new GenerationCount(generationCount));
diff --git a/framework/framework.iml b/framework/framework.iml
new file mode 100644
index 0000000..82c64ca
--- /dev/null
+++ b/framework/framework.iml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/target/classes" />
+ <output-test url="file://$MODULE_DIR$/target/test-classes" />
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/java/main" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/java/test" isTestSource="true" />
+ <excludeFolder url="file://$MODULE_DIR$/target" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="library" name="Maven: org.uncommons.maths:uncommons-maths:1.2.2" level="project" />
+ <orderEntry type="library" name="Maven: jfree:jcommon:1.0.12" level="project" />
+ <orderEntry type="library" name="Maven: jfree:jfreechart:1.0.8" level="project" />
+ <orderEntry type="library" name="Maven: com.google.collections:google-collections:1.0" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.testng:testng:6.2.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: junit:junit:3.8.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.beanshell:bsh:2.0b4" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: com.beust:jcommander:1.12" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.yaml:snakeyaml:1.6" level="project" />
+ </component>
+</module>
+
diff --git a/framework/nb-configuration.xml b/framework/nb-configuration.xml
new file mode 100644
index 0000000..ae35717
--- /dev/null
+++ b/framework/nb-configuration.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+ <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+ <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+ <!--
+Properties that influence various parts of the IDE, especially code formatting and the like.
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+ <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>words</org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>0</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>
+ </properties>
+</project-shared-configuration>
diff --git a/framework/pom.xml b/framework/pom.xml
index 842a11e..51ecd7b 100644
--- a/framework/pom.xml
+++ b/framework/pom.xml
@@ -18,34 +18,35 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <name>Watchmaker Framework</name>
- <groupId>org.uncommons.watchmaker</groupId>
- <artifactId>watchmaker-framework</artifactId>
- <version>@VERSION@</version>
- <packaging>jar</packaging>
- <url>http://watchmaker.uncommons.org</url>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.uncommons.watchmaker</groupId>
+ <artifactId>watchmaker</artifactId>
+ <version>0.7.2</version>
+ </parent>
+ <artifactId>watchmaker-framework</artifactId>
- <licenses>
- <license>
- <name>Apache License, Version 2.0</name>
- <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
- <distribution>repo</distribution>
- </license>
- </licenses>
-
- <dependencies>
- <dependency>
- <groupId>org.uncommons.maths</groupId>
- <artifactId>uncommons-maths</artifactId>
- <version>1.2.1</version>
- </dependency>
-
- <dependency>
- <groupId>com.google.collections</groupId>
- <artifactId>google-collections</artifactId>
- <version>1.0</version>
- </dependency>
- </dependencies>
-
+ <dependencies>
+ <dependency>
+ <groupId>org.uncommons.maths</groupId>
+ <artifactId>uncommons-maths</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.collections</groupId>
+ <artifactId>google-collections</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>6.2.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/java/main</sourceDirectory>
+ <testSourceDirectory>src/java/test</testSourceDirectory>
+ </build>
</project>
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/EvolutionaryOperator.java b/framework/src/java/main/org/uncommons/watchmaker/framework/EvolutionaryOperator.java
index a0bdc8e..e733f06 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/EvolutionaryOperator.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/EvolutionaryOperator.java
@@ -19,9 +19,15 @@ import java.util.List;
import java.util.Random;
/**
- * An evolutionary operator is a function that takes a population of
+ * <p>An evolutionary operator is a function that takes a population of
* candidates as an argument and returns a new population that is the
- * result of applying a transformation to the original population.
+ * result of applying a transformation to the original population.</p>
+ * <p><strong>An implementation of this class must not modify any of
+ * the selected candidate objects passed in.</strong> Doing so will
+ * affect the correct operation of the {@link EvolutionEngine}. Instead
+ * the operator should create and return new candidate objects. The
+ * operator is not required to create copies of unmodified individuals
+ * (for efficiency these may be returned directly).</p>
* @param <T> The type of evolvable entity that this operator accepts.
* @author Daniel Dyer
*/
@@ -44,7 +50,7 @@ public interface EvolutionaryOperator<T>
* operators that process each candidate in isolation, such as mutation.
* It should only be an issue for operators, such as cross-over, that
* deal with multiple candidates in a single operation.</p>
- * <p><strong>The operator should not modify any of the candidates passed
+ * <p><strong>The operator must not modify any of the candidates passed
* in</strong>. Instead it should return a list that contains evolved
* copies of those candidates (umodified candidates can be included in
* the results without having to be copied).</p>
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/FitnessEvaluationWorker.java b/framework/src/java/main/org/uncommons/watchmaker/framework/FitnessEvaluationWorker.java
index 9c6b410..1a99efb 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/FitnessEvaluationWorker.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/FitnessEvaluationWorker.java
@@ -99,7 +99,7 @@ public class FitnessEvaluationWorker
/**
* A FitnessWorker cannot be garbage-collected if its thread pool has not been shutdown.
- * This method, invoked on garabage collection (or maybe not at all), shuts down the thread
+ * This method, invoked on garbage collection (or maybe not at all), shuts down the thread
* pool so that the threads can be released.
* @throws Throwable Any exception or error that occurs during finalisation.
*/
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/SelectionStrategy.java b/framework/src/java/main/org/uncommons/watchmaker/framework/SelectionStrategy.java
index a91f0fa..929284b 100755
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/SelectionStrategy.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/SelectionStrategy.java
@@ -39,7 +39,7 @@ public interface SelectionStrategy<T>
* the number of distinct candidates to select, since the same individual may
* potentially be selected more than once).
* @param rng Source of randomness for stochastic selection strategies.
- * @return A list containing the selected candidates. Some individual canidates may
+ * @return A list containing the selected candidates. Some individual candidates may
* potentially have been selected multiple times.
*/
<S extends T> List<S> select(List<EvaluatedCandidate<S>> population,
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/IslandEvolution.java b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/IslandEvolution.java
index 300dce9..5f15e50 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/IslandEvolution.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/IslandEvolution.java
@@ -48,7 +48,7 @@ import org.uncommons.watchmaker.framework.termination.GenerationCount;
public class IslandEvolution<T>
{
private final List<EvolutionEngine<T>> islands;
- private final Migration migration;
+ private final Migration<? super T> migration;
private final boolean naturalFitness;
private final Random rng;
@@ -75,7 +75,7 @@ public class IslandEvolution<T>
* @see #IslandEvolution(List, Migration, boolean, Random)
*/
public IslandEvolution(int islandCount,
- Migration migration,
+ Migration<? super T> migration,
CandidateFactory<T> candidateFactory,
EvolutionaryOperator<T> evolutionScheme,
FitnessEvaluator<? super T> fitnessEvaluator,
@@ -109,7 +109,7 @@ public class IslandEvolution<T>
* SelectionStrategy, Random)
*/
public IslandEvolution(List<EvolutionEngine<T>> islands,
- Migration migration,
+ Migration<? super T> migration,
boolean naturalFitness,
Random rng)
{
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/Migration.java b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/Migration.java
index e9b985f..30fb0e6 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/Migration.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/Migration.java
@@ -22,15 +22,15 @@ import org.uncommons.watchmaker.framework.EvaluatedCandidate;
/**
* Strategy interface for different ways of migrating individuals between islands
* in {@link IslandEvolution}.
+ * @param <T> The type of the individual members of the island populations.
* @author Daniel Dyer
*/
-public interface Migration
+public interface Migration<T>
{
/**
* @param islandPopulations The populations of each island in the system.
* @param migrantCount The number of individuals to move from each island.
* @param rng A source of randomness.
- * @param <T> The type of the individual members of the island populations.
*/
- <T> void migrate(List<List<EvaluatedCandidate<T>>> islandPopulations, int migrantCount, Random rng);
+ <S extends T> void migrate(List<List<EvaluatedCandidate<S>>> islandPopulations, int migrantCount, Random rng);
}
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RandomMigration.java b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RandomMigration.java
new file mode 100644
index 0000000..06c4e4c
--- /dev/null
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RandomMigration.java
@@ -0,0 +1,67 @@
+//=============================================================================
+// Copyright 2006-2010 Daniel W. Dyer
+//
+// 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.uncommons.watchmaker.framework.islands;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import org.uncommons.watchmaker.framework.EvaluatedCandidate;
+
+/**
+ * Migrates a fixed number of candidates away from each island. Which individuals are migrated is determined
+ * randomly and which islands they move to is also random. This contrasts with the more ordered migration offered
+ * by {@link RingMigration}. If the migration count is greater than one, it is possible (probable) that migrants
+ * from the same island will be moved to different islands. It is also possible that when a migrant's destination is
+ * randomly chosen, it gets sent back to the island that it came from.
+ * @author Daniel Dyer
+ */
+public class RandomMigration implements Migration<Object>
+{
+ /**
+ * Migrates a fixed number of candidates away from each island. Which individuals are migrated is determined
+ * randomly and which islands they move to is also random. If the migration count is greater than one, it is
+ * possible (probable) that migrants from the same island will be moved to different islands. It is also possible
+ * that when a migrant's destination is randomly chosen, it gets sent back to the island that it came from.
+ * @param islandPopulations A list of the populations of each island.
+ * @param migrantCount The number of (randomly selected) individuals to be moved on from
+ * each island.
+ * @param rng A source of randomness.
+ * @param <S> The type of entity being evolved.
+ */
+ public <S extends Object> void migrate(List<List<EvaluatedCandidate<S>>> islandPopulations, int migrantCount, Random rng)
+ {
+ List<EvaluatedCandidate<S>> migrants = new ArrayList<EvaluatedCandidate<S>>(migrantCount * islandPopulations.size());
+ for (List<EvaluatedCandidate<S>> island : islandPopulations)
+ {
+ Collections.shuffle(island, rng);
+ for (int i = 0; i < migrantCount; i++)
+ {
+ migrants.add(island.remove(island.size() - 1));
+ }
+ }
+ Collections.shuffle(migrants);
+ Iterator<EvaluatedCandidate<S>> iterator = migrants.iterator();
+ for (List<EvaluatedCandidate<S>> island : islandPopulations)
+ {
+ for (int i = 0; i < migrantCount; i++)
+ {
+ island.add(iterator.next());
+ }
+ }
+ }
+}
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RingMigration.java b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RingMigration.java
index ca31cf9..0db3996 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RingMigration.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RingMigration.java
@@ -27,7 +27,7 @@ import org.uncommons.watchmaker.framework.EvaluatedCandidate;
* clockwise direction. The individuals to be migrated are chosen completely at random.
* @author Daniel Dyer
*/
-public class RingMigration implements Migration
+public class RingMigration implements Migration<Object>
{
/**
* Migrates a fixed number of individuals from each island to the adjacent island.
@@ -37,25 +37,25 @@ public class RingMigration implements Migration
* @param migrantCount The number of (randomly selected) individuals to be moved on from
* each island.
* @param rng A source of randomness.
- * @param <T> The type of entity being evolved.
+ * @param <S> The type of entity being evolved.
*/
- public <T> void migrate(List<List<EvaluatedCandidate<T>>> islandPopulations, int migrantCount, Random rng)
+ public <S extends Object> void migrate(List<List<EvaluatedCandidate<S>>> islandPopulations, int migrantCount, Random rng)
{
// The first batch of immigrants is from the last island to the first.
- List<EvaluatedCandidate<T>> lastIsland = islandPopulations.get(islandPopulations.size() - 1);
+ List<EvaluatedCandidate<S>> lastIsland = islandPopulations.get(islandPopulations.size() - 1);
Collections.shuffle(lastIsland, rng);
- List<EvaluatedCandidate<T>> migrants = lastIsland.subList(lastIsland.size() - migrantCount, lastIsland.size());
+ List<EvaluatedCandidate<S>> migrants = lastIsland.subList(lastIsland.size() - migrantCount, lastIsland.size());
- for (List<EvaluatedCandidate<T>> island : islandPopulations)
+ for (List<EvaluatedCandidate<S>> island : islandPopulations)
{
// Migrants from the last island are immigrants for this island.
- List<EvaluatedCandidate<T>> immigrants = migrants;
+ List<EvaluatedCandidate<S>> immigrants = migrants;
if (island != lastIsland) // We've already migrated individuals from the last island.
{
// Select the migrants that will move to the next island to make room for the immigrants here.
// Randomise the population so that there is no bias concerning which individuals are migrated.
Collections.shuffle(island, rng);
- migrants = new ArrayList<EvaluatedCandidate<T>>(island.subList(island.size() - migrantCount, island.size()));
+ migrants = new ArrayList<EvaluatedCandidate<S>>(island.subList(island.size() - migrantCount, island.size()));
}
// Copy the immigrants over the last members of the population (those that are themselves
// migrating to the next island).
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/termination/TargetFitness.java b/framework/src/java/main/org/uncommons/watchmaker/framework/termination/TargetFitness.java
index b3ffc81..26c3298 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/termination/TargetFitness.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/termination/TargetFitness.java
@@ -34,7 +34,7 @@ public class TargetFitness implements TerminationCondition
* @param natural Whether fitness scores are natural or non-natural. If fitness
* is natural, the condition will be satisfied if any individual has a fitness
* that is greater than or equal to the target fitness. If fitness is non-natural,
- * the condition will be satisified in any individual has a fitness that is less
+ * the condition will be satisfied in any individual has a fitness that is less
* than or equal to the target fitness.
* @see org.uncommons.watchmaker.framework.FitnessEvaluator
*/
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/EvolutionStrategyEngineTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/EvolutionStrategyEngineTest.java
index 6901155..f07c354 100644
--- a/framework/src/java/test/org/uncommons/watchmaker/framework/EvolutionStrategyEngineTest.java
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/EvolutionStrategyEngineTest.java
@@ -36,7 +36,9 @@ public class EvolutionStrategyEngineTest
true,
1,
FrameworkTestUtils.getRNG());
+ @SuppressWarnings("unchecked")
List<EvaluatedCandidate<Integer>> population = Arrays.asList(new EvaluatedCandidate<Integer>(1, 1));
+
List<EvaluatedCandidate<Integer>> evolvedPopulation
= engine.nextEvolutionStep(population, 0, FrameworkTestUtils.getRNG());
assert evolvedPopulation.size() == 1 : "Population size should be 1, is " + evolvedPopulation.size();
@@ -54,7 +56,9 @@ public class EvolutionStrategyEngineTest
false,
1,
FrameworkTestUtils.getRNG());
+ @SuppressWarnings("unchecked")
List<EvaluatedCandidate<Integer>> population = Arrays.asList(new EvaluatedCandidate<Integer>(1, 1));
+
List<EvaluatedCandidate<Integer>> evolvedPopulation
= engine.nextEvolutionStep(population, 0, FrameworkTestUtils.getRNG());
assert evolvedPopulation.size() == 1 : "Population size should be 1, is " + evolvedPopulation.size();
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/GenerationalEvolutionEngineTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/GenerationalEvolutionEngineTest.java
index 1da7e9e..6622229 100644
--- a/framework/src/java/test/org/uncommons/watchmaker/framework/GenerationalEvolutionEngineTest.java
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/GenerationalEvolutionEngineTest.java
@@ -146,7 +146,7 @@ public class GenerationalEvolutionEngineTest
@Test(expectedExceptions = IllegalStateException.class)
public void testGetSatisfiedTerminationConditionsBeforeStart()
{
- // Should throw an IllegalStateException because evolution has started, let alone terminated.
+ // Should throw an IllegalStateException because evolution hasn't started, let alone terminated.
engine.getSatisfiedTerminationConditions();
}
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/IslandEvolutionTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/IslandEvolutionTest.java
index 98fc00d..db8c792 100644
--- a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/IslandEvolutionTest.java
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/IslandEvolutionTest.java
@@ -123,7 +123,7 @@ public class IslandEvolutionTest
new DummyFitnessEvaluator(),
new RouletteWheelSelection(),
FrameworkTestUtils.getRNG());
- // Should throw an IllegalStateException because evolution has started, let alone terminated.
+ // Should throw an IllegalStateException because evolution hasn't started, let alone terminated.
islandEvolution.getSatisfiedTerminationConditions();
}
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/MigrationTestUtils.java b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/MigrationTestUtils.java
new file mode 100644
index 0000000..3564a31
--- /dev/null
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/MigrationTestUtils.java
@@ -0,0 +1,55 @@
+//=============================================================================
+// Copyright 2006-2010 Daniel W. Dyer
+//
+// 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.uncommons.watchmaker.framework.islands;
+
+import org.uncommons.watchmaker.framework.EvaluatedCandidate;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Utility methods used by unit tests for migration strategies.
+ * @author Daniel Dyer
+ */
+class MigrationTestUtils
+{
+ private MigrationTestUtils()
+ {
+ // Prevents instantiation.
+ }
+
+
+ public static <T> List<EvaluatedCandidate<T>> createTestPopulation(T... members)
+ {
+ List<EvaluatedCandidate<T>> population = new ArrayList<EvaluatedCandidate<T>>(members.length);
+ for (T member : members)
+ {
+ population.add(new EvaluatedCandidate<T>(member, 0));
+ }
+ return population;
+ }
+
+
+ public static void testPopulationContents(List<EvaluatedCandidate<String>> actualPopulation,
+ String... expectedPopulation)
+ {
+ assert actualPopulation.size() == expectedPopulation.length : "Wrong population size after migration.";
+ for (int i = 0; i < actualPopulation.size(); i++)
+ {
+ assert actualPopulation.get(i).getCandidate().equals(expectedPopulation[i]) : "Wrong value at index " + i;
+ }
+ }
+
+}
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RandomMigrationTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RandomMigrationTest.java
new file mode 100644
index 0000000..bbbbad5
--- /dev/null
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RandomMigrationTest.java
@@ -0,0 +1,67 @@
+//=============================================================================
+// Copyright 2006-2010 Daniel W. Dyer
+//
+// 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.uncommons.watchmaker.framework.islands;
+
+import java.util.Arrays;
+import java.util.List;
+import org.testng.annotations.Test;
+import org.uncommons.watchmaker.framework.EvaluatedCandidate;
+import org.uncommons.watchmaker.framework.FrameworkTestUtils;
+
+/**
+ * Unit test for the {@link RingMigration} class.
+ * @author Daniel Dyer
+ */
+public class RandomMigrationTest
+{
+ /**
+ * Make sure that nothing strange happens when there is no migration.
+ */
+ @Test
+ public void testZeroMigration()
+ {
+ Migration<Object> migration = new RandomMigration();
+ @SuppressWarnings("unchecked")
+ List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(MigrationTestUtils.createTestPopulation("A", "A", "A"),
+ MigrationTestUtils.createTestPopulation("B", "B", "B"),
+ MigrationTestUtils.createTestPopulation("C", "C", "C"));
+ migration.migrate(islandPopulations, 0, FrameworkTestUtils.getRNG());
+ assert islandPopulations.size() == 3 : "Wrong number of populations after migration.";
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(0), "A", "A", "A");
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(1), "B", "B", "B");
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(2), "C", "C", "C");
+ }
+
+
+ /**
+ * Make sure that nothing strange happens when the entire island is migrated.
+ */
+ @Test
+ public void testNonZeroMigration()
+ {
+ Migration<Object> migration = new RingMigration();
+ @SuppressWarnings("unchecked")
+ List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(MigrationTestUtils.createTestPopulation("A", "A", "A"),
+ MigrationTestUtils.createTestPopulation("B", "B", "B"),
+ MigrationTestUtils.createTestPopulation("C", "C", "C"));
+ migration.migrate(islandPopulations, 3, FrameworkTestUtils.getRNG());
+ assert islandPopulations.size() == 3: "Wrong number of populations after migration.";
+ // Each population should still have 3 members (but it's not sure which members).
+ assert islandPopulations.get(0).size() == 3 : "Wrong population size.";
+ assert islandPopulations.get(1).size() == 3 : "Wrong population size.";
+ assert islandPopulations.get(2).size() == 3 : "Wrong population size.";
+ }
+}
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RingMigrationTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RingMigrationTest.java
index 84c2abd..b1ab6a3 100644
--- a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RingMigrationTest.java
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RingMigrationTest.java
@@ -15,7 +15,6 @@
//=============================================================================
package org.uncommons.watchmaker.framework.islands;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.testng.Reporter;
@@ -24,7 +23,7 @@ import org.uncommons.watchmaker.framework.EvaluatedCandidate;
import org.uncommons.watchmaker.framework.FrameworkTestUtils;
/**
- * Unit test for the custom operator used by island model evolution.
+ * Unit test for the {@link RingMigration} class.
* @author Daniel Dyer
*/
public class RingMigrationTest
@@ -35,16 +34,16 @@ public class RingMigrationTest
@Test
public void testZeroMigration()
{
- Migration migration = new RingMigration();
+ Migration<Object> migration = new RingMigration();
@SuppressWarnings("unchecked")
- List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(createTestPopulation("A", "A", "A"),
- createTestPopulation("B", "B", "B"),
- createTestPopulation("C", "C", "C"));
+ List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(MigrationTestUtils.createTestPopulation("A", "A", "A"),
+ MigrationTestUtils.createTestPopulation("B", "B", "B"),
+ MigrationTestUtils.createTestPopulation("C", "C", "C"));
migration.migrate(islandPopulations, 0, FrameworkTestUtils.getRNG());
assert islandPopulations.size() == 3 : "Wrong number of populations after migration.";
- testPopulationContents(islandPopulations.get(0), "A", "A", "A");
- testPopulationContents(islandPopulations.get(1), "B", "B", "B");
- testPopulationContents(islandPopulations.get(2), "C", "C", "C");
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(0), "A", "A", "A");
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(1), "B", "B", "B");
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(2), "C", "C", "C");
}
@@ -54,38 +53,15 @@ public class RingMigrationTest
@Test
public void testFullMigration()
{
- Migration migration = new RingMigration();
+ Migration<Object> migration = new RingMigration();
@SuppressWarnings("unchecked")
- List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(createTestPopulation("A", "A", "A"),
- createTestPopulation("B", "B", "B"),
- createTestPopulation("C", "C", "C"));
+ List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(MigrationTestUtils.createTestPopulation("A", "A", "A"),
+ MigrationTestUtils.createTestPopulation("B", "B", "B"),
+ MigrationTestUtils.createTestPopulation("C", "C", "C"));
migration.migrate(islandPopulations, 3, FrameworkTestUtils.getRNG());
assert islandPopulations.size() == 3: "Wrong number of populations after migration.";
- Reporter.log(islandPopulations.toString());
- testPopulationContents(islandPopulations.get(0), "C", "C", "C");
- testPopulationContents(islandPopulations.get(1), "A", "A", "A");
- testPopulationContents(islandPopulations.get(2), "B", "B", "B");
- }
-
-
- private <T> List<EvaluatedCandidate<T>> createTestPopulation(T... members)
- {
- List<EvaluatedCandidate<T>> population = new ArrayList<EvaluatedCandidate<T>>(members.length);
- for (T member : members)
- {
- population.add(new EvaluatedCandidate<T>(member, 0));
- }
- return population;
- }
-
-
- private void testPopulationContents(List<EvaluatedCandidate<String>> actualPopulation,
- String... expectedPopulation)
- {
- assert actualPopulation.size() == expectedPopulation.length : "Wrong population size after migration.";
- for (int i = 0; i < actualPopulation.size(); i++)
- {
- assert actualPopulation.get(i).getCandidate().equals(expectedPopulation[i]) : "Wrong value at index " + i;
- }
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(0), "C", "C", "C");
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(1), "A", "A", "A");
+ MigrationTestUtils.testPopulationContents(islandPopulations.get(2), "B", "B", "B");
}
}
diff --git a/nb-configuration.xml b/nb-configuration.xml
new file mode 100644
index 0000000..e958b93
--- /dev/null
+++ b/nb-configuration.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+ <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+ <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+ <!--
+Properties that influence various parts of the IDE, especially code formatting and the like.
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+ <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>words</org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>0</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>
+ </properties>
+</project-shared-configuration>
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..6698f38
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.sonatype.oss</groupId>
+ <artifactId>oss-parent</artifactId>
+ <version>7</version>
+ </parent>
+ <groupId>org.uncommons.watchmaker</groupId>
+ <artifactId>watchmaker</artifactId>
+ <version>0.7.2</version>
+ <packaging>pom</packaging>
+ <name>watchmaker</name>
+ <description>Watchmaker Framework - Root Project</description>
+ <url>http://watchmaker.uncommons.org</url>
+
+ <licenses>
+ <license>
+ <name>Apache License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+
+ <scm>
+ <url>https://github.com/dwdyer/watchmaker</url>
+ <connection>scm:git://github.com/dwdyer/watchmaker.git</connection>
+ <developerConnection>scm:git:ssh://git@github.com:dwdyer/watchmaker.git</developerConnection>
+ </scm>
+
+ <developers>
+ <developer>
+ <id>dwdyer</id>
+ <name>Dan Dyer</name>
+ <roles>
+ <role>committer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>cowwoc</id>
+ <name>Gili Tzabari</name>
+ <roles>
+ <role>contributor</role>
+ </roles>
+ </developer>
+ </developers>
+
+ <modules>
+ <module>framework</module>
+ <module>swing</module>
+ <module>examples</module>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ <encoding>${project.build.sourceEncoding}</encoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.4.3</version>
+ <configuration>
+ <encoding>${project.build.sourceEncoding}</encoding>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+</project>
\ No newline at end of file
diff --git a/swing/nb-configuration.xml b/swing/nb-configuration.xml
new file mode 100644
index 0000000..ae35717
--- /dev/null
+++ b/swing/nb-configuration.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+ <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+ <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+ <!--
+Properties that influence various parts of the IDE, especially code formatting and the like.
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+ <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>
+ <org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>words</org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>0</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>
+ <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>
+ </properties>
+</project-shared-configuration>
diff --git a/swing/pom.xml b/swing/pom.xml
index 0c35025..690f0db 100644
--- a/swing/pom.xml
+++ b/swing/pom.xml
@@ -18,40 +18,46 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <name>Watchmaker Framework</name>
- <groupId>org.uncommons.watchmaker</groupId>
- <artifactId>watchmaker-swing</artifactId>
- <version>@VERSION@</version>
- <packaging>jar</packaging>
- <url>http://watchmaker.uncommons.org</url>
-
- <licenses>
- <license>
- <name>Apache License, Version 2.0</name>
- <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
- <distribution>repo</distribution>
- </license>
- </licenses>
-
- <dependencies>
- <dependency>
- <groupId>org.uncommons.watchmaker</groupId>
- <artifactId>watchmaker-framework</artifactId>
- <version>@VERSION@</version>
- </dependency>
-
- <dependency>
- <groupId>org.uncommons.maths</groupId>
- <artifactId>uncommons-maths</artifactId>
- <version>1.2</version>
- </dependency>
-
- <dependency>
- <groupId>jfree</groupId>
- <artifactId>jfreechart</artifactId>
- <version>1.0.13</version>
- </dependency>
- </dependencies>
-
-</project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.uncommons.watchmaker</groupId>
+ <artifactId>watchmaker</artifactId>
+ <version>0.7.2</version>
+ </parent>
+ <artifactId>watchmaker-swing</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>watchmaker-framework</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.uncommons.maths</groupId>
+ <artifactId>uncommons-maths</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>jfree</groupId>
+ <artifactId>jfreechart</artifactId>
+ <version>1.0.13</version>
+ </dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>6.2.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.easytesting</groupId>
+ <artifactId>fest-swing</artifactId>
+ <version>1.2.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/java/main</sourceDirectory>
+ <testSourceDirectory>src/java/test</testSourceDirectory>
+ </build>
+</project>
\ No newline at end of file
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/SelectionStrategyControl.java b/swing/src/java/main/org/uncommons/watchmaker/swing/SelectionStrategyControl.java
index c8f9a5b..d9b60b5 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/SelectionStrategyControl.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/SelectionStrategyControl.java
@@ -159,5 +159,12 @@ public class SelectionStrategyControl<T> implements EvolutionControl
{
return delegate.select(population, naturalFitnessScores, selectionSize, rng);
}
+
+
+ @Override
+ public String toString()
+ {
+ return delegate.toString();
+ }
}
}
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/SwingEvolutionObserver.java b/swing/src/java/main/org/uncommons/watchmaker/swing/SwingEvolutionObserver.java
new file mode 100644
index 0000000..6e76daa
--- /dev/null
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/SwingEvolutionObserver.java
@@ -0,0 +1,78 @@
+package org.uncommons.watchmaker.swing;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import org.uncommons.util.concurrent.ConfigurableThreadFactory;
+import org.uncommons.watchmaker.framework.EvolutionObserver;
+import org.uncommons.watchmaker.framework.PopulationData;
+
+/**
+ * Limits the update rate of a Swing-based {@link EvolutionObserver}.
+ *
+ * @param <T> The population type.
+ * @author Gili Tzabari
+ */
+public class SwingEvolutionObserver<T> implements EvolutionObserver<T>
+{
+ private final EvolutionObserver<T> delegate;
+ private final long delay;
+ private final TimeUnit unit;
+ private final ConfigurableThreadFactory threadFactory = new ConfigurableThreadFactory("SwingEvolutionObserver",
+ Thread.NORM_PRIORITY,
+ true);
+ private final ScheduledExecutorService timer = Executors.newScheduledThreadPool(1, threadFactory);
+
+ private final AtomicReference<PopulationData<? extends T>> latestPopulation
+ = new AtomicReference<PopulationData<? extends T>>();
+
+
+ /**
+ * Creates a new SwingEvolutionObserver.
+ *
+ * @param delegate The underlying EvolutionObserver to update.
+ * @param delay The amount of time to wait before updating the underlying {@link EvolutionObserver}.
+ * @param unit The time unit of delay.
+ * @throws NullPointerException If delegate or unit are null.
+ * @throws IllegalArgumentException If delay is negative.
+ */
+ public SwingEvolutionObserver(EvolutionObserver<T> delegate, long delay, TimeUnit unit)
+ {
+ if (delegate == null)
+ {
+ throw new NullPointerException("delegate may not be null");
+ }
+ if (unit == null)
+ {
+ throw new NullPointerException("unit may not be null");
+ }
+ if (delay < 0)
+ {
+ throw new IllegalArgumentException("delay may not be negative: " + delay);
+ }
+
+ this.delegate = delegate;
+ this.delay = delay;
+ this.unit = unit;
+ }
+
+
+ public void populationUpdate(PopulationData<? extends T> populationData)
+ {
+ if (latestPopulation.getAndSet(populationData) != null)
+ {
+ // An update is already scheduled.
+ return;
+ }
+
+ // Schedule an update in 300ms.
+ timer.schedule(new Runnable()
+ {
+ public void run()
+ {
+ delegate.populationUpdate(latestPopulation.getAndSet(null));
+ }
+ }, delay, unit);
+ }
+}
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/SwingIslandEvolutionObserver.java b/swing/src/java/main/org/uncommons/watchmaker/swing/SwingIslandEvolutionObserver.java
new file mode 100644
index 0000000..f840f82
--- /dev/null
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/SwingIslandEvolutionObserver.java
@@ -0,0 +1,98 @@
+package org.uncommons.watchmaker.swing;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import org.uncommons.util.concurrent.ConfigurableThreadFactory;
+import org.uncommons.watchmaker.framework.PopulationData;
+import org.uncommons.watchmaker.framework.islands.IslandEvolutionObserver;
+
+/**
+ * Limits the update rate of a Swing-based {@link IslandEvolutionObserver}.
+ *
+ * @param <T> The population type.
+ * @author Gili Tzabari
+ */
+public class SwingIslandEvolutionObserver<T> implements IslandEvolutionObserver<T>
+{
+ private final IslandEvolutionObserver<T> delegate;
+ private final long delay;
+ private final TimeUnit unit;
+ private final ConfigurableThreadFactory threadFactory = new ConfigurableThreadFactory("SwingIslandEvolutionObserver",
+ Thread.NORM_PRIORITY,
+ true);
+ private final ScheduledExecutorService timer = Executors.newScheduledThreadPool(1, threadFactory);
+ private final AtomicReference<PopulationData<? extends T>> latestPopulation
+ = new AtomicReference<PopulationData<? extends T>>();
+ private final ConcurrentHashMap<Integer, PopulationData<? extends T>> latestIslandPopulation
+ = new ConcurrentHashMap<Integer, PopulationData<? extends T>>();
+
+ /**
+ * Creates a new SwingIslandEvolutionObserver.
+ *
+ * @param delegate The underlying {@link IslandEvolutionObserver} to update.
+ * @param delay The amount of time to wait before updating the underlying {@link IslandEvolutionObserver}.
+ * @param unit The time unit of delay.
+ * @throws NullPointerException If delegate or unit are null.
+ * @throws IllegalArgumentException If delay is negative.
+ */
+ public SwingIslandEvolutionObserver(IslandEvolutionObserver<T> delegate, long delay, TimeUnit unit)
+ {
+ if (delegate == null)
+ {
+ throw new NullPointerException("delegate may not be null");
+ }
+ if (unit == null)
+ {
+ throw new NullPointerException("unit may not be null");
+ }
+ if (delay < 0)
+ {
+ throw new IllegalArgumentException("delay may not be negative: " + delay);
+ }
+
+ this.delegate = delegate;
+ this.delay = delay;
+ this.unit = unit;
+ }
+
+
+ public void populationUpdate(PopulationData<? extends T> populationData)
+ {
+ if (latestPopulation.getAndSet(populationData) != null)
+ {
+ // An update is already scheduled.
+ return;
+ }
+
+ // Schedule an update.
+ timer.schedule(new Runnable()
+ {
+ public void run()
+ {
+ delegate.populationUpdate(latestPopulation.getAndSet(null));
+ }
+ }, delay, unit);
+ }
+
+
+ public void islandPopulationUpdate(final int islandIndex, PopulationData<? extends T> populationData)
+ {
+ if (latestIslandPopulation.put(islandIndex, populationData) != null)
+ {
+ // An update is already scheduled.
+ return;
+ }
+
+ // Schedule an update.
+ timer.schedule(new Runnable()
+ {
+ public void run()
+ {
+ delegate.islandPopulationUpdate(islandIndex, latestIslandPopulation.remove(islandIndex));
+ }
+ }, delay, unit);
+ }
+}
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/EvolutionMonitor.java b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/EvolutionMonitor.java
index 936624f..d2c1930 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/EvolutionMonitor.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/EvolutionMonitor.java
@@ -20,6 +20,7 @@ import java.awt.Window;
import java.lang.reflect.InvocationTargetException;
import java.util.LinkedList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
@@ -32,6 +33,7 @@ import org.uncommons.watchmaker.framework.PopulationData;
import org.uncommons.watchmaker.framework.interactive.Renderer;
import org.uncommons.watchmaker.framework.islands.IslandEvolutionObserver;
import org.uncommons.watchmaker.swing.ObjectSwingRenderer;
+import org.uncommons.watchmaker.swing.SwingIslandEvolutionObserver;
/**
* The Evolution Monitor is a component that can be attached to an
@@ -128,7 +130,7 @@ public class EvolutionMonitor<T> implements IslandEvolutionObserver<T>
FittestCandidateView<T> candidateView = new FittestCandidateView<T>(renderer);
tabs.add("Fittest Individual", candidateView);
- views.add(candidateView);
+ views.add(new SwingIslandEvolutionObserver<T>(candidateView, 300, TimeUnit.MILLISECONDS));
PopulationFitnessView fitnessView = new PopulationFitnessView(islands);
tabs.add(islands ? "Global Population" : "Population Fitness", fitnessView);
@@ -138,7 +140,7 @@ public class EvolutionMonitor<T> implements IslandEvolutionObserver<T>
{
IslandsView islandsView = new IslandsView();
tabs.add("Island Populations", islandsView);
- views.add(islandsView);
+ views.add(new SwingIslandEvolutionObserver<Object>(islandsView, 300, TimeUnit.MILLISECONDS));
}
JVMView jvmView = new JVMView();
@@ -146,7 +148,7 @@ public class EvolutionMonitor<T> implements IslandEvolutionObserver<T>
StatusBar statusBar = new StatusBar(islands);
monitorComponent.add(statusBar, BorderLayout.SOUTH);
- views.add(statusBar);
+ views.add(new SwingIslandEvolutionObserver<Object>(statusBar, 300, TimeUnit.MILLISECONDS));
}
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/FittestCandidateView.java b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/FittestCandidateView.java
index a1fb16c..48e14eb 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/FittestCandidateView.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/FittestCandidateView.java
@@ -42,7 +42,6 @@ class FittestCandidateView<T> extends JPanel implements IslandEvolutionObserver<
private final JScrollPane scroller = new JScrollPane();
private T fittestCandidate = null;
- private JComponent renderedCandidate = null;
/**
* Creates a Swing view that uses the specified renderer to display
@@ -67,11 +66,11 @@ class FittestCandidateView<T> extends JPanel implements IslandEvolutionObserver<
scroller.setBorder(null);
add(scroller, BorderLayout.CENTER);
- // Set names for easier indentification in unit tests.
+ // Set names for easier identification in unit tests.
fitnessLabel.setName("FitnessLabel");
}
-
+
public void populationUpdate(final PopulationData<? extends T> populationData)
{
SwingUtilities.invokeLater(new Runnable()
@@ -87,7 +86,7 @@ class FittestCandidateView<T> extends JPanel implements IslandEvolutionObserver<
if (populationData.getBestCandidate() != fittestCandidate)
{
fittestCandidate = populationData.getBestCandidate();
- renderedCandidate = renderer.render(fittestCandidate);
+ JComponent renderedCandidate = renderer.render(fittestCandidate);
scroller.setViewportView(renderedCandidate);
}
}
@@ -97,6 +96,6 @@ class FittestCandidateView<T> extends JPanel implements IslandEvolutionObserver<
public void islandPopulationUpdate(int islandIndex, final PopulationData<? extends T> populationData)
{
- // Do nothing.
+ // Do nothing.
}
}
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/IslandsView.java b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/IslandsView.java
index 07b27f3..acc45b9 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/IslandsView.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/IslandsView.java
@@ -32,6 +32,7 @@ import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.statistics.DefaultStatisticalCategoryDataset;
@@ -50,12 +51,13 @@ class IslandsView extends JPanel implements IslandEvolutionObserver<Object>
private final DefaultCategoryDataset bestDataSet = new DefaultCategoryDataset();
private final DefaultStatisticalCategoryDataset meanDataSet = new DefaultStatisticalCategoryDataset();
-
+ private final StatisticalLineAndShapeRenderer meanRenderer = new StatisticalLineAndShapeRenderer();
private final JFreeChart chart;
private final AtomicInteger islandCount = new AtomicInteger(0);
+ private final Object maxLock = new Object();
private double max = 0;
- private final StatisticalLineAndShapeRenderer meanRenderer = new StatisticalLineAndShapeRenderer();
+
IslandsView()
@@ -70,6 +72,9 @@ class IslandsView extends JPanel implements IslandEvolutionObserver<Object>
false, // Tooltips
false); // URLs
CategoryPlot plot = (CategoryPlot) chart.getPlot();
+ plot.getDomainAxis().setLowerMargin(0.02);
+ plot.getDomainAxis().setUpperMargin(0.02);
+ ((BarRenderer) plot.getRenderer()).setShadowVisible(false);
plot.getRangeAxis().setAutoRange(false);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
@@ -173,11 +178,19 @@ class IslandsView extends JPanel implements IslandEvolutionObserver<Object>
(Integer) islandIndex);
ValueAxis rangeAxis = ((CategoryPlot) chart.getPlot()).getRangeAxis();
// If the range is not sufficient to display all values, enlarge it.
- max = Math.max(max, populationData.getBestCandidateFitness());
- max = Math.max(max, populationData.getMeanFitness() + populationData.getFitnessStandardDeviation());
- while (max > rangeAxis.getUpperBound())
+ synchronized (maxLock)
{
- rangeAxis.setUpperBound(rangeAxis.getUpperBound() * 2);
+ max = Math.max(max, populationData.getBestCandidateFitness());
+ max = Math.max(max, populationData.getMeanFitness() + populationData.getFitnessStandardDeviation());
+ while (max > rangeAxis.getUpperBound())
+ {
+ rangeAxis.setUpperBound(rangeAxis.getUpperBound() * 2);
+ }
+ // If the range is much bigger than it needs to be, reduce it.
+ while (max < rangeAxis.getUpperBound() / 4)
+ {
+ rangeAxis.setUpperBound(rangeAxis.getUpperBound() / 4);
+ }
}
chart.setNotify(true);
}
@@ -187,6 +200,9 @@ class IslandsView extends JPanel implements IslandEvolutionObserver<Object>
public void populationUpdate(PopulationData<? extends Object> populationData)
{
- // Do nothing.
+ synchronized (maxLock)
+ {
+ max = 0;
+ }
}
}
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/StatusBar.java b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/StatusBar.java
index 09b2f6f..51c6651 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/StatusBar.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/StatusBar.java
@@ -26,7 +26,7 @@ import org.uncommons.watchmaker.framework.islands.IslandEvolutionObserver;
/**
* Status bar component for the evolution monitor. Can also be used separately to
- * provide basic status information without having to use the full evolution monitor.
+ * provide basic status information without having to use the full evolution monitor.
* @author Daniel Dyer
*/
public class StatusBar extends Box implements IslandEvolutionObserver<Object>
@@ -37,6 +37,8 @@ public class StatusBar extends Box implements IslandEvolutionObserver<Object>
private final JLabel elitismLabel = new JLabel("N/A", JLabel.RIGHT);
private final AtomicInteger islandPopulationSize = new AtomicInteger(-1);
+ private long elapsedTime;
+ private long epochTime;
/**
@@ -102,7 +104,9 @@ public class StatusBar extends Box implements IslandEvolutionObserver<Object>
}
}
generationsLabel.setText(String.valueOf(populationData.getGenerationNumber() + 1));
- timeLabel.setText(formatTime(populationData.getElapsedTime()));
+ elapsedTime = populationData.getElapsedTime();
+ epochTime = 0;
+ timeLabel.setText(formatTime(elapsedTime));
}
});
}
@@ -119,7 +123,13 @@ public class StatusBar extends Box implements IslandEvolutionObserver<Object>
{
public void run()
{
- timeLabel.setText(formatTime(populationData.getElapsedTime()));
+ // Only update the label if the time has advanced. Sometimes, due to threading
+ // variations, later updates have shorter elapsed times.
+ if (populationData.getElapsedTime() > epochTime)
+ {
+ epochTime = populationData.getElapsedTime();
+ timeLabel.setText(formatTime(elapsedTime + epochTime));
+ }
}
});
}
diff --git a/swing/swing.iml b/swing/swing.iml
new file mode 100644
index 0000000..09d2997
--- /dev/null
+++ b/swing/swing.iml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/target/classes" />
+ <output-test url="file://$MODULE_DIR$/target/test-classes" />
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/java/main" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/java/test" isTestSource="true" />
+ <excludeFolder url="file://$MODULE_DIR$/target" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module" module-name="framework" />
+ <orderEntry type="library" name="Maven: org.uncommons.maths:uncommons-maths:1.2.2" level="project" />
+ <orderEntry type="library" name="Maven: jfree:jcommon:1.0.12" level="project" />
+ <orderEntry type="library" name="Maven: jfree:jfreechart:1.0.13" level="project" />
+ <orderEntry type="library" name="Maven: com.google.collections:google-collections:1.0" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.testng:testng:6.2.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: junit:junit:3.8.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.beanshell:bsh:2.0b4" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: com.beust:jcommander:1.12" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.yaml:snakeyaml:1.6" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-swing:1.2.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-assert:1.2" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-util:1.1.3" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-reflect:1.2" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: net.jcip:jcip-annotations:1.0" level="project" />
+ </component>
+</module>
+
Debdiff
[The following lists of changes regard files as different if they have different names, permissions or owners.]
Files in second set of .debs but not in first
-rw-r--r-- root/root /usr/share/java/uncommons-watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar -rw-r--r-- root/root /usr/share/java/uncommons-watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar -rw-r--r-- root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/0.7.1+git20171206.1.33d9423+ds/watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.pom -rw-r--r-- root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/0.7.1+git20171206.1.33d9423+ds/watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.pom lrwxrwxrwx root/root /usr/share/java/uncommons-watchmaker-framework.jar -> uncommons-watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar lrwxrwxrwx root/root /usr/share/java/uncommons-watchmaker-swing.jar -> uncommons-watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar lrwxrwxrwx root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/0.7.1+git20171206.1.33d9423+ds/watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar -> ../../../../../../java/uncommons-watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar lrwxrwxrwx root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/debian/watchmaker-framework-debian.jar -> ../../../../../../java/uncommons-watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar lrwxrwxrwx root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/0.7.1+git20171206.1.33d9423+ds/watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar -> ../../../../../../java/uncommons-watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar lrwxrwxrwx root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/debian/watchmaker-swing-debian.jar -> ../../../../../../java/uncommons-watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar
Files in first set of .debs but not in second
-rw-r--r-- root/root /usr/share/java/uncommons-watchmaker-framework-0.7.1.jar -rw-r--r-- root/root /usr/share/java/uncommons-watchmaker-swing-0.7.1.jar -rw-r--r-- root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/0.7.1/watchmaker-framework-0.7.1.pom -rw-r--r-- root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/0.7.1/watchmaker-swing-0.7.1.pom lrwxrwxrwx root/root /usr/share/java/uncommons-watchmaker-framework.jar -> uncommons-watchmaker-framework-0.7.1.jar lrwxrwxrwx root/root /usr/share/java/uncommons-watchmaker-swing.jar -> uncommons-watchmaker-swing-0.7.1.jar lrwxrwxrwx root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/0.7.1/watchmaker-framework-0.7.1.jar -> ../../../../../../java/uncommons-watchmaker-framework-0.7.1.jar lrwxrwxrwx root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/debian/watchmaker-framework-debian.jar -> ../../../../../../java/uncommons-watchmaker-framework-0.7.1.jar lrwxrwxrwx root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/0.7.1/watchmaker-swing-0.7.1.jar -> ../../../../../../java/uncommons-watchmaker-swing-0.7.1.jar lrwxrwxrwx root/root /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/debian/watchmaker-swing-debian.jar -> ../../../../../../java/uncommons-watchmaker-swing-0.7.1.jar
No differences were encountered between the control files of package libuncommons-watchmaker-framework-java
No differences were encountered between the control files of package libuncommons-watchmaker-swing-java