[pkg-java] r13286 - in trunk: . squirrel-sql squirrel-sql/debian squirrel-sql/debian/patches squirrel-sql/debian/source

vladimir kotov rk13-guest at alioth.debian.org
Thu Feb 10 23:58:26 UTC 2011


Author: rk13-guest
Date: 2011-02-10 23:58:25 +0000 (Thu, 10 Feb 2011)
New Revision: 13286

Added:
   trunk/squirrel-sql/
   trunk/squirrel-sql/debian/
   trunk/squirrel-sql/debian/TODO
   trunk/squirrel-sql/debian/build.properties
   trunk/squirrel-sql/debian/build.xml
   trunk/squirrel-sql/debian/changelog
   trunk/squirrel-sql/debian/compat
   trunk/squirrel-sql/debian/control
   trunk/squirrel-sql/debian/copyright
   trunk/squirrel-sql/debian/libsquirrel-sql-fw-java-doc.doc-base.api
   trunk/squirrel-sql/debian/libsquirrel-sql-fw-java-doc.install
   trunk/squirrel-sql/debian/libsquirrel-sql-fw-java.poms
   trunk/squirrel-sql/debian/maven.ignoreRules
   trunk/squirrel-sql/debian/maven.rules
   trunk/squirrel-sql/debian/menu
   trunk/squirrel-sql/debian/orig-tar.exclude
   trunk/squirrel-sql/debian/orig-tar.sh
   trunk/squirrel-sql/debian/patches/
   trunk/squirrel-sql/debian/patches/001-squirrelsql-jgoodies.patch
   trunk/squirrel-sql/debian/patches/002-squirrelsql-version.patch
   trunk/squirrel-sql/debian/patches/003-squirrelsql-plugins-parent-pom.patch
   trunk/squirrel-sql/debian/patches/004-squirrelsql-plugins-assembly-descripton-pom.patch
   trunk/squirrel-sql/debian/patches/005-squirrelsql-plugins-hibernate-HibernateUtil.patch
   trunk/squirrel-sql/debian/patches/006-launch-script-debian.patch
   trunk/squirrel-sql/debian/patches/007-squirrelsql-changelog.patch
   trunk/squirrel-sql/debian/patches/008-native2ascii.patch
   trunk/squirrel-sql/debian/patches/009-plugin-liclink.patch
   trunk/squirrel-sql/debian/patches/disable_autoupdate.dpatch
   trunk/squirrel-sql/debian/patches/series
   trunk/squirrel-sql/debian/rules
   trunk/squirrel-sql/debian/source/
   trunk/squirrel-sql/debian/source/format
   trunk/squirrel-sql/debian/squirrel-sql-doc.doc-base.api
   trunk/squirrel-sql/debian/squirrel-sql-doc.install
   trunk/squirrel-sql/debian/squirrel-sql-plugin-laf.links
   trunk/squirrel-sql/debian/squirrel-sql-plugin-sqlval.links
   trunk/squirrel-sql/debian/squirrel-sql.1
   trunk/squirrel-sql/debian/squirrel-sql.install
   trunk/squirrel-sql/debian/squirrel-sql.links
   trunk/squirrel-sql/debian/squirrel-sql.manpages
   trunk/squirrel-sql/debian/squirrel-sql.poms
   trunk/squirrel-sql/debian/watch
Log:
Initial release (Closes: #559867)


Added: trunk/squirrel-sql/debian/TODO
===================================================================
--- trunk/squirrel-sql/debian/TODO	                        (rev 0)
+++ trunk/squirrel-sql/debian/TODO	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1 @@
+Enable firebirdmanager, oracle, syntax plugins (missing dependencies)
\ No newline at end of file

Added: trunk/squirrel-sql/debian/build.properties
===================================================================
--- trunk/squirrel-sql/debian/build.properties	                        (rev 0)
+++ trunk/squirrel-sql/debian/build.properties	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,8 @@
+classpath.compile=\
+	${basedir}/fw/target/fw-${version}.jar:\
+	${basedir}/app/target/squirrel-sql-${version}.jar:\
+	/usr/share/java/spring-beans.jar
+build.directory=target
+javadoc.dir=target/apidocs
+maven.test.skip=true
+build.javaVersion=1.6

Added: trunk/squirrel-sql/debian/build.xml
===================================================================
--- trunk/squirrel-sql/debian/build.xml	                        (rev 0)
+++ trunk/squirrel-sql/debian/build.xml	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,120 @@
+<?xml version="1.0"?>
+
+<project name="pkg-java" default="package" basedir="..">
+
+    <property file="debian/build.properties"/>
+    <property name="maven.build" value="/usr/share/maven-ant-helper/maven-build.xml"/>
+    <property file="/usr/share/maven-ant-helper/maven-defaults.properties"/>
+
+    <macrodef name="cleanmodule">
+        <attribute name="dir"/>
+        <sequential>
+          <ant target="clean" antfile="${maven.build}" dir="@{dir}">
+            <property name="debian.dir" location="debian" />
+            <property name="project.dir" value="@{dir}" />
+          </ant>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="packagemodule">
+        <attribute name="dir"/>
+        <sequential>
+          <ant target="package" antfile="${maven.build}" dir="@{dir}">
+            <property name="debian.dir" location="debian" />
+            <property name="project.dir" value="@{dir}" />
+          </ant>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="javadocmodule">
+        <attribute name="dir"/>
+        <sequential>
+          <ant target="javadoc" antfile="${maven.build}" dir="@{dir}">
+            <property name="debian.dir" location="debian" />
+            <property name="project.dir" value="@{dir}" />
+          </ant>
+        </sequential>
+    </macrodef>
+
+    <target name="clean">
+        <cleanmodule dir=""/>
+        <cleanmodule dir="fw"/>
+        <cleanmodule dir="app"/>
+        <cleanmodule dir="installer/squirrelsql-java-version-checker"/>
+        <cleanmodule dir="plugins/codecompletion"/>
+        <cleanmodule dir="plugins/dataimport"/>
+        <cleanmodule dir="plugins/db2"/>
+        <cleanmodule dir="plugins/dbcopy"/>
+        <cleanmodule dir="plugins/dbdiff"/>
+        <cleanmodule dir="plugins/derby"/>
+        <cleanmodule dir="plugins/editextras"/>
+        <cleanmodule dir="plugins/example"/>
+        <cleanmodule dir="plugins/exportconfig"/>
+        <cleanmodule dir="plugins/favs"/>
+        <cleanmodule dir="plugins/graph"/>
+        <cleanmodule dir="plugins/h2"/>
+        <cleanmodule dir="plugins/hibernate"/>
+        <cleanmodule dir="plugins/i18n"/>
+        <cleanmodule dir="plugins/informix"/>
+        <cleanmodule dir="plugins/mssql"/>
+        <cleanmodule dir="plugins/mysql"/>
+        <cleanmodule dir="plugins/netezza"/>
+        <cleanmodule dir="plugins/postgres"/>
+        <cleanmodule dir="plugins/refactoring"/>
+        <cleanmodule dir="plugins/sessionscript"/>
+        <cleanmodule dir="plugins/smarttools"/>
+        <cleanmodule dir="plugins/sqlbookmark"/>
+        <cleanmodule dir="plugins/sqlparam"/>
+        <cleanmodule dir="plugins/sqlreplace"/>
+        <cleanmodule dir="plugins/sqlscript"/>
+        <cleanmodule dir="plugins/laf"/>
+        <cleanmodule dir="plugins/firebird"/>
+        <cleanmodule dir="plugins/sqlval"/>
+        <cleanmodule dir="plugins/sybase"/>
+        <cleanmodule dir="plugins/userscript"/>
+    </target>
+
+    <target name="package">
+        <packagemodule dir=""/>
+        <packagemodule dir="fw"/>
+        <packagemodule dir="app"/>
+        <packagemodule dir="installer/squirrelsql-java-version-checker"/>
+        <packagemodule dir="plugins/codecompletion"/>
+        <packagemodule dir="plugins/dataimport"/>
+        <packagemodule dir="plugins/db2"/>
+        <packagemodule dir="plugins/dbcopy"/>
+        <packagemodule dir="plugins/dbdiff"/>
+        <packagemodule dir="plugins/derby"/>
+        <packagemodule dir="plugins/editextras"/>
+        <packagemodule dir="plugins/example"/>
+        <packagemodule dir="plugins/exportconfig"/>
+        <packagemodule dir="plugins/favs"/>
+        <packagemodule dir="plugins/graph"/>
+        <packagemodule dir="plugins/h2"/>
+        <packagemodule dir="plugins/hibernate"/>
+        <packagemodule dir="plugins/i18n"/>
+        <packagemodule dir="plugins/informix"/>
+        <packagemodule dir="plugins/mssql"/>
+        <packagemodule dir="plugins/mysql"/>
+        <packagemodule dir="plugins/netezza"/>
+        <packagemodule dir="plugins/postgres"/>
+        <packagemodule dir="plugins/refactoring"/>
+        <packagemodule dir="plugins/sessionscript"/>
+        <packagemodule dir="plugins/smarttools"/>
+        <packagemodule dir="plugins/sqlbookmark"/>
+        <packagemodule dir="plugins/sqlparam"/>
+        <packagemodule dir="plugins/sqlreplace"/>
+        <packagemodule dir="plugins/sqlscript"/>
+        <packagemodule dir="plugins/laf"/>
+        <packagemodule dir="plugins/firebird"/>
+        <packagemodule dir="plugins/sqlval"/>
+        <packagemodule dir="plugins/sybase"/>
+        <packagemodule dir="plugins/userscript"/>
+    </target>
+
+    <target name="javadoc">
+        <javadocmodule dir="fw" />
+        <javadocmodule dir="app" />
+    </target>
+
+</project>
\ No newline at end of file

Added: trunk/squirrel-sql/debian/changelog
===================================================================
--- trunk/squirrel-sql/debian/changelog	                        (rev 0)
+++ trunk/squirrel-sql/debian/changelog	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,62 @@
+squirrel-sql (3.2.0-1) UNRELEASED; urgency=low
+
+  * Initial release (Closes: #559867)
+  * New upstream release
+  * debian/control:
+    + Set Debian Java maintainers as Maintainer
+    + Add myself as Uploader
+    + Bump Standards-Version to 3.9.1.
+    + Rework dependencies and package names
+    + Add package descriptions
+  * Updated debian/copyright to conform to dep5 format-specification
+  * Switch to source format 3.0 (quilt)
+  * Rework debian/rules to cdbs, maven-ant-helper, maven-repo-helper
+  * Write new patches
+  * Add manpages
+  * Add watch files
+  * Add maven files
+ 
+ -- Vladimir Kotov <vladimir at kotov.lv>  Wed, 09 Jan 2011 23:35:28 +0200
+
+squirrel-sql (3.0~ppa8) jaunty; urgency=low
+
+  * New upstream release 3.0
+  * Set javac encoding to UTF-8
+  * Added missing libcommons-httpclient-java dependency
+  * Added missing dpatch build dependency
+ 
+ -- Markus Heberling <markus at tisoft.de>  Tue, 24 Feb 2009 12:22:40 +0100
+
+squirrel-sql (2.6.8-1~ppa8) jaunty; urgency=low
+
+  * Added java dependency
+ 
+ -- Markus Heberling <markus at tisoft.de>  Tue, 03 Feb 2009 16:17:20 +0100
+
+squirrel-sql (2.6.8-1~ppa7) jaunty; urgency=low
+
+  * Cleanup of lintian warnings
+  * Added missing plugin subdirectorys and files
+
+ -- Markus Heberling <markus at tisoft.de>  Tue, 03 Feb 2009 14:50:38 +0100
+
+squirrel-sql (2.6.8-1~ppa6) jaunty; urgency=low
+
+  * Added default plugins (except mac osx plugin)
+  * added squirrel-sql package that depends on squirrel-sql-gui and all default plugins
+
+ -- Markus Heberling <markus at tisoft.de>  Tue, 03 Feb 2009 12:31:14 +0100
+
+squirrel-sql (2.6.8-1~ppa5) jaunty; urgency=low
+
+  * Changed Build Depends
+  * Added menu entry for squirrel-sql-gui
+  * Cleanup of lintian warnings
+
+ -- Markus Heberling <markus at tisoft.de>  Tue, 27 Jan 2009 17:41:27 +0100
+
+squirrel-sql (2.6.8-1~ppa1) jaunty; urgency=low
+
+  * Initial release
+
+ -- Markus Heberling <markus at tisoft.de>  Tue, 27 Jan 2009 10:43:25 +0100

Added: trunk/squirrel-sql/debian/compat
===================================================================
--- trunk/squirrel-sql/debian/compat	                        (rev 0)
+++ trunk/squirrel-sql/debian/compat	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1 @@
+7

Added: trunk/squirrel-sql/debian/control
===================================================================
--- trunk/squirrel-sql/debian/control	                        (rev 0)
+++ trunk/squirrel-sql/debian/control	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,476 @@
+Source: squirrel-sql
+Section: java
+Priority: optional
+Maintainer: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
+Uploaders: Vladimir Kotov <vladimir at kotov.lv>
+Build-Depends: ant-optional,
+               cdbs,
+               debhelper (>= 7),
+               default-jdk,
+               maven-ant-helper (>> 4),
+               maven-repo-helper
+Build-Depends-Indep: default-jdk-doc,
+                     libantlr-java,
+                     libasm3-java,
+                     libaxis-java,
+                     libcglib-java,
+                     libcommons-cli-java,
+                     libcommons-codec-java,
+                     libcommons-collections3-java,
+                     libcommons-httpclient-java,
+                     libcommons-logging-java,
+                     libdom4j-java,
+                     libhibernate-commons-annotations-java,
+                     libhibernate3-java,
+                     libjexcelapi-java,
+                     libjgoodies-forms-java,
+                     libjgoodies-looks-java,
+                     liblog4j1.2-java,
+                     libnanoxml2-java,
+                     libslf4j-java,
+                     libspring-beans-2.5-java,
+                     libspring-context-2.5-java,
+                     libspring-context-support-2.5-java,
+                     libspring-core-2.5-java,
+                     libstringtemplate-java
+Standards-Version: 3.9.1
+Vcs-Svn: svn://svn.debian.org/svn/pkg-java/trunk/squirrel-sql
+Vcs-Browser: http://svn.debian.org/wsvn/pkg-java/trunk/squirrel-sql
+Homepage: http://www.squirrelsql.org/
+
+Package: squirrel-sql
+Architecture: all
+Depends: libantlr-java,
+         libasm3-java,
+         libcglib-java,
+         libcommons-cli-java,
+         libcommons-codec-java,
+         libcommons-collections3-java,
+         libcommons-httpclient-java,
+         libcommons-logging-java,
+         libhibernate-commons-annotations-java,
+         libhibernate3-java,
+         libjexcelapi-java,
+         libjgoodies-forms-java,
+         liblog4j1.2-java,
+         libnanoxml2-java,
+         libslf4j-java,
+         libspring-beans-2.5-java,
+         libspring-context-2.5-java,
+         libspring-context-support-2.5-java,
+         libspring-core-2.5-java,
+         libsquirrel-sql-fw-java,
+         libstringtemplate-java,
+         ${misc:Depends}
+Recommends: squirrel-sql-plugins-standard
+Suggests: squirrel-sql-doc
+Description: Universal SQL Client
+ SQuirreL SQL Client is a graphical Java program that will allow you to view the
+ structure of a JDBC compliant database, browse the data in tables, issue SQL
+ commands etc.
+
+Package: libsquirrel-sql-fw-java
+Architecture: all
+Depends: libantlr-java,
+         libasm3-java,
+         libcglib-java,
+         libcommons-cli-java,
+         libcommons-codec-java,
+         libcommons-collections3-java,
+         libcommons-httpclient-java,
+         libcommons-logging-java,
+         libdom4j-java,
+         libhibernate-commons-annotations-java,
+         libhibernate3-java,
+         libjexcelapi-java,
+         libjgoodies-forms-java,
+         liblog4j1.2-java,
+         libnanoxml2-java,
+         libslf4j-java,
+         libspring-beans-2.5-java,
+         libspring-context-2.5-java,
+         libspring-context-support-2.5-java,
+         libspring-core-2.5-java,
+         libstringtemplate-java,
+         ${misc:Depends}
+Suggests: libsquirrel-sql-fw-java-doc
+Description: Java library for introspecting a database via JDBC
+ SQuirreL SQL Framework Library contains utility classes that are generic and
+ useful for building applications that introspect a database via JDBC. These
+ are not intended to be SQuirreL SQL-specific and could be used by other
+ projects JDBC front-end applications.
+
+Package: squirrel-sql-doc
+Architecture: all
+Section: doc
+Depends: default-jdk-doc, libsquirrel-sql-fw-java-doc, ${misc:Depends}
+Suggests: squirrel-sql
+Description: Universal SQL Client (documentation)
+ SQuirreL SQL Client is a graphical Java program that will allow you to view the
+ structure of a JDBC compliant database, browse the data in tables, issue SQL
+ commands etc.
+ .
+ This package contains the API documentation of squirrel-sql.
+
+Package: libsquirrel-sql-fw-java-doc
+Architecture: all
+Section: doc
+Depends: default-jdk-doc, ${misc:Depends}
+Suggests: libsquirrel-sql-fw-java
+Description: Java library for introspecting a database via JDBC (documentation)
+ SQuirreL SQL Framework Library contains utility classes that are generic and
+ useful for building applications that introspect a database via JDBC. These
+ are not intended to be SQuirreL SQL-specific and could be used by other
+ projects JDBC front-end applications.
+ .
+ This package contains the API documentation of libsquirrel-sql-fw-java.
+
+Package: squirrel-sql-plugin-codecompletion
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Codecompletion Plugin for SQuirreL SQL Client
+ The Codecompletion plugin provides completion of SQL code much the same way
+ modern IDEs do. Completion works on almost all SQL and DDL constructs:
+  * Key words
+  * Tables
+  * Columns
+  * Views
+  * Stored procedures
+  * Catalogs
+  * Schemas.
+ Beyond this the plugin offers so called completion functions that can be used
+ to generate SQL Joins.
+
+Package: squirrel-sql-plugin-dataimport
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Dataimport Plugin for SQuirreL SQL Client
+ The Dataimport plugin allows to import arbitrary files into existing tables in
+ the database. Currently the following types of files are supported:
+  * Microsoft Excel files
+  * Comma separated files (CSV).
+
+Package: squirrel-sql-plugin-db2
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Db2 Plugin for SQuirreL SQL Client
+ The DB2 plugin adds DB2-specific functionality to the SQuirreL SQL Client for
+ IBM DB2 hosted on LUW (Linux, Unix, Windows) and OS/400. The plugin adds the
+ following features:
+  * Stored Procedures, Triggers, Views and User-defined Functions (UDFs) are
+    shown in the object tree and have a "Source" tab which displays the source
+    of the selected object and a "Details" tab which gives DB2-specific
+    information about the object.
+  * Tables and Materialized Query Tables are  shown in the object tree and have
+    a "Source" tab which displays the source of the selected object.
+  * Sequences and Indexes are also shown in the object tree and have a details
+    tab giving DB2-specific information about them.
+
+Package: squirrel-sql-plugin-dbcopy
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Dbcopy Plugin for SQuirreL SQL Client
+ The Dbcopy plugin provides the ability to copy database tables between
+ sessions. The plugin adds two new "Copy Table" and "Paste Table" menu items
+ available by right-clicking on certain database objects in the object tree.
+
+Package: squirrel-sql-plugin-dbdiff
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: SQuirreL SQL Dbdiff Plugin
+ The Dbdiff plugin adds the ability to compare tables between sessions.
+ The plugin adds new "DB Diff" menu items available by right-clicking
+ on certain database objects in the object tree.
+
+Package: squirrel-sql-plugin-derby
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Derby Plugin for SQuirreL SQL Client
+ The Derby plugin adds Derby-specific functionality to the SQuirreL SQL Client.
+ The plugin adds the following features:
+  * Triggers and Views are shown in the object tree and have a "Source" tab
+    which displays the source of the selected object.
+  * Triggers also have a "Details" tab which gives trigger-specific information
+    about the object.
+
+Package: squirrel-sql-plugin-editextras
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Editextras Plugin for SQuirreL SQL Client
+ The Editextras plugin provides auxiliary functions for the SQL Editor
+ accessible through the tools popup:
+  * Formating SQL code
+  * Adding / removing Java string delimiters
+  * Creating JDBC escape syntax for SQL date/time/timestamp.
+
+Package: squirrel-sql-plugin-example
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Example Plugin for SQuirreL SQL Client
+ The Example plugin shows how to add right mouse menu entries to the Object
+ Tree which allow to script Views and Stored Procedures. Since there is no
+ standard for accessing Views and Stored Procedures in a relational database
+ a plugin like this must be a database specific plugin.
+
+Package: squirrel-sql-plugin-exportconfig
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Exportconfig Plugin for SQuirreL SQL Client
+ The Exportconfig plugin allows you to export the Database Driver definitions,
+ the Database Alias definitions and the Application Settings to files on the
+ file system. The plugin adds new hierarchical menu "Export" to the "Plugins".
+
+Package: squirrel-sql-plugin-favs
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Favs Plugin for SQuirreL SQL Client
+ The SQL Favs Plugin allows you to save and organize your SQL
+ queries. The plugin adds new hierarchical menu "Queries" to
+ the "Plugins".
+
+Package: squirrel-sql-plugin-graph
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Graph Plugin for SQuirreL SQL Client
+ The Graph plugin allows to create charts of tables and foreign-key
+ relationships. To create a graph select the tables in the Object tree and
+ click the 'Add to graph' item in the right mouse menu. Right mouse click
+ tables, constraints as well as the background to find out what functions the
+ Graph provides.
+
+Package: squirrel-sql-plugin-h2
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: H2 Plugin for SQuirreL SQL Client
+ The H2 plugin adds H2-specific functionality to the SQuirreL SQL Client.
+ The plugin adds the following features:
+  * Indexes and Views are shown in the object tree and have a "Source" tab
+    which displays the source of the selected object and a "Details" tab which
+    gives H2-specific information about the object.
+  * Sequences and Indexes are also shown in the object tree and have a details
+    tab giving H2-specific information about them.
+
+Package: squirrel-sql-plugin-hibernate
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Hibernate Plugin for SQuirreL SQL Client
+ The Hibernate plugin allows to open Hibernate session inside SQuirreL SQL
+ Client and query mapped domain objects using HQL. Before using the Hibernate
+ Plugin you must create at least one Hibernate configuration in SQuirreL's
+ Global Preferences.
+
+Package: squirrel-sql-plugin-i18n
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: I18n Plugin for SQuirreL SQL Client
+ The I18n plugin is meant to help SQuirreL internationalization. The plugin
+ adds additional features in "I18n administration" tab in "Global Preferences"
+ menu for both translators and developers.
+
+Package: squirrel-sql-plugin-informix
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Informix Plugin for SQuirreL SQL Client
+ The Informix plugin adds Informix-specific functionality to the SQuirreL SQL
+ Client. The plugin adds the following features:
+  * Stored Procedures, Triggers and Views are shown in the object tree and have
+    a "Source" tab which displays the source of the selected object and
+    a "Details" tab which gives Informix-specific information about the object.
+  * Sequences and Indexes are also shown in the object tree and have a details
+    tab giving Informix-specific information about them.
+
+Package: squirrel-sql-plugin-mssql
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Mssql Plugin for SQuirreL SQL Client
+ The plugin is designed for SQL Server 2000 and performs MSSQL-specific commands
+ with a few clicks.  It is ultimately designed to incorporate all functionality
+ from both SQL Enterprise Manager and Query Analyzer.
+
+Package: squirrel-sql-plugin-mysql
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Mysql Plugin for SQuirreL SQL Client
+ The MySQL plugin adds MySQL specific functionality to SQuirreL SQL Client. The
+ plugin adds the following features:
+  * The "MySQL Status" tab display status information about the MySQL server.
+  * The "MySQL Processes" tab shows the current processes attached to the 
+    server.
+  * The "MySQL Variables" tab shows the values of some MySQL system variables.
+  * The "MySQL Logs" tab shows information about the current MySQL log files.
+  * The "MySQL Open Tables" tab. shows a list of the currently opened tables
+    in the catalog
+  * The "MySQL Table Status" tab shows status information for the tables in the
+    currently selected catalog.
+  * The Session menu (and the popup menu in the object tree) has a new
+    Hierarchical menu "MySQL" that contains MySQL specific actions.
+
+Package: squirrel-sql-plugin-netezza
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Netezza Plugin for SQuirreL SQL Client
+ The Netezza plugin adds Netezza-specific functionality to the SQuirreL SQL
+ Client. The plugin adds the following features:
+  * Synonyms, Sequences, Stored Procedures and Views are shown in the object
+    tree when using this plugin.
+  * Synonyms, Stored Procedures and Views have a "Source" tab which displays
+    the source of the selected object. Synonyms also have a "Details" tab
+    which gives synonym-specific information about the object.
+
+Package: squirrel-sql-plugin-postgres
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Postgres Plugin for SQuirreL SQL Client
+ The Postgres plugin adds Postgres-specific functionality to the SQuirreL SQL
+ Client. The plugin adds the following features:
+  * Stored Procedures, Triggers and Views are shown in the object tree and have
+    a "Source" tab which displays the source of the selected object and a
+    "Details" tab which gives PostgreSQL-specific information about the object.
+  * Sequences and Indexes are also shown in the object tree and have a details
+    tab giving Postgres-specific information about them.
+
+Package: squirrel-sql-plugin-refactoring
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Refactoring Plugin for SQuirreL SQL Client
+ The Refactoring plugin adds the ability to easily change the definition or
+ structure of tables / columns in a database. The following refactorings are
+ supported (if the database supports the refactoring directly with SQL):
+  * Structural Refactorings
+  * Referential Integrity Refactorings
+  * Data Quality Refactorings.
+
+Package: squirrel-sql-plugin-sessionscript
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Sessionscript Plugin for SQuirreL SQL Client
+ The Sessionscript plugin allows you to specify SQL statements to be executed
+ when you first connect to an alias. The plugin adds "Session Scripts" option
+ to the "Plugins" menu.
+
+Package: squirrel-sql-plugin-smarttools
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Smarttools Plugin for SQuirreL SQL Client
+ The Smarttools plugin adds the following routines to the session popup menu:
+  * Search null values in NOT NULL columns
+  * Change data
+  * Search missing indices and from here create index or primary key.
+
+Package: squirrel-sql-plugin-sqlbookmark
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Sqlbookmark Plugin for SQuirreL SQL Client
+ The Sqlbookmark plugin allows you to bookmark commonly used SQL code for easy
+ point and click reuse. Bookmarks can be administered through "Bookmarks" tab
+ of the Global Preferences dialog. Bookmarked SQL strings can have replaceable
+ parameters. At the time the bookmark is loaded, the user is asked to enter
+ values for any of the parameters.
+
+Package: squirrel-sql-plugin-sqlparam
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Sqlparam Plugin for SQuirreL SQL Client
+ The Sqlparam plugin allows you to put variables into your SQL statements. The
+ user needs to replace the variable parts of SQL statement with variables like
+ ':variable'. When the query is executed, the user is asked to provide a value
+ for the variable.
+
+Package: squirrel-sql-plugin-sqlreplace
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Sqlreplace Plugin for SQuirreL SQL Client
+ The Sqlreplace plugin replaces a set of variables before a statement is
+ executed. If there is a need to specify variables containing more regexPattern
+ then one can specify this in the preferences.
+
+Package: squirrel-sql-plugin-sqlscript
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Sqlscript Plugin for SQuirreL SQL Client
+ The Sqlscript plugin provides a wide range of scripting functions:
+  * Create DDL scripts for tables out of the Object tree or from Graph plugin
+  * Create Insert scripts out of the Object tree for all of a table's data
+  * Create an insert script from an SQL Select statement
+  * Store the result of an from an SQL Select statement in a temporary table
+    with the help of sql2table function from the popup menu.
+
+Package: squirrel-sql-plugin-laf
+Architecture: all
+Depends: kunststoff,
+         libjgoodies-looks-java,
+         libskinlf-java,
+         squirrel-sql,
+         substance,
+         tinylaf,
+         ${misc:Depends}
+Description: Look and Feel Plugin for SQuirreL SQL Client
+ This plugin allows you to select a Look and Feel other than the default Java
+ one and to specify the fonts for the different GUI controls. The plugin adds
+ the following features:
+  * The "L & F" tab in the "Global Preferences" Dialog allows to select the
+    Look and Feel.
+  * The "Fonts" tab in the "Global Preferences" Dialog allows to specify the
+    fonts used for various controls in SQuirreL.
+ The plugin ships with the following Look and Feel implementations:
+  * JGoodies Looks Look & Feel
+  * Kunststoff Look & Feel
+  * Substance Look & Feel
+  * Skin Look & Feel
+  * TinyLAF Look & Feel
+
+Package: squirrel-sql-plugin-firebird
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Firebird Plugin for SQuirreL SQL Client
+ The Firebird plugin adds functionality specific to the Firebird DBMS to
+ SQuirreL SQL Client. The plugin adds the following features:
+  * Stored Procedures, Triggers and Views are shown in the object tree and have
+    a "Source" tab which displays the source of the selected object and a
+    "Details" tab which gives Firebird-specific information about the object.
+  * Sequences and Indexes are also shown in the object tree and have a details
+    tab giving Firebird-specific information about them.
+
+Package: squirrel-sql-plugin-sqlval
+Architecture: all
+Depends: libaxis-java, squirrel-sql, ${misc:Depends}
+Description: Sqlval Plugin for SQuirreL SQL Client
+ The Sqlval plugin validates SQL against the ISO SQL standard. It does this
+ by using a Web Service provided by Mimer SQL. The SQL that is validated is
+ stored anonymously to be used by the ISO SQL Standards committee.
+
+Package: squirrel-sql-plugin-sybase
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Sybase Plugin for SQuirreL SQL Client
+ The Sybase plugin allows Sybase ASE users to script Procedures and Views
+ using the right click popup menu. The plugin was created using the example
+ plugin.
+
+Package: squirrel-sql-plugin-userscript
+Architecture: all
+Depends: squirrel-sql, ${misc:Depends}
+Description: Userscript Plugin for SQuirreL SQL Client
+ The Userscript plugin provides an easy way to extend Squirrel with little Java
+ programs called user scripts. The functions are accessible through right click
+ in the object tree.
+
+Package: squirrel-sql-plugins-standard
+Architecture: all
+Depends: squirrel-sql-plugin-codecompletion,
+         squirrel-sql-plugin-editextras,
+         squirrel-sql-plugin-graph,
+         squirrel-sql-plugin-laf,
+         squirrel-sql-plugin-sqlbookmark,
+         squirrel-sql-plugin-sqlscript,
+         ${misc:Depends}
+Description: Standard Plugins for SQuirreL SQL Client
+ This metapackage contains dependencies for a collection of standard SQuirreL
+ plugins:
+  * Code Completion - Offers code completion the same way as modern IDEs do
+  * Syntax - Syntax highlighting
+  * Edit Extras - Auxiliary functions to work with SQL code
+  * Graph - create a chart of tables and foreign-key relationships between them
+  * SQL Script - Generation of SQL and DDL scripts
+  * SQL Bookmarks - Managing SQL code templates
+  * Look and Feel - Switching the look and feel

Added: trunk/squirrel-sql/debian/copyright
===================================================================
--- trunk/squirrel-sql/debian/copyright	                        (rev 0)
+++ trunk/squirrel-sql/debian/copyright	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,354 @@
+Format-Specification: http://dep.debian.net/deps/dep5/
+Name: SQuirreL SQL
+Maintainer:  Gerd Wagner as Administrator, Developer
+             Rob Manning as Developer, Release Manager
+Source: http://www.squirrelsql.org/
+
+Files: *
+Copyright: 2001-2011,
+           Adin Aronson
+           Christian Sell
+           Colin Bell
+           Daniel Regli
+           David MacLean
+           Gerd Wagner
+           Glenn Griffin
+           Henner Zeller
+           Jason Height
+           Johan Compagner
+           Maury Hammel
+           Rob Manning
+           Ryan Walberg
+           Thorsten Mürell
+           Yannick Winiger
+License: Apache-2.0 or LGPL-2.1
+
+Files: plugins/*
+Copyright: 2001-2006, Colin Bell
+           2001-2003, Jason Height
+           2001, Johan Compagner
+           2001, Stephen Ostermiller
+           2002-2003, Colin Bell and Olof Edlund
+           2003, Arun Kapilan.P
+           2003-2010, Gerd Wagner
+           2003, Joseph Mocker
+           2003-2005, Robert Futrell
+           2003, Stathis Alexopoulos
+           2004, Ryan Walberg
+           2005, Alexander Buloichik
+           2005-2010, Rob Manning
+           2007, Christoph Schmitz
+           2007, Daniel Regli & Yannick Winiger
+           2007, Thorsten Mürell
+           2007, Yannick Winiger
+           2008, Dieter Engelhardt
+           2008, Lars Heller
+           2008, Michael Romankiewicz
+           2009, Glenn Hobbs
+           2009, Jos David Moreno Jurez
+           2010, Bogdan Cristian Paulon
+           Bruce Dunwiddie
+License: LGPL-2.1
+
+Files: debian/*
+Copyright: 2009, Markus Heberling <markus at tisoft.de>
+           2011, Vladimir Kotov <vladimir at kotov.lv>
+License: GPL-2
+
+Files: fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/PopupManager.java
+Copyright: 1997-2000, Sun Microsystems, Inc.
+License: Sun Public License Version 1.0
+Comment: We have contacted the upstream authors Rob Manning and Gerd Wagner regarding the source 
+ from which this derived work was created. The original file is PopupManager.java,
+ part of the NetBeans software (http://netbeans.org/). The file is no longer distributed under the SPL,
+ but instead under a GPL-like license.
+
+Files: app/src/main/java/net/sourceforge/squirrel_sql/client/gui/builders/DefaultFormBuilder.java
+Copyright: 2005-2008, Karsten Lentzsch <karsten at dev.java.net>
+License: BSD
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+  o Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+
+  o Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+  o Neither the name of JGoodies Karsten Lentzsch nor the names of
+    its contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Files: app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/eclipse/*
+License: CPL-1.0
+
+Files: app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/jb/*
+Copyright: 1998, Dean S. Jones
+
+Files: app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/sun/*
+Copyright: 2000, Sun Microsystems
+License: other
+ Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
+ and redistribute this software graphics artwork, as individual graphics or
+ as a collection, as part of software code or programs that you develop,
+ provided that i) this copyright notice and license accompany the software
+ graphics artwork; and ii) you do not utilize the software graphics artwork
+ in a manner which is disparaging to Sun. Unless enforcement is prohibited by
+ applicable law, you may not modify the graphics, and must use them true to
+ color and unmodified in every way.
+ 
+ This software graphics artwork is provided "AS IS," without a warranty of
+ any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL
+ NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
+ MODIFYING OR DISTRIBUTING THE SOFTWARE GRAPHICS ARTWORK.
+ 
+ IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT
+ OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
+ PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
+ ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE GRAPHICS ARTWORK,
+ EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ 
+ If any of the above provisions are held to be in violation of applicable
+ law, void, or unenforceable in any jurisdiction, then such provisions are
+ waived to the extent necessary for this Disclaimer to be otherwise
+ enforceable in such jurisdiction.
+
+License: Apache-2.0
+ On Debian GNU/Linux system you can find the complete text of the
+ Apache-2.0 license in '/usr/share/common-licenses/Apache-2.0'
+
+License: LGPL-2.1
+ On Debian GNU/Linux system you can find the complete text of the
+ LGPL-2.1 license in '/usr/share/common-licenses/LGPL-2.1'
+
+License: GPL-2
+ On Debian GNU/Linux system you can find the complete text of the
+ GPL-2 license in '/usr/share/common-licenses/GPL-2'
+
+License: CPL-1.0
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+ LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+ CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+ 
+ 1. DEFINITIONS 
+ 
+ "Contribution" means:
+ 
+ a) in the case of the initial Contributor, the initial code and
+ documentation distributed under this Agreement, and
+ 
+ b) in the case of each subsequent Contributor:
+ 
+ i) changes to the Program, and
+ 
+ ii) additions to the Program;
+ 
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates' from a
+ Contributor if it was added to the Program by such Contributor itself or anyone
+ acting on such Contributor's behalf. Contributions do not include additions to
+ the Program which: (i) are separate modules of software distributed in
+ conjunction with the Program under their own license agreement, and (ii) are not
+ derivative works of the Program.
+ 
+ "Contributor" means any person or entity that distributes the Program.
+ 
+ "Licensed Patents " mean patent claims licensable by a Contributor which are
+ necessarily infringed by the use or sale of its Contribution alone or when
+ combined with the Program.
+ 
+ "Program" means the Contributions distributed in accordance with this Agreement.
+ 
+ "Recipient" means anyone who receives the Program under this Agreement,
+ including all Contributors.
+ 
+ 2. GRANT OF RIGHTS
+ 
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly perform,
+ distribute and sublicense the Contribution of such Contributor, if any, and such
+ derivative works, in source code and object code form.
+ 
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+ Patents to make, use, sell, offer to sell, import and otherwise transfer the
+ Contribution of such Contributor, if any, in source code and object code form.
+ This patent license shall apply to the combination of the Contribution and the
+ Program if, at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered by the
+ Licensed Patents. The patent license shall not apply to any other combinations
+ which include the Contribution. No hardware per se is licensed hereunder.
+ 
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other intellectual
+ property rights of any other entity. Each Contributor disclaims any liability to
+ Recipient for claims brought by any other entity based on infringement of
+ intellectual property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed, if any.
+ For example, if a third party patent license is required to allow Recipient to
+ distribute the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+ 
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright license set
+ forth in this Agreement.
+ 
+ 3. REQUIREMENTS
+ 
+ A Contributor may choose to distribute the Program in object code form under its
+ own license agreement, provided that:
+ 
+ a) it complies with the terms and conditions of this Agreement; and
+ 
+ b) its license agreement:
+ 
+ i) effectively disclaims on behalf of all Contributors all warranties and
+ conditions, express and implied, including warranties or conditions of title and
+ non-infringement, and implied warranties or conditions of merchantability and
+ fitness for a particular purpose;
+ 
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and consequential
+ damages, such as lost profits;
+ 
+ iii) states that any provisions which differ from this Agreement are offered
+ by that Contributor alone and not by any other party; and
+ 
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable manner on or
+ through a medium customarily used for software exchange.
+ 
+ When the Program is made available in source code form:
+ 
+ a) it must be made available under this Agreement; and
+ 
+ b) a copy of this Agreement must be included with each copy of the Program.
+ 
+ Contributors may not remove or alter any copyright notices contained within the
+ Program.
+ 
+ Each Contributor must identify itself as the originator of its Contribution, if
+ any, in a manner that reasonably allows subsequent Recipients to identify the
+ originator of the Contribution.
+ 
+ 4. COMMERCIAL DISTRIBUTION
+ 
+ Commercial distributors of software may accept certain responsibilities with
+ respect to end users, business partners and the like. While this license is
+ intended to facilitate the commercial use of the Program, the Contributor who
+ includes the Program in a commercial product offering should do so in a manner
+ which does not create potential liability for other Contributors. Therefore, if
+ a Contributor includes the Program in a commercial product offering, such
+ Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+ every other Contributor ("Indemnified Contributor") against any losses, damages
+ and costs (collectively "Losses") arising from claims, lawsuits and other legal
+ actions brought by a third party against the Indemnified Contributor to the
+ extent caused by the acts or omissions of such Commercial Contributor in
+ connection with its distribution of the Program in a commercial product
+ offering. The obligations in this section do not apply to any claims or Losses
+ relating to any actual or alleged intellectual property infringement. In order
+ to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+ Contributor in writing of such claim, and b) allow the Commercial Contributor to
+ control, and cooperate with the Commercial Contributor in, the defense and any
+ related settlement negotiations. The Indemnified Contributor may participate in
+ any such claim at its own expense.
+ 
+ For example, a Contributor might include the Program in a commercial product
+ offering, Product X. That Contributor is then a Commercial Contributor. If that
+ Commercial Contributor then makes performance claims, or offers warranties
+ related to Product X, those performance claims and warranties are such
+ Commercial Contributor's responsibility alone. Under this section, the
+ Commercial Contributor would have to defend claims against the other
+ Contributors related to those performance claims and warranties, and if a court
+ requires any other Contributor to pay any damages as a result, the Commercial
+ Contributor must pay those damages.
+ 
+ 5. NO WARRANTY
+ 
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+ IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+ NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+ Recipient is solely responsible for determining the appropriateness of using and
+ distributing the Program and assumes all risks associated with its exercise of
+ rights under this Agreement, including but not limited to the risks and costs of
+ program errors, compliance with applicable laws, damage to or loss of data,
+ programs or equipment, and unavailability or interruption of operations.
+ 
+ 6. DISCLAIMER OF LIABILITY
+ 
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+ CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+ PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+ GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ 
+ 7. GENERAL
+ 
+ If any provision of this Agreement is invalid or unenforceable under applicable
+ law, it shall not affect the validity or enforceability of the remainder of the
+ terms of this Agreement, and without further action by the parties hereto, such
+ provision shall be reformed to the minimum extent necessary to make such
+ provision valid and enforceable.
+ 
+ If Recipient institutes patent litigation against a Contributor with respect to
+ a patent applicable to software (including a cross-claim or counterclaim in a
+ lawsuit), then any patent licenses granted by that Contributor to such Recipient
+ under this Agreement shall terminate as of the date such litigation is filed. In
+ addition, if Recipient institutes patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+ itself (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted under
+ Section 2(b) shall terminate as of the date such litigation is filed.
+ 
+ All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and does
+ not cure such failure in a reasonable period of time after becoming aware of
+ such noncompliance. If all Recipient's rights under this Agreement terminate,
+ Recipient agrees to cease use and distribution of the Program as soon as
+ reasonably practicable. However, Recipient's obligations under this Agreement
+ and any licenses granted by Recipient relating to the Program shall continue and
+ survive.
+ 
+ Everyone is permitted to copy and distribute copies of this Agreement, but in
+ order to avoid inconsistency the Agreement is copyrighted and may only be
+ modified in the following manner. The Agreement Steward reserves the right to
+ publish new versions (including revisions) of this Agreement from time to time.
+ No one other than the Agreement Steward has the right to modify this Agreement.
+ IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+ as the Agreement Steward to a suitable separate entity. Each new version of the
+ Agreement will be given a distinguishing version number. The Program (including
+ Contributions) may always be distributed subject to the version of the Agreement
+ under which it was received. In addition, after a new version of the Agreement
+ is published, Contributor may elect to distribute the Program (including its
+ Contributions) under the new version. Except as expressly stated in Sections
+ 2(a) and 2(b) above, Recipient receives no rights or licenses to the
+ intellectual property of any Contributor under this Agreement, whether
+ expressly, by implication, estoppel or otherwise. All rights in the Program not
+ expressly granted under this Agreement are reserved.
+ 
+ This Agreement is governed by the laws of the State of New York and the
+ intellectual property laws of the United States of America. No party to this
+ Agreement will bring a legal action under this Agreement more than one year
+ after the cause of action arose. Each party waives its rights to a jury trial in
+ any resulting litigation.
\ No newline at end of file

Added: trunk/squirrel-sql/debian/libsquirrel-sql-fw-java-doc.doc-base.api
===================================================================
--- trunk/squirrel-sql/debian/libsquirrel-sql-fw-java-doc.doc-base.api	                        (rev 0)
+++ trunk/squirrel-sql/debian/libsquirrel-sql-fw-java-doc.doc-base.api	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,10 @@
+Document: libsquirrel-sql-fw-java
+Title: API Javadoc for SQuirreL SQL Framework Library
+Author: SQuirreL SQL developers
+Abstract: This is the API Javadoc provided for the
+ libsquirrel-sql-fw-java library.
+Section: Programming
+
+Format: HTML
+Index: /usr/share/doc/libsquirrel-sql-fw-java/api/index.html
+Files: /usr/share/doc/libsquirrel-sql-fw-java/api/*

Added: trunk/squirrel-sql/debian/libsquirrel-sql-fw-java-doc.install
===================================================================
--- trunk/squirrel-sql/debian/libsquirrel-sql-fw-java-doc.install	                        (rev 0)
+++ trunk/squirrel-sql/debian/libsquirrel-sql-fw-java-doc.install	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,2 @@
+
+fw/target/apidocs/* usr/share/doc/libsquirrel-sql-fw-java/api

Added: trunk/squirrel-sql/debian/libsquirrel-sql-fw-java.poms
===================================================================
--- trunk/squirrel-sql/debian/libsquirrel-sql-fw-java.poms	                        (rev 0)
+++ trunk/squirrel-sql/debian/libsquirrel-sql-fw-java.poms	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,2 @@
+pom.xml --no-parent
+fw/pom.xml

Added: trunk/squirrel-sql/debian/maven.ignoreRules
===================================================================
--- trunk/squirrel-sql/debian/maven.ignoreRules	                        (rev 0)
+++ trunk/squirrel-sql/debian/maven.ignoreRules	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,19 @@
+asm asm-attrs * * * *
+gsbase gsbase * * * *
+junit junit * * * *
+org.easymock easymock * * * *
+org.easymock easymockclassextension * * * *
+org.mockito mockito-all * * * *
+org.springframework spring-test * * * *
+net.sf.squirrel-sql squirrelsql-version-plugin * * * *
+org.apache.maven.plugins maven-source-plugin * * * *
+org.apache.maven.plugins maven-scm-plugin * * * *
+org.apache.maven.plugins maven-surefire-plugin * * * *
+org.apache.maven.plugins maven-assembly-plugin * * * *
+org.apache.maven.plugins maven-dependency-plugin * * * *
+net.sf.squirrel-sql fw test-jar * * *
+net.sf.squirrel-sql squirrel-sql test-jar * * *
+net.sf.squirrel-sql.thirdparty-non-maven * * * * *
+net.sf.nimrod nimrod-laf * * * *
+net.sf.tinylaf tinylaf * * * *
+

Added: trunk/squirrel-sql/debian/maven.rules
===================================================================
--- trunk/squirrel-sql/debian/maven.rules	                        (rev 0)
+++ trunk/squirrel-sql/debian/maven.rules	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,9 @@
+antlr antlr jar s/2\..*/2.x/ * *
+asm asm jar s/.*/3.x/ * *
+commons-collections commons-collections jar s/.*/3.x/ * *
+commons-httpclient commons-httpclient jar s/3\..*/3.x/ * *
+s/jgoodies/com.jgoodies/ forms * s/.*/debian/ * *
+log4j log4j jar s/1\.2\..*/1.2.x/ * *
+org.antlr stringtemplate jar s/3\..*/3.x/ * *
+org.springframework * * s/.*/2.x/ * *
+org.hibernate s/hibernate/hibernate-core/ jar s/.*/debian/ * *

Added: trunk/squirrel-sql/debian/menu
===================================================================
--- trunk/squirrel-sql/debian/menu	                        (rev 0)
+++ trunk/squirrel-sql/debian/menu	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,4 @@
+?package(squirrel-sql):needs="X11" section="Applications/Data Management"\
+  title="SQuirreL SQL" command="/usr/bin/squirrel-sql" \
+  icon="/usr/share/squirrel-sql/icons/acorn.xpm"
+

Added: trunk/squirrel-sql/debian/orig-tar.exclude
===================================================================
--- trunk/squirrel-sql/debian/orig-tar.exclude	                        (rev 0)
+++ trunk/squirrel-sql/debian/orig-tar.exclude	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,9 @@
+*.jar
+build/*
+design/*
+docsrc/*
+web-site/*
+test/*
+
+
+

Added: trunk/squirrel-sql/debian/orig-tar.sh
===================================================================
--- trunk/squirrel-sql/debian/orig-tar.sh	                        (rev 0)
+++ trunk/squirrel-sql/debian/orig-tar.sh	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,18 @@
+#!/bin/sh -e
+
+VERSION=$2
+TAR=../squirrel-sql_$VERSION.orig.tar.gz
+DIR=squirrel-sql-$VERSION
+SVN=http://squirrel-sql.svn.sourceforge.net/svnroot/squirrel-sql/tags
+TAG=$(echo "squirrelsql-$VERSION" | sed -re's/~(alpha|beta)/-\1-/')
+
+# clean up the upstream tarball
+svn export $SVN/$TAG $DIR
+tar -c -z -f $TAR -X debian/orig-tar.exclude $DIR
+rm -rf $DIR $3
+
+# move to directory 'tarballs'
+if [ -r .svn/deb-layout ]; then
+  . .svn/deb-layout
+  mv $TAR $origDir && echo "moved $TAR to $origDir"
+fi


Property changes on: trunk/squirrel-sql/debian/orig-tar.sh
___________________________________________________________________
Added: svn:executable
   + 

Added: trunk/squirrel-sql/debian/patches/001-squirrelsql-jgoodies.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/001-squirrelsql-jgoodies.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/001-squirrelsql-jgoodies.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,1327 @@
+Description: Workaround for api compatibility problems with jgoodies-forms >= v 1.1.0 where some deprecated builder constructors were removed.
+ Code of DefaultFormBuilder from jgoodies upstream https://forms.dev.java.net/source/browse/*checkout*/forms/src/core/com/jgoodies/forms/builder/DefaultFormBuilder.java?rev=1.10 is used.
+Forwarded: https://sourceforge.net/tracker/?func=detail&aid=3168389&group_id=28383&atid=393416
+From: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
+Last-Update: 2011-01-09
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/builders/DefaultFormBuilder.java
++++ b/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/builders/DefaultFormBuilder.java
+@@ -1,59 +1,100 @@
+ /*
+- * Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights Reserved.
++ * Copyright (c) 2002-2008 JGoodies Karsten Lentzsch. All Rights Reserved.
+  *
+- * Redistribution and use in source and binary forms, with or without 
++ * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions are met:
+- * 
+- *  o Redistributions of source code must retain the above copyright notice, 
+- *    this list of conditions and the following disclaimer. 
+- *     
+- *  o Redistributions in binary form must reproduce the above copyright notice, 
+- *    this list of conditions and the following disclaimer in the documentation 
+- *    and/or other materials provided with the distribution. 
+- *     
+- *  o Neither the name of JGoodies Karsten Lentzsch nor the names of 
+- *    its contributors may be used to endorse or promote products derived 
+- *    from this software without specific prior written permission. 
+- *     
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
+- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
+- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
+- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
+- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+- */package net.sourceforge.squirrel_sql.client.gui.builders;
++ *
++ *  o Redistributions of source code must retain the above copyright notice,
++ *    this list of conditions and the following disclaimer.
++ *
++ *  o Redistributions in binary form must reproduce the above copyright notice,
++ *    this list of conditions and the following disclaimer in the documentation
++ *    and/or other materials provided with the distribution.
++ *
++ *  o Neither the name of JGoodies Karsten Lentzsch nor the names of
++ *    its contributors may be used to endorse or promote products derived
++ *    from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
++ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
++ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
++ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
++ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++package net.sourceforge.squirrel_sql.client.gui.builders;
++import com.jgoodies.forms.builder.I15dPanelBuilder;
++
+ import java.awt.Component;
+ import java.util.ResourceBundle;
+ 
+ import javax.swing.JComponent;
+ import javax.swing.JLabel;
+ import javax.swing.JPanel;
++
+ import com.jgoodies.forms.factories.FormFactory;
+ import com.jgoodies.forms.layout.ConstantSize;
+ import com.jgoodies.forms.layout.FormLayout;
+ import com.jgoodies.forms.layout.RowSpec;
+-/** * Provides a means to build consistent form-oriented panels quickly
++
++/**
++ * Provides a means to build form-oriented panels quickly and consistently
+  * using the {@link FormLayout}. This builder combines frequently used
+- * panel building steps: add a new row, add a label, proceed to the next 
+- * data column, then add a component.
+- * <p>
++ * panel building steps: add a new row, add a label, proceed to the next
++ * data column, then add a component.<p>
++ *
++ * The extra value lies in the <code>#append</code> methods that
++ * append gap rows and component rows if necessary and then add
++ * the given components. They are built upon the superclass behavior
++ * <code>#appendRow</code> and the set of <code>#add</code> methods.
++ * A set of component appenders allows to add a textual label and
++ * associated component in a single step.<p>
++ *
+  * This builder can map resource keys to internationalized (i15d) texts
+  * when creating text labels, titles and titled separators. Therefore
+  * you must specify a <code>ResourceBundle</code> in the constructor.
+- * The builder methods throw an <code>IllegalStateException</code>
+- * if one of the mapping builder methods is invoked and no bundle has been set.
+- * <p>
+- * This class is not yet part of the binary Forms library; 
+- * it comes with the Forms distributions as an extra.
+- * <b>The API is work in progress and may change without notice.</b>
+- * If you want to use this class, you may consider copying it into your codebase.
+- * <p>
+- * <b>Example:</b>
++ * The builder methods throw an <code>IllegalStateException</code> if one
++ * of the mapping builder methods is invoked and no bundle has been set.<p>
++ *
++ * You can configure the build process by setting a leading column,
++ * enabling the row grouping and by modifying the gaps between normal
++ * lines and between paragraphs. The leading column will be honored
++ * if the cursor proceeds to the next row. All appended components
++ * start in the specified lead column, except appended separators that
++ * span all columns.<p>
++ *
++ * It is temptive to use the DefaultFormBuilder all the time and
++ * to let it add rows automatically. Use a simpler style if it increases
++ * the code readability. Explicit row specifications and cell constraints
++ * make your layout easier to understand - but harder to maintain.
++ * See also the accompanying tutorial sources and the Tips &amp; Tricks
++ * that are part of the Forms documentation.<p>
++ *
++ * Sometimes a form consists of many standardized rows but has a few
++ * rows that require a customization. The DefaultFormBuilder can do everything
++ * that the superclasses {@link com.jgoodies.forms.builder.AbstractFormBuilder}
++ * and {@link com.jgoodies.forms.builder.PanelBuilder} can do;
++ * among other things: appending new rows and moving the cursor.
++ * Again, ask yourself if the DefaultFormBuilder is the appropriate builder.
++ * As a rule of thumb you should have more components than builder commands.
++ * There are different ways to add custom rows. Find below example code
++ * that presents and compares the pros and cons of three approaches.<p>
++ *
++ * The texts used in methods <code>#append(String, ...)</code> and
++ * <code>#appendTitle(String)</code> as well as the localized texts used in
++ * methods <code>#appendI15d</code> and <code>#appendI15dTitle</code>
++ * can contain an optional mnemonic marker. The mnemonic and mnemonic index
++ * are indicated by a single ampersand (<tt>&amp;</tt>).
++ * For example <tt>&quot;&amp;Save&quot</tt>, or
++ * <tt>&quot;Save&nbsp;&amp;as&quot</tt>. To use the ampersand itself,
++ * duplicate it, for example <tt>&quot;Look&amp;&amp;Feel&quot</tt>.<p>
++ *
++ * <strong>Example:</strong>
+  * <pre>
+  * public void build() {
+  *     FormLayout layout = new FormLayout(
+@@ -68,7 +109,7 @@
+  *     builder.append("Identifier", identifierField);
+  *     builder.nextLine();
+  *
+- *     builder.append("PTI [kW]",   new JTextField());          
++ *     builder.append("PTI [kW]",   new JTextField());
+  *     builder.append("Power [kW]", new JTextField());
+  *
+  *     builder.append("s [mm]",     new JTextField());
+@@ -76,18 +117,18 @@
+  *
+  *     builder.appendSeparator("Diameters");
+  *
+- *     builder.append("da [mm]",    new JTextField());          
++ *     builder.append("da [mm]",    new JTextField());
+  *     builder.append("di [mm]",    new JTextField());
+  *
+- *     builder.append("da2 [mm]",   new JTextField());          
++ *     builder.append("da2 [mm]",   new JTextField());
+  *     builder.append("di2 [mm]",   new JTextField());
+  *
+- *     builder.append("R [mm]",     new JTextField());          
++ *     builder.append("R [mm]",     new JTextField());
+  *     builder.append("D [mm]",     new JTextField());
+  *
+  *     builder.appendSeparator("Criteria");
+  *
+- *     builder.append("Location",   buildLocationComboBox());   
++ *     builder.append("Location",   buildLocationComboBox());
+  *     builder.append("k-factor",   new JTextField());
+  *
+  *     builder.appendSeparator("Bolts");
+@@ -100,199 +141,354 @@
+  *
+  *     builder.append("ds [mm]",    new JTextField());
+  * }
+- * </pre>
++ * </pre><p>
++ *
++ * <strong>Custom Row Example:</strong>
++ * <pre>
++ * public JComponent buildPanel() {
++ *     initComponents();
++ *
++ *     FormLayout layout = new FormLayout(
++ *             "right:pref, 3dlu, default:grow",
++ *             "");
++ *     DefaultFormBuilder builder = new DefaultFormBuilder(layout);
++ *     builder.setDefaultDialogBorder();
++ *     builder.setRowGroupingEnabled(true);
++ *
++ *     CellConstraints cc = new CellConstraints();
++ *
++ *     // In this approach, we add a gap and a custom row.
++ *     // The advantage of this approach is, that we can express
++ *     // the row spec and comment area cell constraints freely.
++ *     // The disadvantage is the misalignment of the leading label.
++ *     // Also the row's height may be inconsistent with other rows.
++ *     builder.appendSeparator("Single Custom Row");
++ *     builder.append("Name", name1Field);
++ *     builder.appendRow(builder.getLineGapSpec());
++ *     builder.appendRow(new RowSpec("top:31dlu")); // Assumes line is 14, gap is 3
++ *     builder.nextLine(2);
++ *     builder.append("Comment");
++ *     builder.add(new JScrollPane(comment1Area),
++ *                 cc.xy(builder.getColumn(), builder.getRow(), "fill, fill"));
++ *     builder.nextLine();
++ *
++ *     // In this approach, we append a standard row with gap before it.
++ *     // The advantage is, that the leading label is aligned well.
++ *     // The disadvantage is that the comment area now spans
++ *     // multiple cells and is slightly less flexible.
++ *     // Also the row's height may be inconsistent with other rows.
++ *     builder.appendSeparator("Standard + Custom Row");
++ *     builder.append("Name", name2Field);
++ *     builder.append("Comment");
++ *     builder.appendRow(new RowSpec("17dlu")); // Assumes line is 14, gap is 3
++ *     builder.add(new JScrollPane(comment2Area),
++ *                 cc.xywh(builder.getColumn(), builder.getRow(), 1, 2));
++ *     builder.nextLine(2);
++ *
++ *     // In this approach, we append two standard rows with associated gaps.
++ *     // The advantage is, that the leading label is aligned well,
++ *     // and the height is consistent with other rows.
++ *     // The disadvantage is that the comment area now spans
++ *     // multiple cells and is slightly less flexible.
++ *     builder.appendSeparator("Two Standard Rows");
++ *     builder.append("Name", name3Field);
++ *     builder.append("Comment");
++ *     builder.nextLine();
++ *     builder.append("");
++ *     builder.nextRow(-2);
++ *     builder.add(new JScrollPane(comment3Area),
++ *                 cc.xywh(builder.getColumn(), builder.getRow(), 1, 3));
++ *
++ *     return builder.getPanel();
++ * }
++ * </pre><p>
++ *
++ * TODO: Consider adding a method for appending a component that spans the
++ * remaining columns in the current row. Method name candidates are
++ * <code>#appendFullSpan</code> and <code>#appendRemaining</code>.
+  *
+  * @author	Karsten Lentzsch
++ * @version $Revision: 1.10 $
++ * @since 1.0.3
++ *
+  * @see	com.jgoodies.forms.builder.AbstractFormBuilder
+  * @see	com.jgoodies.forms.factories.FormFactory
+  * @see	com.jgoodies.forms.layout.FormLayout
+  */
+ public final class DefaultFormBuilder extends I15dPanelBuilder {
++
++    /**
++     * Holds the row specification that is reused to describe rows
++     * that are intended for labels and components.
++     *
++     * @see #setDefaultRowSpec(RowSpec)
++     */
++    private RowSpec defaultRowSpec = FormFactory.PREF_ROWSPEC;
++
+     /**
+      * Holds the row specification that is reused to describe
+      * the constant gaps between component lines.
++     *
++     * @see #setLineGapSize(ConstantSize)
+      */
+     private RowSpec lineGapSpec = FormFactory.LINE_GAP_ROWSPEC;
++
+     /**
+-     * Holds the row specification that describes the constant gaps 
++     * Holds the row specification that describes the constant gaps
+      * between paragraphs.
++     *
++     * @see #setParagraphGapSize(ConstantSize)
+      */
+     private RowSpec paragraphGapSpec = FormFactory.PARAGRAPH_GAP_ROWSPEC;
++
+     /**
+      * Holds the offset of the leading column - often 0 or 1.
++     *
++     * @see #getLeadingColumnOffset()
++     * @see #setLeadingColumnOffset(int)
++     * @see #getLeadingColumn()
+      */
+     private int leadingColumnOffset = 0;
++
+     /**
+-     * Determines wether new data rows are being grouped or not. 
++     * Determines whether new data rows are being grouped or not.
++     *
++     * @see #isRowGroupingEnabled()
++     * @see #setRowGroupingEnabled(boolean)
+      */
+     private boolean rowGroupingEnabled = false;
++
++
+     // Instance Creation ****************************************************
+-    /**     * Constructs an instance of <code>DefaultFormBuilder</code> for the given
++
++    /**
++     * Constructs a <code>DefaultFormBuilder</code> for the given
+      * layout.
+-     * 
++     *
+      * @param layout	the <code>FormLayout</code> to be used
+-     */    
++     */
+     public DefaultFormBuilder(FormLayout layout) {
+-        this(new JPanel(), layout);
++        this(layout, new JPanel(null));
+     }
++
++
+     /**
+-     * Constructs an instance of <code>DefaultFormBuilder</code> for the given
+-     * panel and layout.
+-     * 
+-     * @param panel		the layout container
+-     * @param layout		the <code>FormLayout</code> to be used
+-     */    
+-    public DefaultFormBuilder(JPanel panel, FormLayout layout) {
+-        this(panel, layout, null);
++     * Constructs a <code>DefaultFormBuilder</code> for the given
++     * layout and panel.
++     *
++     * @param layout    the <code>FormLayout</code> to be used
++     * @param panel     the layout container
++     */
++    public DefaultFormBuilder(FormLayout layout, JPanel panel) {
++        this(layout, null, panel);
+     }
++
++
+     /**
+-     * Constructs an instance of <code>DefaultFormBuilder</code> for the given
++     * Constructs a <code>DefaultFormBuilder</code> for the given
+      * layout and resource bundle.
+-     * 
++     *
+      * @param layout    the <code>FormLayout</code> to be used
+      * @param bundle    the <code>ResourceBundle</code> used to lookup i15d
+      * strings
+-     */    
++     */
+     public DefaultFormBuilder(FormLayout layout, ResourceBundle bundle) {
+-        this(new JPanel(), layout, bundle);
++        this(layout, bundle, new JPanel(null));
+     }
++
++
+     /**
+-     * Constructs an instance of <code>DefaultFormBuilder</code> for the given
+-     * panel, layout and resource bundle.
+-     * 
+-     * @param panel     the layout container
++     * Constructs a <code>DefaultFormBuilder</code> for the given
++     * layout, resource bundle, and panel.
++     *
+      * @param layout    the <code>FormLayout</code> to be used
++     * @param panel     the layout container
+      * @param bundle    the <code>ResourceBundle</code> used to lookup i15d
+-     * strings
+-     */    
+-    public DefaultFormBuilder(JPanel panel, FormLayout layout, ResourceBundle bundle) {
+-        super(panel, layout, bundle);
+-    }
+-    // Settings Gap Sizes ***************************************************
+-    /**
+-     * Sets the size of gaps between component lines using the given 
+-     * constant size.
+-     *  
+-     * @param lineGapSize   the <coide>ConstantSize</code> that describes 
+-     *     the size of the gaps between component lines
++     *     strings
+      */
+-    public void setLineGapSize(ConstantSize lineGapSize) {
+-        RowSpec rowSpec = FormFactory.createGapRowSpec(lineGapSize);
+-        // No longer supported in version 1.0.4/1.0.5 which are the oldest available versions in maven 
+-        // central repo
+-        //
+-        //this.lineGapSpec = rowSpec.asUnmodifyable();
+-        this.lineGapSpec = rowSpec ;
++    public DefaultFormBuilder(FormLayout layout, ResourceBundle bundle, JPanel panel) {
++        super(layout, bundle, panel);
+     }
++
++
++    // Configuration **********************************************************
++
+     /**
+-     * Returns the row specification that is used to separate component lines.
+-     *  
+-     * @return the <code>RowSpec</code> that is used to separate lines 
++     * Returns the row specification that is used for component rows.
++     *
++     * @return the {@code RowSpec} used for component rows
++     *
++     * @since 1.2
++     */
++    public RowSpec getDefaultRowSpec() {
++        return defaultRowSpec;
++    }
++
++
++    /**
++     * Sets the row specification that shall be used for component rows.
++     * It is {@link FormFactory#PREF_ROWSPEC} by default.
++     *
++     * @param defaultRowSpec   the RowSpec to be used for component rows
++     *
++     * @since 1.2
++     */
++    public void setDefaultRowSpec(RowSpec defaultRowSpec) {
++        this.defaultRowSpec = defaultRowSpec;
++    }
++
++
++    /**
++     * Returns the row specification that is used to separate component row.
++     *
++     * @return the <code>RowSpec</code> that is used to separate component rows
+      */
+     public RowSpec getLineGapSpec() {
+         return lineGapSpec;
+     }
++
++
++    /**
++     * Sets the size of gaps between component lines using the given
++     * constant size.<p>
++     *
++     * <strong>Examples:</strong><pre>
++     * builder.setLineGapSize(Sizes.ZERO);
++     * builder.setLineGapSize(Sizes.DLUY9);
++     * builder.setLineGapSize(Sizes.pixel(1));
++     * </pre>
++     *
++     * @param lineGapSize   the <code>ConstantSize</code> that describes
++     *     the size of the gaps between component lines
++     */
++    public void setLineGapSize(ConstantSize lineGapSize) {
++        RowSpec rowSpec = RowSpec.createGap(lineGapSize);
++        this.lineGapSpec = rowSpec;
++    }
++
++
+     /**
+-     * Sets the size of gaps between paragraphs using the given 
+-     * constant size.
+-     *  
+-     * @param paragraphGapSize   the <coide>ConstantSize</code> that describes 
++     * Sets the size of gaps between paragraphs using the given
++     * constant size.<p>
++     *
++     * <strong>Examples:</strong><pre>
++     * builder.setParagraphGapSize(Sizes.DLUY14);
++     * builder.setParagraphGapSize(Sizes.dluY(22));
++     * builder.setParagraphGapSize(Sizes.pixel(42));
++     * </pre>
++     *
++     * @param paragraphGapSize   the <code>ConstantSize</code> that describes
+      *     the size of the gaps between paragraphs
+      */
+     public void setParagraphGapSize(ConstantSize paragraphGapSize) {
+-        RowSpec rowSpec = FormFactory.createGapRowSpec(paragraphGapSize);
+-        // No longer supported in version 1.0.4/1.0.5 which are the oldest available versions in maven 
+-        // central repo
+-        //        
+-        //this.paragraphGapSpec = rowSpec.asUnmodifyable();
++        RowSpec rowSpec = RowSpec.createGap(paragraphGapSize);
+         this.paragraphGapSpec = rowSpec;
+     }
++
++
+     /**
+      * Returns the offset of the leading column, often 0 or 1.
+-     * 
++     *
+      * @return the offset of the leading column
+      */
+     public int getLeadingColumnOffset() {
+         return leadingColumnOffset;
+     }
++
++
+     /**
+      * Sets the offset of the leading column, often 0 or 1.
+-     * 
++     *
+      * @param columnOffset  the new offset of the leading column
+      */
+     public void setLeadingColumnOffset(int columnOffset) {
+         this.leadingColumnOffset = columnOffset;
+     }
++
++
+     /**
+      * Returns whether new data rows are being grouped or not.
+-     * 
++     *
+      * @return true indicates grouping enabled, false disabled
+      */
+     public boolean isRowGroupingEnabled() {
+         return rowGroupingEnabled;
+     }
++
++
+     /**
+      * Enables or disables the grouping of new data rows.
+-     * 
++     *
+      * @param enabled  indicates grouping enabled, false disabled
+      */
+     public void setRowGroupingEnabled(boolean enabled) {
+         rowGroupingEnabled = enabled;
+     }
++
++
+     // Filling Columns ******************************************************
++
+     /**
+-     * Adds a component to the panel using the default constraints.
+-     * Proceeds to the next data column.
+-     * 
++     * Adds a component to the panel using the default constraints
++     * with a column span of 1. Then proceeds to the next data column.
++     *
+      * @param component	the component to add
+      */
+     public void append(Component component) {
+         append(component, 1);
+     }
++
++
+     /**
+      * Adds a component to the panel using the default constraints with
+      * the given columnSpan. Proceeds to the next data column.
+-     * 
++     *
+      * @param component the component to append
+-     * @param columnSpan    the column span used to add 
++     * @param columnSpan    the column span used to add
+      */
+     public void append(Component component, int columnSpan) {
+         ensureCursorColumnInGrid();
+         ensureHasGapRow(lineGapSpec);
+         ensureHasComponentLine();
+-        setColumnSpan(columnSpan);
+-        add(component);
+-        setColumnSpan(1);
++
++        add(component, createLeftAdjustedConstraints(columnSpan));
+         nextColumn(columnSpan + 1);
+     }
++
++
+     /**
+      * Adds two components to the panel; each component will span a single
+      * data column. Proceeds to the next data column.
+-     * 
++     *
+      * @param c1    the first component to add
+      * @param c2    the second component to add
+-     */    
++     */
+     public void append(Component c1, Component c2) {
+         append(c1);
+         append(c2);
+     }
++
++
+     /**
+      * Adds three components to the panel; each component will span a single
+      * data column. Proceeds to the next data column.
+-     * 
++     *
+      * @param c1    the first component to add
+      * @param c2    the second component to add
+      * @param c3    the third component to add
+-     */    
++     */
+     public void append(Component c1, Component c2, Component c3) {
+         append(c1);
+         append(c2);
+         append(c3);
+     }
++
++
+     // Appending Labels with optional components ------------------------------
++
+     /**
+      * Adds a text label to the panel and proceeds to the next column.
+-     * 
++     *
+      * @param textWithMnemonic  the label's text - may mark a mnemonic
+      * @return the added label
+      */
+@@ -301,212 +497,296 @@
+         append(label);
+         return label;
+     }
++
++
+     /**
+-     * Adds a text label and component to the panel. 
+-     * Then proceeds to the next data column.
+-     * 
++     * Adds a text label and component to the panel.
++     * Then proceeds to the next data column.<p>
++     *
++     * The created label is labeling the given component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param textWithMnemonic  the label's text - may mark a mnemonic
+      * @param component         the component to add
+      * @return the added label
+-     */    
++     */
+     public JLabel append(String textWithMnemonic, Component component) {
+         return append(textWithMnemonic, component, 1);
+     }
++
++
+     /**
+      * Adds a text label and component to the panel; the component will span
+-     * the specified number columns. Proceeds to the next data column.
+-     * <p>
+-     * The created label is labelling the given component; so the component
++     * the specified number columns. Proceeds to the next data column,
++     * and goes to the next line if the boolean flag is set.<p>
++     *
++     * The created label is labeling the given component; so the component
+      * gets the focus if the (optional) label mnemonic is pressed.
+-     * 
++     *
++     * @param textWithMnemonic  the label's text - may mark a mnemonic
++     * @param c                 the component to add
++     * @param nextLine          true forces a next line
++     * @return the added label
++     * @see JLabel#setLabelFor(java.awt.Component)
++     */
++    public JLabel append(String textWithMnemonic, Component c, boolean nextLine) {
++        JLabel label = append(textWithMnemonic, c);
++        if (nextLine) {
++            nextLine();
++        }
++        return label;
++    }
++
++
++    /**
++     * Adds a text label and component to the panel; the component will span
++     * the specified number columns. Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the given component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param textWithMnemonic  the label's text - may mark a mnemonic
+      * @param c                 the component to add
+      * @param columnSpan        number of columns the component shall span
+      * @return the added label
+-     * @see JLabel#setLabelFor
+-     */    
++     * @see JLabel#setLabelFor(java.awt.Component)
++     */
+     public JLabel append(String textWithMnemonic, Component c, int columnSpan) {
+         JLabel label = append(textWithMnemonic);
+         label.setLabelFor(c);
+         append(c, columnSpan);
+         return label;
+     }
++
++
+     /**
+      * Adds a text label and two components to the panel; each component
+-     * will span a single column. Proceeds to the next data column.
+-     * 
++     * will span a single column. Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param textWithMnemonic  the label's text - may mark a mnemonic
+      * @param c1    the first component to add
+      * @param c2    the second component to add
+      * @return the added label
+-     */    
++     */
+     public JLabel append(String textWithMnemonic, Component c1, Component c2) {
+         JLabel label = append(textWithMnemonic, c1);
+         append(c2);
+         return label;
+     }
++
++
+     /**
+      * Adds a text label and two components to the panel; each component
+-     * will span a single column. Proceeds to the next data column.
+-     * 
++     * will span a single column. Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param textWithMnemonic  the label's text - may mark a mnemonic
+      * @param c1      the first component to add
+      * @param c2      the second component to add
+      * @param colSpan the column span for the second component
+-     */    
+-    public void append(String textWithMnemonic, Component c1, Component c2, int colSpan) {
+-        append(textWithMnemonic, c1);
++     * @return the created label
++     */
++    public JLabel append(String textWithMnemonic, Component c1, Component c2, int colSpan) {
++        JLabel label = append(textWithMnemonic, c1);
+         append(c2, colSpan);
++        return label;
+     }
++
++
+     /**
+      * Adds a text label and three components to the panel; each component
+-     * will span a single column. Proceeds to the next data column.
+-     * 
++     * will span a single column. Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param textWithMnemonic  the label's text - may mark a mnemonic
+      * @param c1    the first component to add
+      * @param c2    the second component to add
+      * @param c3    the third component to add
+      * @return the added label
+-     */    
++     */
+     public JLabel append(String textWithMnemonic, Component c1, Component c2, Component c3) {
+         JLabel label = append(textWithMnemonic, c1, c2);
+         append(c3);
+         return label;
+     }
++
++
+     /**
+      * Adds a text label and four components to the panel; each component
+-     * will span a single column. Proceeds to the next data column.
+-     * 
++     * will span a single column. Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param textWithMnemonic  the label's text - may mark a mnemonic
+      * @param c1    the first component to add
+      * @param c2    the second component to add
+      * @param c3    the third component to add
+      * @param c4    the fourth component to add
+      * @return the added label
+-     */    
++     */
+     public JLabel append(String textWithMnemonic, Component c1, Component c2, Component c3, Component c4) {
+         JLabel label = append(textWithMnemonic, c1, c2, c3);
+         append(c4);
+         return label;
+     }
++
++
+     // Appending internationalized labels with optional components ------------
++
+     /**
+-     * Adds an internationalized (i15d) text label to the panel using 
++     * Adds an internationalized (i15d) text label to the panel using
+      * the given resource key and proceeds to the next column.
+-     * 
++     *
+      * @param resourceKey      the resource key for the the label's text
+      * @return the added label
+      */
+     public JLabel appendI15d(String resourceKey) {
+         return append(getI15dString(resourceKey));
+     }
++
++
+     /**
+-     * Adds an internationalized (i15d) text label to the panel using the given resource key; 
+-     * then proceeds to the next data column and adds a component with 
+-     * the given column span. Proceeds to the next data column.
+-     * 
+-     * @param resourceKey  the resource key for the text to add
+-     * @param c           the component to add
+-     * @param columnSpan  number of columns the component shall span
+-     * @return the added label
+-     */    
+-    public JLabel appendI15d(String resourceKey, Component c, int columnSpan) {
+-        JLabel label = appendI15d(resourceKey);
+-        append(c, columnSpan);
+-        return label;
+-    }
+-    /**
+-     * Adds an internationalized (i15d) text label and component to the panel. 
+-     * Then proceeds to the next data column.
+-     * 
++     * Adds an internationalized (i15d) text label and component
++     * to the panel. Then proceeds to the next data column.<p>
++     *
++     * The created label is labeling the given component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param resourceKey  the resource key for the text to add
+      * @param component  the component to add
+      * @return the added label
+-     */    
++     */
+     public JLabel appendI15d(String resourceKey, Component component) {
+-        return appendI15d(resourceKey, component, 1);
++        return append(getI15dString(resourceKey), component, 1);
+     }
++
++
+     /**
+-     * Adds an internationalized (i15d) text label and component to the panel. 
+-     * Then proceeds to the next data column.
+-     * Goes to the next line if the boolean flag is set.
+-     * 
++     * Adds an internationalized (i15d) text label and component
++     * to the panel. Then proceeds to the next data column.
++     * Goes to the next line if the boolean flag is set.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param resourceKey  the resource key for the text to add
+      * @param component    the component to add
+      * @param nextLine     true forces a next line
+      * @return the added label
+-     */    
++     */
+     public JLabel appendI15d(String resourceKey, Component component, boolean nextLine) {
+-        JLabel label = appendI15d(resourceKey, component, 1);
+-        if (nextLine) {
+-            nextLine();
+-        }
+-        return label;
++        return append(getI15dString(resourceKey), component, nextLine);
++    }
++
++
++    /**
++     * Adds an internationalized (i15d) text label to the panel using
++     * the given resource key; then proceeds to the next data column
++     * and adds a component with the given column span.
++     * Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
++     * @param resourceKey  the resource key for the text to add
++     * @param c           the component to add
++     * @param columnSpan  number of columns the component shall span
++     * @return the added label
++     */
++    public JLabel appendI15d(String resourceKey, Component c, int columnSpan) {
++        return append(getI15dString(resourceKey), c, columnSpan);
+     }
++
++
+     /**
+-     * Adds an internationalized (i15d) text label and two components to the panel; each component
+-     * will span a single column. Proceeds to the next data column.
+-     * 
++     * Adds an internationalized (i15d) text label and two components
++     * to the panel; each component will span a single column.
++     * Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param resourceKey  the resource key for the text to add
+      * @param c1    the first component to add
+      * @param c2    the second component to add
+      * @return the added label
+-     */    
++     */
+     public JLabel appendI15d(String resourceKey, Component c1, Component c2) {
+-        JLabel label = appendI15d(resourceKey, c1);
+-        append(c2);
+-        return label;
++        return append(getI15dString(resourceKey), c1, c2);
+     }
++
++
+     /**
+-     * Adds an internationalized (i15d) text label and two components to the panel; each component
+-     * will span a single column. Proceeds to the next data column.
+-     * 
++     * Adds an internationalized (i15d) text label and two components
++     * to the panel; each component will span a single column.
++     * Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param resourceKey  the resource key for the text to add
+      * @param c1      the first component to add
+      * @param c2      the second component to add
+      * @param colSpan the column span for the second component
+      * @return the added label
+-     */    
++     */
+     public JLabel appendI15d(String resourceKey, Component c1, Component c2, int colSpan) {
+-        JLabel label = appendI15d(resourceKey, c1);
+-        append(c2, colSpan);
+-        return label;
++        return append(getI15dString(resourceKey), c1, c2, colSpan);
+     }
++
++
+     /**
+-     * Adds an internationalized (i15d) text label and three components to the panel; each component
+-     * will span a single column. Proceeds to the next data column.
+-     * 
++     * Adds an internationalized (i15d) text label and three components
++     * to the panel; each component will span a single column.
++     * Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param resourceKey  the resource key for the text to add
+      * @param c1    the first component to add
+      * @param c2    the second component to add
+      * @param c3    the third component to add
+      * @return the added label
+-     */    
++     */
+     public JLabel appendI15d(String resourceKey, Component c1, Component c2, Component c3) {
+-        JLabel label = appendI15d(resourceKey, c1, c2);
+-        append(c3);
+-        return label;
++        return append(getI15dString(resourceKey), c1, c2, c3);
+     }
++
++
+     /**
+-     * Adds an internationalized (i15d) text label and four components to the panel; 
+-     * each component will span a single column. Proceeds to the next data column.
+-     * 
++     * Adds an internationalized (i15d) text label and four components
++     * to the panel; each component will span a single column.
++     * Proceeds to the next data column.<p>
++     *
++     * The created label is labeling the first component; so the component
++     * gets the focus if the (optional) label mnemonic is pressed.
++     *
+      * @param resourceKey  the resource key for the text to add
+      * @param c1    the first component to add
+      * @param c2    the second component to add
+      * @param c3    the third component to add
+      * @param c4    the third component to add
+      * @return the added label
+-     */    
++     */
+     public JLabel appendI15d(String resourceKey, Component c1, Component c2, Component c3, Component c4) {
+-        JLabel label = appendI15d(resourceKey, c1, c2, c3);
+-        append(c4);
+-        return label;
++        return append(getI15dString(resourceKey), c1, c2, c3, c4);
+     }
++
++
+     // Adding Titles ----------------------------------------------------------
++
+     /**
+      * Adds a title label to the panel and proceeds to the next column.
+-     * 
++     *
+      * @param textWithMnemonic  the label's text - may mark a mnemonic
+      * @return the added title label
+      */
+@@ -515,35 +795,43 @@
+         append(titleLabel);
+         return titleLabel;
+     }
++
++
+     /**
+-     * Adds an internationalized title label to the panel and 
++     * Adds an internationalized title label to the panel and
+      * proceeds to the next column.
+-     * 
++     *
+      * @param resourceKey   the resource key for the title's text
+      * @return the added title label
+      */
+     public JLabel appendI15dTitle(String resourceKey) {
+         return appendTitle(getI15dString(resourceKey));
+     }
++
++
+     // Appending Separators ---------------------------------------------------
++
+     /**
+      * Adds a separator without text that spans all columns.
+-     * 
+-     * @return the added titled separator 
++     *
++     * @return the added titled separator
+      */
+     public JComponent appendSeparator() {
+         return appendSeparator("");
+     }
++
++
+     /**
+      * Adds a separator with the given text that spans all columns.
+-     * 
++     *
+      * @param text      the separator title text
+-     * @return the added titled separator 
++     * @return the added titled separator
+      */
+     public JComponent appendSeparator(String text) {
+         ensureCursorColumnInGrid();
+         ensureHasGapRow(paragraphGapSpec);
+         ensureHasComponentLine();
++
+         setColumn(super.getLeadingColumn());
+         int columnSpan = getColumnCount();
+         setColumnSpan(getColumnCount());
+@@ -552,47 +840,60 @@
+         nextColumn(columnSpan);
+         return titledSeparator;
+     }
++
++
+     /**
+-     * Appends an internationalized titled separator for 
++     * Appends an internationalized titled separator for
+      * the given resource key that spans all columns.
+-     * 
++     *
+      * @param resourceKey   the resource key for the separator title's text
++     * @return the added titled separator
+      */
+-    public void appendI15dSeparator(String resourceKey) {
+-        appendSeparator(getI15dString(resourceKey));
++    public JComponent appendI15dSeparator(String resourceKey) {
++        return appendSeparator(getI15dString(resourceKey));
+     }
++
++
+     // Overriding Superclass Behavior ***************************************
++
+     /**
+-     * Returns the leading column. Unlike the superclass we take a 
+-     * column offset into account.
+-     * 
++     * Returns the leading column. Unlike the superclass this method
++     * honors the column offset.
++     *
+      * @return the leading column
+      */
+     protected int getLeadingColumn() {
+         int column = super.getLeadingColumn();
+         return column + getLeadingColumnOffset() * getColumnIncrementSign();
+     }
++
++
+     // Adding Rows **********************************************************
++
+     /**
+-     * Ensures that the cursor is in the grid. In case it's beyond the 
++     * Ensures that the cursor is in the grid. In case it's beyond the
+      * form's right hand side, the cursor is moved to the leading column
+      * of the next line.
+      */
+     private void ensureCursorColumnInGrid() {
+-        if (getColumn() > getColumnCount()) {
++        if (   ( isLeftToRight() && (getColumn() > getColumnCount()))
++            || (!isLeftToRight() && (getColumn() < 1))) {
+             nextLine();
+         }
+     }
++
++
+     /**
+      * Ensures that we have a gap row before the next component row.
+      * Checks if the current row is the given <code>RowSpec</code>
+      * and appends this row spec if necessary.
+-     * 
++     *
+      * @param gapRowSpec  the row specification to check for
+      */
+     private void ensureHasGapRow(RowSpec gapRowSpec) {
+         if ((getRow() == 1) || (getRow() <= getRowCount()))
+             return;
++
+         if (getRow() <= getRowCount()) {
+             RowSpec rowSpec = getCursorRowSpec();
+             if ((rowSpec == gapRowSpec))
+@@ -601,25 +902,29 @@
+         appendRow(gapRowSpec);
+         nextLine();
+     }
++
++
+     /**
+      * Ensures that the form has a component row. Adds a component row
+      * if the cursor is beyond the form's bottom.
+      */
+     private void ensureHasComponentLine() {
+         if (getRow() <= getRowCount()) return;
+-        appendRow(FormFactory.PREF_ROWSPEC);  
++        appendRow(getDefaultRowSpec());
+         if (isRowGroupingEnabled()) {
+             getLayout().addGroupedRow(getRow());
+-        }      
++        }
+     }
++
++
+     /**
+-     * Looks up and answers the row specification of the current row.
+-     *  
++     * Looks up and returns the row specification of the current row.
++     *
+      * @return the row specification of the current row
+      */
+     private RowSpec getCursorRowSpec() {
+         return getLayout().getRowSpec(getRow());
+     }
+-    
+-    
++
++
+ }
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/builders/I15dPanelBuilder.java
++++ /dev/null
+@@ -1,180 +0,0 @@
+-/*
+- * Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights Reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without 
+- * modification, are permitted provided that the following conditions are met:
+- * 
+- *  o Redistributions of source code must retain the above copyright notice, 
+- *    this list of conditions and the following disclaimer. 
+- *     
+- *  o Redistributions in binary form must reproduce the above copyright notice, 
+- *    this list of conditions and the following disclaimer in the documentation 
+- *    and/or other materials provided with the distribution. 
+- *     
+- *  o Neither the name of JGoodies Karsten Lentzsch nor the names of 
+- *    its contributors may be used to endorse or promote products derived 
+- *    from this software without specific prior written permission. 
+- *     
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
+- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
+- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
+- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
+- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+- */
+-package net.sourceforge.squirrel_sql.client.gui.builders;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+-import javax.swing.JComponent;
+-import javax.swing.JLabel;
+-import javax.swing.JPanel;
+-import com.jgoodies.forms.builder.PanelBuilder;
+-import com.jgoodies.forms.layout.CellConstraints;
+-import com.jgoodies.forms.layout.FormLayout;
+-/**
+- * A general purpose panel builder that uses the {@link FormLayout} 
+- * to layout <code>JPanel</code>s. In addition to its superclass
+- * {@link PanelBuilder} this class provides convenience behavior to map 
+- * resource keys to their associated internationalized (i15d) strings
+- * when adding labels, titles and titled separators.
+- * <p>
+- * This class is not yet part of the binary Forms library; 
+- * it comes with the Forms distributions as an extra.
+- * <b>The API is work in progress and may change without notice.</b>
+- * If you want to use this class, you may consider copying it into your codebase.
+- *
+- * @author	Karsten Lentzsch
+- * @see	ResourceBundle
+- */
+-public class I15dPanelBuilder extends PanelBuilder {
+-	/** 
+-	 * Holds the <code>ResourceBundle</code> used to lookup internationalized
+-	 * (i15d) String resources.
+-	 */
+-	private final ResourceBundle bundle;
+-	// Instance Creation ****************************************************
+-	/**
+-	 * Constructs an instance of <code>I15dPanelBuilder</code> for the given
+-	 * panel and layout.
+-	 * 
+-	 * @param panel   the layout container
+-	 * @param layout  the <code>FormLayout</code> used to layout the container
+-	 * @param bundle  the <code>ResourceBundle</code> used to lookup i15d
+-	 * strings
+-	 */
+-	public I15dPanelBuilder(JPanel panel, FormLayout layout,
+-		ResourceBundle bundle) {
+-		super(panel, layout);
+-		this.bundle = bundle;
+-	}
+-	/**
+-	 * Constructs an instance of <code>I15dPanelBuilder</code> for the given
+-	 * layout. Uses an instance of <code>JPanel</code> as layout container.
+-	 * 
+-	 * @param layout    the form layout used to layout the container
+-	 * @param bundle    the resource bundle used to lookup i15d strings
+-	 */
+-	public I15dPanelBuilder(FormLayout layout, ResourceBundle bundle) {
+-		this(new JPanel(), layout, bundle);
+-	}
+-	// Adding Labels and Separators *****************************************
+-	/**
+-	 * Adds an internationalized (i15d) textual label to the form using the
+-	 * specified constraints.
+-	 * 
+-	 * @param resourceKey	the resource key for the label's text 
+-	 * @param constraints	the label's cell constraints
+-	 * @return the added label
+-	 */
+-	public final JLabel addI15dLabel(String resourceKey,
+-		CellConstraints constraints) {
+-		return addLabel(getI15dString(resourceKey), constraints);
+-	}
+-	/**
+-	 * Adds an internationalized (i15d) textual label to the form using the
+-	 * specified constraints.
+-	 * 
+-	 * @param resourceKey         the resource key for the label's text
+-	 * @param encodedConstraints  a string representation for the constraints
+-	 * @return the added label
+-	 */
+-	public final JLabel addI15dLabel(String resourceKey,
+-		String encodedConstraints) {
+-		return addI15dLabel(resourceKey,
+-			new CellConstraints(encodedConstraints));
+-	}
+-	/**
+-	 * Adds an internationalized (i15d) titled separator to the form using the
+-	 * specified constraints.
+-	 * 
+-	 * @param resourceKey  the resource key for the separator title
+-	 * @param constraints  the separator's cell constraints
+-	 * @return the added titled separator
+-	 */
+-	public final JComponent addI15dSeparator(String resourceKey,
+-		CellConstraints constraints) {
+-		return addSeparator(getI15dString(resourceKey), constraints);
+-	}
+-	/**
+-	 * Adds an internationalized (i15d)  titled separator to the form using
+-	 * the specified constraints.
+-	 * 
+-	 * @param resourceKey         the resource key for the separator titel
+-	 * @param encodedConstraints  a string representation for the constraints
+-	 * @return the added titled separator
+-	 */
+-	public final JComponent addI15dSeparator(String resourceKey,
+-		String encodedConstraints) {
+-		return addI15dSeparator(resourceKey, new CellConstraints(
+-			encodedConstraints));
+-	}
+-	/**
+-	 * Adds a title to the form using the specified constraints.
+-	 * 
+-	 * @param resourceKey  the resource key for  the separator title
+-	 * @param constraints  the separator's cell constraints
+-	 * @return the added title label
+-	 */
+-	public final JLabel addI15dTitle(String resourceKey,
+-		CellConstraints constraints) {
+-		return addTitle(getI15dString(resourceKey), constraints);
+-	}
+-	/**
+-	 * Adds a title to the form using the specified constraints.
+-	 * 
+-	 * @param resourceKey         the resource key for the separator titel
+-	 * @param encodedConstraints  a string representation for the constraints
+-	 * @return the added title label
+-	 */
+-	public final JLabel add15dTitle(String resourceKey,
+-			String encodedConstraints) {
+-		return addI15dTitle(resourceKey,
+-				new CellConstraints(encodedConstraints));
+-	}
+-	// Helper Code **********************************************************
+-	/**
+-	 * Looks up and answers the internationalized (i15d) string for the given
+-	 * resource key from the <code>ResourceBundle</code>.
+-	 * 
+-	 * @param resourceKey  the key to look for in the resource bundle
+-	 * @return the associated internationalized string, or the resource key
+-	 *     itself in case of a missing resource 
+-	 * @throws IllegalStateException  if no <code>ResourceBundle</code>
+-	 *     has been set
+-	 */
+-	protected String getI15dString(String resourceKey) {
+-		if (bundle == null)
+-			throw new IllegalStateException("You must specify a ResourceBundle"
+-					+ " before using the internationalization support.");
+-		try {
+-			return bundle.getString(resourceKey);
+-		} catch (MissingResourceException mre) {
+-			return resourceKey;
+-		}
+-	}
+-}

Added: trunk/squirrel-sql/debian/patches/002-squirrelsql-version.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/002-squirrelsql-version.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/002-squirrelsql-version.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,12 @@
+Description: Workaround for squirrelsql.version property set by squirrelsql-version-plugin and 
+ substituted by maven resource filtering during original build process.
+Forwarded: not-needed
+From: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
+Last-Update: 2011-01-09
+--- a/app/src/main/resources/net/sourceforge/squirrel_sql/client/Version.properties
++++ b/app/src/main/resources/net/sourceforge/squirrel_sql/client/Version.properties
+@@ -1 +1 @@
+-squirrelsql.version=${squirrelsql.version}
+\ No newline at end of file
++squirrelsql.version=3.2.0
+\ No newline at end of file

Added: trunk/squirrel-sql/debian/patches/003-squirrelsql-plugins-parent-pom.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/003-squirrelsql-plugins-parent-pom.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/003-squirrelsql-plugins-parent-pom.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,15 @@
+Description: Synchronized the dependency on the plugin assembly descriptor to be the same as the version of this project.
+From: Rob Manning
+Origin: upstream, http://squirrel-sql.svn.sourceforge.net/viewvc/squirrel-sql/trunk/sql12/plugins/squirrelsql-plugins-parent-pom/pom.xml?r1=5984&r2=6028&view=patch
+Last-Update: 2011-01-09
+--- a/plugins/squirrelsql-plugins-parent-pom/pom.xml
++++ b/plugins/squirrelsql-plugins-parent-pom/pom.xml
+@@ -210,7 +210,7 @@
+ 						<dependency>
+ 							<groupId>net.sf.squirrel-sql.plugins</groupId>
+ 							<artifactId>squirrelsql-plugins-assembly-descriptor</artifactId>
+-							<version>3.2.0-SNAPSHOT</version>
++							<version>${project.version}</version>
+ 						</dependency>
+ 					</dependencies>
+ 					<executions>

Added: trunk/squirrel-sql/debian/patches/004-squirrelsql-plugins-assembly-descripton-pom.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/004-squirrelsql-plugins-assembly-descripton-pom.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/004-squirrelsql-plugins-assembly-descripton-pom.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,14 @@
+Description: changed group for consistency with other projects in this level of the build tree
+From: Rob Manning
+Origin: upstream, http://squirrel-sql.svn.sourceforge.net/viewvc/squirrel-sql/trunk/sql12/plugins/squirrelsql-plugins-assembly-descriptor/pom.xml?r1=5984&r2=6034&view=patch
+Last-Update: 2011-01-09
+--- a/plugins/squirrelsql-plugins-assembly-descriptor/pom.xml
++++ b/plugins/squirrelsql-plugins-assembly-descriptor/pom.xml
+@@ -8,6 +8,7 @@
+ 		<relativePath>../../pom.xml</relativePath>
+ 	</parent>
+ 
++	<groupId>net.sf.squirrel-sql.plugins</groupId>
+ 	<artifactId>squirrelsql-plugins-assembly-descriptor</artifactId>
+ 	<packaging>jar</packaging>
+ 

Added: trunk/squirrel-sql/debian/patches/005-squirrelsql-plugins-hibernate-HibernateUtil.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/005-squirrelsql-plugins-hibernate-HibernateUtil.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/005-squirrelsql-plugins-hibernate-HibernateUtil.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,35 @@
+Description: Hibernate Plugin: Removed unused imports to regain compile
+ independence from Hibernate API changes, see patch ID 316838
+From: Gerd Wagner
+Origin: upstream, svn diff -r r5984:r6150
+Last-Update: 2011-02-05
+--- a/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/util/HibernateUtil.java
++++ b/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/util/HibernateUtil.java
+@@ -18,25 +18,14 @@
+  */
+ package net.sourceforge.squirrel_sql.plugins.hibernate.util;
+ 
+-import java.io.*;
+-import java.sql.SQLException;
+-
+-import net.sourceforge.squirrel_sql.client.gui.db.ISQLAliasExt;
+-import net.sourceforge.squirrel_sql.client.session.ISession;
+-import net.sourceforge.squirrel_sql.fw.sql.ISQLDatabaseMetaData;
+-import net.sourceforge.squirrel_sql.fw.sql.ISQLDriver;
+ import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+ import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+ import net.sourceforge.squirrel_sql.fw.xml.XMLBeanReader;
+ import net.sourceforge.squirrel_sql.fw.xml.XMLException;
+ import net.sourceforge.squirrel_sql.plugins.hibernate.HibernatePlugin;
+ import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfigController;
+-import org.hibernate.SessionFactory;
+-import org.hibernate.cfg.Configuration;
+-import org.hibernate.cfg.Environment;
+-import org.hibernate.dialect.Dialect;
+-import org.hibernate.dialect.DialectFactory;
++
++import java.io.*;
+ 
+ /**
+  * Class that provides utility methods for obtaining SessionFactory objects.

Added: trunk/squirrel-sql/debian/patches/006-launch-script-debian.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/006-launch-script-debian.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/006-launch-script-debian.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,29 @@
+Description: Workaround for IZPACK_JAVA_HOME and SQUIRREL_SQL_HOME filled by IzPack installer.
+ IzPack is not used for squirrel-sql package in Debian. Instead of using %INSTALL_PATH
+ direct path is assigned to SQUIRREL_SQL_HOME. IZPACK_JAVA_HOME is not used.
+Forwarded: not-needed
+From: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
+Last-Update: 2011-01-09
+--- a/installer/squirrelsql-launcher/src/main/resources/squirrel-sql.sh
++++ b/installer/squirrelsql-launcher/src/main/resources/squirrel-sql.sh
+@@ -23,7 +23,7 @@
+ } 
+ 
+ # IZPACK_JAVA_HOME is filtered in by the IzPack installer when this script is installed
+-IZPACK_JAVA_HOME=%JAVA_HOME
++#IZPACK_JAVA_HOME=%JAVA_HOME
+ 
+ # We detect the java executable to use according to the following algorithm:
+ #
+@@ -53,9 +53,9 @@
+ 
+ # SQuirreL home.
+ if $macosx ; then
+-	SQUIRREL_SQL_HOME='%INSTALL_PATH/Contents/Resources/Java'
++	SQUIRREL_SQL_HOME=""
+ else 
+-	SQUIRREL_SQL_HOME='%INSTALL_PATH'
++	SQUIRREL_SQL_HOME="/usr/share/squirrel-sql"
+ fi
+ 
+ # SQuirreL home in Unix format.

Added: trunk/squirrel-sql/debian/patches/007-squirrelsql-changelog.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/007-squirrelsql-changelog.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/007-squirrelsql-changelog.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,18 @@
+Description: Update for 3.2.0 release
+From: Rob Manning
+Origin: upstream, svn diff -r r5984:r5985
+Last-Update: 2011-01-25
+--- a/doc/src/main/resources/changes.txt
++++ b/doc/src/main/resources/changes.txt
+@@ -1,8 +1,9 @@
+ SQuirreL SQL Client Change Log
+ ==============================
+ 
+-Not yet released - available from SVN or in the latest snapshot:
+-----------------------------------------------------------------
++
++3.2.0 (11/21/2010)
++==================
+ 
+ Enhancements:
+ 

Added: trunk/squirrel-sql/debian/patches/008-native2ascii.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/008-native2ascii.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/008-native2ascii.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,82 @@
+Description: Convert some native-encoded characters to Unicode-encoded (\udddd notation) in order to build squirrel in Debian clean chroot.
+Forwarded: not-needed
+From: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
+Last-Update: 2011-01-31
+--- a/fw/src/main/java/net/sourceforge/squirrel_sql/fw/codereformat/CodeReformatorKernel.java
++++ b/fw/src/main/java/net/sourceforge/squirrel_sql/fw/codereformat/CodeReformatorKernel.java
+@@ -38,11 +38,11 @@
+ 
+ 		Vector<String> ret = new Vector<String>();
+ 
+-      // toUpperCase replaces the German ß by ss.
++      // toUpperCase replaces the German \u00df by ss.
+       // This will kill reformating later.
+       // Since upperIn is just for building pieces
+-      // it is OK to place ß here.
+-      String upperIn = in.replaceAll("ß", "s");
++      // it is OK to place \u00df here.
++      String upperIn = in.replaceAll("\u00df", "s");
+ 
+ 
+ 		upperIn = upperIn.toUpperCase();
+--- a/fw/src/main/java/net/sourceforge/squirrel_sql/fw/dialects/ProgressDialectExt.java
++++ b/fw/src/main/java/net/sourceforge/squirrel_sql/fw/dialects/ProgressDialectExt.java
+@@ -680,7 +680,7 @@
+ 	public String getCreateViewSQL(final String viewName, final String definition, final String checkOption,
+ 		final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
+ 	{
+-		// CREATE VIEW name [(view_col [, view_col …])]
++		// CREATE VIEW name [(view_col [, view_col \u2026])]
+ 		// AS <select> [WITH CHECK OPTION];
+ 
+ 		// "CREATE VIEW $viewName$ " +
+--- a/fw/src/main/java/net/sourceforge/squirrel_sql/fw/dialects/PointbaseDialectExt.java
++++ b/fw/src/main/java/net/sourceforge/squirrel_sql/fw/dialects/PointbaseDialectExt.java
+@@ -649,7 +649,7 @@
+ 	public String getCreateViewSQL(final String viewName, final String definition, final String checkOption,
+ 		final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
+ 	{
+-		// CREATE VIEW name [(view_col [, view_col …])]
++		// CREATE VIEW name [(view_col [, view_col \u2026])]
+ 		// AS <select> [WITH CHECK OPTION];
+ 
+ 		// "CREATE VIEW $viewName$ " +
+--- a/fw/src/main/java/net/sourceforge/squirrel_sql/fw/dialects/FirebirdDialectExt.java
++++ b/fw/src/main/java/net/sourceforge/squirrel_sql/fw/dialects/FirebirdDialectExt.java
+@@ -617,7 +617,7 @@
+ 		SqlGenerationPreferences prefs)
+ 	{
+ 		// CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]] INDEX index
+-		// ON table (col [, col …]);
++		// ON table (col [, col \u2026]);
+ 
+ 		StringTemplate st = new StringTemplate(ST_CREATE_INDEX_STYLE_THREE);
+ 		// "CREATE $unique$ $storageOption$ INDEX $indexName$ " +
+@@ -675,7 +675,7 @@
+ 	public String getCreateViewSQL(String viewName, String definition, String checkOption,
+ 		DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
+ 	{
+-		// CREATE VIEW name [(view_col [, view_col …])]
++		// CREATE VIEW name [(view_col [, view_col \u2026])]
+ 		// AS <select> [WITH CHECK OPTION];
+ 
+ 		// "CREATE VIEW $viewName$ " +
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/PleaseWaitDialog.java
++++ b/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/PleaseWaitDialog.java
+@@ -1,6 +1,6 @@
+ package net.sourceforge.squirrel_sql.client.session.mainpanel;
+ /*
+- * Copyright (C) 2007 Thorsten Mürell
++ * Copyright (C) 2007 Thorsten M\u00fcrell
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+@@ -37,7 +37,7 @@
+ /**
+  * The dialog to ask the user to wait.
+  * 
+- * @author Thorsten Mürell
++ * @author Thorsten M\u00fcrell
+  */
+ public class PleaseWaitDialog extends DialogWidget implements ActionListener {
+ 	private static final long serialVersionUID = 8870277695490954084L;

Added: trunk/squirrel-sql/debian/patches/009-plugin-liclink.patch
===================================================================
--- trunk/squirrel-sql/debian/patches/009-plugin-liclink.patch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/009-plugin-liclink.patch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,26 @@
+Description: Workaround to have the same file name for different plugins.
+Forwarded: not-needed
+From: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
+Last-Update: 2011-02-10
+--- a/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LAFPlugin.java
++++ b/plugins/laf/src/main/java/net/sourceforge/squirrel_sql/plugins/laf/LAFPlugin.java
+@@ -156,7 +156,7 @@
+ 	 */
+ 	public String getLicenceFileName()
+ 	{
+-		return "licences.html";
++		return "licence.txt";
+ 	}
+ 
+ 	/**
+--- a/plugins/dbcopy/src/main/java/net/sourceforge/squirrel_sql/plugins/dbcopy/DBCopyPlugin.java
++++ b/plugins/dbcopy/src/main/java/net/sourceforge/squirrel_sql/plugins/dbcopy/DBCopyPlugin.java
+@@ -153,7 +153,7 @@
+ 	@Override
+ 	public String getLicenceFileName()
+ 	{
+-		return "license.txt";
++		return "licence.txt";
+ 	}
+ 
+ 	/**

Added: trunk/squirrel-sql/debian/patches/disable_autoupdate.dpatch
===================================================================
--- trunk/squirrel-sql/debian/patches/disable_autoupdate.dpatch	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/disable_autoupdate.dpatch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,11313 @@
+Description: disable_autoupdate.dpatch by  <markus at mheberling1> adopted for quilt and 3.2.0 codebase
+Forwarded: not-needed
+From: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
+Last-Update: 2011-01-25
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/Application.java
++++ b/app/src/main/java/net/sourceforge/squirrel_sql/client/Application.java
+@@ -64,11 +64,6 @@
+ import net.sourceforge.squirrel_sql.client.session.mainpanel.SQLHistoryItem;
+ import net.sourceforge.squirrel_sql.client.session.properties.EditWhereCols;
+ import net.sourceforge.squirrel_sql.client.session.schemainfo.SchemaInfoCacheSerializer;
+-import net.sourceforge.squirrel_sql.client.update.autocheck.UpdateCheckTimer;
+-import net.sourceforge.squirrel_sql.client.update.autocheck.UpdateCheckTimerImpl;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.PreLaunchHelper;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.PreLaunchHelperFactory;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.PreLaunchHelperFactoryImpl;
+ import net.sourceforge.squirrel_sql.client.util.ApplicationFiles;
+ import net.sourceforge.squirrel_sql.fw.datasetviewer.CellImportExportInfoSaver;
+ import net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent.DTProperties;
+@@ -160,10 +155,7 @@
+ 
+ 	private List<ApplicationListener> _listeners = new ArrayList<ApplicationListener>();
+ 
+-	private UpdateCheckTimer updateCheckTimer = null; 
+-	
+-	private PreLaunchHelperFactory preLaunchHelperFactory = new PreLaunchHelperFactoryImpl();
+-	
++
+ 	/**
+ 	 * Default ctor.
+ 	 */
+@@ -216,8 +208,6 @@
+ 	{
+ 		s_log.info(s_stringMgr.getString("Application.shutdown", Calendar.getInstance().getTime()));
+ 
+-		updateCheckTimer.stop();
+-		
+ 		saveApplicationState();
+ 
+ 		if (!closeAllSessions()) { return false; }
+@@ -401,16 +391,7 @@
+ 	 * 3.x installations that still need to be upgraded), then it would be safe to remove this code.
+ 	 */
+ 	private void updateLaunchScript() {
+-		try
+-		{
+-			PreLaunchHelper helper = preLaunchHelperFactory.createPreLaunchHelper();
+-			helper.updateLaunchScript();
+-			helper.copySplashImage();
+-		}
+-		catch (Exception e)
+-		{
+-			s_log.error("Unexpected exception while attempting to update the launch script: "+e.getMessage(), e);
+-		}		
++		
+ 	}
+ 	
+ 	public IPluginManager getPluginManager()
+@@ -793,8 +774,6 @@
+ 			}
+ 		}
+ 		
+-		updateCheckTimer = new UpdateCheckTimerImpl(this);
+-		updateCheckTimer.start();
+ 	}
+ 
+ 	/**
+@@ -811,6 +790,7 @@
+ 		{
+ 			splash.indicateNewTask(taskDescription);
+ 		}
++		
+ 	}
+ 
+ 	private void preferencesHaveChanged(PropertyChangeEvent evt)
+@@ -1212,13 +1192,4 @@
+ 			_jdbcDebugType = _prefs.getJdbcDebugType();
+ 		}
+ 	}
+-	
+-	public void setUpdateCheckTimer(UpdateCheckTimer timer) {
+-		this.updateCheckTimer = timer;
+-	}
+-	
+-	public void setPreLaunchHelperFactory(PreLaunchHelperFactory preLaunchHelperFactory)
+-	{
+-		this.preLaunchHelperFactory = preLaunchHelperFactory;
+-	}	
+ }
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/action/ActionCollection.java
++++ b/app/src/main/java/net/sourceforge/squirrel_sql/client/action/ActionCollection.java
+@@ -473,7 +473,6 @@
+ 		add(new TileHorizontalAction(_app));
+ 		add(new TileVerticalAction(_app));
+ 		add(new ToggleAutoCommitAction(_app));
+-		add(new UpdateAction(_app));
+ 		add(new ViewHelpAction(_app));
+ 		add(new ViewLogsAction(_app));
+ 		add(new PreviousSqlAction(_app));
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/mainframe/MainFrameMenuBar.java
++++ b/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/mainframe/MainFrameMenuBar.java
+@@ -407,8 +407,6 @@
+ 		JMenu menu = rsrc.createMenu(SquirrelResources.IMenuResourceKeys.HELP);
+ 		addToMenu(rsrc, ViewHelpAction.class, menu);
+ 
+-		menu.addSeparator();
+-		addToMenu(rsrc, UpdateAction.class, menu);
+ 		if (!_osxPluginLoaded)
+ 		{
+ 			addToMenu(rsrc, AboutAction.class, menu);
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/mainframe/action/UpdateAction.java
++++ /dev/null
+@@ -1,59 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.mainframe.action;
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-import java.awt.event.ActionEvent;
+-
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.client.action.SquirrelAction;
+-/**
+- * This <CODE>Action</CODE> displays the Update Manager
+- *
+- * 
+- */
+-public class UpdateAction extends SquirrelAction
+-{
+-    private static final long serialVersionUID = 4082643943728263683L;
+-
+-    /**
+-	 * Ctor.
+-	 *
+-	 * @param	app	Application API.
+-	 *
+-	 * @throws	IllegalArgumentException
+-	 *			Thrown if a <TT>null</TT> <TT>IApplication</TT> passed.
+-	 */
+-	public UpdateAction(IApplication app)
+-	{
+-		super(app);
+-		if (app == null)
+-		{
+-			throw new IllegalArgumentException("Null IApplication passed");
+-		}
+-	}
+-
+-	/**
+-	 * Display the about box.
+-	 *
+-	 * @param	evt	 The event being processed.
+-	 */
+-	public void actionPerformed(ActionEvent evt)
+-	{
+-		new UpdateCommand(getApplication()).execute();
+-	}
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/mainframe/action/UpdateCommand.java
++++ /dev/null
+@@ -1,69 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.mainframe.action;
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.client.update.UpdateController;
+-import net.sourceforge.squirrel_sql.client.update.UpdateControllerFactory;
+-import net.sourceforge.squirrel_sql.client.update.UpdateControllerFactoryImpl;
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtilImpl;
+-import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloaderFactoryImpl;
+-import net.sourceforge.squirrel_sql.fw.gui.JOptionPaneService;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactoryImpl;
+-import net.sourceforge.squirrel_sql.fw.util.ICommand;
+-/**
+- * This <CODE>ICommand</CODE> allows the user to check for updates and apply changes to the currently 
+- * installed software.
+- */
+-public class UpdateCommand implements ICommand
+-{
+-	/** Application API. */
+-	private IApplication _app;
+-
+-	/** The factory that creates the UpdateController or re-uses the one previously created one */
+-	private UpdateControllerFactory updateControllerFactory = new UpdateControllerFactoryImpl();
+-	
+-	/**
+-	 * Ctor.
+-	 *
+-	 * @param	app	 Application API.
+-	 *
+-	 * @throws	IllegalArgumentException
+-	 *			Thrown if a <TT>null</TT> <TT>IApplication</TT> passed.
+-	 */
+-	public UpdateCommand(IApplication app)
+-	{
+-		super();
+-		if (app == null)
+-		{
+-			throw new IllegalArgumentException("Null IApplication passed");
+-		}
+-		_app = app;
+-	}
+-
+-	/**
+-	 * Display the software update dialog
+-	 */
+-	public void execute()
+-	{
+-	   UpdateController updateController = 
+-	   	updateControllerFactory.createUpdateController(_app,  new ArtifactDownloaderFactoryImpl(),
+-	   		new UpdateUtilImpl(), new JOptionPaneService(), new FileWrapperFactoryImpl());
+-	   updateController.showUpdateDialog();
+-	}
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/UpdateChannelComboBoxEntry.java
++++ /dev/null
+@@ -1,81 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.preferences;
+-
+-/**
+- * An abstraction for update channel combobox entries.  This just allows
+- * the label to be internationalized, while still allowing for the application
+- * to know what the user's preference for update channel is.
+- *  
+- * @author manningr
+- */
+-public class UpdateChannelComboBoxEntry {
+-
+-   /**
+-    * An enumeration that defines the different update check channels that 
+-    * a user can choose
+-    */   
+-   public enum ChannelType {
+-      STABLE, SNAPSHOT
+-   }
+-
+-   /** the channel to use for software updates */
+-   private ChannelType _channel = null;
+-
+-   /** the label to show to the user for this software update channel */
+-   private String _displayName = null;
+-
+-   /**
+-    * Construct a new update channel entry
+-    * 
+-    * @param channel
+-    *           the channel to use for software updates
+-    * @param displayName
+-    *           the label to show to the user for this software update channel
+-    */
+-   public UpdateChannelComboBoxEntry(ChannelType channel, String displayName) {
+-      _channel = channel;
+-      _displayName = displayName;
+-   }
+-
+-   /* (non-Javadoc)
+-    * @see java.lang.Object#toString()
+-    */
+-   public String toString() {
+-      return _displayName;
+-   }
+-
+-   
+-   /**
+-    * @return returns a boolean indicating whether or not the channel is for 
+-    * "stable" updates.
+-    */
+-   public boolean isStable() {
+-      return _channel == ChannelType.STABLE;
+-   }
+-
+-   /**
+-    * @return returns a boolean indicating whether or not the channel is for 
+-    * "snapshot" updates.
+-    */   
+-   public boolean isSnapshot() {
+-      return _channel == ChannelType.SNAPSHOT;
+-   }
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/UpdateCheckFrequencyComboBoxEntry.java
++++ /dev/null
+@@ -1,63 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.preferences;
+-
+-import net.sourceforge.squirrel_sql.client.update.UpdateCheckFrequency;
+-
+-/**
+- * An abstraction for update check frequency combo-box entries.  This just allows
+- * the label to be internationalized, while still allowing for the application
+- * to know what the user's preference for update check frequency is.
+- */
+-public class UpdateCheckFrequencyComboBoxEntry {
+-   
+-   /** the frequency with which to check the site for software updates */
+-   private UpdateCheckFrequency _frequency = null;
+-
+-   /** the label to show to the user for this software update frequency */
+-   private String _displayName = null;
+-
+-   /**
+-    * Construct a new update check frequency entry
+-    * 
+-    * @param frequency
+-    *           the frequency with which to check the site for software updates
+-    * @param displayName
+-    *           the label to show to the user for this software update frequency
+-    */
+-   public UpdateCheckFrequencyComboBoxEntry(UpdateCheckFrequency frequency, String displayName) {
+-      _frequency = frequency;
+-      _displayName = displayName;
+-   }
+-
+-   /**
+-    * @see java.lang.Object#toString()
+-    */
+-   public String toString() {
+-      return _displayName;
+-   }
+-
+-   /**
+-    * @return the UpdateCheckFrequency Enum that is associated with this combo box entry.
+-    */
+-   public UpdateCheckFrequency getUpdateCheckFrequencyEnum() {
+-   	return _frequency;
+-   }
+-   
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/UpdatePreferencesPanel.java
++++ /dev/null
+@@ -1,702 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.preferences;
+-
+-import java.awt.Color;
+-import java.awt.Dimension;
+-import java.awt.GridBagConstraints;
+-import java.awt.GridBagLayout;
+-import java.awt.Insets;
+-import java.awt.event.ActionEvent;
+-import java.awt.event.ActionListener;
+-import java.awt.event.ItemEvent;
+-import java.awt.event.ItemListener;
+-
+-import javax.swing.BorderFactory;
+-import javax.swing.Box;
+-import javax.swing.ButtonGroup;
+-import javax.swing.JButton;
+-import javax.swing.JCheckBox;
+-import javax.swing.JComboBox;
+-import javax.swing.JLabel;
+-import javax.swing.JPanel;
+-import javax.swing.JRadioButton;
+-import javax.swing.JSeparator;
+-import javax.swing.JTextField;
+-import javax.swing.SwingConstants;
+-import javax.swing.event.DocumentEvent;
+-import javax.swing.event.DocumentListener;
+-
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.client.preferences.UpdateChannelComboBoxEntry.ChannelType;
+-import net.sourceforge.squirrel_sql.client.update.UpdateCheckFrequency;
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtilImpl;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-import net.sourceforge.squirrel_sql.fw.util.StringUtilities;
+-
+-public class UpdatePreferencesPanel extends JPanel
+-{
+-	private static final Color CONNECTION_FAILURE_COLOR = Color.RED;
+-
+-	private static final Color CONNECTION_SUCCESS_COLOR = new Color(67, 181, 118);
+-
+-	/** Internationalized strings for this class. */
+-	private static final StringManager s_stringMgr =
+-		StringManagerFactory.getStringManager(UpdatePreferencesPanel.class);
+-
+-	private static final UpdateUtil _updateUtil = new UpdateUtilImpl();
+-
+-	static interface i18n
+-	{
+-
+-		// i18n[UpdatePreferencesPanel.atStartupLabel=At Startup]
+-		String AT_STARTUP_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.atStartupLabel");
+-
+-		// i18n[UpdatePreferencesPanel.autoBorderLabel=Automatic Updates]
+-		String AUTO_BORDER_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.autoBorderLabel");
+-
+-		// i18n[UpdatePreferencesPanel.autoCheckFrequency=How often to check for
+-		// updates:]
+-		String AUTO_CHECK_FREQUENCY = s_stringMgr.getString("UpdatePreferencesPanel.autoCheckFrequency");
+-
+-		// i18n[UpdatePreferencesPanel.channel=Channel:]
+-		String CHANNEL = s_stringMgr.getString("UpdatePreferencesPanel.channel");
+-
+-		// i18n[UpdatePreferencesPanel.updateSiteBorderLabel=Update Site]
+-		String UPDATE_SITE_BORDER_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.updateSiteBorderLabel");
+-
+-		// i18n[UpdatePreferencesPanel.enableAutoUpdate=Enable Automatic Updates]
+-		String ENABLE_AUTO_UPDATE = s_stringMgr.getString("UpdatePreferencesPanel.enableAutoUpdate");
+-
+-		// i18n[UpdatePreferencesPanel.localPathLabel=Local Path:]
+-		String LOCAL_PATH = s_stringMgr.getString("UpdatePreferencesPanel.localPathLabel");
+-
+-		// i18n[UpdatePreferencesPanel.localSiteButtonLabel=Local]
+-		String LOCAL_SITE_BUTTON_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.localSiteButtonLabel");		
+-		
+-		// i18n[UpdatePreferencesPanel.path=Path:]
+-		String PATH = s_stringMgr.getString("UpdatePreferencesPanel.path");
+-
+-		// i18n[UpdatePreferencesPanel.port=Port:]
+-		String PORT = s_stringMgr.getString("UpdatePreferencesPanel.port");
+-
+-		// i18n[UpdatePreferencesPanel.server=Server:]
+-		String SERVER = s_stringMgr.getString("UpdatePreferencesPanel.server");
+-
+-		// i18n[UpdatePreferencesPanel.dailyLabel=Daily]
+-		String DAILY_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.dailyLabel");
+-
+-		// i18n[UpdatePreferencesPanel.weeklyLabel=Weekly]
+-		String WEEKLY_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.weeklyLabel");
+-
+-		// i18n[UpdatePreferencesPanel.remoteSiteButtonLabel=Remote]
+-		String REMOTE_SITE_BUTTON_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.remoteSiteButtonLabel");
+-		
+-		// i18n[UpdatePreferencesPanel.siteTypeLabel=Site Type:]
+-		String SITE_TYPE_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.siteTypeLabel");
+-
+-		// i18n[UpdatePreferencesPanel.testLabel=Test Connection]
+-		String TEST_LABEL = s_stringMgr.getString("UpdatePreferencesPanel.testLabel");
+-
+-		// i18n[UpdatePreferencesPanel.urlLabel=Url:]
+-		String URL = s_stringMgr.getString("UpdatePreferencesPanel.urlLabel");
+-
+-		// i18n[UpdatePreferencesPanel.statusLableSuccessMsg=Connected Successfully]
+-		String STATUS_LABEL_SUCCESS_MSG = s_stringMgr.getString("UpdatePreferencesPanel.statusLableSuccessMsg");
+-
+-		// i18n[UpdatePreferencesPanel.statusLableFailureMsg=Connection failed. See log for error.]
+-		String STATUS_LABEL_FAILURE_MSG = s_stringMgr.getString("UpdatePreferencesPanel.statusLableFailureMsg");
+-
+-		// i18n[UpdatePreferencesPanel.connectionFailureDialogMsg=Unable to download release.xml from the
+-		// specified location]
+-		String CONNECTION_FAILURE_DIALOG_MSG =
+-			s_stringMgr.getString("UpdatePreferencesPanel.connectionFailureDialogMsg");
+-	}
+-
+-	private static final long serialVersionUID = 6411907298042579120L;
+-
+-	private JLabel _serverLabel = null;
+-
+-	private JLabel _portLabel = null;
+-
+-	private JLabel _pathLabel = null;
+-
+-	private JLabel _localPathLabel = null;
+-
+-	private JLabel _channelLabel = null;
+-
+-	private JLabel _urlLabel = null;
+-
+-	private JTextField _updateServerName = new JTextField();
+-
+-	private JTextField _updateServerPort = new JTextField();
+-
+-	private JTextField _updateServerPath = new JTextField();
+-
+-	private JTextField _localPath = new JTextField();
+-
+-	private JTextField _updateUrl = new JTextField();
+-
+-	private JLabel siteTypeLabel = null;
+-
+-	private JRadioButton _remoteTypeButton = new JRadioButton(i18n.REMOTE_SITE_BUTTON_LABEL);
+-
+-	private JRadioButton _localTypeButton = new JRadioButton(i18n.LOCAL_SITE_BUTTON_LABEL);
+-
+-	private ButtonGroup _updateSiteTypeGroup = new ButtonGroup();
+-
+-	private UpdateChannelComboBoxEntry stableChannel =
+-		new UpdateChannelComboBoxEntry(ChannelType.STABLE, "stable");
+-
+-	private UpdateChannelComboBoxEntry snapshotChannel =
+-		new UpdateChannelComboBoxEntry(ChannelType.SNAPSHOT, "snapshot");
+-
+-	private JComboBox _updateServerChannel = new JComboBox(new Object[] { stableChannel, snapshotChannel });
+-
+-	private JCheckBox _enableAutoUpdateChk = new JCheckBox(i18n.ENABLE_AUTO_UPDATE);
+-
+-	private UpdateCheckFrequencyComboBoxEntry checkAtStartup =
+-		new UpdateCheckFrequencyComboBoxEntry(UpdateCheckFrequency.STARTUP, i18n.AT_STARTUP_LABEL);
+-
+-	private UpdateCheckFrequencyComboBoxEntry checkDaily =
+-		new UpdateCheckFrequencyComboBoxEntry(UpdateCheckFrequency.DAILY, i18n.DAILY_LABEL);
+-
+-	private UpdateCheckFrequencyComboBoxEntry checkWeekly =
+-		new UpdateCheckFrequencyComboBoxEntry(UpdateCheckFrequency.WEEKLY, i18n.WEEKLY_LABEL);
+-
+-	private JComboBox _updateCheckFrequency =
+-		new JComboBox(new Object[] { checkAtStartup, checkDaily, checkWeekly });
+-
+-	private JButton _testConnectionButton = new JButton(i18n.TEST_LABEL);
+-
+-	private JLabel _testConnectionStatusLabel = new JLabel();
+-
+-	private final Insets SEP_INSETS = new Insets(10, 14, 0, 14);
+-
+-	private final Insets LABEL_INSETS = new Insets(2, 28, 6, 0);
+-
+-	private final Insets FIELD_INSETS = new Insets(2, 8, 6, 28);
+-
+-	private IApplication _app;
+-
+-	public UpdatePreferencesPanel()
+-	{
+-		super(new GridBagLayout());
+-		createUserInterface();
+-	}
+-
+-	void loadData(SquirrelPreferences prefs)
+-	{
+-		final IUpdateSettings updateSettings = prefs.getUpdateSettings();
+-
+-		_updateServerName.setText(updateSettings.getUpdateServer());
+-		_updateServerPort.setText(updateSettings.getUpdateServerPort());
+-		_updateServerPath.setText(updateSettings.getUpdateServerPath());
+-
+-		String channelStr = updateSettings.getUpdateServerChannel();
+-		_updateServerChannel.setSelectedItem(stableChannel);
+-		if (channelStr != null && channelStr.equals(ChannelType.SNAPSHOT.name()))
+-		{
+-			_updateServerChannel.setSelectedItem(snapshotChannel);
+-		}
+-
+-		_enableAutoUpdateChk.setSelected(updateSettings.isEnableAutomaticUpdates());
+-
+-		UpdateCheckFrequency updateCheckFrequency =
+-			UpdateCheckFrequency.getEnumForString(updateSettings.getUpdateCheckFrequency());
+-
+-		if (updateCheckFrequency == UpdateCheckFrequency.DAILY)
+-		{
+-			_updateCheckFrequency.setSelectedItem(checkDaily);
+-		}
+-		if (updateCheckFrequency == UpdateCheckFrequency.STARTUP)
+-		{
+-			_updateCheckFrequency.setSelectedItem(checkAtStartup);
+-		}
+-		if (updateCheckFrequency == UpdateCheckFrequency.WEEKLY)
+-		{
+-			_updateCheckFrequency.setSelectedItem(checkWeekly);
+-		}
+-
+-		if (updateSettings.isRemoteUpdateSite())
+-		{
+-			_remoteTypeButton.setSelected(true);
+-			enableRemoteSite();
+-		}
+-		else
+-		{
+-			_localTypeButton.setSelected(true);
+-			enableLocalPath();
+-		}
+-		_localPath.setText(updateSettings.getFileSystemUpdatePath());
+-		updateControlStatus();
+-		updateUrl();
+-	}
+-
+-	void applyChanges(SquirrelPreferences prefs)
+-	{
+-
+-		final IUpdateSettings updateSettings = new UpdateSettings();
+-
+-		updateSettings.setUpdateServer(_updateServerName.getText());
+-		updateSettings.setUpdateServerPort(_updateServerPort.getText());
+-		updateSettings.setUpdateServerPath(_updateServerPath.getText());
+-
+-		UpdateChannelComboBoxEntry channelEntry =
+-			(UpdateChannelComboBoxEntry) _updateServerChannel.getSelectedItem();
+-
+-		String channelStr = ChannelType.STABLE.name();
+-		if (channelEntry.isSnapshot())
+-		{
+-			channelStr = ChannelType.SNAPSHOT.name();
+-		}
+-		updateSettings.setUpdateServerChannel(channelStr);
+-
+-		updateSettings.setEnableAutomaticUpdates(_enableAutoUpdateChk.isSelected());
+-
+-		UpdateCheckFrequencyComboBoxEntry freqEntry =
+-			(UpdateCheckFrequencyComboBoxEntry) _updateCheckFrequency.getSelectedItem();
+-
+-		updateSettings.setUpdateCheckFrequency(freqEntry.getUpdateCheckFrequencyEnum().name());
+-		updateSettings.setRemoteUpdateSite(_remoteTypeButton.isSelected());
+-		updateSettings.setFileSystemUpdatePath(_localPath.getText());
+-
+-		prefs.setUpdateSettings(updateSettings);
+-
+-	}
+-
+-	private void updateControlStatus()
+-	{
+-		final boolean enableAutoCheck = _enableAutoUpdateChk.isSelected();
+-		_updateCheckFrequency.setEnabled(enableAutoCheck);
+-	}
+-
+-	private void createUserInterface()
+-	{
+-		final GridBagConstraints gbc = new GridBagConstraints();
+-		gbc.fill = GridBagConstraints.HORIZONTAL;
+-		gbc.insets = new Insets(4, 4, 4, 4);
+-		gbc.gridx = 0;
+-		gbc.gridy = 0;
+-		gbc.weightx = 1;
+-		add(createUpdateSitePanel(), gbc);
+-		++gbc.gridy;
+-		add(createAutoUpdatePanel(), gbc);
+-
+-		final ActionListener lis = new MyActionHandler();
+-		_enableAutoUpdateChk.addActionListener(lis);
+-	}
+-
+-	private JPanel createUpdateSitePanel()
+-	{
+-		JPanel pnl = new JPanel(new GridBagLayout());
+-		pnl.setBorder(BorderFactory.createTitledBorder(i18n.UPDATE_SITE_BORDER_LABEL));
+-
+-		ItemListener urlUpdateItemListener = new UrlItemListener();
+-		DocumentListener urlDocumentListener = new UrlDocumentListener();
+-		final GridBagConstraints gbc = new GridBagConstraints();
+-
+-		setSeparatorConstraints(gbc, 0);
+-		gbc.gridwidth = 1;
+-		gbc.weightx = 0;
+-		gbc.fill = GridBagConstraints.NONE;
+-		gbc.anchor = GridBagConstraints.EAST;
+-		siteTypeLabel = new JLabel(i18n.SITE_TYPE_LABEL, JLabel.RIGHT);
+-		pnl.add(siteTypeLabel, gbc);
+-
+-		// Site type
+-
+-		setSeparatorConstraints(gbc, 0);
+-		gbc.gridx = 1;
+-		gbc.gridwidth = 1;
+-		gbc.fill = GridBagConstraints.NONE;
+-		pnl.add(getSiteTypePanel(), gbc);
+-
+-		setSeparatorConstraints(gbc, 1);
+-		pnl.add(getSep(), gbc);
+-
+-		// Update server name
+-
+-		setLabelConstraints(gbc, 2);
+-		_serverLabel = new JLabel(i18n.SERVER, SwingConstants.RIGHT);
+-		pnl.add(_serverLabel, gbc);
+-
+-		setFieldConstraints(gbc, 2);
+-		_updateServerName.getDocument().addDocumentListener(urlDocumentListener);
+-		pnl.add(_updateServerName, gbc);
+-
+-		// Update server port
+-
+-		setLabelConstraints(gbc, 3);
+-		_portLabel = new JLabel(i18n.PORT, SwingConstants.RIGHT);
+-		pnl.add(_portLabel, gbc);
+-
+-		setFieldConstraints(gbc, 3);
+-		_updateServerPort.getDocument().addDocumentListener(urlDocumentListener);
+-		pnl.add(_updateServerPort, gbc);
+-
+-		// Path to release.xml
+-
+-		setLabelConstraints(gbc, 4);
+-		_pathLabel = new JLabel(i18n.PATH, SwingConstants.RIGHT);
+-		pnl.add(_pathLabel, gbc);
+-
+-		setFieldConstraints(gbc, 4);
+-		_updateServerPath.getDocument().addDocumentListener(urlDocumentListener);
+-		pnl.add(_updateServerPath, gbc);
+-
+-		// Channnel combo-box
+-
+-		setLabelConstraints(gbc, 5);
+-		_channelLabel = new JLabel(i18n.CHANNEL, SwingConstants.RIGHT);
+-		pnl.add(_channelLabel, gbc);
+-
+-		setFieldConstraints(gbc, 5);
+-		gbc.fill = GridBagConstraints.NONE;
+-		_updateServerChannel.addItemListener(urlUpdateItemListener);
+-		pnl.add(_updateServerChannel, gbc);
+-
+-		// URL text field
+-
+-		setLabelConstraints(gbc, 6);
+-		_urlLabel = new JLabel(i18n.URL, SwingConstants.RIGHT);
+-		pnl.add(_urlLabel, gbc);
+-
+-		setFieldConstraints(gbc, 6);
+-		updateUrl();
+-		pnl.add(_updateUrl, gbc);
+-
+-		// Test Connection Button Panel (Both the button and the status label
+-
+-		setFieldConstraints(gbc, 7);
+-
+-		Box buttonBox = Box.createHorizontalBox();
+-		buttonBox.add(_testConnectionButton);
+-		buttonBox.add(Box.createHorizontalStrut(20));
+-		buttonBox.add(_testConnectionStatusLabel);
+-		_testConnectionButton.addActionListener(new TestConnectionButtonListener());
+-		pnl.add(buttonBox, gbc);
+-
+-		// Separator
+-
+-		setSeparatorConstraints(gbc, 8);
+-		pnl.add(getSep(), gbc);
+-
+-		// Local update directory
+-
+-		setLabelConstraints(gbc, 9);
+-		_localPathLabel = new JLabel(i18n.LOCAL_PATH, SwingConstants.RIGHT);
+-		pnl.add(_localPathLabel, gbc);
+-
+-		setFieldConstraints(gbc, 9);
+-		pnl.add(_localPath, gbc);
+-		return pnl;
+-	}
+-
+-	/**
+-	 * Sets the specified GridBagConstraints with the specified grid y coordinate and:<br>
+-	 * <br>
+-	 * grid x = 0 <br>
+-	 * grid width = 1 <br>
+-	 * weight x = 1 <br>
+-	 * insets = LABEL_INSETS <br>
+-	 * fill = GridBagConstraints.NONE <br>
+-	 * anchor = GridBagConstraints.EAST
+-	 * 
+-	 * @param gbc
+-	 *           the constraints to set
+-	 * @param gridy
+-	 *           the grid y coordinate
+-	 */
+-	private void setLabelConstraints(GridBagConstraints gbc, int gridy)
+-	{
+-		gbc.gridx = 0;
+-		gbc.gridy = gridy;
+-		gbc.gridwidth = 1;
+-		gbc.weightx = 0;
+-		gbc.insets = LABEL_INSETS;
+-		gbc.fill = GridBagConstraints.NONE;
+-		gbc.anchor = GridBagConstraints.EAST;
+-	}
+-
+-	/**
+-	 * Sets the specified GridBagConstraints with the specified grid y coordinate and:<br>
+-	 * <br>
+-	 * grid x = 1 <br>
+-	 * grid width = 1 <br>
+-	 * weight x = 1 <br>
+-	 * insets = FIELD_INSETS <br>
+-	 * fill = GridBagConstraints.HORIZONTAL <br>
+-	 * anchor = GridBagConstraints.WEST
+-	 * 
+-	 * @param gbc
+-	 *           the constraints to set
+-	 * @param gridy
+-	 *           the grid y coordinate
+-	 */
+-	private void setFieldConstraints(GridBagConstraints gbc, int gridy)
+-	{
+-		gbc.gridx = 1;
+-		gbc.gridy = gridy;
+-		gbc.gridwidth = 1;
+-		gbc.weightx = 1;
+-		gbc.insets = FIELD_INSETS;
+-		gbc.fill = GridBagConstraints.HORIZONTAL;
+-		gbc.anchor = GridBagConstraints.WEST;
+-
+-	}
+-
+-	/**
+-	 * Sets the specified GridBagConstraints with the specified grid y coordinate and:<br>
+-	 * <br>
+-	 * grid x = 0 <br>
+-	 * grid width = 2 <br>
+-	 * weight x = 1 <br>
+-	 * insets = SEP_INSETS <br>
+-	 * fill = GridBagConstraints.HORIZONTAL <br>
+-	 * anchor = GridBagConstraints.WEST
+-	 * 
+-	 * @param gbc
+-	 *           the constraints to set
+-	 * @param gridy
+-	 *           the grid y coordinate
+-	 */
+-	private void setSeparatorConstraints(GridBagConstraints gbc, int gridy)
+-	{
+-		gbc.gridx = 0;
+-		gbc.gridy = gridy;
+-		gbc.gridwidth = 2;
+-		gbc.weightx = 1;
+-		gbc.insets = SEP_INSETS;
+-		gbc.fill = GridBagConstraints.HORIZONTAL;
+-		gbc.anchor = GridBagConstraints.WEST;
+-	}
+-
+-	private void enableRemoteSite()
+-	{
+-		_localPath.setEnabled(false);
+-		_localPathLabel.setEnabled(false);
+-		_updateServerChannel.setEnabled(true);
+-		_updateServerName.setEnabled(true);
+-		_updateServerPath.setEnabled(true);
+-		_updateServerPort.setEnabled(true);
+-		_serverLabel.setEnabled(true);
+-		_portLabel.setEnabled(true);
+-		_pathLabel.setEnabled(true);
+-		_channelLabel.setEnabled(true);
+-		_testConnectionButton.setEnabled(true);
+-		_testConnectionStatusLabel.setEnabled(true);
+-		_updateUrl.setEnabled(true);
+-		_urlLabel.setEnabled(true);
+-	}
+-
+-	private void enableLocalPath()
+-	{
+-		_localPath.setEnabled(true);
+-		_localPathLabel.setEnabled(true);
+-		_updateServerChannel.setEnabled(false);
+-		_updateServerName.setEnabled(false);
+-		_updateServerPath.setEnabled(false);
+-		_updateServerPort.setEnabled(false);
+-		_serverLabel.setEnabled(false);
+-		_portLabel.setEnabled(false);
+-		_pathLabel.setEnabled(false);
+-		_channelLabel.setEnabled(false);
+-		_testConnectionButton.setEnabled(false);
+-		_testConnectionStatusLabel.setEnabled(false);
+-		_updateUrl.setEnabled(false);
+-		_urlLabel.setEnabled(false);
+-
+-	}
+-
+-	private void updateUrl()
+-	{
+-
+-		String portStr = _updateServerPort.getText();
+-		StringBuilder tmp = new StringBuilder("http://");
+-		tmp.append(_updateServerName.getText());
+-		if (!StringUtilities.isEmpty(portStr))
+-		{
+-			tmp.append(":");
+-			tmp.append(_updateServerPort.getText());
+-		}
+-		tmp.append("/");
+-		tmp.append(_updateServerPath.getText());
+-		tmp.append("/");
+-		tmp.append(_updateServerChannel.getSelectedItem().toString());
+-		tmp.append("/release.xml");
+-		_updateUrl.setText(tmp.toString());
+-		_updateUrl.setEditable(false);
+-		_updateUrl.revalidate();
+-	}
+-
+-	private JPanel getSiteTypePanel()
+-	{
+-		_remoteTypeButton.addActionListener(new ActionListener()
+-		{
+-			public void actionPerformed(ActionEvent e)
+-			{
+-				enableRemoteSite();
+-			}
+-		});
+-		_localTypeButton.addActionListener(new ActionListener()
+-		{
+-			public void actionPerformed(ActionEvent e)
+-			{
+-				enableLocalPath();
+-			}
+-		});
+-		_updateSiteTypeGroup.add(_remoteTypeButton);
+-		_updateSiteTypeGroup.add(_localTypeButton);
+-		JPanel siteTypePanel = new JPanel();
+-		siteTypePanel.add(_remoteTypeButton);
+-		siteTypePanel.add(_localTypeButton);
+-		return siteTypePanel;
+-	}
+-
+-	private JSeparator getSep()
+-	{
+-		JSeparator sep = new JSeparator(SwingConstants.HORIZONTAL);
+-		// separators need preferred size in GridBagLayout
+-		sep.setPreferredSize(new Dimension(100, 20));
+-		sep.setMinimumSize(new Dimension(100, 20));
+-		return sep;
+-	}
+-
+-	private JPanel createAutoUpdatePanel()
+-	{
+-		JPanel pnl = new JPanel(new GridBagLayout());
+-		pnl.setBorder(BorderFactory.createTitledBorder(i18n.AUTO_BORDER_LABEL));
+-
+-		final GridBagConstraints gbc = new GridBagConstraints();
+-		gbc.anchor = GridBagConstraints.WEST;
+-		gbc.insets = new Insets(4, 4, 4, 4);
+-		gbc.gridx = 0;
+-		gbc.gridy = 0;
+-		gbc.gridwidth = 2;
+-		gbc.fill = GridBagConstraints.HORIZONTAL;
+-		pnl.add(_enableAutoUpdateChk, gbc);
+-
+-		gbc.gridwidth = 1;
+-
+-		gbc.gridx = 0;
+-		gbc.gridy = 1;
+-		gbc.weightx = 0;
+-		gbc.insets = new Insets(4, 20, 4, 10);
+-		pnl.add(new JLabel(i18n.AUTO_CHECK_FREQUENCY, JLabel.LEFT), gbc);
+-
+-		gbc.gridx = 1;
+-		gbc.gridy = 1;
+-		gbc.weightx = 1;
+-		gbc.insets = new Insets(4, 0, 4, 0);
+-		gbc.fill = GridBagConstraints.NONE;
+-		pnl.add(this._updateCheckFrequency, gbc);
+-
+-		return pnl;
+-	}
+-
+-	private final class MyActionHandler implements ActionListener
+-	{
+-		public void actionPerformed(ActionEvent evt)
+-		{
+-			updateControlStatus();
+-		}
+-	}
+-
+-	/**
+-	 * Sets the IApplication that is used to display error messages.
+-	 * 
+-	 * @param app
+-	 *           the IApplication implementation
+-	 */
+-	public void setApplication(IApplication app)
+-	{
+-		_app = app;
+-	}
+-
+-	private class TestConnectionButtonListener implements ActionListener
+-	{
+-		public void actionPerformed(ActionEvent e)
+-		{
+-			String serverName = _updateServerName.getText();
+-
+-			StringBuilder path = new StringBuilder(_updateServerPath.getText());
+-			path.append("/");
+-			path.append(_updateServerChannel.getSelectedItem().toString());
+-
+-			String portString = _updateServerPort.getText();
+-
+-			try
+-			{
+-				int port = 80;
+-				if (!StringUtilities.isEmpty(portString))
+-				{
+-					port = Integer.parseInt(_updateServerPort.getText());
+-				}
+-				_updateUtil.downloadCurrentRelease(serverName, port, path.toString(),
+-					UpdateUtil.RELEASE_XML_FILENAME, _app.getSquirrelPreferences().getProxySettings());
+-				_testConnectionStatusLabel.setText(i18n.STATUS_LABEL_SUCCESS_MSG);
+-				_testConnectionStatusLabel.setForeground(CONNECTION_SUCCESS_COLOR);
+-			}
+-			catch (Exception e1)
+-			{
+-				_testConnectionStatusLabel.setText(i18n.STATUS_LABEL_FAILURE_MSG);
+-				_testConnectionStatusLabel.setForeground(CONNECTION_FAILURE_COLOR);
+-				_app.showErrorDialog(i18n.CONNECTION_FAILURE_DIALOG_MSG, e1);
+-
+-			}
+-
+-		}
+-	}
+-
+-	/**
+-	 * A listener that will update the url whenever the associated document is modified
+-	 * 
+-	 * @author manningr
+-	 */
+-	private class UrlDocumentListener implements DocumentListener
+-	{
+-		public void changedUpdate(DocumentEvent e)
+-		{
+-			updateUrl();
+-		}
+-
+-		public void insertUpdate(DocumentEvent e)
+-		{
+-			updateUrl();
+-
+-		}
+-
+-		public void removeUpdate(DocumentEvent e)
+-		{
+-			updateUrl();
+-
+-		}
+-	}
+-
+-	private class UrlItemListener implements ItemListener
+-	{
+-		public void itemStateChanged(ItemEvent e)
+-		{
+-			updateUrl();
+-		}
+-	}
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/UpdatePreferencesTab.java
++++ /dev/null
+@@ -1,103 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.preferences;
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-import java.awt.Component;
+-
+-
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-
+-public class UpdatePreferencesTab implements IGlobalPreferencesPanel
+-{
+-
+-   /** Internationalized strings for this class. */
+-   private static final StringManager s_stringMgr =
+-      StringManagerFactory.getStringManager(UpdatePreferencesTab.class);
+-   
+-   static interface i18n {
+-      
+-      // i18n[UpdatePreferencesTab.title=Update]
+-      String TITLE = s_stringMgr.getString("UpdatePreferencesTab.title");
+-
+-      // i18n[UpdatePreferencesTab.hint=Software Update Settings]
+-      String HINT = s_stringMgr.getString("UpdatePreferencesTab.hint");
+-
+-   }   
+-   
+-	/** Panel to be displayed in preferences dialog. */
+-	private UpdatePreferencesPanel _myPanel;
+-
+-	/** Application API. */
+-	private IApplication _app;
+-	
+-	
+-	/**
+-	 * Default ctor.
+-	 */
+-	public UpdatePreferencesTab()
+-	{
+-		super();
+-	}
+-
+-	public void initialize(IApplication app)
+-	{
+-		if (app == null)
+-		{
+-			throw new IllegalArgumentException("Null IApplication passed");
+-		}
+-
+-		_app = app;
+-
+-		UpdatePreferencesPanel updatePanel = (UpdatePreferencesPanel)getPanelComponent();
+-		updatePanel.setApplication(_app);
+-		updatePanel.loadData(_app.getSquirrelPreferences());
+-	}
+-
+-   public void uninitialize(IApplication app)
+-   {
+-      
+-   }
+-
+-   public synchronized Component getPanelComponent()
+-	{
+-		if (_myPanel == null)
+-		{
+-			_myPanel = new UpdatePreferencesPanel();
+-		}
+-		return _myPanel;
+-	}
+-
+-	public synchronized void applyChanges()
+-	{
+-		_myPanel.applyChanges(_app.getSquirrelPreferences());
+-	}
+-
+-	public String getTitle()
+-	{
+-		return i18n.TITLE;
+-	}
+-
+-	public String getHint()
+-	{
+-		return i18n.HINT;
+-	}
+-
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/UpdateSettings.java
++++ /dev/null
+@@ -1,226 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.preferences;
+-
+-import java.io.Serializable;
+-
+-import net.sourceforge.squirrel_sql.client.Version;
+-
+-/**
+- * Software update settings.
+- */
+-public class UpdateSettings implements Cloneable, IUpdateSettings, Serializable
+-{
+-	private static final long serialVersionUID = -1305655179503568153L;
+-
+-	/** Name of software update server. */
+-	private String updateServer = "www.squirrel-sql.net";
+-
+-	/** Port for software update server. */
+-	private String updateServerPort = "80";
+-
+-	/** Path to channel directories on software update server. */
+-	private String updateServerPath = "updates";
+-
+-	/** Update channel on the software update server. */
+-	private String updateServerChannel = "stable";
+-
+-	/** Whether or not to periodically check for software updates */
+-	private boolean enableAutomaticUpdates = true;
+-
+-	/** How often to check for updates - at startup / weekly */
+-	private String updateCheckFrequency = "WEEKLY";
+-
+-	/** The last time an update check was made in milliseconds */
+-	private String lastUpdateCheckTimeMillis = "0";
+-	
+-	/** Whether or not the update site is on a remote server */
+-	private boolean isRemoteUpdateSite = true;
+-	
+-	private String fileSystemUpdatePath = "";
+-	
+-	public UpdateSettings() {
+-		if (Version.isSnapshotVersion()) {
+-			updateServerChannel = "snapshot";
+-		}
+-	}
+-	
+-	/**
+-	 * @see java.lang.Object#clone()
+-	 */
+-	@Override
+-	public Object clone() throws CloneNotSupportedException
+-	{
+-		return super.clone();
+-	}
+-
+-	/**
+-	  * Copy Constructor
+-	  *
+-	  * @param updateSettings a <code>UpdateSettings</code> object
+-	  */
+-	 public UpdateSettings(IUpdateSettings updateSettings) 
+-	 {
+-	     this.updateServer = updateSettings.getUpdateServer();
+-	     this.updateServerPort = updateSettings.getUpdateServerPort();
+-	     this.updateServerPath = updateSettings.getUpdateServerPath();
+-	     this.updateServerChannel = updateSettings.getUpdateServerChannel();
+-	     this.enableAutomaticUpdates = updateSettings.isEnableAutomaticUpdates();
+-	     this.updateCheckFrequency = updateSettings.getUpdateCheckFrequency();
+-	     this.lastUpdateCheckTimeMillis = updateSettings.getLastUpdateCheckTimeMillis();
+-	     this.isRemoteUpdateSite = updateSettings.isRemoteUpdateSite();
+-	     this.fileSystemUpdatePath = updateSettings.getFileSystemUpdatePath();
+-	 }
+-
+-   /**
+-    * @return the updateServer
+-    */
+-   public String getUpdateServer() {
+-      return updateServer;
+-   }
+-
+-   /**
+-    * @param updateServer the updateServer to set
+-    */
+-   public void setUpdateServer(String updateServer) {
+-      this.updateServer = updateServer;
+-   }
+-
+-   /**
+-    * @return the updateServerPort
+-    */
+-   public String getUpdateServerPort() {
+-      return updateServerPort;
+-   }
+-
+-   /**
+-    * @param updateServerPort the updateServerPort to set
+-    */
+-   public void setUpdateServerPort(String updateServerPort) {
+-      this.updateServerPort = updateServerPort;
+-   }
+-
+-   /**
+-    * @return the updateServerPath
+-    */
+-   public String getUpdateServerPath() {
+-      return updateServerPath;
+-   }
+-
+-   /**
+-    * @param updateServerPath the updateServerPath to set
+-    */
+-   public void setUpdateServerPath(String updateServerPath) {
+-      this.updateServerPath = updateServerPath;
+-   }
+-
+-   /**
+-    * @return the updateServerChannel
+-    */
+-   public String getUpdateServerChannel() {
+-      return updateServerChannel;
+-   }
+-
+-   /**
+-    * @param updateServerChannel the updateServerChannel to set
+-    */
+-   public void setUpdateServerChannel(String updateServerChannel) {
+-      this.updateServerChannel = updateServerChannel;
+-   }
+-
+-   /**
+-    * @return the enableAutomaticUpdates
+-    */
+-   public boolean isEnableAutomaticUpdates() {
+-      return enableAutomaticUpdates;
+-   }
+-
+-   /**
+-    * @param enableAutomaticUpdates the enableAutomaticUpdates to set
+-    */
+-   public void setEnableAutomaticUpdates(boolean enableAutomaticUpdates) {
+-      this.enableAutomaticUpdates = enableAutomaticUpdates;
+-   }
+-
+-   /**
+-    * @return the updateCheckFrequency
+-    */
+-   public String getUpdateCheckFrequency() {
+-      return updateCheckFrequency;
+-   }
+-   
+-   /**
+-    * @param updateCheckFrequency the updateCheckFrequency to set
+-    */
+-   public void setUpdateCheckFrequency(String updateCheckFrequency) {
+-      this.updateCheckFrequency = updateCheckFrequency;
+-   }
+-
+-   /**
+-    * @return the lastUpdateCheckTimeMillis
+-    */
+-   public String getLastUpdateCheckTimeMillis() {
+-      return lastUpdateCheckTimeMillis;
+-   }
+-
+-   /**
+-    * @param lastUpdateCheckTimeMillis the lastUpdateCheckTimeMillis to set
+-    */
+-   public void setLastUpdateCheckTimeMillis(String lastUpdateCheckTimeMillis) {
+-      this.lastUpdateCheckTimeMillis = lastUpdateCheckTimeMillis;
+-   }
+-
+-   /**
+-    * Returns a boolean value to indicate whether or not the user wants to use 
+-    * a remote site.  If this is false, it is assumed to mean that the user 
+-    * wants to specify a local directory on the filesystem
+-    * 
+-    * @return true if remote site; false otherwise.
+-    */
+-   public boolean isRemoteUpdateSite() {
+-      return this.isRemoteUpdateSite;
+-   }
+-
+-   /**
+-    * Sets a boolean value to indicate whether or not the user wants to use 
+-    * a remote site.  If this is false, it is assumed to mean that the user 
+-    * wants to specify a local directory on the filesystem
+-    * 
+-    * @param true for remote site; false for local directory.
+-    */
+-   public void setRemoteUpdateSite(boolean isRemoteUpdateSite) {
+-      this.isRemoteUpdateSite = isRemoteUpdateSite;
+-   }
+-
+-   /**
+-    * @return the fileSystemUpdatePath
+-    */
+-   public String getFileSystemUpdatePath() {
+-      return fileSystemUpdatePath;
+-   }
+-
+-   /**
+-    * @param fileSystemUpdatePath the fileSystemUpdatePath to set
+-    */
+-   public void setFileSystemUpdatePath(String fileSystemUpdatePath) {
+-      this.fileSystemUpdatePath = fileSystemUpdatePath;
+-   }
+-   
+-   
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/GlobalPreferencesSheet.java
++++ b/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/GlobalPreferencesSheet.java
+@@ -307,7 +307,6 @@
+ 		_panels.add(new SQLPreferencesPanel(_app.getMainFrame()));
+ 		_panels.add(new ProxyPreferencesPanel());
+ 		_panels.add(new DataTypePreferencesPanel());
+-		_panels.add(new UpdatePreferencesTab());
+ 
+ 		// Go thru all loaded plugins asking for panels.
+ 		PluginInfo[] plugins = _app.getPluginManager().getPluginInformation();
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/IUpdateSettings.java
++++ /dev/null
+@@ -1,126 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.preferences;
+-
+-
+-/**
+- * Interface for settings pertaining to software updates. 
+- */
+-public interface IUpdateSettings
+-{
+-
+-	/**
+-	 * @return the updateServer
+-	 */
+-	public abstract String getUpdateServer();
+-
+-	/**
+-	 * @param updateServer the updateServer to set
+-	 */
+-	public abstract void setUpdateServer(String updateServer);
+-
+-	/**
+-	 * @return the updateServerPort
+-	 */
+-	public abstract String getUpdateServerPort();
+-
+-	/**
+-	 * @param updateServerPort the updateServerPort to set
+-	 */
+-	public abstract void setUpdateServerPort(String updateServerPort);
+-
+-	/**
+-	 * @return the updateServerPath
+-	 */
+-	public abstract String getUpdateServerPath();
+-
+-	/**
+-	 * @param updateServerPath the updateServerPath to set
+-	 */
+-	public abstract void setUpdateServerPath(String updateServerPath);
+-
+-	/**
+-	 * @return the updateServerChannel
+-	 */
+-	public abstract String getUpdateServerChannel();
+-
+-	/**
+-	 * @param updateServerChannel the updateServerChannel to set
+-	 */
+-	public abstract void setUpdateServerChannel(String updateServerChannel);
+-
+-	/**
+-	 * @return the enableAutomaticUpdates
+-	 */
+-	public abstract boolean isEnableAutomaticUpdates();
+-
+-	/**
+-	 * @param enableAutomaticUpdates the enableAutomaticUpdates to set
+-	 */
+-	public abstract void setEnableAutomaticUpdates(boolean enableAutomaticUpdates);
+-
+-	/**
+-	 * @return the updateCheckFrequency
+-	 */
+-	public abstract String getUpdateCheckFrequency();
+-
+-	/**
+-	 * @param updateCheckFrequency the updateCheckFrequency to set
+-	 */
+-	public abstract void setUpdateCheckFrequency(String updateCheckFrequency);
+-
+-	/**
+-	 * @return the lastUpdateCheckTimeMillis
+-	 */
+-	public abstract String getLastUpdateCheckTimeMillis();
+-
+-	/**
+-	 * @param lastUpdateCheckTimeMillis the lastUpdateCheckTimeMillis to set
+-	 */
+-	public abstract void setLastUpdateCheckTimeMillis(String lastUpdateCheckTimeMillis);
+-
+-	/**
+-	 * Returns a boolean value to indicate whether or not the user wants to use 
+-	 * a remote site.  If this is false, it is assumed to mean that the user 
+-	 * wants to specify a local directory on the filesystem
+-	 * 
+-	 * @return true if remote site; false otherwise.
+-	 */
+-	public abstract boolean isRemoteUpdateSite();
+-
+-	/**
+-	 * Sets a boolean value to indicate whether or not the user wants to use 
+-	 * a remote site.  If this is false, it is assumed to mean that the user 
+-	 * wants to specify a local directory on the filesystem
+-	 * 
+-	 * @param true for remote site; false for local directory.
+-	 */
+-	public abstract void setRemoteUpdateSite(boolean isRemoteUpdateSite);
+-
+-	/**
+-	 * @return the fileSystemUpdatePath
+-	 */
+-	public abstract String getFileSystemUpdatePath();
+-
+-	/**
+-	 * @param fileSystemUpdatePath the fileSystemUpdatePath to set
+-	 */
+-	public abstract void setFileSystemUpdatePath(String fileSystemUpdatePath);
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/SquirrelPreferencesBeanInfo.java
++++ b/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/SquirrelPreferencesBeanInfo.java
+@@ -79,8 +79,6 @@
+ 							"setActionKeys", "getActionKeys", "setActionKeys"),
+ 						new PropertyDescriptor(PROXY, SquirrelPreferences.class, "getProxySettings",
+ 							"setProxySettings"),
+-						new PropertyDescriptor(UPDATE, SquirrelPreferences.class, "getUpdateSettings",
+-							"setUpdateSettings"),
+ 						new PropertyDescriptor(SHOW_LOADED_DRIVERS_ONLY, SquirrelPreferences.class,
+ 							"getShowLoadedDriversOnly", "setShowLoadedDriversOnly"),
+ 						new PropertyDescriptor(MAXIMIMIZE_SESSION_SHEET_ON_OPEN, SquirrelPreferences.class,
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/SquirrelPreferences.java
++++ b/app/src/main/java/net/sourceforge/squirrel_sql/client/preferences/SquirrelPreferences.java
+@@ -63,7 +63,6 @@
+       String PLUGIN_OBJECTS = "pluginObjects";
+       String PLUGIN_STATUSES = "pluginStatuses";
+       String PROXY = "proxyPerferences";
+-      String UPDATE = "updatePreferences";
+       String SCROLLABLE_TABBED_PANES = "getUseScrollableTabbedPanes";
+       String SESSION_PROPERTIES = "sessionProperties";
+       String SHOW_ALIASES_TOOL_BAR = "showAliasesToolBar";
+@@ -182,8 +181,6 @@
+ 	/** Proxy settings. */
+ 	private ProxySettings _proxySettings = new ProxySettings();
+ 
+-	/** Software update settings */
+-	private IUpdateSettings _updateSettings = new UpdateSettings();
+ 	
+ 	/** Show loaded drivers only in the Drivers window. */
+ 	private boolean _showLoadedDriversOnly;
+@@ -617,22 +614,6 @@
+ 	{
+ 		return (ProxySettings)_proxySettings.clone();
+ 	}
+-
+-	public IUpdateSettings getUpdateSettings() {
+-	   return new UpdateSettings(_updateSettings); 
+-	}
+-
+-   public synchronized void setUpdateSettings(IUpdateSettings data)
+-   {
+-      if (data == null)
+-      {
+-         data = new UpdateSettings();
+-      }
+-      final IUpdateSettings oldValue = _updateSettings;
+-      _updateSettings= data;
+-      getPropertyChangeReporter().firePropertyChange(IPropertyNames.UPDATE,
+-                                 oldValue, _updateSettings);
+-   }
+ 	
+ 	
+ 	public synchronized void setProxySettings(ProxySettings data)
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/DownloadStatusEventHandler.java
++++ /dev/null
+@@ -1,183 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-import javax.swing.JFrame;
+-import javax.swing.ProgressMonitor;
+-
+-import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader;
+-import net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadEventType;
+-import net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusEvent;
+-import net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusListener;
+-import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-/**
+- * Listener for download events and handle them appropriately.  Specifically, this controls a ProgressMonitor
+- * showing progress to the user as the artifact downloader reports it.  Also, a check is made each time that
+- * the downloader sends an event to see if the user canceled the download using the ProgressMonitor's cancel
+- * button.  In that case, the downloader is notified that it should stop and will do so the next opportunity
+- * it gets.
+- * 
+- * @author manningr
+- */
+-public class DownloadStatusEventHandler implements DownloadStatusListener
+-{
+-
+-	/** I18n strings for this class */
+-	private static final StringManager s_stringMgr =
+-		StringManagerFactory.getStringManager(DownloadStatusEventHandler.class);
+-	
+-	/** Logger for this class. */
+-	private final static ILogger s_log = LoggerController.createLogger(DownloadStatusEventHandler.class);
+-
+-	private static interface i18n
+-	{
+-		// i18n[DownloadStatusEventHandler.downloadingUpdatesMsg=Downloading Files]
+-		String DOWNLOADING_UPDATES_MSG = s_stringMgr.getString("DownloadStatusEventHandler.downloadingUpdatesMsg");
+-
+-		// i18n[DownloadStatusEventHandler.changesRecordedTitle=Changes Recorded]
+-		String CHANGES_RECORDED_TITLE = s_stringMgr.getString("DownloadStatusEventHandler.changesRecordedTitle");
+-
+-		// i18n[DownloadStatusEventHandler.changesRecordedMsg=Requested changes will be made when
+-		// SQuirreL is restarted]
+-		String CHANGES_RECORDED_MSG = s_stringMgr.getString("DownloadStatusEventHandler.changesRecordedMsg");
+-
+-		// i18n[DownloadStatusEventHandler.updateDownloadFailedTitle=Update Download Failed]
+-		String UPDATE_DOWNLOAD_FAILED_TITLE =
+-			s_stringMgr.getString("DownloadStatusEventHandler.updateDownloadFailedTitle");
+-
+-		// i18n[DownloadStatusEventHandler.updateDownloadFailedMsg=Please consult the log for details]
+-		String UPDATE_DOWNLOAD_FAILED_MSG =
+-			s_stringMgr.getString("DownloadStatusEventHandler.updateDownloadFailedMsg");
+-
+-	   // i18n[DownloadStatusEventHandler.fileLabel=File]
+-		String FILE_LABEL = 
+-			s_stringMgr.getString("DownloadStatusEventHandler.fileLabel");
+-	}
+-
+-	ProgressMonitor progressMonitor = null;
+-
+-	int currentFile = 0;
+-
+-	int totalFiles = 0;
+-
+-	private ArtifactDownloader downloader = null;
+-
+-	private UpdateController controller = null;
+-
+-	public DownloadStatusEventHandler(UpdateController controller)
+-	{
+-		this.controller = controller;
+-	}
+-
+-	/**
+-	 * @param downloader the artifact downloader that will be sending events
+-	 */
+-	public void setDownloader(ArtifactDownloader downloader)
+-	{
+-		this.downloader = downloader;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusListener#
+-	 *     
+-	 *     
+-	 *      handleDownloadStatusEvent(net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusEvent)
+-	 */
+-	public void handleDownloadStatusEvent(DownloadStatusEvent evt)
+-	{
+-		logDebug("handleDownloadStatusEvent: processing event: "+evt);
+-		
+-		if (progressMonitor != null && progressMonitor.isCanceled())
+-		{
+-			downloader.stopDownload();
+-			return;
+-		}
+-		if (evt.getType() == DownloadEventType.DOWNLOAD_STARTED)
+-		{
+-			totalFiles = evt.getFileCountTotal();
+-			currentFile = 0;
+-			handleDownloadStarted();
+-		}
+-		if (evt.getType() == DownloadEventType.DOWNLOAD_FILE_STARTED)
+-		{
+-			setNote(i18n.FILE_LABEL + ": " + evt.getFilename());
+-		}
+-
+-		if (evt.getType() == DownloadEventType.DOWNLOAD_FILE_COMPLETED)
+-		{
+-			setProgress(++currentFile);
+-		}
+-
+-		if (evt.getType() == DownloadEventType.DOWNLOAD_STOPPED)
+-		{
+-			setProgress(totalFiles);
+-		}
+-
+-		// When all updates are retrieved, tell the user that the updates will be installed upon the
+-		// next startup.
+-		if (evt.getType() == DownloadEventType.DOWNLOAD_COMPLETED)
+-		{
+-			controller.showMessage(i18n.CHANGES_RECORDED_TITLE, i18n.CHANGES_RECORDED_MSG);
+-			setProgress(totalFiles);
+-		}
+-		if (evt.getType() == DownloadEventType.DOWNLOAD_FAILED)
+-		{
+-			controller.showErrorMessage(i18n.UPDATE_DOWNLOAD_FAILED_TITLE, i18n.UPDATE_DOWNLOAD_FAILED_MSG);
+-			setProgress(totalFiles);
+-		}
+-	}
+-
+-	private void setProgress(final int value)
+-	{
+-		logDebug("setProgress: value=", value);
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-			public void run()
+-			{
+-				progressMonitor.setProgress(value);
+-			}
+-		});
+-	}
+-
+-	private void setNote(final String note)
+-	{
+-		logDebug("setNote: value=", note);
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-			public void run()
+-			{
+-				progressMonitor.setNote(note);
+-			}
+-		});
+-	}
+-
+-	private void handleDownloadStarted()
+-	{
+-		logDebug("handleDownloadStarted: launching progress monitor");
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-			public void run()
+-			{
+-				final JFrame frame = controller.getMainFrame();
+-				progressMonitor =
+-					new ProgressMonitor(frame, i18n.DOWNLOADING_UPDATES_MSG, i18n.DOWNLOADING_UPDATES_MSG, 0,
+-						totalFiles);
+-				setProgress(0);
+-			}
+-		});
+-	}
+-
+-	private void logDebug(Object ... msgs) {
+-		StringBuilder tmp = new StringBuilder();
+-		for (Object msg : msgs) {
+-			tmp.append(msg.toString());
+-		}
+-		if (s_log.isDebugEnabled()) {
+-			s_log.debug(tmp.toString());
+-		}
+-	}
+-	
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/UpdateChannel.java
++++ /dev/null
+@@ -1,36 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-/**
+- * The types of update channels supported by the update manager
+- * 
+- * @author manningr
+- */
+-public enum UpdateChannel {
+-
+-   /* Channel that provides stable release updates */
+-   STABLE,
+-
+-   /*
+-    * Channel that provides snapshot release updates - more frequent and less
+-    * stable
+-    */
+-   SNAPSHOT
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/UpdateCheckFrequency.java
++++ /dev/null
+@@ -1,70 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-/**
+- * An enum class that represents possible user choices for how often to check to see if the software is
+- * current.
+- */
+-public enum UpdateCheckFrequency
+-{
+-	DAILY, // Check once a day
+-	WEEKLY, // Check once a week
+-	STARTUP; // check every time the app launches
+-
+-	/** time in milliseconds for one day */
+-	public long DAY_DURATION = 1000 * 60 * 60 * 24;
+-
+-	/** time in milliseconds for one week */
+-	public long WEEK_DURATION = 7 * DAY_DURATION;
+-
+-	/**
+-	 * Returns a boolean value indicating whether or not it is time to check for updates
+-	 * 
+-	 * @param delta
+-	 *           the time between the last update check and now.
+-	 * @return true if DAILY update check frequency and delta exceeds DAY_DURATION and true if WEEKLY update
+-	 *         check frequency and delta exceeds WEEK_DURATION; false is returned otherwise.
+-	 */
+-	public boolean isTimeForUpdateCheck(long delta)
+-	{
+-		if (this == DAILY && delta > DAY_DURATION) { return true; }
+-		if (this == WEEKLY && delta > WEEK_DURATION) { return true; }
+-		return false;
+-	}
+-
+-	/**
+-	 * Returns a type-safe enum for the specified value.
+-	 * 
+-	 * @param value
+-	 *           can be a case-insensitive string value corresponding to a value in this Enum (e.g "daily",
+-	 *           "weekly", or "startup".
+-	 * @return an UpdateCheckFrequncy instance.
+-	 * @throws IllegalArgumentException
+-	 *            if the parameter doesn't match (ignoring case) any of the values in this Enum
+-	 */
+-	public static UpdateCheckFrequency getEnumForString(String value)
+-	{
+-		if ("daily".equalsIgnoreCase(value)) { return UpdateCheckFrequency.DAILY; }
+-		if ("startup".equalsIgnoreCase(value)) { return UpdateCheckFrequency.STARTUP; }
+-		if ("weekly".equalsIgnoreCase(value)) { return UpdateCheckFrequency.WEEKLY; }
+-		throw new IllegalArgumentException("Uknown update check frequency: " + value);
+-
+-	}
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/UpdateController.java
++++ /dev/null
+@@ -1,120 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-import java.util.List;
+-
+-import javax.swing.JFrame;
+-
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-
+-/**
+- * This interface allows the update summary view to send messages to the 
+- * controller based on the user's interaction with the view.  This allows the 
+- * view to be completely unaware of the UpdateController's implementation; the 
+- * business logic is separated from the view.  Any logic that doesn't directly 
+- * affect the view in some way, should be located in this interface.
+- * 
+- * @author manningr
+- */
+-public interface UpdateController {
+-
+-   /**
+-    * Returns a boolean value indicating whether or not there are updates
+-    * available to be installed. The sequence of steps involved is :
+-    * 
+-    * 1. Find the local release.xml file 
+-    * 2. Load the local release.xml file as a ChannelXmlBean. 
+-    * 3. Determine the channel that the user has (stable or snapshot) 
+-    * 4. Get the release.xml file as a ChannelXmlBean from the server
+-    * 5. Determine if it is the same as the local copy, which was placed either
+-    * by the installer or the last update?
+-    * 
+-    * @return true if the installed software is latest; false otherwise.
+-    */
+-   //boolean isUpToDate() throws Exception;
+-
+-   String getUpdateServerName();
+-
+-   String getUpdateServerPort();
+-
+-   String getUpdateServerPath();
+-
+-   String getUpdateServerChannel();
+-
+-   int getUpdateServerPortAsInt();
+-
+-   void showMessage(String title, String msg);
+-
+-   boolean showConfirmMessage(String title, String msg);   
+-   
+-   void showErrorMessage(String title, String msg, Exception e);
+-   
+-   void showErrorMessage(String title, String msg);
+-   
+-   void showUpdateDialog();
+-   
+-   /**
+-    * Ask the UpdateController to check for updated artifacts.
+-    */
+-   void checkUpToDate();
+-   
+-   /**
+-    * The user wishes to add/update/remove the specified list of Artifacts. Each
+-    * artifact status specifies the user's desired action. This will :
+-    * 
+-    * 1. Persist the list of actions to a change list file in the update dir.
+-    * 2. Start a background thread to retrieve each update file from the server.
+-    * 3. When downloading is complete, ask the user if they want to install now.
+-    * 4. If the user wants to install now :
+-    *    a. Backup files that will be removed/updated.
+-    *    b. shutdown and launch the updater
+-    *    c. Updater installs updated files
+-    *    d. SQuirreL starts again.
+-    *    
+-    * @param artifactStatusList the list of changes to make to 
+-    *                           installed/available artifacts. 
+-    * @param releaseVersionWillChange a boolean value indicating whether or not the changes being applied will
+-    * 										  change the installed release version
+-    */
+-   void applyChanges(List<ArtifactStatus> artifactStatusList, boolean releaseVersionWillChange);
+-   
+-   /**
+-    * Returns a boolean value to indicate whether or not the user wants to use 
+-    * a remote site.  If this is false, it is assumed to mean that the user 
+-    * wants to specify a local directory on the filesystem
+-    * 
+-    * @return true if remote site; false otherwise.
+-    */   
+-   boolean isRemoteUpdateSite();
+-
+-   /**
+-    * 
+-    * @return
+-    */
+-	public boolean isTimeToCheckForUpdates();
+-
+-	public void promptUserToDownloadAvailableUpdates();
+-
+-	public JFrame getMainFrame();
+-
+-	
+-
+-      
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/UpdateControllerFactory.java
++++ /dev/null
+@@ -1,38 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloaderFactory;
+-import net.sourceforge.squirrel_sql.fw.gui.JOptionPaneService;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactory;
+-
+-public interface UpdateControllerFactory
+-{
+-	/**
+-	 * @param app
+-	 * @param downloaderFactory
+-	 * @param util
+-	 * @param jOptionPaneService
+-	 * @param fileWrapperFactory
+-	 * @return
+-	 */
+-	UpdateController createUpdateController(IApplication app, ArtifactDownloaderFactory downloaderFactory,
+-		UpdateUtil util, JOptionPaneService jOptionPaneService, FileWrapperFactory fileWrapperFactory);
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/UpdateControllerFactoryImpl.java
++++ /dev/null
+@@ -1,46 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloaderFactory;
+-import net.sourceforge.squirrel_sql.fw.gui.JOptionPaneService;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactory;
+-
+-public class UpdateControllerFactoryImpl implements UpdateControllerFactory
+-{
+-
+-	private static UpdateControllerImpl _instance = null;
+-
+-	public UpdateController createUpdateController(IApplication app,
+-		ArtifactDownloaderFactory downloaderFactory, UpdateUtil util, JOptionPaneService jOptionPaneService,
+-		FileWrapperFactory fileWrapperFactory)
+-	{
+-		if (_instance == null)
+-		{
+-			_instance = new UpdateControllerImpl(app);
+-			_instance.setArtifactDownloaderFactory(downloaderFactory);
+-			_instance.setUpdateUtil(util);
+-			_instance.setJOptionPaneService(jOptionPaneService);
+-			_instance.setFileWrapperFactory(fileWrapperFactory);
+-		}
+-		return _instance;
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/UpdateControllerImpl.java
++++ /dev/null
+@@ -1,675 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-import static java.lang.System.currentTimeMillis;
+-import static net.sourceforge.squirrel_sql.client.update.UpdateUtil.RELEASE_XML_FILENAME;
+-import static net.sourceforge.squirrel_sql.fw.util.Utilities.checkNull;
+-
+-import java.io.FileNotFoundException;
+-import java.util.ArrayList;
+-import java.util.HashSet;
+-import java.util.List;
+-import java.util.Set;
+-
+-import javax.swing.JFrame;
+-import javax.swing.JOptionPane;
+-
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.client.plugin.IPluginManager;
+-import net.sourceforge.squirrel_sql.client.plugin.PluginInfo;
+-import net.sourceforge.squirrel_sql.client.preferences.GlobalPreferencesActionListener;
+-import net.sourceforge.squirrel_sql.client.preferences.GlobalPreferencesSheet;
+-import net.sourceforge.squirrel_sql.client.preferences.IUpdateSettings;
+-import net.sourceforge.squirrel_sql.client.preferences.UpdatePreferencesPanel;
+-import net.sourceforge.squirrel_sql.client.update.async.ReleaseFileUpdateCheckTask;
+-import net.sourceforge.squirrel_sql.client.update.async.UpdateCheckRunnableCallback;
+-import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader;
+-import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloaderFactory;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-import net.sourceforge.squirrel_sql.client.update.gui.CheckUpdateListener;
+-import net.sourceforge.squirrel_sql.client.update.gui.UpdateManagerDialog;
+-import net.sourceforge.squirrel_sql.client.update.gui.UpdateSummaryDialog;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChannelXmlBean;
+-import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
+-import net.sourceforge.squirrel_sql.fw.gui.IJOptionPaneService;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactory;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-/**
+- * This class implements the business logic needed by the view (UpdateManagerDialog), to let the user install
+- * new or updated software (the model)
+- * 
+- * @author manningr
+- */
+-public class UpdateControllerImpl implements UpdateController, CheckUpdateListener
+-{
+-
+-	/** This is the pattern that all translation jars (i18n) begin with */
+-	public static final String TRANSLATION_JAR_PREFIX = "squirrel-sql_";
+-
+-	/** Logger for this class. */
+-	private static final ILogger s_log = LoggerController.createLogger(UpdateControllerImpl.class);
+-
+-	/** I18n strings for this class */
+-	private static final StringManager s_stringMgr =
+-		StringManagerFactory.getStringManager(UpdateControllerImpl.class);
+-
+-	/** the application and services it provides */
+-	private IApplication _app = null;
+-
+-	/** utility class for low-level update routines */
+-	private UpdateUtil _util = null;
+-
+-	/** the release that we downloaded when we last checked */
+-	private ChannelXmlBean _currentChannelBean = null;
+-
+-	/** the release we had installed the last time we checked / updated */
+-	private ChannelXmlBean _installedChannelBean = null;
+-
+-	/** Used to be able to bring the update dialog back up after re-config */
+-	private static GlobalPrefsListener listener = null;
+-
+-	/** The class that we use which is responsible for downloading artifacts */
+-	private ArtifactDownloader _downloader = null;
+-
+-	private ArtifactDownloaderFactory _downloaderFactory = null;
+-
+-	/** Service that allows this class to safely present informative JOptionPanes to the user */
+-	private IJOptionPaneService _jOptionPaneService = null;
+-
+-	/** Factory for creating FileWrapper objects */
+-	private FileWrapperFactory fileWrapperFactory = null;
+-
+-	static interface i18n
+-	{
+-
+-		// i18n[UpdateControllerImpl.exceptionMsg=Exception was: ]
+-		String EXCEPTION_MSG = s_stringMgr.getString("UpdateControllerImpl.exceptionMsg");
+-
+-		// i18n[UpdateControllerImpl.updateCheckFailedTitle=Update Check Failed]
+-		String UPDATE_CHECK_FAILED_TITLE = s_stringMgr.getString("UpdateControllerImpl.updateCheckFailedTitle");
+-
+-		// i18n[UpdateControllerImpl.softwareVersionCurrentMsg=This software's version is the most recent]
+-		String SOFTWARE_VERSION_CURRENT_MSG =
+-			s_stringMgr.getString("UpdateControllerImpl.softwareVersionCurrentMsg");
+-
+-		// i18n[UpdateControllerImpl.updateCheckTitle=Update Check]
+-		String UPDATE_CHECK_TITLE = s_stringMgr.getString("UpdateControllerImpl.updateCheckTitle");
+-
+-		// i18n[UpdateControllerImpl.changesRecordedTitle=Changes Recorded]
+-		String CHANGES_RECORDED_TITLE = s_stringMgr.getString("UpdateControllerImpl.changesRecordedTitle");
+-
+-		// i18n[UpdateControllerImpl.changesRecordedMsg=Requested changes will be made when
+-		// SQuirreL is restarted]
+-		String CHANGES_RECORDED_MSG = s_stringMgr.getString("UpdateControllerImpl.changesRecordedMsg");
+-
+-		// i18n[UpdateControllerImpl.releaseFileDownloadFailedMsg=Release file couldn't be downloaded. Please
+-		// check your settings.]
+-		String RELEASE_FILE_DOWNLOAD_FAILED_MSG =
+-			s_stringMgr.getString("UpdateControllerImpl.releaseFileDownloadFailedMsg");
+-
+-		// i18n[UpdateControllerImpl.promptToDownloadAvailableUpdatesMsg=There are updates available.
+-		// Do you want to download them now?]
+-		String PROMPT_TO_DOWNLOAD_AVAILABLE_UPDATES_MSG =
+-			s_stringMgr.getString("UpdateControllerImpl.promptToDownloadAvailableUpdatesMsg");
+-
+-		// i18n[UpdateControllerImpl.promptToDownloadAvailableUpdatesTitle=Updates Available]
+-		String PROMPT_TO_DOWNLOAD_AVAILABLE_UPDATES_TITLE =
+-			s_stringMgr.getString("UpdateControllerImpl.promptToDownloadAvailableUpdatesTitle");
+-
+-	}
+-
+-	/**
+-	 * Constructor
+-	 * 
+-	 * @param app
+-	 *           the application and services it provides
+-	 */
+-	public UpdateControllerImpl(IApplication app)
+-	{
+-		_app = app;
+-		if (listener == null)
+-		{
+-			listener = new GlobalPrefsListener();
+-			GlobalPreferencesSheet.addGlobalPreferencesActionListener(listener);
+-		}
+-	}
+-
+-	/**
+-	 * @param factory
+-	 */
+-	public void setArtifactDownloaderFactory(ArtifactDownloaderFactory factory)
+-	{
+-		checkNull("setArtifactDownloaderFactory", "factory", factory);
+-		this._downloaderFactory = factory;
+-	}
+-
+-	/**
+-	 * Sets the utility class for low-level update routines
+-	 * 
+-	 * @param util
+-	 *           the Update utility class to use.
+-	 */
+-	public void setUpdateUtil(UpdateUtil util)
+-	{
+-		checkNull("setUpdateUtil","util", util);
+-		this._util = util;
+-		_util.setPluginManager(_app.getPluginManager());
+-	}
+-
+-	/**
+-	 * Setter to allow injection of the service implementation.
+-	 * 
+-	 * @param jOptionPaneService
+-	 *           the non-static service that handles JOptionPane's static calls.
+-	 */
+-	public void setJOptionPaneService(IJOptionPaneService jOptionPaneService)
+-	{
+-		checkNull("setJOptionPaneService","jOptionPaneService", jOptionPaneService);
+-		this._jOptionPaneService = jOptionPaneService;
+-	}
+-
+-	/**
+-	 * @param fileWrapperFactory
+-	 *           the fileFileWrapperFactory to set
+-	 */
+-	public void setFileWrapperFactory(FileWrapperFactory fileWrapperFactory)
+-	{
+-		checkNull("setFileWrapperFactory","fileWrapperFactory", fileWrapperFactory);
+-		this.fileWrapperFactory = fileWrapperFactory;
+-	}
+-	
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#showUpdateDialog()
+-	 */
+-	public void showUpdateDialog()
+-	{
+-		final JFrame parent = _app.getMainFrame();
+-		final IUpdateSettings settings = getUpdateSettings();
+-		final boolean isRemoteUpdateSite = settings.isRemoteUpdateSite();
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-
+-			@Override
+-			public void run()
+-			{
+-				UpdateManagerDialog dialog = new UpdateManagerDialog(parent, isRemoteUpdateSite);
+-				if (isRemoteUpdateSite)
+-				{
+-					dialog.setUpdateServerName(settings.getUpdateServer());
+-					dialog.setUpdateServerPort(settings.getUpdateServerPort());
+-					dialog.setUpdateServerPath(settings.getUpdateServerPath());
+-					dialog.setUpdateServerChannel(settings.getUpdateServerChannel());
+-				}
+-				else
+-				{
+-					dialog.setLocalUpdatePath(settings.getFileSystemUpdatePath());
+-				}
+-				dialog.addCheckUpdateListener(UpdateControllerImpl.this);
+-				dialog.setVisible(true);
+-			}
+-		});
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#isUpToDate()
+-	 */
+-	public boolean isUpToDate() throws Exception
+-	{
+-
+-		IUpdateSettings settings = getUpdateSettings();
+-
+-		// 1. Find the local release.xml file
+-		String releaseFilename = _util.getLocalReleaseFile().getAbsolutePath();
+-
+-		// 2. Load the local release.xml file as a ChannelXmlBean.
+-		_installedChannelBean = _util.getLocalReleaseInfo(releaseFilename);
+-
+-		// 4. Get the release.xml file as a ChannelXmlBean from the server or
+-		// filesystem.
+-		if (settings.isRemoteUpdateSite())
+-		{
+-			// 4a. Determine the channel that the user wants (stable or snapshot)
+-			String channelName = getDesiredChannel(settings);
+-
+-			StringBuilder releasePath = new StringBuilder("/");
+-			releasePath.append(getUpdateServerPath());
+-			releasePath.append("/");
+-			releasePath.append(channelName);
+-			releasePath.append("/");
+-
+-			_currentChannelBean =
+-				_util.downloadCurrentRelease(getUpdateServerName(), getUpdateServerPortAsInt(),
+-					releasePath.toString(), RELEASE_XML_FILENAME, _app.getSquirrelPreferences().getProxySettings());
+-		}
+-		else
+-		{
+-			// 4b. Copy the release.xml file to the download directory then load the current release channel bean 
+-			FileWrapper updateSiteReleaseXmlFilePath =
+-				fileWrapperFactory.create(settings.getFileSystemUpdatePath(), RELEASE_XML_FILENAME);
+-			FileWrapper downloadReleaseXmlFile = 
+-				fileWrapperFactory.create(_util.getDownloadsDir(), RELEASE_XML_FILENAME);
+-			_util.copyFile(updateSiteReleaseXmlFilePath, downloadReleaseXmlFile);
+-			_currentChannelBean = _util.loadUpdateFromFileSystem(settings.getFileSystemUpdatePath());
+-		}
+-
+-		settings.setLastUpdateCheckTimeMillis("" + currentTimeMillis());
+-		saveUpdateSettings(settings);
+-
+-		// 5. Is it the same as the local copy, which was placed either by the
+-		// installer or the last update?
+-		return _currentChannelBean.equals(_installedChannelBean);
+-	}
+-
+-	/**
+-	 * This method takes a look at preference for channel and the channel that the user currently has installed
+-	 * and logs an info if switching from one to channel to another.
+-	 * 
+-	 * @return the name of the channel that the user wants.
+-	 */
+-	private String getDesiredChannel(final IUpdateSettings settings)
+-	{
+-		String desiredChannel = settings.getUpdateServerChannel().toLowerCase();
+-		String currentChannelName = _installedChannelBean.getName();
+-
+-		if (!currentChannelName.equals(desiredChannel))
+-		{
+-			if (s_log.isInfoEnabled())
+-			{
+-				s_log.info("getDesiredChannel: User is switching distribution channel from "
+-					+ "installed channel (" + currentChannelName + ") to new channel (" + desiredChannel + ")");
+-			}
+-		}
+-		return desiredChannel;
+-	}
+-
+-	/**
+-	 * Returns a set of plugins (internal names) of plugins that are currently installed (regardless of whether
+-	 * or not they are enabled).
+-	 * 
+-	 * @return a set of plugin internal names
+-	 */
+-	public Set<String> getInstalledPlugins()
+-	{
+-		Set<String> result = new HashSet<String>();
+-		IPluginManager pmgr = _app.getPluginManager();
+-		PluginInfo[] infos = pmgr.getPluginInformation();
+-		for (PluginInfo info : infos)
+-		{
+-			result.add(info.getInternalName());
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * Go get the files that need to be updated. The specified list could have new files to get (INSTALL),
+-	 * existing files to remove (REMOVE). This method's only concern is with fetching the new artifacts to be
+-	 * installed.
+-	 */
+-	public void pullDownUpdateFiles(List<ArtifactStatus> artifactStatusList,
+-		DownloadStatusEventHandler handler, boolean releaseVersionWillChange)
+-	{
+-
+-		List<ArtifactStatus> newartifactsList = new ArrayList<ArtifactStatus>();
+-
+-		for (ArtifactStatus status : artifactStatusList)
+-		{
+-			if (status.getArtifactAction() == ArtifactAction.INSTALL)
+-			{
+-				newartifactsList.add(status);
+-			}
+-		}
+-
+-		if (newartifactsList.size() > 0)
+-		{
+-			_downloader = _downloaderFactory.create(newartifactsList);
+-			_downloader.setUtil(_util);
+-			_downloader.setProxySettings(_app.getSquirrelPreferences().getProxySettings());
+-			_downloader.setIsRemoteUpdateSite(isRemoteUpdateSite());
+-			_downloader.setHost(getUpdateServerName());
+-			_downloader.setPort(Integer.parseInt(getUpdateServerPort()));
+-			_downloader.setPath(getUpdateServerPath());
+-			_downloader.setFileSystemUpdatePath(getUpdateSettings().getFileSystemUpdatePath());
+-			_downloader.addDownloadStatusListener(handler);
+-			_downloader.setReleaseVersionWillChange(releaseVersionWillChange);
+-			handler.setDownloader(_downloader);
+-			_downloader.setChannelName(getUpdateServerChannel().toLowerCase());
+-			_downloader.start();
+-		}
+-		else
+-		{
+-			showMessage(i18n.CHANGES_RECORDED_TITLE, i18n.CHANGES_RECORDED_MSG);
+-		}
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#getUpdateServerChannel()
+-	 */
+-	public String getUpdateServerChannel()
+-	{
+-		return getUpdateSettings().getUpdateServerChannel();
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#getUpdateServerName()
+-	 */
+-	public String getUpdateServerName()
+-	{
+-		return getUpdateSettings().getUpdateServer();
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#isRemoteUpdateSite()
+-	 */
+-	public boolean isRemoteUpdateSite()
+-	{
+-		return getUpdateSettings().isRemoteUpdateSite();
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#getUpdateServerPath()
+-	 */
+-	public String getUpdateServerPath()
+-	{
+-		return getUpdateSettings().getUpdateServerPath();
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#getUpdateServerPort()
+-	 */
+-	public String getUpdateServerPort()
+-	{
+-		return getUpdateSettings().getUpdateServerPort();
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#getUpdateServerPortAsInt()
+-	 */
+-	public int getUpdateServerPortAsInt()
+-	{
+-		return Integer.parseInt(getUpdateServerPort());
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController# showConfirmMessage(java.lang.String,
+-	 *      java.lang.String)
+-	 */
+-	public boolean showConfirmMessage(String title, String msg)
+-	{
+-		int result =
+-			_jOptionPaneService.showConfirmDialog(_app.getMainFrame(), msg, title, JOptionPane.YES_NO_OPTION,
+-				JOptionPane.QUESTION_MESSAGE);
+-		return (result == JOptionPane.YES_OPTION);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#showMessage(java.lang.String,
+-	 *      java.lang.String)
+-	 */
+-	public void showMessage(String title, String msg)
+-	{
+-		_jOptionPaneService.showMessageDialog(_app.getMainFrame(), msg, title, JOptionPane.INFORMATION_MESSAGE);
+-
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#showErrorMessage(java.lang.String,
+-	 *      java.lang.String)
+-	 */
+-	public void showErrorMessage(final String title, final String msg, final Exception e)
+-	{
+-		s_log.error(msg, e);
+-		_jOptionPaneService.showMessageDialog(_app.getMainFrame(), msg, title, JOptionPane.ERROR_MESSAGE);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#showErrorMessage(java.lang.String,
+-	 *      java.lang.String)
+-	 */
+-	public void showErrorMessage(String title, String msg)
+-	{
+-		showErrorMessage(title, msg, null);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#isTimeToCheckForUpdates()
+-	 */
+-	public boolean isTimeToCheckForUpdates()
+-	{
+-		IUpdateSettings settings = getUpdateSettings();
+-
+-		if (!settings.isEnableAutomaticUpdates()) { return false; }
+-
+-		long lastCheckTime = Long.parseLong(settings.getLastUpdateCheckTimeMillis());
+-		long delta = currentTimeMillis() - lastCheckTime;
+-
+-		UpdateCheckFrequency updateCheckFrequency = _util.getUpdateCheckFrequency(settings);
+-
+-		return updateCheckFrequency.isTimeForUpdateCheck(delta);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#promptUserToDownloadAvailableUpdates()
+-	 */
+-	public void promptUserToDownloadAvailableUpdates()
+-	{
+-		boolean userSaidYes =
+-			showConfirmMessage(i18n.PROMPT_TO_DOWNLOAD_AVAILABLE_UPDATES_TITLE,
+-				i18n.PROMPT_TO_DOWNLOAD_AVAILABLE_UPDATES_MSG);
+-		if (userSaidYes)
+-		{
+-			showUpdateDialog();
+-		}
+-		else
+-		{
+-			s_log.info("promptUserToDownloadAvailableUpdates: user decided not to download updates at "
+-				+ "this time (currentTimeMillis=" + System.currentTimeMillis() + ")");
+-		}
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#checkUpToDate()
+-	 */
+-	public void checkUpToDate()
+-	{
+-		UpdateCheckRunnableCallback callback = new UpdateCheckRunnableCallback()
+-		{
+-
+-			public void updateCheckComplete(final boolean isUpdateToDate,
+-				final ChannelXmlBean installedChannelXmlBean, final ChannelXmlBean currentChannelXmlBean)
+-			{
+-				GUIUtils.processOnSwingEventThread(new Runnable()
+-				{
+-					public void run()
+-					{
+-						if (isUpdateToDate)
+-						{
+-							showMessage(i18n.UPDATE_CHECK_TITLE, i18n.SOFTWARE_VERSION_CURRENT_MSG);
+-						}
+-						// build data
+-						_currentChannelBean = currentChannelXmlBean;
+-						_installedChannelBean = installedChannelXmlBean;
+-						List<ArtifactStatus> artifactStatusItems = _util.getArtifactStatus(_currentChannelBean);
+-						String installedVersion = _installedChannelBean.getCurrentRelease().getVersion();
+-						String currentVersion = _currentChannelBean.getCurrentRelease().getVersion();
+-
+-						// build ui
+-						showUpdateSummaryDialog(artifactStatusItems, installedVersion, currentVersion);
+-					}
+-
+-				});
+-			}
+-
+-			public void updateCheckFailed(final Exception e)
+-			{
+-				if (e == null)
+-				{
+-					showErrorMessage(i18n.UPDATE_CHECK_FAILED_TITLE, i18n.RELEASE_FILE_DOWNLOAD_FAILED_MSG);
+-				}
+-				else if (e instanceof FileNotFoundException)
+-				{
+-					String msg =
+-						s_stringMgr.getString("UpdateControllerImpl.localReleaseFileNotFound",
+-							_util.getSquirrelHomeDir() + "/" + UpdateUtil.LOCAL_UPDATE_DIR_NAME + "/"
+-								+ RELEASE_XML_FILENAME);
+-					showErrorMessage(i18n.UPDATE_CHECK_FAILED_TITLE, msg);
+-				}
+-				else
+-				{
+-					showErrorMessage(i18n.UPDATE_CHECK_FAILED_TITLE, i18n.EXCEPTION_MSG + e.getClass().getName()
+-						+ ":" + e.getMessage(), e);
+-				}
+-			}
+-
+-		};
+-
+-		ReleaseFileUpdateCheckTask runnable =
+-			new ReleaseFileUpdateCheckTask(callback, getUpdateSettings(), _util, _app);
+-		runnable.start();
+-
+-	}
+-
+-	private void showUpdateSummaryDialog(final List<ArtifactStatus> artifactStatusItems,
+-		final String installedVersion, final String currentVersion)
+-	{
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-
+-			public void run()
+-			{
+-				UpdateSummaryDialog dialog =
+-					new UpdateSummaryDialog(_app.getMainFrame(), artifactStatusItems, UpdateControllerImpl.this);
+-				dialog.setInstalledVersion(installedVersion);
+-				dialog.setAvailableVersion(currentVersion);
+-				GUIUtils.centerWithinParent(_app.getMainFrame());
+-				dialog.setVisible(true);
+-			}
+-
+-		});
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateController#applyChanges(java.util.List, boolean)
+-	 */
+-	public void applyChanges(List<ArtifactStatus> artifactStatusList, boolean releaseVersionWillChange)
+-	{
+-		try
+-		{
+-			// Persists the change list to the update directory.
+-			_util.saveChangeList(artifactStatusList);
+-
+-			// Kick off a thread to go and fetch the files one-by-one and register
+-			// callback class - DownloadStatusEventHandler
+-			pullDownUpdateFiles(artifactStatusList, new DownloadStatusEventHandler(this),
+-				releaseVersionWillChange);
+-		}
+-		catch (Exception e)
+-		{
+-			showErrorMessage(i18n.UPDATE_CHECK_FAILED_TITLE, i18n.EXCEPTION_MSG + e.getClass().getName() + ":"
+-				+ e.getMessage(), e);
+-		}
+-
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.CheckUpdateListener#showPreferences()
+-	 */
+-	public void showPreferences()
+-	{
+-		// 1. Wait for user to click ok/close
+-		listener.setWaitingForOk(true);
+-
+-		// 2. Display global preferences
+-		GlobalPreferencesSheet.showSheet(_app, UpdatePreferencesPanel.class);
+-
+-	}
+-
+-	public JFrame getMainFrame()
+-	{
+-		return _app.getMainFrame();
+-	}
+-
+-	/* Helper methods */
+-
+-	/**
+-	 * Returns the UpdateSettings from preferences.
+-	 * 
+-	 * @return
+-	 */
+-	private IUpdateSettings getUpdateSettings()
+-	{
+-		return _app.getSquirrelPreferences().getUpdateSettings();
+-	}
+-
+-	/**
+-	 * @param settings
+-	 */
+-	private void saveUpdateSettings(final IUpdateSettings settings)
+-	{
+-		_app.getSquirrelPreferences().setUpdateSettings(settings);
+-	}
+-
+-	private class GlobalPrefsListener implements GlobalPreferencesActionListener
+-	{
+-
+-		private boolean waitingForOk = false;
+-
+-		public void onDisplayGlobalPreferences()
+-		{
+-		}
+-
+-		public void onPerformClose()
+-		{
+-			showDialog();
+-		}
+-
+-		public void onPerformOk()
+-		{
+-			showDialog();
+-		}
+-
+-		/**
+-		 * Re-show the dialog if we were waiting for Ok/Close.
+-		 */
+-		private void showDialog()
+-		{
+-			// 2. When the user clicks ok, then display update dialog again.
+-			if (waitingForOk)
+-			{
+-				waitingForOk = false;
+-				showUpdateDialog();
+-			}
+-		}
+-
+-		/**
+-		 * @param waitingForOk
+-		 *           the waitingForOk to set
+-		 */
+-		public void setWaitingForOk(boolean waitingForOk)
+-		{
+-			this.waitingForOk = waitingForOk;
+-		}
+-	}
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/UpdateUtil.java
++++ /dev/null
+@@ -1,398 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-import java.io.FileNotFoundException;
+-import java.io.IOException;
+-import java.util.List;
+-import java.util.Set;
+-
+-import net.sourceforge.squirrel_sql.client.plugin.IPluginManager;
+-import net.sourceforge.squirrel_sql.client.preferences.IUpdateSettings;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChannelXmlBean;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ReleaseXmlBean;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-import net.sourceforge.squirrel_sql.fw.util.IProxySettings;
+-
+-public interface UpdateUtil
+-{
+-
+-	/**
+-	 * where we expect to find release.xml, which describes what the user has installed previously.
+-	 */
+-	public static final String LOCAL_UPDATE_DIR_NAME = "update";
+-
+-	/**
+-	 * The directory under the local update directory where previous versions of artifacts are saved for
+-	 * recovery purposes or if the user decides to revert to the previous version.
+-	 */
+-	public static final String BACKUP_ROOT_DIR_NAME = "backup";
+-
+-	/**
+-	 * The name of the release xml file that describes the installed version
+-	 */
+-	public static final String RELEASE_XML_FILENAME = "release.xml";
+-
+-	/**
+-	 * The name of the file that stores the user's desired actions with respect to a set of available updates.
+-	 */
+-	public static final String CHANGE_LIST_FILENAME = "changeList.xml";
+-
+-	/**
+-	 * This is the directory below the update directory where updated files are downloaded for installation.
+-	 */
+-	public final static String DOWNLOADS_DIR_NAME = "downloads";
+-
+-	/** the value for artifact type that identifies it as a core artifact */
+-	public static final String CORE_ARTIFACT_ID = "core";
+-
+-	/** the value for artifact type that identifies it as a plugin artifact */
+-	public static final String PLUGIN_ARTIFACT_ID = "plugin";
+-
+-	/** the value for artifact type that identifies it as a plugin artifact */
+-	public static final String TRANSLATION_ARTIFACT_ID = "i18n";
+-
+-	/** The SQuirreL jar that contains the core classes in the "app" module */
+-	public static final String SQUIRREL_SQL_JAR_FILENAME = "squirrel-sql.jar";
+-
+-	/** The documentation archive that contains all of core documentation - assume that top directory is doc */
+-	public static final String DOCS_ARCHIVE_FILENAME = "doc.zip";
+-
+-	/**
+-	 * Downloads the current release available at the specified host and path.
+-	 * 
+-	 * @param host
+-	 *           the host to open an HTTP connection to.
+-	 * @param port
+-	 *           the port to open an HTTP connection to.
+-	 * @param path
+-	 *           the path on the host's webserver to the file.
+-	 * @param fileToGet
+-	 *           the file to get.
+-	 * @return
+-	 */
+-	ChannelXmlBean downloadCurrentRelease(final String host, final int port, final String path,
+-		final String fileToGet, final IProxySettings proxySettings) throws Exception;
+-
+-	/**
+-	 * Loads the channel xml bean from the file system.
+-	 * 
+-	 * @param path
+-	 *           the directory to find release.xml in
+-	 * @return the ChannelXmlBean that represents the specified path.
+-	 */
+-	ChannelXmlBean loadUpdateFromFileSystem(final String path);
+-
+-	/**
+-	 * Downloads the specified file from the specified server and stores it by the same name in the specified
+-	 * destination directory.
+-	 * 
+-	 * @param host
+-	 *           the name of the server
+-	 * @param port
+-	 *           the port on the server
+-	 * @param fileToGet
+-	 *           the name of the file to download
+-	 * @param fileSize
+-	 *           the size of the file in bytes
+-	 * @param checksum
+-	 *           the checksum of the file
+-	 * @param proxySettings
+-	 *           information about the web-proxy to use if any
+-	 * @return a string representing the full local path to where the file was downloaded to
+-	 * @throws Exception
+-	 */
+-	String downloadHttpUpdateFile(String host, int port, String fileToGet, String destDir, long fileSize,
+-		long checksum, IProxySettings proxySettings) throws Exception;
+-
+-	/**
+-	 * Downloads the a file from a local directory into our update downloads directory.
+-	 * 
+-	 * @param fileToGet
+-	 *           the file to retreive.
+-	 * @param destDir
+-	 *           the destination directory into which to place the file.
+-	 * @return true if the download succeeded; false otherwise.
+-	 */
+-	boolean downloadLocalUpdateFile(String fileToGet, String destDir) throws FileNotFoundException,
+-		IOException;
+-
+-	/**
+-	 * Copies the specified from file to the specified to file. If "to" is a directory, then this will copy
+-	 * "from" into that directory and the resulting file will have the same name.
+-	 * 
+-	 * @param from
+-	 *           the file to copy from
+-	 * @param to
+-	 *           the file to copy to
+-	 */
+-	void copyFile(final FileWrapper from, final FileWrapper to) throws FileNotFoundException, IOException;
+-
+-
+-	/**
+-	 * Lists the specified fromDir and moves all of the files found in that directory that match the specified
+-	 * filePattern to the specified toDir
+-	 * directory.
+-	 * 
+-	 * @param fromDir
+-	 *           the directory to copy files from
+-	 * @param toDir
+-	 *           the directory to copy files to
+-	 * @throws FileNotFoundException
+-	 * @throws IOException
+-	 */
+-	void moveFiles(final FileWrapper fromDir, final String filePattern, boolean matchPattern,
+-		final FileWrapper toDir) throws FileNotFoundException, IOException;
+-
+-	
+-	/**
+-	 * Lists the specified fromDir and copies all of the files found in that directory to the specified toDir
+-	 * directory.
+-	 * 
+-	 * @param fromDir
+-	 *           the directory to copy files from
+-	 * @param toDir
+-	 *           the directory to copy files to
+-	 * @throws FileNotFoundException
+-	 * @throws IOException
+-	 */
+-	void copyDir(final FileWrapper fromDir, final FileWrapper toDir) throws FileNotFoundException, IOException;
+-
+-	/**
+-	 * Lists the specified fromDir and copies all of the files found in that directory to the specified toDir
+-	 * directory.
+-	 * 
+-	 * @param fromDir
+-	 *           the directory to copy files from
+-	 * @param filePattern
+-	 *           the pattern against which to compare the name of the file
+-	 * @param matchPattern
+-	 *           a boolean value indicating whether or not to match the specified file pattern. If true, then
+-	 *           only filenames that match the pattern are copied. If false, the only filenames that do not
+-	 *           match the pattern are copied.
+-	 * @param toDir
+-	 *           the directory to copy files to
+-	 * @throws FileNotFoundException
+-	 * @throws IOException
+-	 */
+-	void copyDir(final FileWrapper fromDir, final String filePattern, boolean matchPattern,
+-		final FileWrapper toDir) throws FileNotFoundException, IOException;
+-
+-	/**
+-	 * Returns an ChannelXmlBean that describes the locally installed release.
+-	 * 
+-	 * @param localReleaseFile
+-	 *           the xml file to decode into an xmlbean.
+-	 * @return a ChannelXmlBean
+-	 */
+-	ChannelXmlBean getLocalReleaseInfo(String localReleaseFile);
+-
+-	/**
+-	 * Returns the top-level directory in which all installed components of SQuirreL live under.
+-	 * 
+-	 * @return a File representing the home directory of SQuirreL
+-	 */
+-	FileWrapper getSquirrelHomeDir();
+-
+-	/**
+-	 * Returns the top-level directory in which all installed plugins of SQuirreL live under.
+-	 * 
+-	 * @return a File representing the plugins directory of SQuirreL
+-	 */
+-	FileWrapper getSquirrelPluginsDir();
+-
+-	/**
+-	 * Returns the top-level directory in which all core libraries (and possibly translations) of SQuirreL live
+-	 * under.
+-	 * 
+-	 * @return a File representing the core library directory of SQuirreL
+-	 */
+-	FileWrapper getSquirrelLibraryDir();
+-
+-	/**
+-	 * Returns the file that represents the list of changes to make when running the prelaunch update
+-	 * application
+-	 * 
+-	 * @return a File representing the change list.
+-	 */
+-	FileWrapper getChangeListFile();
+-
+-	FileWrapper checkDir(FileWrapper parent, String child);
+-
+-	void createZipFile(FileWrapper zipFile, FileWrapper... sourceFiles) throws FileNotFoundException,
+-		IOException;
+-
+-	/**
+-	 * Returns the update directory in which all information about available updates and the user's desired
+-	 * actions are located.
+-	 * 
+-	 * @return a File representing the update directory.
+-	 */
+-	FileWrapper getSquirrelUpdateDir();
+-
+-	/**
+-	 * Create and save a ChangeListXmlBean to the update directory.
+-	 * 
+-	 * @param changes
+-	 *           the list of changes to be persisted
+-	 * @throws FileNotFoundException
+-	 *            if the file to be written couldn't be found.
+-	 */
+-	void saveChangeList(List<ArtifactStatus> changes) throws FileNotFoundException;
+-
+-	/**
+-	 * Retrieves the change list (if one exists) from the update directory.
+-	 * 
+-	 * @return a change list bean.
+-	 * @throws FileNotFoundException
+-	 *            if the file couldn't be found.
+-	 */
+-	ChangeListXmlBean getChangeList() throws FileNotFoundException;
+-
+-	/**
+-	 * Returns the absolute path to the release xml file that describes what release the user currently has.
+-	 * 
+-	 * @return the absolute path to the release xml file
+-	 * @throws FileNotFoundException
+-	 *            if the release xml file couldn't be found.
+-	 */
+-	FileWrapper getLocalReleaseFile() throws FileNotFoundException;
+-
+-	/**
+-	 * Builds a list of ArtifactStatus objects from the specified ChannelXmlBean
+-	 * 
+-	 * @param channelXmlBean
+-	 *           the bean that represents the channel that the user is pulling updates from.
+-	 * @return a list of ArtifactStatus objects that describe all of the available artifacts from the specified
+-	 *         channel.
+-	 */
+-	List<ArtifactStatus> getArtifactStatus(ChannelXmlBean channelXmlBean);
+-
+-	List<ArtifactStatus> getArtifactStatus(ReleaseXmlBean releaseXmlBean);
+-
+-	/**
+-	 * Returns a set of plugin archive filenames - one for each installed plugin.
+-	 */
+-	Set<String> getInstalledPlugins();
+-
+-	/**
+-	 * Returns a set of translation filenames - one jar for each translation.
+-	 * 
+-	 * @return
+-	 */
+-	Set<String> getInstalledTranslations();
+-
+-	/**
+-	 * @return the _pluginManager
+-	 */
+-	IPluginManager getPluginManager();
+-
+-	/**
+-	 * @param manager
+-	 *           the _pluginManager to set
+-	 */
+-	void setPluginManager(IPluginManager manager);
+-
+-	/**
+-	 * Returns the top-level directory that contains artifact type sub-folders into which downloaded files are
+-	 * copied.
+-	 * 
+-	 * @return a File representing the root directory of the download tree.
+-	 */
+-	FileWrapper getDownloadsDir();
+-
+-	FileWrapper getCoreDownloadsDir();
+-
+-	FileWrapper getPluginDownloadsDir();
+-
+-	FileWrapper getI18nDownloadsDir();
+-
+-	FileWrapper getBackupDir();
+-
+-	FileWrapper getCoreBackupDir();
+-
+-	FileWrapper getPluginBackupDir();
+-
+-	FileWrapper getI18nBackupDir();
+-
+-	/**
+-	 * Returns the absolute path to the location of the squirrel-sql.jar file.
+-	 * 
+-	 * @return a File representing the current installed squirrel-sql.jar file.
+-	 */
+-	FileWrapper getInstalledSquirrelMainJarLocation();
+-
+-	ChangeListXmlBean getChangeList(FileWrapper changeListFile) throws FileNotFoundException;
+-
+-	FileWrapper getFile(FileWrapper installDir, String artifactName);
+-
+-	/**
+-	 * This function will recursivly delete directories and files.
+-	 * 
+-	 * @param path
+-	 *           File or Directory to be deleted
+-	 * @return true indicates success.
+-	 */
+-	boolean deleteFile(FileWrapper path);
+-
+-	/**
+-	 * Extracts the specified zip file to the specified output directory.
+-	 * 
+-	 * @param zipFile
+-	 *           the compressed archive file to extract
+-	 * @param outputDirectory
+-	 *           the directory into which to extract
+-	 * @throws IOException
+-	 *            if an error occurs
+-	 */
+-	void extractZipFile(FileWrapper zipFile, FileWrapper outputDirectory) throws IOException;
+-
+-	/**
+-	 * Returns the absolute path to the file in the downloads section for the specified ArtifactStatus
+-	 * 
+-	 * @param status
+-	 *           the ArtifactStatus that describes the type and name of this artifact.
+-	 * @return a File object representing the location of the artifact in the downloads directory.
+-	 */
+-	FileWrapper getDownloadFileLocation(ArtifactStatus status);
+-
+-	boolean isPresentInDownloadsDirectory(ArtifactStatus status);
+-
+-	/**
+-	 * Get the checksum for the specified file. This has a side effect in that it caches the checksum for
+-	 * speedier lookup on subsequent calls.
+-	 * 
+-	 * @param f
+-	 *           the file to get the checksum for
+-	 * @return the checksum as a long. If an error occurs, this method will return -1
+-	 */
+-	public long getCheckSum(FileWrapper f);
+-
+-	/**
+-	 * Returns an Enum value representing the users preference for how often to automatically check for
+-	 * updates.
+-	 * 
+-	 * @param settings
+-	 *           the settings to look in.
+-	 * @return the Enum value
+-	 */
+-	public UpdateCheckFrequency getUpdateCheckFrequency(IUpdateSettings settings);
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/UpdateUtilImpl.java
++++ /dev/null
+@@ -1,1097 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update;
+-
+-import java.io.FileInputStream;
+-import java.io.FileNotFoundException;
+-import java.io.FileOutputStream;
+-import java.io.IOException;
+-import java.io.InputStream;
+-import java.net.URL;
+-import java.util.ArrayList;
+-import java.util.Arrays;
+-import java.util.HashMap;
+-import java.util.HashSet;
+-import java.util.List;
+-import java.util.Set;
+-import java.util.zip.ZipEntry;
+-import java.util.zip.ZipInputStream;
+-import java.util.zip.ZipOutputStream;
+-
+-import net.sourceforge.squirrel_sql.client.ApplicationArguments;
+-import net.sourceforge.squirrel_sql.client.plugin.IPluginManager;
+-import net.sourceforge.squirrel_sql.client.plugin.PluginInfo;
+-import net.sourceforge.squirrel_sql.client.preferences.IUpdateSettings;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-import net.sourceforge.squirrel_sql.client.update.util.PathUtils;
+-import net.sourceforge.squirrel_sql.client.update.util.PathUtilsImpl;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ArtifactXmlBean;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChannelXmlBean;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ModuleXmlBean;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ReleaseXmlBean;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializer;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializerImpl;
+-import net.sourceforge.squirrel_sql.client.util.ApplicationFileWrappers;
+-import net.sourceforge.squirrel_sql.client.util.ApplicationFileWrappersImpl;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactory;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactoryImpl;
+-import net.sourceforge.squirrel_sql.fw.util.IOUtilities;
+-import net.sourceforge.squirrel_sql.fw.util.IOUtilitiesImpl;
+-import net.sourceforge.squirrel_sql.fw.util.IProxySettings;
+-import net.sourceforge.squirrel_sql.fw.util.StringUtilities;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-/**
+- * Low-level utility methods for the UpdateController.  Among other things this class provides file locations
+- * for important directories that are needed for backup/restore, installation/removal of updates and existing
+- * software. The following is a pictorial anatomy of the update directory.
+- * 
+- * SQUIRREL_SQL_HOME/
+- *   |
+- *   + update/ (root of the update hierarchy)
+- *       |
+- *       + backup/ (original files that are to be updated are copied here for recovery purposes)
+- *       |   |
+- *       |   + core/
+- *       |   |
+- *       |   + i18n/
+- *       |   |
+- *       |   + plugin/
+- *       |   
+- *       + downloads/
+- *       |   |
+- *       |   + core/
+- *       |   |
+- *       |   + i18n/
+- *       |   |
+- *       |   + plugin/
+- *       |
+- *       + changeList.xml (describes what is in downloads to be installed - deleted after update)
+- *       |
+- *       + release.xml (describes the release that is currently installed)
+- * 
+- * @author manningr
+- */
+-public class UpdateUtilImpl implements UpdateUtil
+-{
+-	// This class is used both inside and outside of SQuirreL (updater application).  When this class is used 
+-	// by the updater application, the SQuirreL Main class is not used, and so ApplicationArguments must be 
+-	// initialized here or else the logger initialization will fail.
+-	static {
+-		ApplicationArguments.getInstance();
+-	}
+-	/** Logger for this class. */
+-	private final static ILogger s_log = LoggerController.createLogger(UpdateUtilImpl.class);
+-
+-	/** the PluginManager that tells us what plugins are installed */
+-	private IPluginManager _pluginManager = null;
+-
+-	/** The size of the buffer to use when extracting files from a ZIP archive */
+-	public final static int ZIP_EXTRACTION_BUFFER_SIZE = 8192;
+-
+-	/**
+-	 * Since it can take a while to compute a checksum for large jars, here we cache them for later use. The
+-	 * key is the absolute path to the file. The value is it's checksum
+-	 */
+-	private HashMap<String, Long> fileChecksumMap = new HashMap<String, Long>();
+-
+-	/** TODO: Spring-inject when this class is a Spring bean */
+-	private PathUtils _pathUtils = new PathUtilsImpl();
+-
+-	public void setPathUtils(PathUtils pathUtils)
+-	{
+-		this._pathUtils = pathUtils;
+-	}
+-
+-	/** TODO: Spring-inject when this class is a Spring bean */
+-	private FileWrapperFactory _fileWrapperFactory = new FileWrapperFactoryImpl();
+-
+-	public void setFileWrapperFactory(FileWrapperFactory factory)
+-	{
+-		_fileWrapperFactory = factory;
+-	}
+-
+-	/** TODO: Spring-inject when this class is a Spring bean */
+-	private ApplicationFileWrappers _appFileWrappers = new ApplicationFileWrappersImpl();
+-
+-	public void setApplicationFileWrappers(ApplicationFileWrappers appFileWrappers)
+-	{
+-		_appFileWrappers = appFileWrappers;
+-	}
+-
+-	/** TODO: Spring-inject when this class is a Spring bean */
+-	private IOUtilities _iou = new IOUtilitiesImpl();
+-
+-	public void setIOUtilities(IOUtilities iou)
+-	{
+-		_iou = iou;
+-	}
+-
+-	/**
+-	 * the utility class that reads and writes release info from/to the release.xml file TODO: Spring-inject
+-	 * when this class is a Spring bean
+-	 */
+-	private UpdateXmlSerializer _serializer = new UpdateXmlSerializerImpl();
+-
+-	public void setUpdateXmlSerializer(UpdateXmlSerializer serializer)
+-	{
+-		_serializer = serializer;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getCheckSum(java.io.File)
+-	 */
+-	public long getCheckSum(FileWrapper f)
+-	{
+-		String absPath = f.getAbsolutePath();
+-
+-		Long result = -1L;
+-		if (fileChecksumMap.containsKey(absPath))
+-		{
+-			result = fileChecksumMap.get(absPath);
+-		}
+-		else
+-		{
+-			try
+-			{
+-				result = _iou.getCheckSum(f);
+-			}
+-			catch (IOException e)
+-			{
+-				s_log.error("getCheckSum: failed to compute the checksum for file (" + f.getAbsolutePath()
+-					+ "): " + e.getMessage(), e);
+-			}
+-			// -1 is stored if the checksum operation failed. This will ensure that comparison with any other
+-			// file's checksum will be different - even if they happen to be the same file.
+-			fileChecksumMap.put(absPath, result);
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#downloadCurrentRelease(java.lang.String, int,
+-	 *      java.lang.String, java.lang.String)
+-	 */
+-	public ChannelXmlBean downloadCurrentRelease(final String host, final int port, final String path,
+-		final String fileToGet, final IProxySettings proxySettings) throws Exception
+-	{
+-		ChannelXmlBean result = null;
+-		if (s_log.isDebugEnabled())
+-		{
+-			s_log.debug("downloadCurrentRelease: host=" + host + " port=" + port + " path=" + path
+-				+ " fileToGet=" + fileToGet);
+-		}
+-		result = downloadCurrentReleaseHttp(host, port, path, fileToGet, proxySettings);
+-		return result;
+-	}
+-
+-	/**
+-	 * Loads the channel xml bean from the file system.throw new IOException();
+-	 * 
+-	 * @param path
+-	 *           the directory to find release.xml in
+-	 * @return the ChannelXmlBean that represents the specified path.
+-	 */
+-	public ChannelXmlBean loadUpdateFromFileSystem(final String path)
+-	{
+-		ChannelXmlBean result = null;
+-		try
+-		{
+-			FileWrapper f = _fileWrapperFactory.create(path);
+-			if (!f.isDirectory())
+-			{
+-				s_log.error("FileSystem path (" + path + ") is not a directory.");
+-			}
+-			else
+-			{
+-				f = _fileWrapperFactory.create(f, RELEASE_XML_FILENAME);
+-				result = _serializer.readChannelBean(f);
+-			}
+-		}
+-		catch (IOException e)
+-		{
+-			s_log.error("Unexpected exception while attempting " + "load updates from filesystem path (" + path
+-				+ "): " + e.getMessage(), e);
+-		}
+-
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#downloadLocalUpdateFile(java.lang.String,
+-	 *      java.lang.String)
+-	 */
+-	public boolean downloadLocalUpdateFile(String fileToGet, String destDir) throws FileNotFoundException,
+-		IOException
+-	{
+-		boolean result = false;
+-		FileWrapper fromFile = _fileWrapperFactory.create(fileToGet);
+-		if (fromFile.isFile() && fromFile.canRead())
+-		{
+-			String filename = fromFile.getName();
+-			FileWrapper toFile = _fileWrapperFactory.create(destDir, filename);
+-			copyFile(fromFile, toFile);
+-			result = true;
+-		}
+-		else
+-		{
+-			s_log.error("File " + fileToGet + " doesn't appear to be readable");
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#copyFile(FileWrapper, FileWrapper)
+-	 */
+-	public void copyFile(final FileWrapper from, final FileWrapper to) throws FileNotFoundException,
+-		IOException
+-	{
+-		if (!from.exists())
+-		{
+-			s_log.error("Cannot copy from file (" + from.getAbsolutePath() + ") which doesn't appear to exist.");
+-			return;
+-		}
+-		FileWrapper toFile = to;
+-		// Check to see if to is a directory and convert toFile to be the name of the file in that directory.
+-		if (to.isDirectory())
+-		{
+-			toFile = getFile(to, from.getName());
+-		}
+-		if (s_log.isDebugEnabled())
+-		{
+-			s_log.debug("Copying from file (" + from.getAbsolutePath() + ") to file ("
+-				+ toFile.getAbsolutePath() + ")");
+-		}
+-		if (toFile.exists())
+-		{
+-			long fromCheckSum = getCheckSum(from);
+-			long toCheckSum = getCheckSum(toFile);
+-			if (fromCheckSum == toCheckSum)
+-			{
+-				if (s_log.isInfoEnabled())
+-				{
+-					s_log.info("File to be copied(" + from.getAbsolutePath() + ") has the same checksum("
+-						+ fromCheckSum + ") as the file to copy to (" + toFile.getAbsolutePath()
+-						+ "). Skipping copy.");
+-				}
+-				return;
+-			}
+-		}
+-		_iou.copyFile(from, toFile);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#copyDir(
+-	 * net.sourceforge.squirrel_sql.fw.util.FileWrapper,
+-	 *      java.lang.String, boolean, net.sourceforge.squirrel_sql.fw.util.FileWrapper)
+-	 */
+-	@Override
+-	public void moveFiles(FileWrapper fromDir, String filePattern, boolean matchPattern, FileWrapper toDir)
+-		throws FileNotFoundException, IOException
+-	{
+-		if (StringUtilities.isEmpty(filePattern)) {
+-			throw new IllegalArgumentException("filePattern arg cannot be empty or null");
+-		}
+-		if (!fromDir.isDirectory()) { throw new IllegalArgumentException("Expected fromDir("
+-			+ fromDir.getAbsolutePath() + ") to be a directory."); }
+-		if (!toDir.isDirectory()) { throw new IllegalArgumentException("Expected toDir("
+-			+ toDir.getAbsolutePath() + ") to be a directory."); }
+-
+-		List<FileWrapper> filesToMove = getFilterFileList(fromDir, filePattern, matchPattern);
+-		for (FileWrapper file : filesToMove) {
+-			copyFile(file, toDir);
+-			if (s_log.isDebugEnabled()) {
+-				s_log.debug("moveFiles: Attempting to delete file "+file.getAbsolutePath());
+-			}
+-			if (file.delete()) {
+-				s_log.error("moveFiles: Unable to delete file "+file.getAbsolutePath());
+-			}
+-			
+-		}
+-	}
+-	
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#copyDir(FileWrapper, FileWrapper)
+-	 */
+-	public void copyDir(FileWrapper fromDir, FileWrapper toDir) throws FileNotFoundException, IOException
+-	{
+-		verifyDirectory(fromDir, toDir);
+-		FileWrapper[] files = fromDir.listFiles();
+-		copyFiles(Arrays.asList(files), toDir);
+-	}
+-
+-	private void verifyDirectory(FileWrapper fromDir, FileWrapper toDir) {
+-		if (!fromDir.isDirectory()) { throw new IllegalArgumentException("Expected fromDir("
+-			+ fromDir.getAbsolutePath() + ") to be a directory."); }
+-		if (!toDir.isDirectory()) { throw new IllegalArgumentException("Expected toDir("
+-			+ toDir.getAbsolutePath() + ") to be a directory."); }		
+-	}
+-	
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#copyDir(
+-	 * net.sourceforge.squirrel_sql.fw.util.FileWrapper,
+-	 *      java.lang.String, boolean, net.sourceforge.squirrel_sql.fw.util.FileWrapper)
+-	 */
+-	@Override
+-	public void copyDir(FileWrapper fromDir, String filePattern, boolean matchPattern, FileWrapper toDir)
+-		throws FileNotFoundException, IOException
+-	{
+-		if (StringUtilities.isEmpty(filePattern)) {
+-			throw new IllegalArgumentException("filePattern arg cannot be empty or null");
+-		}
+-		verifyDirectory(fromDir, toDir);
+-		List<FileWrapper> filesToCopy = getFilterFileList(fromDir, filePattern, matchPattern);		
+-		copyFiles(filesToCopy, toDir);
+-	}
+-
+-	/**
+-	 * Builds a list of FileWrappers that represent each of the files in the specified fromDir whose name 
+-	 * matches or doesn't match the specified filePattern.  A true value for the matchPattern flag indicates
+-	 * that files which match the pattern should be included.  False indicates that only files that do not 
+-	 * match the pattern should be included. 
+-	 * 
+-	 * @param fromDir
+-	 * @param filePattern
+-	 * @param matchPattern
+-	 * @return
+-	 * @throws FileNotFoundException
+-	 * @throws IOException
+-	 */
+-	private List<FileWrapper> getFilterFileList(FileWrapper fromDir, String filePattern, boolean matchPattern) 
+-		throws FileNotFoundException, IOException
+-	{
+-		FileWrapper[] files = fromDir.listFiles();
+-		List<FileWrapper> filesToCopy = new ArrayList<FileWrapper>();
+-		
+-		
+-		for (FileWrapper sourceFile : files) {
+-			
+-			boolean fileNameMatchesPattern = sourceFile.getName().matches(filePattern);
+-			if (matchPattern && fileNameMatchesPattern) {
+-				filesToCopy.add(sourceFile);
+-			}
+-			if (!matchPattern && !fileNameMatchesPattern) {
+-				filesToCopy.add(sourceFile);
+-			}
+-		}		
+-		return filesToCopy;
+-	}
+-	
+-	/**
+-	 * Expects the toDir to be a directory.  This check should be made in the public method.
+-	 * @param files
+-	 * @param toDir
+-	 * @throws FileNotFoundException
+-	 * @throws IOException
+-	 */
+-	private void copyFiles(List<FileWrapper> files, FileWrapper toDir) 
+-		throws FileNotFoundException, IOException 
+-	{		
+-		for (FileWrapper sourceFile : files)
+-		{
+-			copyFile(sourceFile, toDir);
+-		}		
+-	}
+-	
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getLocalReleaseInfo(java.lang.String)
+-	 */
+-	public ChannelXmlBean getLocalReleaseInfo(String localReleaseFile)
+-	{
+-		ChannelXmlBean result = null;
+-		if (s_log.isDebugEnabled())
+-		{
+-			s_log.debug("Attempting to read local release file: " + localReleaseFile);
+-		}
+-		try
+-		{
+-			result = _serializer.readChannelBean(localReleaseFile);
+-		}
+-		catch (IOException e)
+-		{
+-			s_log.error("Unable to read local release file: " + e.getMessage(), e);
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getSquirrelHomeDir()
+-	 */
+-	public FileWrapper getSquirrelHomeDir()
+-	{
+-		FileWrapper squirrelHomeDir = _appFileWrappers.getSquirrelHomeDir();
+-		if (!squirrelHomeDir.isDirectory())
+-		{
+-			s_log.error("SQuirreL Home Directory (" + squirrelHomeDir.getAbsolutePath()
+-				+ " doesn't appear to be a directory");
+-		}
+-		return squirrelHomeDir;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getInstalledSquirrelMainJarLocation()
+-	 */
+-	public FileWrapper getInstalledSquirrelMainJarLocation()
+-	{
+-		return _fileWrapperFactory.create(getSquirrelHomeDir(), SQUIRREL_SQL_JAR_FILENAME);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getSquirrelPluginsDir()
+-	 */
+-	public FileWrapper getSquirrelPluginsDir()
+-	{
+-		FileWrapper squirrelHomeDir = _appFileWrappers.getPluginsDirectory();
+-		if (!squirrelHomeDir.isDirectory())
+-		{
+-			s_log.error("SQuirreL Plugins Directory (" + squirrelHomeDir.getAbsolutePath()
+-				+ " doesn't appear to be a directory");
+-		}
+-		return squirrelHomeDir;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getSquirrelLibraryDir()
+-	 */
+-	public FileWrapper getSquirrelLibraryDir()
+-	{
+-		FileWrapper squirrelLibDir = _appFileWrappers.getLibraryDirectory();
+-		if (!squirrelLibDir.isDirectory())
+-		{
+-			s_log.error("SQuirreL Library Directory (" + squirrelLibDir.getAbsolutePath()
+-				+ " doesn't appear to be a directory");
+-		}
+-		return squirrelLibDir;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getSquirrelUpdateDir()
+-	 */
+-	public FileWrapper getSquirrelUpdateDir()
+-	{
+-		return getDir(_appFileWrappers.getUpdateDirectory(), null, true);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getDownloadsDir()
+-	 */
+-	public FileWrapper getDownloadsDir()
+-	{
+-		return getDir(getSquirrelUpdateDir(), DOWNLOADS_DIR_NAME, true);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getCoreDownloadsDir()
+-	 */
+-	public FileWrapper getCoreDownloadsDir()
+-	{
+-		return getDir(getDownloadsDir(), CORE_ARTIFACT_ID, true);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getPluginDownloadsDir()
+-	 */
+-	public FileWrapper getPluginDownloadsDir()
+-	{
+-		return getDir(getDownloadsDir(), PLUGIN_ARTIFACT_ID, true);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getI18nDownloadsDir()
+-	 */
+-	public FileWrapper getI18nDownloadsDir()
+-	{
+-		return getDir(getDownloadsDir(), TRANSLATION_ARTIFACT_ID, true);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getBackupDir()
+-	 */
+-	public FileWrapper getBackupDir()
+-	{
+-		return getDir(getSquirrelUpdateDir(), BACKUP_ROOT_DIR_NAME, false);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getCoreBackupDir()
+-	 */
+-	public FileWrapper getCoreBackupDir()
+-	{
+-		return getDir(getBackupDir(), CORE_ARTIFACT_ID, false);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getI18nBackupDir()
+-	 */
+-	public FileWrapper getI18nBackupDir()
+-	{
+-		return getDir(getBackupDir(), TRANSLATION_ARTIFACT_ID, false);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getPluginBackupDir()
+-	 */
+-	public FileWrapper getPluginBackupDir()
+-	{
+-		return getDir(getBackupDir(), PLUGIN_ARTIFACT_ID, false);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getChangeListFile()
+-	 */
+-	public FileWrapper getChangeListFile()
+-	{
+-		FileWrapper updateDir = getSquirrelUpdateDir();
+-		FileWrapper changeListFile = _fileWrapperFactory.create(updateDir, CHANGE_LIST_FILENAME);
+-		return changeListFile;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#saveChangeList(java.util.List)
+-	 */
+-	public void saveChangeList(List<ArtifactStatus> changes) throws FileNotFoundException
+-	{
+-		ChangeListXmlBean changeBean = new ChangeListXmlBean();
+-		changeBean.setChanges(changes);
+-		_serializer.write(changeBean, getChangeListFile());
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getChangeList()
+-	 */
+-	public ChangeListXmlBean getChangeList() throws FileNotFoundException
+-	{
+-		return _serializer.readChangeListBean(getChangeListFile());
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getLocalReleaseFile()
+-	 */
+-	public FileWrapper getLocalReleaseFile() throws FileNotFoundException
+-	{
+-		FileWrapper result = null;
+-		try
+-		{
+-			FileWrapper[] files = getSquirrelHomeDir().listFiles();
+-			for (FileWrapper file : files)
+-			{
+-				if (LOCAL_UPDATE_DIR_NAME.equals(file.getName()))
+-				{
+-					FileWrapper[] updateFiles = file.listFiles();
+-					for (FileWrapper updateFile : updateFiles)
+-					{
+-						if (RELEASE_XML_FILENAME.equals(updateFile.getName()))
+-						{
+-							result = updateFile;
+-						}
+-					}
+-				}
+-			}
+-		}
+-		catch (Exception e)
+-		{
+-			s_log.error("getLocalReleaseFile: Exception encountered while " + "attempting to find "
+-				+ RELEASE_XML_FILENAME + " file");
+-		}
+-		if (result == null) { throw new FileNotFoundException("File " + RELEASE_XML_FILENAME
+-			+ " could not be found"); }
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getArtifactStatus(net.sourceforge.squirrel_sql.client.update.xmlbeans.ChannelXmlBean)
+-	 */
+-	public List<ArtifactStatus> getArtifactStatus(ChannelXmlBean channelXmlBean)
+-	{
+-
+-		ReleaseXmlBean releaseXmlBean = channelXmlBean.getCurrentRelease();
+-		return getArtifactStatus(releaseXmlBean);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#
+-	 *      getArtifactStatus(net.sourceforge.squirrel_sql.client.update.xmlbeans.ReleaseXmlBean)
+-	 */
+-	public List<ArtifactStatus> getArtifactStatus(ReleaseXmlBean releaseXmlBean)
+-	{
+-		Set<String> installedPlugins = getInstalledPlugins();
+-		Set<String> installedTranslations = getInstalledTranslations();
+-		ArrayList<ArtifactStatus> result = new ArrayList<ArtifactStatus>();
+-		Set<ModuleXmlBean> currentModuleBeans = releaseXmlBean.getModules();
+-		for (ModuleXmlBean module : currentModuleBeans)
+-		{
+-			Set<ArtifactXmlBean> artifactBeans = module.getArtifacts();
+-			String moduleName = module.getName();
+-			for (ArtifactXmlBean artifact : artifactBeans)
+-			{
+-				ArtifactStatus status = new ArtifactStatus(artifact);
+-				status.setType(moduleName);
+-				if (status.isCoreArtifact())
+-				{
+-					status.setInstalled(true);
+-				}
+-				if (status.isPluginArtifact() && installedPlugins.contains(artifact.getName()))
+-				{
+-					status.setInstalled(true);
+-				}
+-				if (status.isTranslationArtifact() && installedTranslations.contains(artifact.getName()))
+-				{
+-					status.setInstalled(true);
+-				}
+-				result.add(status);
+-			}
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getInstalledPlugins()
+-	 */
+-	public Set<String> getInstalledPlugins()
+-	{
+-		HashSet<String> result = new HashSet<String>();
+-
+-		for (PluginInfo info : _pluginManager.getPluginInformation())
+-		{
+-			result.add(info.getInternalName() + ".zip");
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getInstalledTranslations()
+-	 */
+-	public Set<String> getInstalledTranslations()
+-	{
+-		HashSet<String> result = new HashSet<String>();
+-		FileWrapper libDir = getSquirrelLibraryDir();
+-		for (String filename : libDir.list())
+-		{
+-			if (filename.startsWith("squirrel-sql_"))
+-			{
+-				result.add(filename);
+-			}
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getPluginManager()
+-	 */
+-	public IPluginManager getPluginManager()
+-	{
+-		return _pluginManager;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#setPluginManager(net.sourceforge.squirrel_sql.client.plugin.PluginManager)
+-	 */
+-	public void setPluginManager(IPluginManager manager)
+-	{
+-		_pluginManager = manager;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#checkDir(FileWrapper, java.lang.String)
+-	 */
+-	public FileWrapper checkDir(FileWrapper parent, String child)
+-	{
+-		FileWrapper dir = _fileWrapperFactory.create(parent, child);
+-		if (!dir.exists() && !dir.mkdir())
+-		{
+-			s_log.error("checkDir: Failed to mkdir - " + dir.getAbsolutePath());
+-		}
+-		return dir;
+-	}
+-
+-	/**
+-	 * TODO: move to IOUtilities
+-	 * 
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#createZipFile(FileWrapper, FileWrapper[])
+-	 */
+-	public void createZipFile(FileWrapper zipFile, FileWrapper... sourceFiles) throws FileNotFoundException,
+-		IOException
+-	{
+-		ZipOutputStream os = new ZipOutputStream(new FileOutputStream(zipFile.getAbsolutePath()));
+-		zipFileOs(os, sourceFiles);
+-		os.close();
+-	}
+-
+-	/**
+-	 * This function will recursively delete directories and files.
+-	 * 
+-	 * @param path
+-	 *           File or Directory to be deleted
+-	 * @return true indicates successfully deleted the file or directory.
+-	 */
+-	public boolean deleteFile(FileWrapper path)
+-	{
+-		boolean result = true;
+-		if (path.exists())
+-		{
+-			if (path.isFile())
+-			{
+-				result = path.delete();
+-				if (s_log.isInfoEnabled())
+-				{
+-					if (result)
+-					{
+-						s_log.info("deleteFile: successfully deleted file = " + path.getAbsolutePath());
+-					}
+-					else
+-					{
+-						s_log.info("deleteFile: failed to delete file = " + path.getAbsolutePath());
+-					}
+-				}
+-			}
+-			else
+-			{
+-				FileWrapper[] files = path.listFiles();
+-				for (int i = 0; i < files.length; i++)
+-				{
+-					result = result && deleteFile(files[i]);
+-				}
+-				result = result && path.delete();
+-			}
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * TODO: Move this to IOUtilities Extracts the specified zip file to the specified output directory.
+-	 * 
+-	 * @param zipFile
+-	 * @param outputDirectory
+-	 * @throws IOException
+-	 */
+-	public void extractZipFile(FileWrapper zipFile, FileWrapper outputDirectory) throws IOException
+-	{
+-		if (!outputDirectory.isDirectory())
+-		{
+-			s_log.error("Output directory specified (" + outputDirectory.getAbsolutePath()
+-				+ ") doesn't appear to be a directory");
+-			return;
+-		}
+-		FileInputStream fis = null;
+-		ZipInputStream zis = null;
+-		FileOutputStream fos = null;
+-		try
+-		{
+-			fis = new FileInputStream(zipFile.getAbsolutePath());
+-			zis = new ZipInputStream(fis);
+-			ZipEntry zipEntry = zis.getNextEntry();
+-			while (zipEntry != null)
+-			{
+-				String name = zipEntry.getName();
+-				if (zipEntry.isDirectory())
+-				{
+-					checkDir(outputDirectory, name);
+-				}
+-				else
+-				{
+-					FileWrapper newFile = _fileWrapperFactory.create(outputDirectory, name);
+-					if (newFile.exists())
+-					{
+-						if (s_log.isInfoEnabled())
+-						{
+-							s_log.info("Deleting extraction file that already exists:" + newFile.getAbsolutePath());
+-						}
+-						newFile.delete();
+-					}
+-					fos = new FileOutputStream(newFile.getAbsolutePath());
+-					byte[] buffer = new byte[ZIP_EXTRACTION_BUFFER_SIZE];
+-					int n = 0;
+-					while ((n = zis.read(buffer, 0, ZIP_EXTRACTION_BUFFER_SIZE)) > -1)
+-					{
+-						fos.write(buffer, 0, n);
+-					}
+-					fos.close();
+-				}
+-				zipEntry = zis.getNextEntry();
+-			}
+-		}
+-		finally
+-		{
+-			_iou.closeOutputStream(fos);
+-			_iou.closeInputStream(fis);
+-			_iou.closeInputStream(zis);
+-		}
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getChangeList(FileWrapper)
+-	 */
+-	public ChangeListXmlBean getChangeList(FileWrapper changeListFile) throws FileNotFoundException
+-	{
+-		return _serializer.readChangeListBean(changeListFile);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#getFile(FileWrapper, java.lang.String)
+-	 */
+-	public FileWrapper getFile(FileWrapper installDir, String artifactName)
+-	{
+-		return _fileWrapperFactory.create(installDir, artifactName);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#downloadHttpUpdateFile(java.lang.String, int,
+-	 *      java.lang.String, java.lang.String, long, long)
+-	 */
+-	public String downloadHttpUpdateFile(final String host, final int port, final String fileToGet,
+-		final String destDir, final long fileSize, final long checksum, final IProxySettings proxySettings)
+-		throws Exception
+-	{
+-		URL url = _iou.constructHttpUrl(host, port, fileToGet);
+-		String result = null;
+-		FileWrapper resultFile = _fileWrapperFactory.create(destDir, _pathUtils.getFileFromPath(fileToGet));
+-		result = resultFile.getAbsolutePath();
+-
+-		if (s_log.isDebugEnabled())
+-		{
+-			s_log.debug("downloadHttpFile: writing http response body to file: " + resultFile);
+-		}
+-
+-		int totalLength = _iou.downloadHttpFile(url, resultFile, proxySettings);
+-
+-		verifySize(url, fileSize, totalLength);
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#
+-	 *      getDownloadFileLocation(net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus)
+-	 */
+-	public FileWrapper getDownloadFileLocation(ArtifactStatus status)
+-	{
+-		FileWrapper result = null;
+-		if (CORE_ARTIFACT_ID.equals(status.getType()))
+-		{
+-			result = getFile(getCoreDownloadsDir(), status.getName());
+-		}
+-		if (PLUGIN_ARTIFACT_ID.equals(status.getType()))
+-		{
+-			result = getFile(getPluginDownloadsDir(), status.getName());
+-		}
+-		if (TRANSLATION_ARTIFACT_ID.equals(status.getType()))
+-		{
+-			result = getFile(getI18nDownloadsDir(), status.getName());
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#
+-	 *      isPresentInDownloadsDirectory(net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus)
+-	 */
+-	public boolean isPresentInDownloadsDirectory(ArtifactStatus status)
+-	{
+-		boolean result = false;
+-
+-		FileWrapper downloadFile = getDownloadFileLocation(status);
+-
+-		if (downloadFile.exists())
+-		{
+-			long checkSum = getCheckSum(downloadFile);
+-			if (status.getChecksum() == checkSum)
+-			{
+-				if (downloadFile.length() == status.getSize())
+-				{
+-					result = true;
+-				}
+-			}
+-		}
+-		return result;
+-	}
+-
+-	/* Helper Methods */
+-
+-	/**
+-	 * Verifies that the byte size of what was downloaded matches the expected size of the artifact. If
+-	 * expected is -1, this check will be skipped; this is expected in the case where the release.xml file is
+-	 * being downloaded and there is no information about big it is. When -1 is expected, then a log message is
+-	 * created and this check is skipped.
+-	 * 
+-	 * @param url
+-	 *           the URL that was downloaded from
+-	 * @param expected
+-	 *           the number of bytes expected to be downloaded
+-	 * @param actual
+-	 *           the actual number of bytes downloaded
+-	 * @throws Exception
+-	 *            if the two counts do not match.
+-	 */
+-	private void verifySize(URL url, long expected, long actual) throws Exception
+-	{
+-		if (expected == -1)
+-		{
+-			if (s_log.isInfoEnabled())
+-			{
+-				s_log.info("verifySize: expected size was -1.  Skipping check for url: " + url.toString());
+-			}
+-			return;
+-		}
+-		if (expected != actual) { throw new Exception("Attempt to get file contents from url ("
+-			+ url.toString() + ") resulted in " + actual + " bytes downloaded, but " + expected
+-			+ " bytes were expected."); }
+-	}
+-
+-	/**
+-	 * Writes the specified sourceFile(s) contents to the specified Zip output stream.
+-	 * 
+-	 * @param os
+-	 *           the Zip OutputStream to write to
+-	 * @param sourceFiles
+-	 *           the files to read from
+-	 * @throws FileNotFoundException
+-	 *            if one of the files could not be found
+-	 * @throws IOException
+-	 *            if and IO error occurs
+-	 */
+-	private void zipFileOs(ZipOutputStream os, FileWrapper[] sourceFiles) throws FileNotFoundException,
+-		IOException
+-	{
+-		for (FileWrapper file : sourceFiles)
+-		{
+-			if (file.isDirectory())
+-			{
+-				zipFileOs(os, file.listFiles());
+-			}
+-			else
+-			{
+-				FileInputStream fis = null;
+-				try
+-				{
+-					fis = new FileInputStream(file.getAbsolutePath());
+-					os.putNextEntry(new ZipEntry(file.getPath()));
+-					_iou.copyBytes(fis, os);
+-				}
+-				finally
+-				{
+-					_iou.closeInputStream(fis);
+-				}
+-			}
+-		}
+-	}
+-
+-	/**
+-	 * @param parent
+-	 * @param dirName
+-	 * @param create
+-	 * @return
+-	 */
+-	private FileWrapper getDir(FileWrapper parent, String dirName, boolean create)
+-	{
+-		FileWrapper result = null;
+-		if (dirName != null)
+-		{
+-			result = _fileWrapperFactory.create(parent, dirName);
+-		}
+-		else
+-		{
+-			result = parent;
+-		}
+-		if (!result.isDirectory())
+-		{
+-			if (result.exists())
+-			{
+-				// If the update dir, is actually a file, log an error.
+-				s_log.error(dirName + " directory (" + result.getAbsolutePath()
+-					+ ") doesn't appear to be a directory");
+-			}
+-			else
+-			{
+-				// If the downloads dir doesn't already exist, just create it.
+-				if (create)
+-				{
+-					result.mkdir();
+-				}
+-			}
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @param host
+-	 * @param port
+-	 * @param path
+-	 * @param fileToGet
+-	 * @return
+-	 * @throws Exception
+-	 *            if the current release file could not be downloaded
+-	 */
+-	private ChannelXmlBean downloadCurrentReleaseHttp(final String host, final int port, final String path,
+-		final String file, final IProxySettings proxySettings) throws Exception
+-	{
+-
+-		ChannelXmlBean result = null;
+-		InputStream is = null;
+-		try
+-		{
+-			String fileToGet = _pathUtils.buildPath(true, path, file);
+-
+-			// We set expected and checksum to -1 here, since we don't have that information for release.xml file
+-			// TODO: Can HttpClient be used to get the byte-size of release.xml so we can perform this check?
+-			String filename =
+-				downloadHttpUpdateFile(host, port, fileToGet, getDownloadsDir().getAbsolutePath(), -1, -1,
+-					proxySettings);
+-			FileWrapper releaseXmlFile = _fileWrapperFactory.create(filename);
+-			if (releaseXmlFile.exists())
+-			{
+-				result = _serializer.readChannelBean(releaseXmlFile);
+-			}
+-			else
+-			{
+-				throw new FileNotFoundException("Current release file couldn't be downloaded");
+-			}
+-		}
+-		finally
+-		{
+-			_iou.closeInputStream(is);
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.UpdateUtil#
+-	 *      getUpdateCheckFrequency(net.sourceforge.squirrel_sql.client.preferences.IUpdateSettings)
+-	 */
+-	public UpdateCheckFrequency getUpdateCheckFrequency(IUpdateSettings settings)
+-	{
+-		UpdateCheckFrequency result = UpdateCheckFrequency.STARTUP;
+-		String updateCheckFrequencyStr = settings.getUpdateCheckFrequency();
+-		if ("weekly".equalsIgnoreCase(updateCheckFrequencyStr))
+-		{
+-			result = UpdateCheckFrequency.WEEKLY;
+-		}
+-		if ("daily".equalsIgnoreCase(updateCheckFrequencyStr))
+-		{
+-			result = UpdateCheckFrequency.DAILY;
+-		}
+-		if ("startup".equalsIgnoreCase(updateCheckFrequencyStr))
+-		{
+-			result = UpdateCheckFrequency.STARTUP;
+-		}
+-		return result;
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/async/ReleaseFileUpdateCheckTask.java
++++ /dev/null
+@@ -1,208 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.async;
+-
+-import static java.lang.System.currentTimeMillis;
+-import static net.sourceforge.squirrel_sql.client.update.UpdateUtil.RELEASE_XML_FILENAME;
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.client.preferences.IUpdateSettings;
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChannelXmlBean;
+-import net.sourceforge.squirrel_sql.fw.util.Utilities;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-/**
+- * We need to check to see if the release is current in several places. First, we must check when the user
+- * prompts us to which is running on the event dispatch thread. Since this is a potentially a long-running
+- * operation, this class uses the thread-pool to off-load it's work from the UI thread. Second, we must check
+- * that the release is current when the update check timer says to, based on user preferences. So, this the
+- * thread-pool isn't needed in that case and this class is used synchronously, since the timer thread is
+- * already not the UI thread.
+- * 
+- * @author manningr
+- */
+-public class ReleaseFileUpdateCheckTask implements Runnable
+-{
+-
+-	/** Logger for this class. */
+-	private static final ILogger s_log = LoggerController.createLogger(ReleaseFileUpdateCheckTask.class);
+-
+-	private UpdateCheckRunnableCallback _callback = null;
+-
+-	private IUpdateSettings _settings = null;
+-
+-	private UpdateUtil _util = null;
+-
+-	private IApplication _app = null;
+-
+-	private boolean isUpToDate = false;
+-
+-	public ReleaseFileUpdateCheckTask(UpdateCheckRunnableCallback callback, IUpdateSettings settings,
+-		UpdateUtil util, IApplication app)
+-	{
+-		Utilities.checkNull("ReleaseFileUpdateCheckRunnable", "settings", settings, "util", util, "app", app);
+-		_callback = callback;
+-		_settings = settings;
+-		_util = util;
+-		_app = app;
+-	}
+-
+-	public void start()
+-	{
+-		if (_app == null) { throw new IllegalStateException(
+-			"_app was null - cannot access the thread pool for asynchronous use"); }
+-		_app.getThreadPool().addTask(this);
+-	}
+-
+-	/**
+-	 * Results in a boolean value (isUpToDate) indicating whether or not there are updates available to be
+-	 * installed. This will also produce the installed and current ChannelXmlBeans and if used asynchronously
+-	 * (callback is not null), then this will invoke the appropriate callback method. One side effect is that
+-	 * the last update check time is stored in update settings so that the update check timer knows when to
+-	 * schedule another check at startup. The sequence of steps involved is : 1. Find the local release.xml
+-	 * file 2. Load the local release.xml file as a ChannelXmlBean. 3. Get the release.xml file as a
+-	 * ChannelXmlBean from the server or local filesystem 3a. For server, Determine the channel that the user
+-	 * has (stable or snapshot) 5. Determine if it is the same as the local copy, which was placed either by
+-	 * the installer or the last update?
+-	 * 
+-	 * @see java.lang.Runnable#run()
+-	 */
+-	public void run()
+-	{
+-		String releaseFilename = null;
+-
+-		// 1. Find the local release.xml file. Bail with exception if we cannot find it.
+-		try
+-		{
+-			releaseFilename = _util.getLocalReleaseFile().getAbsolutePath();
+-		}
+-		catch (Exception e)
+-		{
+-			s_log.error("Unexpected exception while attempting to find local release file: "+e.getMessage(), e);
+-			if (_callback != null) {
+-				_callback.updateCheckFailed(e);
+-			}
+-			return;
+-		}
+-
+-		// 2. Load the local release.xml file as a ChannelXmlBean.
+-		ChannelXmlBean installedChannelBean = _util.getLocalReleaseInfo(releaseFilename);
+-
+-		// 3. & 3a. Get the release.xml file as a ChannelXmlBean from the server or
+-		// filesystem.
+-		ChannelXmlBean currentChannelBean = getCurrentChannelXmlBean(installedChannelBean);
+-
+-		// Record now as the last time we checked for updates.
+-		_settings.setLastUpdateCheckTimeMillis("" + currentTimeMillis());
+-		_app.getSquirrelPreferences().setUpdateSettings(_settings);
+-
+-		// 5. Is it the same as the local copy, which was placed either by the
+-		// installer or the last update?
+-		if (currentChannelBean == null)
+-		{
+-			s_log.warn("run: currentChannelBean was null - it is inconclusive whether or not the software "
+-				+ "is current : assuming that it is for now");
+-			if (_callback != null) {
+-				_callback.updateCheckFailed(null);
+-			}
+-		}
+-		else
+-		{
+-			isUpToDate = currentChannelBean.equals(installedChannelBean);
+-			if (_callback != null)
+-			{
+-				_callback.updateCheckComplete(isUpToDate, installedChannelBean, currentChannelBean);
+-			}
+-		}
+-	}
+-
+-	/**
+-	 * Uses settings to determine where to get the current release.xml that is available and retrieves it as an
+-	 * XML bean. This will return null (and log a warning) if it couldn't be retrieved.
+-	 * 
+-	 * @param installedChannelBean
+-	 *           the XML bean that represents what is installed.
+-	 * @return an XML bean that represents what release is currently available or null if it couldn't be
+-	 *         downloaded
+-	 */
+-	private ChannelXmlBean getCurrentChannelXmlBean(ChannelXmlBean installedChannelBean)
+-	{
+-		ChannelXmlBean currentChannelBean = null;
+-		if (_settings.isRemoteUpdateSite())
+-		{
+-			// 3a. For server, Determine the channel that the user has (stable or snapshot)
+-			String channelName = getDesiredChannel(_settings, installedChannelBean);
+-
+-			try
+-			{
+-				StringBuilder releasePath = new StringBuilder("/");
+-				releasePath.append(_settings.getUpdateServerPath());
+-				releasePath.append("/");
+-				releasePath.append(channelName);
+-				releasePath.append("/");
+-
+-				currentChannelBean =
+-					_util.downloadCurrentRelease(_settings.getUpdateServer(),
+-						Integer.parseInt(_settings.getUpdateServerPort()), releasePath.toString(),
+-						RELEASE_XML_FILENAME, _app.getSquirrelPreferences().getProxySettings());
+-			}
+-			catch (Exception e)
+-			{
+-				s_log.error("Unexpected exception: " + e.getMessage(), e);
+-			}
+-		}
+-		else
+-		{
+-			currentChannelBean = _util.loadUpdateFromFileSystem(_settings.getFileSystemUpdatePath());
+-		}
+-		return currentChannelBean;
+-	}
+-
+-	/**
+-	 * This method takes a look at preference for channel and the channel that the user currently has installed
+-	 * and logs an info if switching from one to channel to another.
+-	 * 
+-	 * @return the name of the channel that the user wants.
+-	 */
+-	private String getDesiredChannel(final IUpdateSettings settings, final ChannelXmlBean _installedChannelBean)
+-	{
+-		String desiredChannel = settings.getUpdateServerChannel().toLowerCase();
+-		String currentChannelName = _installedChannelBean.getName();
+-
+-		if (!currentChannelName.equals(desiredChannel))
+-		{
+-			if (s_log.isInfoEnabled())
+-			{
+-				s_log.info("getDesiredChannel: User is switching distribution channel from "
+-					+ "installed channel (" + currentChannelName + ") to new channel (" + desiredChannel + ")");
+-			}
+-		}
+-		return desiredChannel;
+-	}
+-
+-	/**
+-	 * @return the isUpToDate
+-	 */
+-	public boolean isUpToDate()
+-	{
+-		return isUpToDate;
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/async/UpdateCheckRunnableCallback.java
++++ /dev/null
+@@ -1,46 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.async;
+-
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChannelXmlBean;
+-
+-/**
+- * This is implemented by callers using the ReleaseFileUpdateCheckTask asynchronously.  If a non-null 
+- * implementation is passed to ReleaseFileUpdateCheckTask, it will use a separate thread to do the work in the 
+- * run method, then call the appropriate method in this interface when finished.
+- * 
+- * @author manningr
+- *
+- */
+-public interface UpdateCheckRunnableCallback
+-{
+-	/**
+-	 * 
+-	 * @param isUpdateToDate
+-	 * @param installedChannelXmlBean
+-	 * @param currentChannelXmlBean
+-	 */
+-	void updateCheckComplete(boolean isUpdateToDate, ChannelXmlBean installedChannelXmlBean,
+-		ChannelXmlBean currentChannelXmlBean);
+-
+-	/**
+-	 * @param e
+-	 */
+-	void updateCheckFailed(Exception e);
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/autocheck/UpdateCheckTimer.java
++++ /dev/null
+@@ -1,37 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.autocheck;
+-
+-/**
+- * An interface which describes the API to the background task that periodically wakes up to check for 
+- * updates 
+- *
+- */
+-public interface UpdateCheckTimer
+-{
+-	/**
+-	 * Start the timer
+-	 */
+-	void start();
+-	
+-	/**
+-	 * Stop the timer
+-	 */
+-	void stop();
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/autocheck/UpdateCheckTimerImpl.java
++++ /dev/null
+@@ -1,193 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.autocheck;
+-
+-import net.sourceforge.squirrel_sql.client.IApplication;
+-import net.sourceforge.squirrel_sql.client.preferences.IUpdateSettings;
+-import net.sourceforge.squirrel_sql.client.update.UpdateCheckFrequency;
+-import net.sourceforge.squirrel_sql.client.update.UpdateController;
+-import net.sourceforge.squirrel_sql.client.update.UpdateControllerFactory;
+-import net.sourceforge.squirrel_sql.client.update.UpdateControllerFactoryImpl;
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtilImpl;
+-import net.sourceforge.squirrel_sql.client.update.async.ReleaseFileUpdateCheckTask;
+-import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloaderFactoryImpl;
+-import net.sourceforge.squirrel_sql.fw.gui.JOptionPaneService;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactory;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactoryImpl;
+-import net.sourceforge.squirrel_sql.fw.util.Utilities;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-/**
+- * This class maintains it's own Thread so that it can periodically check for updates, and notify the user
+- * when updates are detected.
+- */
+-public class UpdateCheckTimerImpl implements UpdateCheckTimer
+-{
+-
+-	private UpdateCheckRunnable runnable = new UpdateCheckRunnable();
+-
+-	private UpdateControllerFactory updateControllerFactory = new UpdateControllerFactoryImpl();
+-
+-	private UpdateController updateController = null;
+-
+-	private IApplication _app = null;
+-
+-	private IUpdateSettings _updateSettings = null;
+-
+-	/** Logger for this class. */
+-	private static final ILogger s_log = LoggerController.createLogger(UpdateCheckTimerImpl.class);
+-
+-	private UpdateUtil _util = new UpdateUtilImpl();
+-
+-	private JOptionPaneService _JOptionPaneService = new JOptionPaneService();
+-
+-	private FileWrapperFactory _fileWrapperFactory = new FileWrapperFactoryImpl();
+-	
+-	public UpdateCheckTimerImpl(IApplication app)
+-	{
+-		this._app = app;
+-		_updateSettings = _app.getSquirrelPreferences().getUpdateSettings();
+-
+-	}
+-
+-	public void start()
+-	{
+-		if (!_updateSettings.isEnableAutomaticUpdates()) { return; }
+-		updateController =
+-			updateControllerFactory.createUpdateController(_app, new ArtifactDownloaderFactoryImpl(), _util,
+-				_JOptionPaneService, _fileWrapperFactory);
+-		Thread t = new Thread(runnable);
+-		t.setName("Update Check Timer Thread");
+-		t.start();
+-	}
+-
+-	public void stop()
+-	{
+-		if (!_updateSettings.isEnableAutomaticUpdates()) { return; }
+-		runnable.stop();
+-	}
+-
+-	/**
+-	 * Class that implements the timer functionality.
+-	 */
+-	private class UpdateCheckRunnable implements Runnable
+-	{
+-
+-		private boolean stopped = false;
+-
+-		private boolean firstCheck = true;
+-
+-		/**
+-		 * After making an initial check This loops indefinitely
+-		 * 
+-		 * @see java.lang.Runnable#run()
+-		 */
+-		public void run()
+-		{
+-			// Since this timer must be started when SQuirreL is launched, wait a couple of minutes for
+-			// SQuirreL to get done initializing the UI.
+-			Utilities.sleep(120 * 1000L);
+-
+-			while (!stopped)
+-			{
+-				if (firstCheck)
+-				{
+-					firstCheck = false;
+-					if (isUpdateCheckFrequencyAtStartup() && !isUpToDate())
+-					{
+-						logDebug("run: update check configured for startup and software is not up-to-date");
+-						updateController.promptUserToDownloadAvailableUpdates();
+-
+-						// Since the user only wants to be notified of updates at startup, return here, thereby
+-						// freeing up the thread.
+-						return;
+-					}
+-				}
+-				else
+-				{
+-					logDebug("run: not the first check; sleeping for an hour.");
+-					sleepForAnHour();
+-				}
+-
+-				if (!isUpdateCheckFrequencyAtStartup() && updateController.isTimeToCheckForUpdates())
+-				{
+-					logDebug("run: not configured to check at startup and it's now time to check again.");
+-					if (!isUpToDate())
+-					{
+-						logDebug("run: software is not up-to-date, so prompting user to download updates.");
+-						updateController.promptUserToDownloadAvailableUpdates();
+-					}
+-				}
+-			}
+-
+-		}
+-
+-		private void logDebug(String msg)
+-		{
+-			if (s_log.isDebugEnabled())
+-			{
+-				s_log.debug(msg);
+-			}
+-		}
+-
+-		private boolean isUpToDate()
+-		{
+-			boolean result = true;
+-			try
+-			{
+-				logDebug("isUpToDate: checking to see if software is up-to-date; currentTimeMillis = "
+-					+ System.currentTimeMillis());
+-
+-				ReleaseFileUpdateCheckTask task =
+-					new ReleaseFileUpdateCheckTask(null, _updateSettings, _util, _app);
+-
+-				// Since this thread is not a UI thread, it is ok to run the task synchronously.
+-				task.run();
+-				result = task.isUpToDate();
+-			}
+-			catch (Exception e)
+-			{
+-				s_log.error("isUpToDate: Unable to determine up-to-date status: " + e.getMessage(), e);
+-			}
+-			return result;
+-		}
+-
+-		private boolean isUpdateCheckFrequencyAtStartup()
+-		{
+-			String freqStr = _updateSettings.getUpdateCheckFrequency();
+-			UpdateCheckFrequency updateCheckFrequency = UpdateCheckFrequency.getEnumForString(freqStr);
+-
+-			return updateCheckFrequency == UpdateCheckFrequency.STARTUP;
+-		}
+-
+-		public void stop()
+-		{
+-			stopped = true;
+-		}
+-
+-		private void sleepForAnHour()
+-		{
+-			Utilities.sleep(1000 * 60 * 60);
+-		}
+-
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/ArtifactDownloader.java
++++ /dev/null
+@@ -1,131 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader;
+-
+-import java.util.List;
+-
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusListener;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-import net.sourceforge.squirrel_sql.fw.util.IProxySettings;
+-
+-public interface ArtifactDownloader
+-{
+-
+-	void start();
+-
+-	/**
+-	 * Stop downloading files as soon as possible.
+-	 */
+-	void stopDownload();
+-
+-	/**
+-	 * @return the list of ArtifactStatus items that describe each file to downloaded
+-	 */
+-	List<ArtifactStatus> getArtifactStatus();
+-
+-	/**
+-	 * @param status
+-	 *           the list of ArtifactStatus items that describe each file to downloaded
+-	 */
+-	void setArtifactStatus(List<ArtifactStatus> status);
+-
+-	/**
+-	 * @return a boolean indicating whether a remote site or local dir is being used.
+-	 */
+-	boolean isRemoteUpdateSite();
+-
+-	/**
+-	 * @param remoteUpdateSite
+-	 *           a boolean indicating whether a remote site or local dir is being used.
+-	 */
+-	void setIsRemoteUpdateSite(boolean remoteUpdateSite);
+-
+-	/**
+-	 * @return the _host
+-	 */
+-	String getHost();
+-
+-	/**
+-	 * @param host
+-	 *           the _host to set
+-	 */
+-	void setHost(String host);
+-
+-	/**
+-	 * @return the _path
+-	 */
+-	String getPath();
+-
+-	void setPath(String path);
+-
+-	/**
+-	 * @return the _util
+-	 */
+-	UpdateUtil getUtil();
+-
+-	/**
+-	 * Adds the specified listener
+-	 * 
+-	 * @param listener
+-	 */
+-	void addDownloadStatusListener(DownloadStatusListener listener);
+-
+-	/**
+-	 * Removes the specified listener
+-	 * 
+-	 * @param listener
+-	 */
+-	void removeDownloadListener(DownloadStatusListener listener);
+-
+-	/**
+-	 * @return the _fileSystemUpdatePath
+-	 */
+-	String getFileSystemUpdatePath();
+-
+-	/**
+-	 * @param systemUpdatePath
+-	 *           the _fileSystemUpdatePath to set
+-	 */
+-	void setFileSystemUpdatePath(String systemUpdatePath);
+-
+-	void setPort(int updateServerPort);
+-
+-	void setChannelName(String name);
+-
+-	/**
+-	 * Sets the update utility to use.
+-	 * 
+-	 * @param util
+-	 */
+-	void setUtil(UpdateUtil util);
+-
+-	public void setProxySettings(IProxySettings settings);
+-
+-	/**
+-	 * @return the releaseVersionWillChange
+-	 */
+-	public boolean isReleaseVersionWillChange();
+-
+-	/**
+-	 * @param releaseVersionWillChange the releaseVersionWillChange to set
+-	 */
+-	public void setReleaseVersionWillChange(boolean releaseVersionWillChange);
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/ArtifactDownloaderFactory.java
++++ /dev/null
+@@ -1,35 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader;
+-
+-import java.util.List;
+-
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-
+-public interface ArtifactDownloaderFactory
+-{
+-
+-	/**
+-	 * 
+-	 * @param artifactStatus
+-	 * @return
+-	 */
+-	ArtifactDownloader create(List<ArtifactStatus> artifactStatus);
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/ArtifactDownloaderFactoryImpl.java
++++ /dev/null
+@@ -1,39 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader;
+-
+-import java.util.List;
+-
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-import net.sourceforge.squirrel_sql.fw.util.Utilities;
+-
+-public class ArtifactDownloaderFactoryImpl implements ArtifactDownloaderFactory
+-{
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloaderFactory#create(java.util.List)
+-	 */
+-	public ArtifactDownloader create(List<ArtifactStatus> artifactStatus) {
+-		Utilities.checkNull("create", "artifactStatus", artifactStatus);
+-		if (artifactStatus.size() == 0) {
+-			throw new IllegalArgumentException("create: list parameter must have one or more artifacts");
+-		}
+-		return new ArtifactDownloaderImpl(artifactStatus);
+-	}
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/ArtifactDownloaderImpl.java
++++ /dev/null
+@@ -1,473 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader;
+-
+-import java.io.FileNotFoundException;
+-import java.io.IOException;
+-import java.util.ArrayList;
+-import java.util.List;
+-
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadEventType;
+-import net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusEvent;
+-import net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusListener;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-import net.sourceforge.squirrel_sql.client.update.util.PathUtils;
+-import net.sourceforge.squirrel_sql.client.update.util.PathUtilsImpl;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-import net.sourceforge.squirrel_sql.fw.util.IProxySettings;
+-import net.sourceforge.squirrel_sql.fw.util.Utilities;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-/**
+- * Loops through a list of artifacts and downloads each one into the appropriate directory. Notifies listeners
+- * of important events.
+- * 
+- * @author manningr
+- */
+-public class ArtifactDownloaderImpl implements Runnable, ArtifactDownloader
+-{
+-	/** Logger for this class. */
+-	private final static ILogger s_log = LoggerController.createLogger(ArtifactDownloaderImpl.class);
+-
+-	/** This is the pattern that all translation jars (i18n) begin with */
+-	public static final String TRANSLATION_JAR_PREFIX_PATTERN = "squirrel-sql_.*";
+-
+-	private List<ArtifactStatus> _artifactStatus = null;
+-
+-	private volatile boolean _stopped = false;
+-
+-	private boolean _isRemoteUpdateSite = true;
+-
+-	private String _host = null;
+-
+-	private String _path = null;
+-
+-	private String _fileSystemUpdatePath = null;
+-
+-	private List<DownloadStatusListener> listeners = new ArrayList<DownloadStatusListener>();
+-
+-	Thread downloadThread = null;
+-
+-	String _updatesDir = null;
+-
+-	private int _port = 80;
+-
+-	/** The name of the channel from which we are downloading artifacts */
+-	private String _channelName;
+-
+-	private UpdateUtil _util = null;
+-
+-	private PathUtils _pathUtils = new PathUtilsImpl();
+-
+-	private IProxySettings _proxySettings = null;
+-
+-	private boolean releaseVersionWillChange = false;
+-
+-	private RetryStrategy _retryStrategy = new DefaultRetryStrategyImpl();
+-	
+-	public ArtifactDownloaderImpl(List<ArtifactStatus> artifactStatus)
+-	{
+-		_artifactStatus = artifactStatus;
+-		downloadThread = new Thread(this, "ArtifactDownloadThread");
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#start()
+-	 */
+-	public void start()
+-	{
+-		downloadThread.start();
+-	}
+-
+-	/**
+-	 * Runnable interface method implementation
+-	 */
+-	public void run()
+-	{
+-		long totalBytesDownloaded = 0;
+-		try
+-		{
+-
+-			prepareDownloadsDirectory();
+-
+-			sendDownloadStarted(_artifactStatus.size());
+-			for (ArtifactStatus status : _artifactStatus)
+-			{
+-				if (_stopped)
+-				{
+-					sendDownloadStopped();
+-					return;
+-				}
+-				else
+-				{
+-					sendDownloadFileStarted(status.getName());
+-				}
+-				String fileToGet =
+-					_pathUtils.buildPath(true, _path, _channelName, status.getType(), status.getName());
+-
+-				String destDir = getArtifactDownloadDestDir(status);
+-
+-				if (_util.isPresentInDownloadsDirectory(status))
+-				{
+-					if (s_log.isInfoEnabled())
+-					{
+-						s_log.info("run: Skipping download of file (" + fileToGet + ") which is already present "
+-							+ "in the downloads directory.");
+-					}
+-					sendDownloadFileCompleted(status.getName());
+-					continue;
+-				}
+-
+-				boolean result = true;
+-				if (_isRemoteUpdateSite)
+-				{
+-					int count = 0;
+-					boolean success = false;
+-					while (_retryStrategy.shouldTryAgain(count++) && !success)
+-					{
+-						success = attemptFileDownload(fileToGet, destDir, status);
+-						if (!success)
+-						{
+-							Utilities.sleep(_retryStrategy.getTimeToWaitBeforeRetrying(count));
+-						}
+-					}
+-					if (!success)
+-					{
+-						sendDownloadFailed();
+-						return;
+-					}
+-				}
+-				else
+-				{
+-					fileToGet =
+-						_pathUtils.buildPath(false, this._fileSystemUpdatePath, status.getType(), status.getName());
+-					result = _util.downloadLocalUpdateFile(fileToGet, destDir);
+-				}
+-				if (result == false)
+-				{
+-					sendDownloadFailed();
+-					return;
+-				}
+-				else
+-				{
+-					sendDownloadFileCompleted(status.getName());
+-					totalBytesDownloaded += status.getSize();
+-				}
+-			}
+-		}
+-		catch (FileNotFoundException e)
+-		{
+-			s_log.error("run: Unexpected exception: " + e.getMessage(), e);
+-			sendDownloadFailed();
+-			return;
+-		}
+-		catch (IOException e)
+-		{
+-			s_log.error("run: Unexpected exception: " + e.getMessage(), e);
+-			sendDownloadFailed();
+-			return;
+-		}
+-		if (s_log.isInfoEnabled())
+-		{
+-			s_log.info("run: Downloaded " + totalBytesDownloaded + " bytes total for all update files.");
+-		}
+-		sendDownloadComplete();
+-	}
+-
+-	private void prepareDownloadsDirectory() throws FileNotFoundException, IOException
+-	{
+-		// if the release version doesn't change, we won't be pulling down core artifacts. So, we just
+-		// need to make sure that all core files have been copied from their installed locations into the
+-		// corresponding directory in download, which is in the CLASSPATH of the updater. This covers the
+-		// case where the update is being run for the first time after install, and no new version is
+-		// available, but the user wants to install/remove plugins and/or translations.
+-		if (!releaseVersionWillChange)
+-		{
+-			// Copy core files minus any i18n jars to core downloads directory
+-			_util.copyDir(_util.getSquirrelLibraryDir(), TRANSLATION_JAR_PREFIX_PATTERN, false,
+-				_util.getCoreDownloadsDir());
+-
+-			// Copy i18n files to i18n downloads directory
+-			_util.copyDir(_util.getSquirrelLibraryDir(), TRANSLATION_JAR_PREFIX_PATTERN, true,
+-				_util.getI18nDownloadsDir());
+-
+-			// Copy the app module jar to core downloads directory
+-			_util.copyFile(_util.getInstalledSquirrelMainJarLocation(), _util.getCoreDownloadsDir());
+-		}
+-		// Move any i18n files that are located in the core downloads dir to the i18n downloads dir. The spring
+-		// application context will not load properly (for some unknown reason) when there are i18n jars in the
+-		// classpath. So as a work-around, we simply ensure that they are where they should be anyway.
+-		// Previously we were not as careful about this, so it is possible that i18n jars were copied into the
+-		// core downloads directory.
+-		_util.moveFiles(_util.getCoreDownloadsDir(), TRANSLATION_JAR_PREFIX_PATTERN, true,
+-			_util.getI18nDownloadsDir());
+-	}
+-
+-	private boolean attemptFileDownload(String fileToGet, String destDir, ArtifactStatus status)
+-	{
+-		boolean success = true;
+-
+-		try
+-		{
+-			_util.downloadHttpUpdateFile(_host, _port, fileToGet, destDir, status.getSize(),
+-				status.getChecksum(), _proxySettings);
+-		}
+-		catch (Exception e)
+-		{
+-			s_log.error("run: encountered exception while attempting to download file (" + fileToGet + "): "
+-				+ e.getMessage(), e);
+-			success = false;
+-		}
+-		return success;
+-	}
+-
+-	private String getArtifactDownloadDestDir(ArtifactStatus status)
+-	{
+-
+-		FileWrapper destDir = _util.getCoreDownloadsDir();
+-		if (UpdateUtil.PLUGIN_ARTIFACT_ID.equals(status.getType()))
+-		{
+-			destDir = _util.getPluginDownloadsDir();
+-		}
+-		if (UpdateUtil.TRANSLATION_ARTIFACT_ID.equals(status.getType()))
+-		{
+-			destDir = _util.getI18nDownloadsDir();
+-		}
+-		return destDir.getAbsolutePath();
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#stopDownload()
+-	 */
+-	public void stopDownload()
+-	{
+-		_stopped = true;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#getArtifactStatus()
+-	 */
+-	public List<ArtifactStatus> getArtifactStatus()
+-	{
+-		return _artifactStatus;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setArtifactStatus(java.util.List)
+-	 */
+-	public void setArtifactStatus(List<ArtifactStatus> status)
+-	{
+-		_artifactStatus = status;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#isRemoteUpdateSite()
+-	 */
+-	public boolean isRemoteUpdateSite()
+-	{
+-		return _isRemoteUpdateSite;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setIsRemoteUpdateSite(boolean)
+-	 */
+-	public void setIsRemoteUpdateSite(boolean remoteUpdateSite)
+-	{
+-		_isRemoteUpdateSite = remoteUpdateSite;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#getHost()
+-	 */
+-	public String getHost()
+-	{
+-		return _host;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setHost(java.lang.String)
+-	 */
+-	public void setHost(String host)
+-	{
+-		this._host = host;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#getPath()
+-	 */
+-	public String getPath()
+-	{
+-		return _path;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setPath(java.lang.String)
+-	 */
+-	public void setPath(String path)
+-	{
+-		this._path = path;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#getUtil()
+-	 */
+-	public UpdateUtil getUtil()
+-	{
+-		return _util;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#addDownloadStatusListener(net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusListener)
+-	 */
+-	public void addDownloadStatusListener(DownloadStatusListener listener)
+-	{
+-		listeners.add(listener);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#removeDownloadListener(net.sourceforge.squirrel_sql.client.update.downloader.event.DownloadStatusListener)
+-	 */
+-	public void removeDownloadListener(DownloadStatusListener listener)
+-	{
+-		listeners.remove(listener);
+-	}
+-
+-	private void sendEvent(DownloadStatusEvent evt)
+-	{
+-		for (DownloadStatusListener listener : listeners)
+-		{
+-			listener.handleDownloadStatusEvent(evt);
+-		}
+-	}
+-
+-	private void sendDownloadStarted(int totalFileCount)
+-	{
+-		DownloadStatusEvent evt = new DownloadStatusEvent(DownloadEventType.DOWNLOAD_STARTED);
+-		evt.setFileCountTotal(totalFileCount);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendDownloadStopped()
+-	{
+-		DownloadStatusEvent evt = new DownloadStatusEvent(DownloadEventType.DOWNLOAD_STOPPED);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendDownloadComplete()
+-	{
+-		DownloadStatusEvent evt = new DownloadStatusEvent(DownloadEventType.DOWNLOAD_COMPLETED);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendDownloadFailed()
+-	{
+-		DownloadStatusEvent evt = new DownloadStatusEvent(DownloadEventType.DOWNLOAD_FAILED);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendDownloadFileStarted(String filename)
+-	{
+-		DownloadStatusEvent evt = new DownloadStatusEvent(DownloadEventType.DOWNLOAD_FILE_STARTED);
+-		evt.setFilename(filename);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendDownloadFileCompleted(String filename)
+-	{
+-		DownloadStatusEvent evt = new DownloadStatusEvent(DownloadEventType.DOWNLOAD_FILE_COMPLETED);
+-		evt.setFilename(filename);
+-		sendEvent(evt);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#getFileSystemUpdatePath()
+-	 */
+-	public String getFileSystemUpdatePath()
+-	{
+-		return _fileSystemUpdatePath;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setFileSystemUpdatePath(java.lang.String)
+-	 */
+-	public void setFileSystemUpdatePath(String systemUpdatePath)
+-	{
+-		_fileSystemUpdatePath = systemUpdatePath;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setPort(int)
+-	 */
+-	public void setPort(int updateServerPort)
+-	{
+-		_port = updateServerPort;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setChannelName(java.lang.String)
+-	 */
+-	public void setChannelName(String name)
+-	{
+-		_channelName = name;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setUtil(net.sourceforge.squirrel_sql.client.update.UpdateUtil)
+-	 */
+-	public void setUtil(UpdateUtil util)
+-	{
+-		this._util = util;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader#setProxySettings(net.sourceforge.squirrel_sql.fw.util.IProxySettings)
+-	 */
+-	public void setProxySettings(IProxySettings settings)
+-	{
+-		_proxySettings = settings;
+-	}
+-
+-	/**
+-	 * @return the releaseVersionWillChange
+-	 */
+-	public boolean isReleaseVersionWillChange()
+-	{
+-		return releaseVersionWillChange;
+-	}
+-
+-	/**
+-	 * @param releaseVersionWillChange
+-	 *           the releaseVersionWillChange to set
+-	 */
+-	public void setReleaseVersionWillChange(boolean releaseVersionWillChange)
+-	{
+-		this.releaseVersionWillChange = releaseVersionWillChange;
+-	}
+-
+-	/**
+-	 * @param strategy the _retryStrategy to set
+-	 */
+-	public void setRetryStrategy(RetryStrategy strategy)
+-	{
+-		_retryStrategy = strategy;
+-	}
+-	
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/DefaultRetryStrategyImpl.java
++++ /dev/null
+@@ -1,42 +0,0 @@
+-/*
+- * Copyright (C) 2009 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader;
+-
+-public class DefaultRetryStrategyImpl implements RetryStrategy
+-{
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.RetryStrategy#getTimeToWaitBeforeRetrying(int)
+-	 */
+-	@Override
+-	public long getTimeToWaitBeforeRetrying(int failureCount)
+-	{
+-		return (failureCount + 1) * 3000;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.downloader.RetryStrategy#shouldTryAgain(int)
+-	 */
+-	@Override
+-	public boolean shouldTryAgain(int failureCount)
+-	{
+-		return failureCount <= 3;
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/RetryStrategy.java
++++ /dev/null
+@@ -1,49 +0,0 @@
+-/*
+- * Copyright (C) 2009 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader;
+-
+-/**
+- * An interface which specifies the API necessary for an implementation which tells the ArtifactDownloader
+- * whether or not it should retry to download an artifact upon successive failures and how long to wait before
+- * retrying. This is an attempt to make this behavior pluggable in order to allow for time between retrying to
+- * download from websites, but make the tests run as quickly as possible.
+- */
+-public interface RetryStrategy
+-{
+-	/**
+-	 * Whether or not the specified failureCount indicates that the operation should be retried.
+-	 * 
+-	 * @param failureCount
+-	 *           the number of times the operation has failed
+-	 * @return true if the operation should be retried; false otherwise
+-	 */
+-	boolean shouldTryAgain(int failureCount);
+-
+-	/**
+-	 * How long to wait before trying again. The specified failure count can be used to implement an
+-	 * exponential backoff so that with each successive retry, more time is given to allow the circumstances
+-	 * that yielded failure to correct themselves. For example, file transfer can fail for many reasons, most
+-	 * of which are transient failures that will correct themselves if given enough time.
+-	 * 
+-	 * @param failureCount
+-	 *           the number of times that the operation has failed so far.
+-	 * @return the number of milliseconds to wait before retrying.
+-	 */
+-	long getTimeToWaitBeforeRetrying(int failureCount);
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/event/DownloadEventType.java
++++ /dev/null
+@@ -1,39 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader.event;
+-
+-/**
+- * An enumeration of the types of download events that can occur.
+- * 
+- * @author manningr
+- */
+-public enum DownloadEventType {
+-   /** Started the process of downloading one or more files */
+-   DOWNLOAD_STARTED,
+-   /** User chose to stop the process of downloading one or more files */
+-   DOWNLOAD_STOPPED,
+-   /** The process of downloading one or more files failed for some reason */
+-   DOWNLOAD_FAILED,
+-   /** The process of downloading one or more files completed without error */
+-   DOWNLOAD_COMPLETED,
+-   /** The download of a single file started */
+-   DOWNLOAD_FILE_STARTED,
+-   /** The download of a single file completed */
+-   DOWNLOAD_FILE_COMPLETED
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/event/DownloadStatusEvent.java
++++ /dev/null
+@@ -1,121 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader.event;
+-
+-/**
+- * Describes something that happened while downloading updates. This might be download started/ended, file
+- * started/ended, etc.
+- * 
+- * @author manningr
+- */
+-public class DownloadStatusEvent
+-{
+-
+-	private DownloadEventType _type = null;
+-
+-	private String _filename = null;
+-
+-	private int _fileCountTotal = 0;
+-
+-	private Exception _exception = null;
+-
+-	public DownloadStatusEvent(DownloadEventType type)
+-	{
+-		this._type = type;
+-	}
+-
+-	public DownloadEventType getType()
+-	{
+-		return this._type;
+-	}
+-
+-	/**
+-	 * @return the _filename
+-	 */
+-	public String getFilename()
+-	{
+-		return _filename;
+-	}
+-
+-	/**
+-	 * @param _filename
+-	 *           the _filename to set
+-	 */
+-	public void setFilename(String _filename)
+-	{
+-		this._filename = _filename;
+-	}
+-
+-	/**
+-	 * @return the _exception
+-	 */
+-	public Exception getException()
+-	{
+-		return _exception;
+-	}
+-
+-	/**
+-	 * @param _exception
+-	 *           the _exception to set
+-	 */
+-	public void setException(Exception _exception)
+-	{
+-		this._exception = _exception;
+-	}
+-
+-	/**
+-	 * @return the _fileCountTotal
+-	 */
+-	public int getFileCountTotal()
+-	{
+-		return _fileCountTotal;
+-	}
+-
+-	/**
+-	 * @param countTotal
+-	 *           the _fileCountTotal to set
+-	 */
+-	public void setFileCountTotal(int countTotal)
+-	{
+-		_fileCountTotal = countTotal;
+-	}
+-
+-	/**
+-	 * Constructs a <code>String</code> with all attributes in name = value format.
+-	 * 
+-	 * @return a <code>String</code> representation of this object.
+-	 */
+-	public String toString()
+-	{
+-		final String TAB = "    ";
+-
+-		String retValue = "";
+-
+-		retValue = "DownloadStatusEvent ( "
+-         + super.toString() + TAB
+-         + "_type = " + this._type + TAB
+-         + "_filename = " + this._filename + TAB
+-         + "_fileCountTotal = " + this._fileCountTotal + TAB
+-         + "_exception = " + this._exception + TAB
+-         + " )";
+-
+-		return retValue;
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/downloader/event/DownloadStatusListener.java
++++ /dev/null
+@@ -1,32 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.downloader.event;
+-
+-
+-/**
+- * Callback interface that allows the update controller to be notified when the 
+- * downloads have completed/failed.
+- * 
+- * @author manningr
+- */
+-public interface DownloadStatusListener {
+-
+-   void handleDownloadStatusEvent(DownloadStatusEvent evt);   
+-   
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/ArtifactAction.java
++++ /dev/null
+@@ -1,39 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui;
+-
+-import java.io.Serializable;
+-
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.EnumPersistenceDelegate;
+-
+-/**
+- * An enumeration that captures a user's desire for change for any given 
+- * artifact.
+- *  
+- * @author manningr
+- *
+- */
+-public enum ArtifactAction implements Serializable {
+-   NONE,
+-   INSTALL,
+-   REMOVE;
+-   
+-   static { EnumPersistenceDelegate.installFor(values()[0].getClass()); }   
+-}
+-
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/ArtifactStatus.java
++++ /dev/null
+@@ -1,286 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui;
+-
+-import java.io.Serializable;
+-
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ArtifactXmlBean;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-
+-/**
+- * Data object that contains information about available artifact updates.  Each
+- * instance describes the status of one single update artifact.
+- * 
+- * @author manningr
+- */
+-public class ArtifactStatus implements Serializable {
+-
+-   private transient static final long serialVersionUID = 3902196017013411091L;
+-
+-   /** Internationalized strings for this class. */
+-   private transient static final StringManager s_stringMgr = 
+-      StringManagerFactory.getStringManager(ArtifactStatus.class);
+-   
+-   private interface i18n extends Serializable {
+-      //i18n[ArtifactStatus.translationLabel=translation]
+-      String TRANSLATION_LABEL = s_stringMgr.getString("ArtifactStatus.translationLabel");
+-      
+-      //i18n[ArtifactStatus.coreLabel=core]
+-      String CORE_LABEL = s_stringMgr.getString("ArtifactStatus.coreLabel");
+-      
+-      //i18n[ArtifactStatus.pluginLabel=plugin]
+-      String PLUGIN_LABEL = s_stringMgr.getString("ArtifactStatus.pluginLabel");
+-   }
+-      
+-   /** the name of the artifact */
+-   private String name = null;
+-   
+-   /** the type of the artifact (e.g. Core, Plugin, Translation (I18n)) */
+-   private String type;
+-   
+-   /** boolean indicating whether or not the artifact is currently installed */
+-   private boolean installed;
+-   
+-   /** The type of this artifact, which is displayed to the user */
+-   private String displayType;
+-   
+-   /** The action to take with this artifact */
+-   private ArtifactAction artifactAction = ArtifactAction.NONE;
+-
+-   /** The size of the artifact in bytes */
+-	private long size;
+-
+-	/** The checksum of the artifact */
+-	private long checksum;
+-   
+-	public ArtifactStatus() {}
+-	
+-	/**
+-	 * Constructs an ArtifactStatus from the specified ArtifactXmlBean
+-	 * 
+-	 * @param artifactXmlBean
+-	 */
+-	public ArtifactStatus(ArtifactXmlBean artifactXmlBean) {
+-		this.name = artifactXmlBean.getName();
+-		this.installed = artifactXmlBean.isInstalled();
+-		this.size = artifactXmlBean.getSize();
+-		this.checksum = artifactXmlBean.getChecksum();
+-		setType(artifactXmlBean.getType());
+-	}
+-	
+-   /**
+-    * @return the _name
+-    */
+-   public String getName() {
+-      return name;
+-   }
+-
+-   /**
+-    * @param name the _name to set
+-    */
+-   public void setName(String name) {
+-      this.name = name;
+-   }
+-
+-   /**
+-    * @return the _type
+-    */
+-   public String getType() {
+-      return type;
+-   }
+-
+-   /**
+-    * @param type the _type to set
+-    */
+-   public void setType(String type) {
+-      this.type = type;
+-   	if (type == null) {
+-   		return;
+-   	}
+-      if (type.equals(UpdateUtil.TRANSLATION_ARTIFACT_ID)) {
+-         this.displayType = i18n.TRANSLATION_LABEL;
+-      }
+-      if (type.equals(UpdateUtil.CORE_ARTIFACT_ID)) {
+-         this.displayType = i18n.CORE_LABEL;
+-      }
+-      if (type.equals(UpdateUtil.PLUGIN_ARTIFACT_ID)) {
+-         this.displayType = i18n.PLUGIN_LABEL;
+-      }      
+-   }
+-
+-   public boolean isCoreArtifact() {
+-      return UpdateUtil.CORE_ARTIFACT_ID.equals(this.type);
+-   }
+-   
+-   public boolean isPluginArtifact() {
+-      return UpdateUtil.PLUGIN_ARTIFACT_ID.equals(this.type);
+-   }
+-   
+-   public boolean isTranslationArtifact() {
+-      return UpdateUtil.TRANSLATION_ARTIFACT_ID.equals(this.type);
+-   }
+-   
+-   /**
+-    * @return the installed
+-    */
+-   public boolean isInstalled() {
+-      return installed;
+-   }
+-
+-   /**
+-    * @param installed the installed to set
+-    */
+-   public void setInstalled(boolean installed) {
+-      this.installed = installed;
+-   }
+-
+-   /**
+-    * @return the artifactAction
+-    */
+-   public ArtifactAction getArtifactAction() {
+-      return artifactAction;
+-   }
+-
+-   /**
+-    * @param action the artifactAction to set
+-    */
+-   public void setArtifactAction(ArtifactAction artifactAction) {
+-      this.artifactAction = artifactAction;
+-   }
+-
+-   /**
+-    * @return the displayType
+-    */
+-   public String getDisplayType() {
+-      return displayType;
+-   }
+-
+-   /**
+-    * @param displayType the displayType to set
+-    */
+-   public void setDisplayType(String displayType) {
+-      this.displayType = displayType;
+-   }
+-
+-   /**
+-    * @see java.lang.Object#hashCode()
+-    */
+-   @Override
+-   public int hashCode() {
+-      final int prime = 31;
+-      int result = 1;
+-      result = prime * result + ((name == null) ? 0 : name.hashCode());
+-      result = prime * result + ((type == null) ? 0 : type.hashCode());
+-      return result;
+-   }
+-
+-   /**
+-    * @see java.lang.Object#equals(java.lang.Object)
+-    */
+-   @Override
+-   public boolean equals(Object obj) {
+-      if (this == obj)
+-         return true;
+-      if (obj == null)
+-         return false;
+-      if (getClass() != obj.getClass())
+-         return false;
+-      final ArtifactStatus other = (ArtifactStatus) obj;
+-      if (name == null) {
+-         if (other.name != null)
+-            return false;
+-      } else if (!name.equals(other.name))
+-         return false;
+-      if (type == null) {
+-         if (other.type != null)
+-            return false;
+-      } else if (!type.equals(other.type))
+-         return false;
+-      return true;
+-   }
+-
+-	/**
+-	  * Constructs a <code>String</code> with all attributes
+-	  * in name = value format.
+-	  *
+-	  * @return a <code>String</code> representation 
+-	  * of this object.
+-	  */
+-	 public String toString()
+-	 {
+-	     final String TAB = "    ";
+-	     
+-	     String retValue = "";
+-	     
+-	     retValue = "ArtifactStatus ( "
+-	         + super.toString() + TAB
+-	         + "name = " + this.name + TAB
+-	         + "type = " + this.type + TAB
+-	         + "installed = " + this.installed + TAB
+-	         + "displayType = " + this.displayType + TAB
+-	         + "artifactAction = " + this.artifactAction + TAB
+-	         + " )";
+-	 
+-	     return retValue;
+-	 }
+-	 
+-	/**
+-	 * Sets the size (in bytes) of the artifact.
+-	 * 
+-	 * @param size the size of the file.
+-	 */
+-	public void setSize(long size)
+-	{
+-		this.size = size;
+-	}
+-
+-	/**
+-	 * @return the size
+-	 */
+-	public long getSize()
+-	{
+-		return size;
+-	}
+-	
+-	/**
+-	 * Sets the checksum of the file.
+-	 * 
+-	 * @param checksum the checksum of the file.
+-	 */
+-	public void setChecksum(long checksum)
+-	{
+-		this.checksum = checksum;
+-	}
+-
+-	/**
+-	 * Returns the checksum of the file.
+-	 * 
+-	 * @return the checksum the checksum of the file.
+-	 */
+-	public long getChecksum()
+-	{
+-		return checksum;
+-	}
+-
+-   
+-   
+-   
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/CheckUpdateListener.java
++++ /dev/null
+@@ -1,48 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui;
+-
+-/**
+- * A callback interface that allows the UpdateManagerDialog to tell the 
+- * controller that the user wants to check for updates, without requiring the 
+- * UpdateManagerDialog to have a reference to the UpdateController.
+- * 
+- * @author manningr
+- */
+-public interface CheckUpdateListener {
+-
+-   /**
+-    * Check for updates to the installed software.
+-    */
+-   void checkUpToDate();
+-   
+-   /**
+-    * Displays an error message dialog with the specified details.
+-    * 
+-    * @param title the title of the error message dialog
+-    * @param msg a message describing 
+-    * @param e the exception that was encountered
+-    */
+-   void showErrorMessage(String title, String msg, Exception e);
+-   
+-   /**
+-    * Shows the update preferences 
+-    */
+-   void showPreferences();
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/UpdateManagerDialog.java
++++ /dev/null
+@@ -1,358 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.gui;
+-
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-
+-import java.awt.BorderLayout;
+-import java.awt.Color;
+-import java.awt.Dimension;
+-import java.awt.GridBagConstraints;
+-import java.awt.GridBagLayout;
+-import java.awt.Insets;
+-import java.awt.event.ActionEvent;
+-import java.awt.event.ActionListener;
+-import java.util.ArrayList;
+-
+-import javax.swing.JButton;
+-import javax.swing.JDialog;
+-import javax.swing.JFrame;
+-import javax.swing.JLabel;
+-import javax.swing.JPanel;
+-import javax.swing.JTextField;
+-import javax.swing.SwingConstants;
+-import javax.swing.border.Border;
+-import javax.swing.border.EmptyBorder;
+-import javax.swing.border.LineBorder;
+-
+-import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-
+-/**
+- * The dialog that presents the user with the option to check for updates.
+- * 
+- */
+-public class UpdateManagerDialog extends JDialog {
+-   private static final long serialVersionUID = 1L;
+-
+-   /** Internationalized strings for this class. */
+-   private static final StringManager s_stringMgr = 
+-      StringManagerFactory.getStringManager(UpdateManagerDialog.class);
+-
+-   /* GUI Widgets */
+-
+-   /** Check button for dialog */
+-   private JButton _checkBtn = null;
+-
+-   /** Configure button for dialog */
+-   private JButton _configBtn = null;
+-   
+-   /** Close button for dialog. */
+-   private JButton _closeBtn = null;
+-
+-   /** server hostname textfield */
+-   private JTextField _updateServerNameTF = null;
+-   
+-   /** server port textfield */
+-   private JTextField _updateServerPortTF = null;
+-   
+-   /** server path textfield */
+-   private JTextField _updateServerPathTF = null;
+-   
+-   /** server channel textfield */
+-   private JTextField _updateServerChannelTF = null;
+-   
+-   /** local path textfield */
+-   private JTextField _localUpdatePath = null;
+-      
+-   /** registered check update listeners */
+-   private ArrayList<CheckUpdateListener> _checkUpdateListeners = 
+-      new ArrayList<CheckUpdateListener>();
+-   
+-   private boolean isRemoteUpdateSite = true;
+-   
+-   static interface i18n {
+-      // i18n[UpdateManagerDialog.channelLabel=Channel:]
+-      String CHANNEL_LABEL = s_stringMgr.getString("UpdateManagerDialog.channelLabel");
+-      
+-      // i18n[UpdateManagerDialog.checkButtonLabel=Check]
+-      String CHECK_LABEL = s_stringMgr.getString("UpdateManagerDialog.checkButtonLabel");
+-
+-      // i18n[UpdateManagerDialog.closeLabel=Close]
+-      String CLOSE_LABEL = s_stringMgr.getString("UpdateManagerDialog.closeLabel");
+-
+-      // i18n[UpdateManagerDialog.hostLabel=Host:]
+-      String HOST_LABEL = s_stringMgr.getString("UpdateManagerDialog.hostLabel");
+-
+-      String LOCAL_UPDATE_PATH_LABEL = "Local Update Path:";
+-      
+-      // i18n[UpdateManagerDialog.repositoryTabLabel=Repository]
+-      String LOCATION_TAB_LABEL = s_stringMgr.getString("UpdateManagerDialog.repositoryTabLabel");
+-
+-      // i18n[UpdateManagerDialog.pathLabel=Path:]
+-      String PATH_LABEL = s_stringMgr.getString("UpdateManagerDialog.pathLabel");
+-
+-      // i18n[UpdateManagerDialog.portLabel=Port:]
+-      String PORT_LABEL = s_stringMgr.getString("UpdateManagerDialog.portLabel");
+-
+-      // i18n[UpdateManagerDialog.settingsLabel=Settings]
+-      String SETTINGS_LABEL = s_stringMgr.getString("UpdateManagerDialog.settingsLabel");
+-
+-      // i18n[UpdateManagerDialog.title=Update Manager]
+-      String TITLE = s_stringMgr.getString("UpdateManagerDialog.title");
+-   }
+-
+-   /**
+-    * 
+-    * @param parent
+-    */
+-   public UpdateManagerDialog(JFrame parent, boolean isRemoteUpdateSite) {
+-      super(parent, i18n.TITLE, true);
+-      setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
+-      this.isRemoteUpdateSite = isRemoteUpdateSite;
+-      init();
+-   }
+-
+-   /**
+-    * Sets the value for the update server name.
+-    * 
+-    * @param name the hostname of the update server.
+-    */
+-   public void setUpdateServerName(String nameStr) {
+-      _updateServerNameTF.setText(nameStr);
+-   }
+-   
+-   /**
+-    * Sets the value for the update server port.
+-    * 
+-    * @param port the port of the update server.
+-    */
+-   public void setUpdateServerPort(String portStr) {
+-      _updateServerPortTF.setText(portStr);
+-   }
+-   
+-   /**
+-    * Sets the update server path (directory where release.xml is located).
+-    *  
+-    * @param pathStr the update server path.
+-    */
+-   public void setUpdateServerPath(String pathStr) {
+-      _updateServerPathTF.setText(pathStr);
+-   }
+-   
+-   /**
+-    * Sets the update server channel.
+-    * 
+-    * @param channelStr the update server channel.
+-    */
+-   public void setUpdateServerChannel(String channelStr) {
+-      _updateServerChannelTF.setText(channelStr);
+-   }
+-   
+-   public void setLocalUpdatePath(String path) {
+-      _localUpdatePath.setText(path);
+-   }
+-   
+-   
+-   /**
+-    * Adds a listener which is called when check for updates action is invoked
+-    * from this dialog.
+-    * 
+-    * @param listener the CheckUpdateListener to be registered.
+-    */
+-   public void addCheckUpdateListener(CheckUpdateListener listener) {
+-      this._checkUpdateListeners.add(listener);
+-   }
+-   
+-   /** Initialized the UI components */
+-   private void init() {
+-      this.setLayout(new BorderLayout());
+-      JPanel locationPanel = null;
+-      if (isRemoteUpdateSite) {
+-         locationPanel = getRemoteLocationPanel();
+-      } else {
+-         locationPanel = getLocalUpdateSitePanel();
+-      }
+-
+-      this.add(locationPanel, BorderLayout.CENTER);
+-      this.add(getButtonPanel(), BorderLayout.SOUTH);
+-      this.setSize(300, 200);
+-      GUIUtils.centerWithinParent(this);
+-   }
+-
+-   private JPanel getRemoteLocationPanel() {
+-      EmptyBorder border = new EmptyBorder(new Insets(5, 5, 5, 5));
+-      Dimension mediumField = new Dimension(200, 20);
+-      Dimension portField = new Dimension(50, 20);
+-
+-      JPanel locationPanel = new JPanel();
+-      locationPanel.setBorder(new EmptyBorder(0, 0, 0, 10));
+-      locationPanel.setLayout(new GridBagLayout());
+-
+-      int x = 0;
+-      int y = -1;
+-
+-      GridBagConstraints c = new GridBagConstraints();
+-      c.gridx = x;
+-      c.gridy = y;
+-      c.anchor = GridBagConstraints.NORTH;
+-
+-      JLabel hostLabel = getBorderedLabel(i18n.HOST_LABEL, border);
+-      _updateServerNameTF = getSizedTextField(mediumField);
+-
+-      locationPanel.add(hostLabel, getLabelConstraints(c));
+-      locationPanel.add(_updateServerNameTF, getFieldFillHorizontalConstaints(c));
+-
+-      JLabel portLabel = getBorderedLabel(i18n.PORT_LABEL, border);
+-      _updateServerPortTF = getSizedTextField(portField);
+-
+-      locationPanel.add(portLabel, getLabelConstraints(c));
+-      locationPanel.add(_updateServerPortTF, getFieldConstraints(c));
+-
+-      JLabel pathLabel = getBorderedLabel(i18n.PATH_LABEL, border);
+-      _updateServerPathTF = getSizedTextField(mediumField);
+-
+-      locationPanel.add(pathLabel, getLabelConstraints(c));
+-      locationPanel.add(_updateServerPathTF, getFieldFillHorizontalConstaints(c));
+-
+-      JLabel channelLabel = getBorderedLabel(i18n.CHANNEL_LABEL, border);
+-      _updateServerChannelTF = getSizedTextField(mediumField);
+-      
+-      locationPanel.add(channelLabel, getLabelConstraints(c));
+-      locationPanel.add(_updateServerChannelTF, getFieldFillHorizontalConstaints(c));
+-      locationPanel.setBorder(new LineBorder(Color.LIGHT_GRAY, 1));
+-      
+-      return locationPanel;
+-   }
+-   
+-   private JPanel getLocalUpdateSitePanel() {
+-      EmptyBorder border = new EmptyBorder(new Insets(5, 5, 5, 5));
+-      Dimension mediumField = new Dimension(200, 20);
+-
+-      JPanel locationPanel = new JPanel();
+-      locationPanel.setBorder(new EmptyBorder(0, 0, 0, 10));
+-      locationPanel.setLayout(new GridBagLayout());
+-
+-      int x = 0;
+-      int y = -1;
+-
+-      GridBagConstraints c = new GridBagConstraints();
+-      c.gridx = x;
+-      c.gridy = y;
+-      c.anchor = GridBagConstraints.NORTH;
+-
+-      JLabel localUpdatePathLabel = getBorderedLabel(i18n.LOCAL_UPDATE_PATH_LABEL, border);
+-      _localUpdatePath = getSizedTextField(mediumField);
+-
+-      locationPanel.add(localUpdatePathLabel, getLabelConstraints(c));
+-      locationPanel.add(_localUpdatePath, getFieldFillHorizontalConstaints(c));
+-      
+-      return locationPanel;
+-   }
+-   
+-   private JPanel getButtonPanel() {
+-      JPanel result = new JPanel();
+-
+-      _checkBtn = new JButton(i18n.CHECK_LABEL);
+-      _checkBtn.addActionListener(new ActionListener() {
+-         public void actionPerformed(ActionEvent e) {
+-            UpdateManagerDialog.this.setVisible(false);
+-            for (CheckUpdateListener listener: _checkUpdateListeners) {
+-               try {
+-                  listener.checkUpToDate();
+-               } catch (Exception ex) {
+-                  listener.showErrorMessage(
+-                     "Unexpected Exception",
+-                     "Update check failed with Exception: " + ex.getMessage(),
+-                     ex);
+-               }
+-            }            
+-         }
+-      });
+-
+-      _configBtn = new JButton(i18n.SETTINGS_LABEL);
+-      _configBtn.addActionListener(new ActionListener() {
+-         public void actionPerformed(ActionEvent e) {
+-            UpdateManagerDialog.this.setVisible(false);
+-            for (CheckUpdateListener listener: _checkUpdateListeners) {
+-               listener.showPreferences();
+-            }
+-         }
+-      });
+-      
+-      _closeBtn = new JButton(i18n.CLOSE_LABEL);
+-      _closeBtn.addActionListener(new ActionListener() {
+-         public void actionPerformed(ActionEvent e) {
+-            UpdateManagerDialog.this.setVisible(false);
+-         }
+-      });
+-
+-      result.add(_checkBtn);
+-      result.add(_configBtn);
+-      result.add(_closeBtn);
+-      return result;
+-   }
+-
+-   private GridBagConstraints getLabelConstraints(GridBagConstraints c) {
+-      c.gridx = 0;
+-      c.gridy++;
+-      c.anchor = GridBagConstraints.EAST;
+-      c.fill = GridBagConstraints.NONE;
+-      c.weightx = 0;
+-      c.weighty = 0;
+-      return c;
+-   }
+-
+-   private GridBagConstraints getFieldFillHorizontalConstaints(
+-         GridBagConstraints c) {
+-      c.gridx++;
+-      c.anchor = GridBagConstraints.WEST;
+-      c.weightx = 1;
+-      c.weighty = 1;
+-      c.fill = GridBagConstraints.HORIZONTAL;
+-      c.insets = new Insets(0, 0, 0, 5);
+-      return c;
+-   }
+-
+-   private GridBagConstraints getFieldConstraints(GridBagConstraints c) {
+-      c.gridx++;
+-      c.anchor = GridBagConstraints.WEST;
+-      c.weightx = 1;
+-      c.weighty = 1;
+-      c.fill = GridBagConstraints.NONE;
+-      return c;
+-   }
+-
+-   private JLabel getBorderedLabel(String text, Border border) {
+-      JLabel result = new JLabel(text);
+-      result.setBorder(border);
+-      result.setPreferredSize(new Dimension(115, 20));
+-      result.setHorizontalAlignment(SwingConstants.RIGHT);
+-      return result;
+-   }
+-
+-   private JTextField getSizedTextField(Dimension preferredSize) {
+-      JTextField result = new JTextField();
+-      result.setPreferredSize(preferredSize);
+-      result.setMinimumSize(preferredSize);
+-      result.setEditable(false);
+-      return result;
+-   }
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/UpdateSummaryDialog.java
++++ /dev/null
+@@ -1,182 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.gui;
+-
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * colbell at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-import java.awt.BorderLayout;
+-import java.awt.Container;
+-import java.awt.Frame;
+-import java.awt.event.ActionEvent;
+-import java.awt.event.ActionListener;
+-import java.awt.event.KeyEvent;
+-import java.util.List;
+-
+-import javax.swing.AbstractAction;
+-import javax.swing.BorderFactory;
+-import javax.swing.JButton;
+-import javax.swing.JComponent;
+-import javax.swing.JDialog;
+-import javax.swing.JFrame;
+-import javax.swing.JLabel;
+-import javax.swing.JPanel;
+-import javax.swing.JScrollPane;
+-import javax.swing.KeyStroke;
+-
+-import net.sourceforge.squirrel_sql.client.update.UpdateController;
+-import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-
+-/**
+- * This dialog displays a summary of update information
+- */
+-public class UpdateSummaryDialog extends JDialog {
+-   private static final long serialVersionUID = 1L;
+-
+-   /** Internationalized strings for this class. */
+-   private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(UpdateSummaryDialog.class);
+-
+-   private UpdateSummaryTable _updateSummaryTable;
+-
+-   private JLabel _installedVersionLabel = null;
+-   
+-   private JLabel _availableVersionLabel = null;
+-   
+-   private String _installedVersion = null;
+-   
+-   private String _availableVersion = null;
+-   
+-   static interface i18n {
+-      // i18n[UpdateSummaryDialog.applyLabel=Apply Changes]
+-      String APPLY_LABEL = s_stringMgr.getString("UpdateSummaryDialog.applyLabel");
+-
+-      // i18n[UpdateSummaryDialog.title=Update Summary]
+-      String TITLE = s_stringMgr.getString("UpdateSummaryDialog.title");
+-      
+-      // i18n[UpdateSummaryDialog.currentVersionPrefix=Current Version:]
+-      String AVAILABLE_VERSION_PREFIX = 
+-         s_stringMgr.getString("UpdateSummaryDialog.currentVersionPrefix");
+-      
+-      // i18n[UpdateSummaryDialog.installedVersionPrefix=Installed Version:]
+-      String INSTALLED_VERSION_PREFIX = 
+-         s_stringMgr.getString("UpdateSummaryDialog.installedVersionPrefix");
+-      
+-      //i18n[UpdateSummaryDialog.close=Close]
+-      String CLOSE_LABEL = 
+-         s_stringMgr.getString("UpdateSummaryDialog.close");
+-   }
+-
+-   public UpdateSummaryDialog(Frame owner, List<ArtifactStatus> artifactStatus,
+-         UpdateController updateController) 
+-   {
+-      super(owner, i18n.TITLE);
+-      createGUI(artifactStatus, updateController);
+-   }
+-
+-   public void setInstalledVersion(String installedVersion) {
+-   	_installedVersion = installedVersion;
+-      StringBuilder tmp = new StringBuilder(i18n.INSTALLED_VERSION_PREFIX);
+-      tmp.append(" ");
+-      tmp.append(installedVersion);
+-      _installedVersionLabel.setText(tmp.toString());
+-      setReleaseVersionWillChangeFlag();
+-   }
+-   
+-   public void setAvailableVersion(String availableVersion) {
+-   	_availableVersion = availableVersion;
+-      StringBuilder tmp = new StringBuilder(i18n.AVAILABLE_VERSION_PREFIX);
+-      tmp.append(" ");
+-      tmp.append(availableVersion);
+-      _availableVersionLabel.setText(tmp.toString());   
+-      setReleaseVersionWillChangeFlag();
+-   }
+-   
+-   private void setReleaseVersionWillChangeFlag() {
+-   	if (_availableVersion == null || _installedVersion == null) {
+-   		return;
+-   	}
+-   	_updateSummaryTable.setReleaseVersionWillChange(!_availableVersion.equals(_installedVersion));
+-   }
+-   
+-   private void createGUI(final List<ArtifactStatus> artifactStatus, 
+-                          final UpdateController updateController) {
+-      setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+-
+-      final Container contentPane = getContentPane();
+-      contentPane.setLayout(new BorderLayout());
+-
+-      _installedVersionLabel = new JLabel();
+-      _installedVersionLabel.setBorder(BorderFactory.createEmptyBorder(1, 4, 1, 4));
+-      
+-      _availableVersionLabel = new JLabel();
+-      _availableVersionLabel.setBorder(BorderFactory.createEmptyBorder(1, 4, 1, 4));
+-      
+-      JPanel labelPanel = new JPanel();
+-      labelPanel.add(_installedVersionLabel);
+-      labelPanel.add(_availableVersionLabel);
+-      // Label panel containing the versions for the update at top of dialog.
+-      contentPane.add(labelPanel, BorderLayout.NORTH);
+-
+-      UpdateSummaryTableModel model = new UpdateSummaryTableModel(artifactStatus);
+-      _updateSummaryTable = new UpdateSummaryTable(artifactStatus, model);
+-      contentPane.add(new JScrollPane(_updateSummaryTable), BorderLayout.CENTER);
+-
+-      final JPanel btnsPnl = new JPanel();
+-      final JButton okBtn = new JButton(i18n.APPLY_LABEL);
+-      okBtn.addActionListener(new ActionListener() {
+-         public void actionPerformed(ActionEvent evt) {
+-            List<ArtifactStatus> changes = 
+-               _updateSummaryTable.getUserRequestedChanges();
+-            updateController.applyChanges(changes, _updateSummaryTable.getReleaseVersionWillChange());
+-         }
+-      });
+-      btnsPnl.add(okBtn);
+-
+-      final JButton closeBtn = new JButton(i18n.CLOSE_LABEL);
+-      closeBtn.addActionListener(new ActionListener() {
+-         public void actionPerformed(ActionEvent evt) {
+-            dispose();
+-         }
+-      });
+-      btnsPnl.add(closeBtn);
+-      contentPane.add(btnsPnl, BorderLayout.SOUTH);
+-
+-      AbstractAction closeAction = new AbstractAction() {
+-         private static final long serialVersionUID = 1L;
+-
+-         public void actionPerformed(ActionEvent actionEvent) {
+-            setVisible(false);
+-            dispose();
+-         }
+-      };
+-      KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
+-      getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+-                   .put(escapeStroke, "CloseAction");
+-      getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+-                   .put(escapeStroke, "CloseAction");
+-      getRootPane().getInputMap(JComponent.WHEN_FOCUSED).put(escapeStroke,
+-                                                             "CloseAction");
+-      getRootPane().getActionMap().put("CloseAction", closeAction);
+-
+-      pack();
+-      setSize(655, 500);
+-      GUIUtils.centerWithinParent(this);
+-      setResizable(true);
+-
+-   }
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/UpdateSummaryTable.java
++++ /dev/null
+@@ -1,273 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.gui;
+-
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-import static net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction.INSTALL;
+-import static net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction.NONE;
+-import static net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction.REMOVE;
+-
+-import java.awt.event.ActionEvent;
+-import java.awt.event.ActionListener;
+-import java.awt.event.MouseAdapter;
+-import java.awt.event.MouseEvent;
+-import java.util.ArrayList;
+-import java.util.Iterator;
+-import java.util.List;
+-
+-import javax.swing.ComboBoxModel;
+-import javax.swing.DefaultCellEditor;
+-import javax.swing.DefaultComboBoxModel;
+-import javax.swing.JComboBox;
+-import javax.swing.JMenuItem;
+-import javax.swing.JPopupMenu;
+-import javax.swing.ListSelectionModel;
+-import javax.swing.event.PopupMenuEvent;
+-import javax.swing.event.PopupMenuListener;
+-import javax.swing.table.DefaultTableColumnModel;
+-import javax.swing.table.TableColumn;
+-import javax.swing.table.TableColumnModel;
+-
+-import net.sourceforge.squirrel_sql.fw.gui.SortableTable;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-
+-/**
+- * Implements the table summary of updates which includes artifacts in each of
+- * the core, plugins and translations modules.
+- * 
+- * @author manningr
+- */
+-public class UpdateSummaryTable extends SortableTable {
+-
+-	private static final long serialVersionUID = 1L;
+-
+-   /** Internationalized strings for this class. */
+-   private static final StringManager s_stringMgr = 
+-   	StringManagerFactory.getStringManager(UpdateSummaryTable.class);
+-   
+-   private interface i18n {
+-   	//i18n[UpdateSummaryTable.allTranslationsLabel=All translations]
+-   	String ALL_TRANSLATIONS_LABEL = s_stringMgr.getString("UpdateSummaryTable.allTranslationsLabel");
+-   	
+-   	//i18n[UpdateSummaryTable.allPluginsLabel=All plugins]
+-   	String ALL_PLUGINS_LABEL = s_stringMgr.getString("UpdateSummaryTable.allPluginsLabel");
+-   	
+-   	//i18n[UpdateSummaryTable.installOptionsLabel=Install Options]
+-   	String INSTALL_OPTIONS_LABEL = s_stringMgr.getString("UpdateSummaryTable.installOptionsLabel");
+-   }
+-
+-   private List<ArtifactStatus> _artifacts = null;
+-   private boolean _releaseVersionWillChange = false;
+-   private UpdateSummaryTableModel _model = null;
+-   
+-   public UpdateSummaryTable(List<ArtifactStatus> artifactStatus, 
+-                             UpdateSummaryTableModel model) {
+-      super(model);
+-      _model = model;
+-      _artifacts = artifactStatus;
+-      setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
+-      getTableHeader().setResizingAllowed(true);
+-      getTableHeader().setReorderingAllowed(true);
+-      setAutoCreateColumnsFromModel(false);
+-      setAutoResizeMode(AUTO_RESIZE_LAST_COLUMN);
+-
+-      final TableColumnModel tcm = new DefaultTableColumnModel();
+-      JComboBox _actionComboBox = new JComboBox();
+-		for (int i = 0; i < model.getColumnCount(); ++i) {
+-         final TableColumn col = new TableColumn(i, model.getColumnWidth(i));
+-         col.setHeaderValue(model.getColumnName(i));
+-         if (i == 3) {
+-            col.setCellEditor(new DefaultCellEditor(initCbo(_actionComboBox)));
+-         }
+-         tcm.addColumn(col);
+-      }
+-      setColumnModel(tcm);
+-      initPopup();
+-   }
+-
+-   /**
+-    * Gets the list of changes requested by the user.
+-    */
+-   public List<ArtifactStatus> getUserRequestedChanges() {
+-      List<ArtifactStatus> changes = new ArrayList<ArtifactStatus>();
+-      for (ArtifactStatus artifactStatus : _artifacts) {
+-         if (artifactStatus.getArtifactAction() != ArtifactAction.NONE) {
+-            changes.add(artifactStatus);
+-         }
+-      }
+-      return changes;
+-   }
+-
+-	/**
+-	 * This will adjust the list of artifacts presented to the user based on whether or not the release version
+-	 * will change.
+-	 * 
+-	 * @param releaseVersionWillChange
+-	 *           a boolean value indicating whether or not the release version will change - that is, whether
+-	 *           or not new core artifacts will be downloaded.
+-	 */
+-	public void setReleaseVersionWillChange(boolean releaseVersionWillChange)
+-	{
+-		Iterator<ArtifactStatus> i = _artifacts.iterator();
+-		_releaseVersionWillChange = releaseVersionWillChange;
+-		if (releaseVersionWillChange) {
+-			// All currently installed artifacts will be marked with INSTALL action. 
+-			while (i.hasNext()) {
+-				ArtifactStatus status = i.next();
+-				if (status.isInstalled()) {
+-					status.setArtifactAction(ArtifactAction.INSTALL);
+-				}
+-			}
+-			
+-		} else {
+-			// Remove the core items since they are the most recent, and the user is not allowed to remove them
+-			while (i.hasNext()) {
+-				ArtifactStatus status = i.next();
+-				if (status.isCoreArtifact()) {
+-					i.remove();
+-				}
+-			}
+-			
+-		}
+-	}
+-	
+-	/**
+-	 * @return a boolean value indicating whether or not the release version will change with this update.
+-	 */
+-	public boolean getReleaseVersionWillChange() {
+-		return _releaseVersionWillChange;
+-	}
+-   
+-   
+-   private void initPopup() {
+-      final JPopupMenu popup = new JPopupMenu(i18n.INSTALL_OPTIONS_LABEL);
+-      
+-      JMenuItem pluginItem = new JMenuItem(i18n.ALL_PLUGINS_LABEL);
+-      pluginItem.addActionListener(new ActionListener() {
+-         public void actionPerformed(ActionEvent e) {
+-            for (ArtifactStatus status : _artifacts) {
+-               if (status.isPluginArtifact()) {
+-                  status.setArtifactAction(ArtifactAction.INSTALL);
+-               }
+-            }
+-            _model.fireTableDataChanged();
+-         }
+-      });
+-      JMenuItem translationItem = new JMenuItem(i18n.ALL_TRANSLATIONS_LABEL);
+-      translationItem.addActionListener(new ActionListener() {
+-         public void actionPerformed(ActionEvent e) {
+-            for (ArtifactStatus status : _artifacts) {
+-               if (status.isTranslationArtifact()) {
+-                  status.setArtifactAction(ArtifactAction.INSTALL);
+-               }
+-            }
+-            _model.fireTableDataChanged();
+-         }
+-      });
+-                  
+-      popup.add(pluginItem);
+-      popup.add(translationItem);
+-      
+-      addMouseListener(new MouseAdapter() {
+-         public void mousePressed(MouseEvent event){
+-          if(popup.isPopupTrigger(event)){
+-           popup.show(event.getComponent(), event.getX(),event.getY());
+-          }
+-         }
+-         public void mouseReleased(MouseEvent event){
+-          if(popup.isPopupTrigger(event)){
+-           popup.show(event.getComponent(), event.getX(),event.getY());
+-          }
+-         }
+-        });            
+-   }
+-      
+-   private JComboBox initCbo(final JComboBox cbo) {
+-      cbo.setEditable(false);
+-      setModel(cbo, NONE, INSTALL, REMOVE);
+-      
+-      cbo.addPopupMenuListener(new PopupMenuListener() {
+-			public void popupMenuCanceled(PopupMenuEvent e) {}
+-			public void popupMenuWillBecomeInvisible(PopupMenuEvent e){}
+-			public void popupMenuWillBecomeVisible(PopupMenuEvent e)
+-			{
+-				JComboBox source =(JComboBox) e.getSource();
+-				updateDataModel(source);
+-			}
+-      });
+-      
+-      return cbo;
+-   }
+-   
+-   /**
+-    *  We want to adjust the items in the popup menu that are available to the user to select
+-    *  based on 1) whether or not the release version will change, and 2) what type of artifact the row 
+-    *  is dealing with and 3) whether or not the artifact is already installed   
+-    * @param e
+-    * @param source
+-    */
+-   private void updateDataModel(JComboBox source) {
+-		final int row = UpdateSummaryTable.this.getEditingRow();
+-		if (row == -1) {
+-			return;
+-		}
+-		final ArtifactStatus as = UpdateSummaryTable.this._artifacts.get(row);
+-		
+-		// is it installed?
+-		boolean installed = as.isInstalled();
+-
+-		// get the type of artifact
+-		if (as.isCoreArtifact()) {
+-			if (_releaseVersionWillChange) {
+-				source.setModel(getComboBoxModel(INSTALL));
+-			} else {
+-				// core artifacts are not displayed
+-			}
+-		} else {
+-			if (_releaseVersionWillChange) {
+-				if (installed) {
+-					setModel(source, INSTALL, REMOVE);
+-				} else {
+-					setModel(source, NONE, INSTALL);
+-				}
+-			} else {
+-				if (installed) {
+-					setModel(source, NONE, REMOVE);
+-				} else {
+-					setModel(source, NONE, INSTALL);
+-				}
+-			}
+-		}   
+-   }
+-   
+-   private void setModel(JComboBox box, ArtifactAction... actions) {
+-   	ComboBoxModel oldModel = box.getModel();
+-   	box.setModel(getComboBoxModel(actions));
+-   	if (oldModel.getSize() != actions.length) {
+-   		box.firePropertyChange("itemCount", oldModel.getSize(), actions.length);
+-   	}
+-   }
+-   
+-   private ComboBoxModel getComboBoxModel(ArtifactAction... actions) {
+-   	ComboBoxModel result = new DefaultComboBoxModel(actions);
+-   	result.setSelectedItem(actions[0]);
+-   	return result;
+-   }
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/UpdateSummaryTableActionItem.java
++++ /dev/null
+@@ -1,42 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.gui;
+-
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-
+-
+-public class UpdateSummaryTableActionItem
+-{
+-   private ArtifactAction _action;
+-
+-   private UpdateSummaryTableActionItem(ArtifactAction action)
+-   {
+-      this._action = action;
+-   }
+-
+-   public String toString()
+-   {
+-      return _action.name();
+-   }
+-
+-   public void setValue(ArtifactAction action) {
+-      this._action = action;
+-   }
+-
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/UpdateSummaryTableModel.java
++++ /dev/null
+@@ -1,149 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui;
+-
+-import java.util.ArrayList;
+-import java.util.List;
+-
+-import javax.swing.table.AbstractTableModel;
+-
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-
+-
+-/**
+- * Model for the UpdateSummaryTable.
+- */
+-public class UpdateSummaryTableModel extends AbstractTableModel
+-{
+-
+-      private static final long serialVersionUID = 1L;
+-
+-      private List<ArtifactStatus> _artifacts = new ArrayList<ArtifactStatus>();
+-      
+-      /** Internationalized strings for this class. */
+-      private static final StringManager s_stringMgr = 
+-      	StringManagerFactory.getStringManager(UpdateSummaryTableModel.class);   
+-      
+-      private interface i18n {
+-         // i18n[UpdateSummaryTable.yes=yes]
+-         String YES_VAL = s_stringMgr.getString("UpdateSummaryTable.yes");
+-
+-         // i18n[UpdateSummaryTable.no=no]
+-         String NO_VAL = s_stringMgr.getString("UpdateSummaryTable.no");
+-      }
+-      
+-      private final static Class<?>[] s_dataTypes = 
+-         new Class[] { 
+-            String.class, // ArtifactName
+-            String.class, // Type
+-            String.class, // Installed?
+-            UpdateSummaryTableActionItem.class, // Install/Update/Remove
+-      };
+-      
+-      private final String[] s_hdgs = new String[] {
+-         s_stringMgr.getString("UpdateSummaryTable.artifactNameLabel"),
+-         s_stringMgr.getString("UpdateSummaryTable.typeLabel"),
+-         s_stringMgr.getString("UpdateSummaryTable.installedLabel"),
+-         s_stringMgr.getString("UpdateSummaryTable.actionLabel"), };
+-      
+-      
+-      private final int[] s_columnWidths = new int[] { 150, 100, 100, 50 };      
+-            
+-      UpdateSummaryTableModel(List<ArtifactStatus> artifacts) {
+-         _artifacts = artifacts;
+-      }
+-      
+-      /**
+-       * @see javax.swing.table.TableModel#getValueAt(int, int)
+-       */
+-      public Object getValueAt(int row, int col) {
+-         final ArtifactStatus as = _artifacts.get(row);
+-         switch (col) {
+-         case 0:
+-            return as.getName();
+-         case 1:
+-            return as.getType();
+-         case 2:
+-            return as.isInstalled() ? i18n.YES_VAL : i18n.NO_VAL;
+-         case 3:
+-         	if (as.isCoreArtifact()) {
+-         		return ArtifactAction.INSTALL;
+-         	}
+-            return as.getArtifactAction();
+-         default:
+-            throw new IndexOutOfBoundsException("" + col);
+-         }
+-      }
+-
+-      /**
+-       * @see javax.swing.table.TableModel#getRowCount()
+-       */
+-      public int getRowCount() {
+-         return _artifacts.size();
+-      }
+-
+-      /**
+-       * @see javax.swing.table.TableModel#getColumnCount()
+-       */
+-      public int getColumnCount() {
+-         return s_hdgs.length;
+-      }
+-
+-      /**
+-       * @see javax.swing.table.AbstractTableModel#getColumnName(int)
+-       */
+-      public String getColumnName(int col) {
+-         return s_hdgs[col];
+-      }
+-
+-      /**
+-       * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
+-       */
+-      public Class<?> getColumnClass(int col) {
+-         return s_dataTypes[col];
+-      }
+-
+-      /**
+-       * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
+-       */
+-      public boolean isCellEditable(int row, int col) {
+-      	return col == 3;      	
+-      }
+-
+-      /**
+-       * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int)
+-       */
+-      public void setValueAt(Object value, int row, int col) {
+-         final ArtifactStatus as = _artifacts.get(row);
+-         ArtifactAction action = 
+-            ArtifactAction.valueOf(value.toString()); 
+-         as.setArtifactAction(action);
+-      }
+-
+-		/**
+-		 * @return the column width for the specified column
+-		 */
+-		public int getColumnWidth(int col)
+-		{
+-			return s_columnWidths[col];
+-		}
+-   
+-	
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/ArtifactInstaller.java
++++ /dev/null
+@@ -1,82 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-
+-import java.io.FileNotFoundException;
+-import java.io.IOException;
+-
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-
+-/**
+- * Interface for the class that applies changes given in a ChangeListXmlBean to the actual installed files,
+- * using the download files. Provision for backing up current version of files and restoring is also provided.
+- */
+-public interface ArtifactInstaller
+-{
+-
+-	/**
+-	 * Adds the specified InstallStatusListener for the purpose of notification using InstallStatusEvents.
+-	 * 
+-	 * @param listener the listener to add.
+-	 */
+-	void addListener(InstallStatusListener listener);
+-
+-	/**
+-	 * 
+-	 * @return
+-	 * @throws FileNotFoundException
+-	 * @throws IOException
+-	 */
+-	boolean backupFiles() throws FileNotFoundException, IOException;
+-
+-	/**
+-	 * 
+-	 * @throws FileNotFoundException
+-	 * @throws IOException
+-	 */
+-	void installFiles() throws FileNotFoundException, IOException;
+-
+-	/**
+-	 * 
+-	 * @throws FileNotFoundException
+-	 * @throws IOException
+-	 */
+-	boolean restoreBackupFiles() throws FileNotFoundException, IOException;
+-		
+-	/**
+-	 * @param changeList
+-	 * @throws FileNotFoundException
+-	 */
+-	void setChangeList(ChangeListXmlBean changeList) throws FileNotFoundException;
+-
+-	/**
+-	 * @return the changeListFile
+-	 */
+-	FileWrapper getChangeListFile();
+-
+-	/**
+-	 * @param changeListFile the changeListFile to set
+-	 */
+-	void setChangeListFile(FileWrapper changeListFile);
+-
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/ArtifactInstallerFactory.java
++++ /dev/null
+@@ -1,32 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import java.io.FileNotFoundException;
+-
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-
+-public interface ArtifactInstallerFactory {
+-
+-	ArtifactInstaller create(ChangeListXmlBean changeList, InstallStatusListener listener) throws FileNotFoundException;
+-	
+-	ArtifactInstaller create(FileWrapper changeList, InstallStatusListener listener) throws FileNotFoundException;
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/ArtifactInstallerFactoryImpl.java
++++ /dev/null
+@@ -1,86 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import java.io.FileNotFoundException;
+-
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-
+-import org.springframework.beans.BeansException;
+-import org.springframework.context.ApplicationContext;
+-import org.springframework.context.ApplicationContextAware;
+-
+-public class ArtifactInstallerFactoryImpl implements ArtifactInstallerFactory, ApplicationContextAware
+-{
+-	private final static String ARTIFACT_INSTALLER_ID =
+-		"net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstaller";
+-
+-	private UpdateUtil updateUtil;
+-
+-	/** Spring-injected */
+-	private ApplicationContext applicationContext = null;
+-
+-	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
+-	{
+-		this.applicationContext = applicationContext;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstallerFactory#
+-	 * create(net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean, 
+-	 * net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener)
+-	 */
+-	public ArtifactInstaller create(ChangeListXmlBean changeList, InstallStatusListener listener)
+-		throws FileNotFoundException
+-	{
+-		ArtifactInstaller result = (ArtifactInstaller) applicationContext.getBean(ARTIFACT_INSTALLER_ID);
+-		if (listener != null) {
+-			result.addListener(listener);
+-		}
+-		result.setChangeList(changeList);
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstallerFactory#
+-	 * create(net.sourceforge.squirrel_sql.fw.util.FileWrapper,
+-	 *      net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener)
+-	 */
+-	public ArtifactInstaller create(FileWrapper changeList, InstallStatusListener listener)
+-		throws FileNotFoundException
+-	{
+-		ChangeListXmlBean changeListBean = updateUtil.getChangeList(changeList);
+-		ArtifactInstaller result = create(changeListBean, listener);
+-		result.setChangeListFile(changeList);
+-		return result;
+-	}
+-
+-	/**
+-	 * @param updateUtil
+-	 *           the updateUtil to set
+-	 */
+-	public void setUpdateUtil(UpdateUtil updateUtil)
+-	{
+-		this.updateUtil = updateUtil;
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/ArtifactInstallerImpl.java
++++ /dev/null
+@@ -1,849 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import java.io.FileNotFoundException;
+-import java.io.IOException;
+-import java.util.ArrayList;
+-import java.util.List;
+-
+-import javax.swing.SwingUtilities;
+-
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallEventType;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusEvent;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusEventFactory;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.util.InstallFileOperationInfo;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.util.InstallFileOperationInfoFactory;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-/**
+- * This class is used by the PreLaunchUpdateApplication to install artifact files that belong to a particular
+- * change list.
+- * 
+- * @author manningr
+- */
+-public class ArtifactInstallerImpl implements ArtifactInstaller
+-{
+-
+-	/** Logger for this class. */
+-	private static ILogger s_log = LoggerController.createLogger(ArtifactInstallerImpl.class);
+-
+-	/**
+-	 * this list is derived from the changelist xmlbean. It will only contain the artifacts that need to be
+-	 * change (installed, removed).
+-	 */
+-	private List<ArtifactStatus> _changeList = null;
+-
+-	/** listeners to notify of important install events */
+-	private List<InstallStatusListener> _listeners = new ArrayList<InstallStatusListener>();
+-
+-	/**
+-	 * the top-level directory beneath which reside all files needed for updating the application (e.g.
+-	 * /opt/squirrel/update)
+-	 */
+-	private FileWrapper updateDir = null;
+-
+-	// Download directories
+-
+-	/** the downlaods root directory (e.g. /opt/squirrel/update/downloads) */
+-	private FileWrapper downloadsRootDir = null;
+-
+-	/** the core sub-directory of the backup directory (e.g. /opt/squirrel/update/downloads/core) */
+-	private FileWrapper coreDownloadsDir = null;
+-
+-	/** the plugin sub-directory of the backup directory (e.g. /opt/squirrel/update/downloads/plugin) */
+-	private FileWrapper pluginDownloadsDir = null;
+-
+-	/** the i18n sub-directory of the backup directory (e.g. /opt/squirrel/update/downloads/i18n) */
+-	private FileWrapper i18nDownloadsDir = null;
+-
+-	// Backup directories
+-
+-	/** the backup directory (e.g. /opt/squirrel/update/backup) */
+-	private FileWrapper backupRootDir = null;
+-
+-	/** the core sub-directory of the backup directory (e.g. /opt/squirrel/update/backup/core) */
+-	private FileWrapper coreBackupDir = null;
+-
+-	/** the plugin sub-directory of the backup directory (e.g. /opt/squirrel/update/backup/plugin) */
+-	private FileWrapper pluginBackupDir = null;
+-
+-	/** the i18n sub-directory of the backup directory (e.g. /opt/squirrel/update/backup/i18n) */
+-	private FileWrapper translationBackupDir = null;
+-
+-	// Install directories
+-
+-	/** the top-level SQuirreL installation direction where launch scripts are (e.g. /opt/squirrel) */
+-	private FileWrapper installRootDir = null;
+-
+-	/** the lib directory where most core jars are (e.g. /opt/squirrel/lib) */
+-	private FileWrapper coreInstallDir = null;
+-
+-	/** the plugins directory where all of the plugin files are (e.g. /opt/squirrel/plugins) */
+-	private FileWrapper pluginInstallDir = null;
+-
+-	/** the lib directory where translation jars are (e.g. /opt/squirrel/lib) */
+-	private FileWrapper i18nInstallDir = null;
+-
+-	/**
+-	 * the file that was used to build a ChangeListXmlBean that we are using to determine which files need to
+-	 * be installed/removed
+-	 */
+-	private FileWrapper changeListFile = null;
+-
+-	/* Spring-injected dependencies */
+-
+-	/** Spring-injected factory for creating install events */
+-	private InstallStatusEventFactory installStatusEventFactory = null;
+-
+-	public void setInstallStatusEventFactory(InstallStatusEventFactory installStatusEventFactory)
+-	{
+-		this.installStatusEventFactory = installStatusEventFactory;
+-	}
+-
+-	/** Spring-injected factory for creating file operation infos */
+-	private InstallFileOperationInfoFactory installFileOperationInfoFactory = null;
+-
+-	public void setInstallFileOperationInfoFactory(
+-		InstallFileOperationInfoFactory installFileOperationInfoFactory)
+-	{
+-		this.installFileOperationInfoFactory = installFileOperationInfoFactory;
+-	}
+-
+-	/** Utility which provides path information and abstraction to file operations */
+-	private UpdateUtil _util = null;
+-
+-	public void setUpdateUtil(UpdateUtil util)
+-	{
+-		this._util = util;
+-		updateDir = _util.getSquirrelUpdateDir();
+-		backupRootDir = _util.checkDir(updateDir, UpdateUtil.BACKUP_ROOT_DIR_NAME);
+-		downloadsRootDir = _util.checkDir(updateDir, UpdateUtil.DOWNLOADS_DIR_NAME);
+-
+-		coreBackupDir = _util.checkDir(backupRootDir, UpdateUtil.CORE_ARTIFACT_ID);
+-		pluginBackupDir = _util.checkDir(backupRootDir, UpdateUtil.PLUGIN_ARTIFACT_ID);
+-		translationBackupDir = _util.checkDir(backupRootDir, UpdateUtil.TRANSLATION_ARTIFACT_ID);
+-
+-		installRootDir = _util.getSquirrelHomeDir();
+-
+-		coreInstallDir = _util.getSquirrelLibraryDir();
+-		pluginInstallDir = _util.getSquirrelPluginsDir();
+-		i18nInstallDir = _util.getSquirrelLibraryDir();
+-
+-		coreDownloadsDir = _util.getCoreDownloadsDir();
+-		pluginDownloadsDir = _util.getPluginDownloadsDir();
+-		i18nDownloadsDir = _util.getI18nDownloadsDir();
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstaller#setChangeList(net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean)
+-	 */
+-	public void setChangeList(ChangeListXmlBean changeList) throws FileNotFoundException
+-	{
+-		_changeList = initializeChangeList(changeList);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstaller#getChangeListFile()
+-	 */
+-	public FileWrapper getChangeListFile()
+-	{
+-		return changeListFile;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstaller#
+-	 *      setChangeListFile(java.io.File)
+-	 */
+-	public void setChangeListFile(FileWrapper changeListFile)
+-	{
+-		this.changeListFile = changeListFile;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstaller#
+-	 *      addListener(net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener)
+-	 */
+-	public void addListener(InstallStatusListener listener)
+-	{
+-		_listeners.add(listener);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstaller#backupFiles()
+-	 */
+-	public boolean backupFiles() throws FileNotFoundException, IOException
+-	{
+-		boolean result = true;
+-		sendBackupStarted(_changeList.size());
+-
+-		FileWrapper localReleaseFile = _util.getLocalReleaseFile();
+-		_util.copyFile(localReleaseFile, _util.getBackupDir());
+-
+-		for (ArtifactStatus status : _changeList)
+-		{
+-			String artifactName = status.getName();
+-			sendFileBackupStarted(artifactName);
+-			// Skip files that are not installed - new files
+-			if (!status.isInstalled())
+-			{
+-				if (s_log.isInfoEnabled())
+-				{
+-					s_log.info("Skipping backup of artifact (" + status + ") which isn't installed.");
+-				}
+-				sendFileBackupComplete(artifactName);
+-				continue;
+-			}
+-			if (status.isCoreArtifact())
+-			{
+-				FileWrapper installDir = getCoreArtifactLocation(artifactName, installRootDir, coreInstallDir);
+-				FileWrapper coreFile = _util.getFile(installDir, artifactName);
+-				FileWrapper backupFile = _util.getFile(coreBackupDir, artifactName);
+-				_util.copyFile(coreFile, backupFile);
+-			}
+-			if (status.isPluginArtifact())
+-			{
+-				// artifact name for plugins is <plugin internal name>.zip
+-				FileWrapper pluginBackupFile = _util.getFile(pluginBackupDir, artifactName);
+-				String pluginDirectory = artifactName.replace(".zip", "");
+-				String pluginJarFilename = artifactName.replace(".zip", ".jar");
+-
+-				ArrayList<FileWrapper> filesToZip = new ArrayList<FileWrapper>();
+-				FileWrapper pluginDirectoryFile = _util.getFile(pluginInstallDir, pluginDirectory);
+-				if (pluginDirectoryFile.exists())
+-				{
+-					filesToZip.add(pluginDirectoryFile);
+-				}
+-				FileWrapper pluginJarFile = _util.getFile(pluginInstallDir, pluginJarFilename);
+-				if (pluginJarFile.exists())
+-				{
+-					filesToZip.add(pluginJarFile);
+-				}
+-				if (filesToZip.size() > 0)
+-				{
+-					_util.createZipFile(pluginBackupFile, filesToZip.toArray(new FileWrapper[filesToZip.size()]));
+-				}
+-				else
+-				{
+-					s_log.error("Plugin (" + status.getName() + ") was listed as already installed, but it's "
+-						+ "files didn't exist and couldn't be backed up: pluginDirectoryFile="
+-						+ pluginDirectoryFile.getAbsolutePath() + " pluginJarFile="
+-						+ pluginJarFile.getAbsolutePath());
+-				}
+-			}
+-			if (status.isTranslationArtifact())
+-			{
+-				FileWrapper translationFile = _util.getFile(i18nInstallDir, artifactName);
+-				FileWrapper backupFile = _util.getFile(translationBackupDir, artifactName);
+-				if (translationFile.exists())
+-				{
+-					_util.copyFile(translationFile, backupFile);
+-				}
+-			}
+-			breathing();
+-			sendFileBackupComplete(artifactName);
+-		}
+-
+-		sendBackupComplete();
+-		return result;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstaller#installFiles()
+-	 */
+-	public void installFiles() throws IOException
+-	{		
+-		List<FileWrapper> filesToRemove = new ArrayList<FileWrapper>();
+-		List<InstallFileOperationInfo> filesToInstall = new ArrayList<InstallFileOperationInfo>();
+-
+-		for (ArtifactStatus status : _changeList)
+-		{
+-			ArtifactAction action = status.getArtifactAction();
+-			FileWrapper installDir = null;
+-			FileWrapper fileToCopy = null;
+-			FileWrapper fileToRemove = null;
+-			String artifactName = status.getName();
+-			boolean isPlugin = false;
+-
+-			if (status.isCoreArtifact())
+-			{
+-				if (action == ArtifactAction.REMOVE)
+-				{
+-					s_log.error("Skipping core artifact (" + status.getName() + ") that was marked for removal");
+-					continue;
+-				}
+-				installDir = getCoreArtifactLocation(status.getName(), installRootDir, coreInstallDir);
+-				fileToCopy = _util.getFile(coreDownloadsDir, artifactName);
+-				if (UpdateUtil.DOCS_ARCHIVE_FILENAME.equals(status.getName()))
+-				{
+-					fileToRemove = _util.getFile(installDir, artifactName.replace(".zip", ""));
+-				}
+-				else
+-				{
+-					fileToRemove = _util.getFile(installDir, artifactName);
+-				}
+-
+-				filesToRemove.add(fileToRemove);
+-			}
+-			if (status.isPluginArtifact())
+-			{
+-				isPlugin = true;
+-				installDir = pluginInstallDir;
+-				if (action != ArtifactAction.REMOVE)
+-				{
+-					fileToCopy = _util.getFile(pluginDownloadsDir, artifactName);
+-				}
+-
+-				// Need to remove the existing jar in the plugins directory and all of the files beneath the
+-				// plugin-named directory.
+-				String jarFileToRemove = artifactName.replace(".zip", ".jar");
+-				String pluginDirectoryToRemove = artifactName.replace(".zip", "");
+-
+-				filesToRemove.add(_util.getFile(installDir, jarFileToRemove));
+-				filesToRemove.add(_util.getFile(installDir, pluginDirectoryToRemove));
+-			}
+-			if (status.isTranslationArtifact())
+-			{
+-				installDir = i18nInstallDir;
+-				if (action != ArtifactAction.REMOVE)
+-				{
+-					fileToCopy = _util.getFile(i18nDownloadsDir, artifactName);
+-				}
+-				fileToRemove = _util.getFile(installDir, artifactName);
+-				filesToRemove.add(fileToRemove);
+-			}
+-			if (fileToCopy != null)
+-			{
+-				InstallFileOperationInfo info = installFileOperationInfoFactory.create(fileToCopy, installDir);
+-				info.setPlugin(isPlugin);
+-				info.setArtifactName(artifactName);
+-				filesToInstall.add(info);
+-			}
+-
+-		}
+-		boolean success = removeOldFiles(filesToRemove);
+-		success = success && installFiles(filesToInstall);
+-		success = success && backupAndDeleteChangeListFile();
+-		success = success && installNewReleaseXmlFile();
+-
+-		if (!success)
+-		{
+-			restoreFilesFromBackup(filesToInstall);
+-		}
+-
+-		sendInstallComplete();
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ArtifactInstaller#restoreBackupFiles(net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean)
+-	 */
+-	public boolean restoreBackupFiles() throws FileNotFoundException, IOException
+-	{
+-		for (ArtifactStatus status : _changeList)
+-		{
+-			String name = status.getName();
+-			FileWrapper backupDir = null;
+-			FileWrapper installDir = null;
+-
+-			if (status.isCoreArtifact())
+-			{
+-				backupDir = coreBackupDir;
+-				installDir = getCoreArtifactLocation(name, installRootDir, coreInstallDir);
+-			}
+-			if (status.isPluginArtifact())
+-			{
+-				backupDir = pluginBackupDir;
+-				installDir = pluginInstallDir;
+-			}
+-			if (status.isTranslationArtifact())
+-			{
+-				backupDir = translationBackupDir;
+-				installDir = coreInstallDir; // translations are most likely to be found in core lib dir.
+-			}
+-			FileWrapper backupJarPath = _util.getFile(backupDir, name);
+-			FileWrapper installJarPath = _util.getFile(installDir, name);
+-
+-			if (!_util.deleteFile(installJarPath))
+-			{
+-				return false;
+-			}
+-			else
+-			{
+-				_util.copyFile(backupJarPath, installJarPath);
+-			}
+-		}
+-		if (!_util.deleteFile(_util.getLocalReleaseFile()))
+-		{
+-			return false;
+-		}
+-		else
+-		{
+-			FileWrapper backupReleaseFile = _util.getFile(_util.getBackupDir(), UpdateUtil.RELEASE_XML_FILENAME);
+-			_util.copyFile(backupReleaseFile, updateDir);
+-		}
+-
+-		return true;
+-	}
+-
+-	// Helper methods
+-
+-	private void breathing()
+-	{
+-		// In case this is called by the AWT thread, log a message - this is most likey a bug
+-		if (SwingUtilities.isEventDispatchThread())
+-		{
+-			if (s_log.isDebugEnabled())
+-			{
+-				s_log.debug("breathing: ignoring request to sleep the event dispatch thread");
+-			}
+-			return;
+-		}
+-		synchronized (this)
+-		{
+-			try
+-			{
+-				wait(50);
+-			}
+-			catch (InterruptedException e)
+-			{
+-				if (s_log.isInfoEnabled())
+-				{
+-					s_log.info("breathing: Interrupted", e);
+-				}
+-			}
+-		}
+-	}
+-
+-	/**
+-	 * Since it possible that some artifacts haven't changed between releases, and it is time-consuming to read
+-	 * the contents of the installed file to compute it's checksum, we do that here just once and boil the
+-	 * change list down to just those files that have physically changed, by comparing byte-size and checksum.
+-	 */
+-	private List<ArtifactStatus> initializeChangeList(ChangeListXmlBean changeListBean)
+-	{
+-		sendInitChangelistStarted(changeListBean.getChanges().size());
+-		ArrayList<ArtifactStatus> result = new ArrayList<ArtifactStatus>();
+-		for (ArtifactStatus status : changeListBean.getChanges())
+-		{
+-			String artifactName = status.getName();
+-			sendFileInitChangelistStarted(artifactName);
+-			
+-			// Always add plugins - there is not a good way to compare plugin zips and their extracted contents
+-			// at the moment.
+-			// TODO: Determine the best way to derive the filesize and checksum of the plugin zip that was last
+-			// extracted. Should we keep it around? How about using the current release.xml file ? Come to
+-			// think of it, perhaps we shouldn't be computing the checksum of *any* existing files, why don't
+-			// we just get it from the current release.xml file?
+-			if (status.isPluginArtifact())
+-			{
+-				result.add(status);
+-				sendFileInitChangelistComplete(artifactName);
+-				continue;
+-			}
+-
+-			if (status.getArtifactAction() == ArtifactAction.INSTALL)
+-			{
+-				FileWrapper installedFileLocation = null;
+-				// Skip the artifact if it is identical to the one that is already installed
+-				if (status.isCoreArtifact())
+-				{
+-					installedFileLocation =
+-						_util.getFile(getCoreArtifactLocation(status.getName(), installRootDir, coreInstallDir),
+-							status.getName());
+-				}
+-				if (status.isTranslationArtifact())
+-				{
+-					installedFileLocation = _util.getFile(coreInstallDir, status.getName());
+-				}
+-
+-				long installedSize = installedFileLocation.length();
+-				if (installedSize == status.getSize())
+-				{
+-					long installedCheckSum = _util.getCheckSum(installedFileLocation);
+-					if (installedCheckSum == status.getChecksum())
+-					{
+-						if (s_log.isDebugEnabled())
+-						{
+-							s_log.debug("initializeChangeList: found a core/translation artifact that is not "
+-								+ "installed: installedSize= " + installedSize + " installedCheckSum="
+-								+ installedCheckSum + " statusSize=" + status.getSize() + " statusChecksum="
+-								+ status.getChecksum());
+-						}
+-						sendFileInitChangelistComplete(artifactName);
+-						continue;
+-					}
+-				}
+-			}
+-
+-			// We have a core or translation file that is not already installed - add it
+-			result.add(status);
+-			sendFileInitChangelistComplete(artifactName);
+-		}
+-		sendInitChangelistComplete();
+-		return result;
+-	}
+-
+-	/* Handle squirrel-sql.jar and documentation archive carefully - they live at the top */
+-	private FileWrapper getCoreArtifactLocation(String artifactName, FileWrapper rootDir, FileWrapper coreDir)
+-	{
+-		if (UpdateUtil.SQUIRREL_SQL_JAR_FILENAME.equals(artifactName)
+-			|| UpdateUtil.DOCS_ARCHIVE_FILENAME.equals(artifactName))
+-		{
+-			return rootDir;
+-		}
+-		else
+-		{
+-			return coreDir;
+-		}
+-	}
+-
+-	private void restoreFilesFromBackup(List<InstallFileOperationInfo> filesToInstall)
+-	{
+-		// TODO Auto-generated method stub
+-	}
+-
+-	private boolean backupAndDeleteChangeListFile()
+-	{
+-		boolean result = true;
+-		if (changeListFile != null)
+-		{
+-			try
+-			{
+-				_util.copyFile(changeListFile, backupRootDir);
+-				result = _util.deleteFile(changeListFile);
+-			}
+-			catch (IOException e)
+-			{
+-				result = false;
+-				s_log.error("Unexpected exception: " + e.getMessage(), e);
+-			}
+-		}
+-		else
+-		{
+-			if (s_log.isInfoEnabled())
+-			{
+-				s_log.info("moveChangeListFile: Changelist file was null.  Skipping move");
+-			}
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * Install the downloaded release.xml file into the updates root directory so that the update knows the
+-	 * current release has changed.
+-	 * 
+-	 * @return true if install was successful; false otherwise.
+-	 */
+-	private boolean installNewReleaseXmlFile()
+-	{
+-		boolean result = true;
+-
+-		try
+-		{
+-			_util.deleteFile(_util.getLocalReleaseFile());
+-		}
+-		catch (FileNotFoundException e)
+-		{
+-			// strange that release xml file wasn't found; but not a problem at this point - just log it.
+-			if (s_log.isInfoEnabled())
+-			{
+-				s_log.info("installNewReleaseXmlFile: release file to be replaced was missing.");
+-			}
+-		}
+-		FileWrapper downloadReleaseFile = _util.getFile(downloadsRootDir, UpdateUtil.RELEASE_XML_FILENAME);
+-		try
+-		{
+-			_util.copyFile(downloadReleaseFile, updateDir);
+-		}
+-		catch (FileNotFoundException e)
+-		{
+-			result = false;
+-			s_log.error("installNewReleaseXmlFile: unexpected exception - " + e.getMessage(), e);
+-		}
+-		catch (IOException e)
+-		{
+-			result = false;
+-			s_log.error("installNewReleaseXmlFile: unexpected exception - " + e.getMessage(), e);
+-		}
+-		return result;
+-	}
+-
+-	/**
+-	 * Removes the specified list of File objects (can represent either a file or directory)
+-	 * 
+-	 * @param filesToRemove
+-	 *           the files to be removed.
+-	 * @return true if the remove operation was successful and false otherwise.
+-	 */
+-	private boolean removeOldFiles(List<FileWrapper> filesToRemove)
+-	{
+-		boolean result = true;
+-		sendRemoveStarted(filesToRemove.size());
+-		for (FileWrapper fileToRemove : filesToRemove)
+-		{
+-			sendFileRemoveStarted(fileToRemove.getName());
+-			result = removeOldFile(fileToRemove);
+-			if (!result)
+-			{
+-				break;
+-			}
+-			breathing();
+-			sendFileRemoveComplete(fileToRemove.getName());
+-		}
+-		sendRemoveComplete();
+-		return result;
+-	}
+-
+-	/**
+-	 * Removes the old file that will be replaced by the new.
+-	 * 
+-	 * @param fileToRemove
+-	 *           the File that represents the file to be removed
+-	 * @return true if the remove operation was successful and false otherwise.
+-	 */
+-	private boolean removeOldFile(FileWrapper fileToRemove)
+-	{
+-		boolean result = true;
+-		String absolutePath = fileToRemove.getAbsolutePath();
+-		if (s_log.isDebugEnabled())
+-		{
+-			s_log.debug("Examining file to remove: " + absolutePath);
+-		}
+-		if (fileToRemove.exists())
+-		{
+-			try
+-			{
+-				if (s_log.isDebugEnabled())
+-				{
+-					s_log.debug("Attempting to delete file: " + absolutePath);
+-				}
+-				result = _util.deleteFile(fileToRemove);
+-				if (!result)
+-				{
+-					s_log.error("Delete operation failed for file/directory: " + absolutePath);
+-				}
+-			}
+-			catch (SecurityException e)
+-			{
+-				result = false;
+-				s_log.error("Unexpected security exception: " + e.getMessage());
+-			}
+-		}
+-		else
+-		{
+-			if (s_log.isInfoEnabled())
+-			{
+-				s_log.info("Skipping delete of file doesn't appear to exist: " + absolutePath);
+-			}
+-		}
+-		return result;
+-	}
+-
+-	private boolean installFiles(List<InstallFileOperationInfo> filesToInstall) throws IOException
+-	{
+-		sendInstallStarted(_changeList.size());
+-		breathing();
+-
+-		boolean result = true;
+-		for (InstallFileOperationInfo info : filesToInstall)
+-		{
+-			try
+-			{
+-				sendFileInstallStarted(info.getArtifactName());
+-				installFile(info);
+-				sendFileInstallComplete(info.getArtifactName());
+-			}
+-			catch (Exception e)
+-			{
+-				s_log.error("installFiles: unexpected exception: " + e.getMessage(), e);
+-				result = false;
+-				break;
+-			}
+-			breathing();
+-		}
+-		return result;
+-	}
+-
+-	private void installFile(InstallFileOperationInfo info) throws IOException
+-	{
+-		FileWrapper installDir = info.getInstallDir();
+-		FileWrapper fileToCopy = info.getFileToInstall();
+-
+-		if (fileToCopy.getAbsolutePath().endsWith(".zip"))
+-		{
+-			// This file is a zip; it needs to be extracted into the install directory. All zips are packaged
+-			// in such a way that the extraction beneath install directory is all that is required.
+-			_util.extractZipFile(fileToCopy, installDir);
+-		}
+-		else
+-		{
+-			_util.copyFile(fileToCopy, installDir);
+-		}
+-
+-	}
+-
+-	private void sendInitChangelistStarted(int numFilesToBackup)
+-	{
+-		logInfo("Changelist initialization started");
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.INIT_CHANGELIST_STARTED);
+-		evt.setNumFilesToUpdate(numFilesToBackup);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendFileInitChangelistStarted(String artifactName)
+-	{
+-		logInfo("Changelist init started for file: " + artifactName);
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.FILE_INIT_CHANGELIST_STARTED);
+-		evt.setArtifactName(artifactName);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendFileInitChangelistComplete(String artifactName)
+-	{
+-		logInfo("Changelist init complete for file: " + artifactName);
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.FILE_INIT_CHANGELIST_COMPLETE);
+-		evt.setArtifactName(artifactName);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendInitChangelistComplete()
+-	{
+-		logInfo("Changelist initialization complete");
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.INIT_CHANGELIST_COMPLETE);
+-		sendEvent(evt);
+-	}	
+-	
+-	private void sendBackupStarted(int numFilesToBackup)
+-	{
+-		logInfo("Backup started");
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.BACKUP_STARTED);
+-		evt.setNumFilesToUpdate(numFilesToBackup);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendFileBackupStarted(String artifactName)
+-	{
+-		logInfo("Backup started for file: " + artifactName);
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.FILE_BACKUP_STARTED);
+-		evt.setArtifactName(artifactName);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendFileBackupComplete(String artifactName)
+-	{
+-		logInfo("Backup complete for file: " + artifactName);
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.FILE_BACKUP_COMPLETE);
+-		evt.setArtifactName(artifactName);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendBackupComplete()
+-	{
+-		logInfo("Backup complete");
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.BACKUP_COMPLETE);
+-		sendEvent(evt);
+-	}
+-
+-	
+-	private void sendRemoveStarted(int numFilesToRemove)
+-	{
+-		logInfo("Remove started");
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.REMOVE_STARTED);
+-		evt.setNumFilesToUpdate(numFilesToRemove);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendFileRemoveStarted(String artifactName)
+-	{
+-		logInfo("Remove started for file: " + artifactName);
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.FILE_REMOVE_STARTED);
+-		evt.setArtifactName(artifactName);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendFileRemoveComplete(String artifactName)
+-	{
+-		logInfo("Remove complete for file: " + artifactName);
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.FILE_REMOVE_COMPLETE);
+-		evt.setArtifactName(artifactName);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendRemoveComplete()
+-	{
+-		logInfo("Remove complete");
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.REMOVE_COMPLETE);
+-		sendEvent(evt);
+-	}
+-	
+-	private void sendInstallStarted(int numFilesToUpdate)
+-	{
+-		logInfo("Install started");
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.INSTALL_STARTED);
+-		evt.setNumFilesToUpdate(numFilesToUpdate);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendFileInstallStarted(String artifactName)
+-	{
+-		logInfo("Install started for file: " + artifactName);
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.FILE_INSTALL_STARTED);
+-		evt.setArtifactName(artifactName);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendFileInstallComplete(String artifactName)
+-	{
+-		logInfo("Install complete for file: " + artifactName);
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.FILE_INSTALL_COMPLETE);
+-		evt.setArtifactName(artifactName);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendInstallComplete()
+-	{
+-		logInfo("Install completed");
+-		InstallStatusEvent evt = installStatusEventFactory.create(InstallEventType.INSTALL_COMPLETE);
+-		sendEvent(evt);
+-	}
+-
+-	private void sendEvent(InstallStatusEvent evt)
+-	{
+-		for (InstallStatusListener listener : _listeners)
+-		{
+-			listener.handleInstallStatusEvent(evt);
+-		}
+-	}
+-
+-	private void logInfo(String message)
+-	{
+-		if (s_log.isInfoEnabled())
+-		{
+-			s_log.info(message);
+-		}
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/ClasspathFunctionFixer.java
++++ /dev/null
+@@ -1,87 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import net.sourceforge.squirrel_sql.fw.util.IOUtilities;
+-import net.sourceforge.squirrel_sql.fw.util.ScriptLineFixer;
+-
+-/*
+- * Copyright (C) 2010 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-
+-/**
+- * This script line fixer updates the buildCPFromDir function in squirrel-sql.sh to fix a bug that was 
+- * causing the classpath of the update application to prefer the installed jars rather than the ones that 
+- * were downloaded. 
+- */
+-public class ClasspathFunctionFixer implements ScriptLineFixer
+-{
+-
+-	private boolean inFunctionDeclaration = false; 
+-	
+-	private boolean scriptWasAlreadyFixed = false;
+-	
+-	private boolean sawOpenCurlyBrace = false; 
+-	
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.fw.util.ScriptLineFixer#fixLine(java.lang.String, java.lang.String)
+-	 */
+-	@Override
+-	public String fixLine(String scriptFileName, String line)
+-	{
+-		if (scriptWasAlreadyFixed) {
+-			return line;
+-		}
+-		
+-		if (!scriptFileName.toLowerCase().endsWith(".sh")) {
+-			return line;
+-		}
+-		
+-		if (line.contains("buildCPFromDir()")) {
+-			inFunctionDeclaration = true;
+-			return line;
+-		}
+-		if (inFunctionDeclaration) {
+-			
+-			if (line.contains("{")) {
+-				sawOpenCurlyBrace = true;
+-				return line;
+-			}
+-			
+-			// Perhaps the line has already been added.  If so, skip future checks.
+-			if (line.contains("CP=\"\"")) {
+-				scriptWasAlreadyFixed = true;
+-				return line;
+-			}
+-			
+-			// At this point we are still in the function declaration, and the current line is neither the 
+-			// opening curly brace, nor the 'CP=""' line, so it must be the first actual line of the function.
+-			// So, add in the 
+-			
+-			if (sawOpenCurlyBrace) {
+-				inFunctionDeclaration = false;
+-				scriptWasAlreadyFixed = true;
+-				StringBuilder alteredLine = new StringBuilder();
+-				alteredLine.append("\tCP=\"\"");
+-				alteredLine.append(IOUtilities.NEW_LINE);
+-				alteredLine.append(line);
+-				return alteredLine.toString();
+-			}
+-		}
+-		return line;
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/PreLaunchHelper.java
++++ /dev/null
+@@ -1,56 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import java.io.IOException;
+-
+-/**
+- * Interface for the class that does the heavy lifting with regard to checking for and installing any updates
+- * prior to launching the application.
+- */
+-public interface PreLaunchHelper
+-{
+-	/**
+-	 * Installs updates that have been downloaded previously.
+-	 * 
+-	 * @param prompt if true, this will present the user with a dialog asking them whether or not updates 
+-	 * should be applied. 
+-	 */
+-	void installUpdates(boolean prompt);
+-
+-	/**
+-	 * This will prompt the user to be sure they want to revert to the previous version and restore from 
+-	 * backup if that is the case.
+-	 */
+-	void restoreFromBackup();
+-
+-	/**
+-	 * Updates the launch script with changes made necessary by the new release.
+-	 *   
+-	 * @throws IOException if an I/O error occurs
+-	 */
+-	public void updateLaunchScript() throws IOException;
+-	
+-	/**
+-	 * Copies the splash image from 
+-	 * @throws IOException
+-	 */
+-	public void copySplashImage() throws IOException;
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/PreLaunchHelperFactory.java
++++ /dev/null
+@@ -1,27 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-/*
+- * Copyright (C) 2010 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-
+-public interface PreLaunchHelperFactory
+-{
+-
+-	public abstract PreLaunchHelper createPreLaunchHelper();
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/PreLaunchHelperFactoryImpl.java
++++ /dev/null
+@@ -1,44 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import org.springframework.context.ApplicationContext;
+-import org.springframework.context.support.ClassPathXmlApplicationContext;
+-
+-/*
+- * Copyright (C) 2010 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-
+-public class PreLaunchHelperFactoryImpl implements PreLaunchHelperFactory
+-{
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.PreLaunchHelperFactory#createPreLaunchHelper()
+-	 */
+-	public PreLaunchHelper createPreLaunchHelper() {
+-		String[] appCtx = new String[] {
+-			"classpath:net/sourceforge/squirrel_sql/fw/util/net.sourceforge.squirrel_sql.fw.util.applicationContext.xml",
+-			"classpath:net/sourceforge/squirrel_sql/client/update/gui/installer/net.sourceforge.squirrel_sql.client.update.gui.installer.applicationContext.xml",
+-			"classpath:net/sourceforge/squirrel_sql/client/update/gui/installer/event/net.sourceforge.squirrel_sql.client.update.gui.installer.event.applicationContext.xml",
+-			"classpath:net/sourceforge/squirrel_sql/client/update/gui/installer/util/net.sourceforge.squirrel_sql.client.update.gui.installer.util.applicationContext.xml",
+-			"classpath:net/sourceforge/squirrel_sql/client/update/util/net.sourceforge.squirrel_sql.client.update.util.applicationContext.xml"
+-		};
+-				
+-		ApplicationContext ctx = new ClassPathXmlApplicationContext(appCtx);
+-		return (PreLaunchHelper)ctx.getBean(PreLaunchHelper.class.getName());
+-	}
+-	
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/PreLaunchHelperImpl.java
++++ /dev/null
+@@ -1,459 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import java.io.File;
+-import java.io.FileNotFoundException;
+-import java.io.IOException;
+-import java.util.ArrayList;
+-import java.util.List;
+-
+-import javax.swing.JOptionPane;
+-
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener;
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListenerImpl;
+-import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-import net.sourceforge.squirrel_sql.fw.util.IOUtilities;
+-import net.sourceforge.squirrel_sql.fw.util.ScriptLineFixer;
+-import net.sourceforge.squirrel_sql.fw.util.StringManager;
+-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+-import net.sourceforge.squirrel_sql.fw.util.Utilities;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-import org.springframework.beans.factory.annotation.Required;
+-
+-/**
+- * This is a bean that the prelaunch app uses. The pre-launch app main class (PreLaunchUpdateApplication)
+- * loads the spring context, and therefore can't managed by spring. So, it is very small and most of it's
+- * logic for doing updates resides here.
+- * 
+- * @author manningr
+- */
+-public class PreLaunchHelperImpl implements PreLaunchHelper
+-{
+-
+-	/** The message we show the user in the update dialog that is shown when there are updates to install */
+-	private String INSTALL_UPDATES_MESSAGE;
+-
+-	/**
+-	 * The title of the dialect that we show the user in the update dialog that is shown when there are updates
+-	 * to install
+-	 */
+-	private String INSTALL_UPDATES_TITLE;
+-
+-	private String RESTORE_FROM_BACKUP_TITLE;
+-
+-	private String RESTORE_FROM_BACKUP_MESSAGE;
+-
+-	private String RESTORE_FAILED_MESSAGE;
+-
+-	private String BACKUP_FAILED_MESSAGE;
+-
+-	private String INSTALL_FAILED_MESSAGE;
+-
+-	/** Internationalized strings for this class */
+-	private StringManager s_stringMgr;
+-
+-	/** Logger for this class. */
+-	private ILogger s_log;
+-
+-	/** Used to override logic for calculating script location for testing purposes */
+-	private String scriptLocation = null;
+-
+-	/* --------------------------- Spring=injected dependencies --------------------------------------------*/
+-
+-	/* Spring-injected */
+-	private UpdateUtil updateUtil = null;
+-
+-	@Required
+-	public void setUpdateUtil(UpdateUtil util)
+-	{
+-		Utilities.checkNull("setUpdateUtil", "util", util);
+-		this.updateUtil = util;
+-	}
+-
+-	/* Spring-injected */
+-	private ArtifactInstallerFactory artifactInstallerFactory = null;
+-
+-	@Required
+-	public void setArtifactInstallerFactory(ArtifactInstallerFactory artifactInstallerFactory)
+-	{
+-		Utilities.checkNull("setArtifactInstallerFactory", "artifactInstallerFactory", artifactInstallerFactory);
+-		this.artifactInstallerFactory = artifactInstallerFactory;
+-	}
+-
+-	/* Spring-injected */
+-	private List<ScriptLineFixer> scriptLineFixers = null;
+-
+-	@Required
+-	public void setScriptLineFixers(List<ScriptLineFixer> scriptLineFixers)
+-	{
+-		Utilities.checkNull("setScriptLineFixers", "scriptLineFixers", scriptLineFixers);
+-		this.scriptLineFixers = scriptLineFixers;
+-	}
+-
+-	/* Spring-injected */
+-	private IOUtilities ioutils = null;
+-
+-	/**
+-	 * @param ioutils
+-	 *           the ioutils to set
+-	 */
+-	@Required
+-	public void setIoutils(IOUtilities ioutils)
+-	{
+-		Utilities.checkNull("setIoutils", "ioutils", ioutils);
+-		this.ioutils = ioutils;
+-	}
+-
+-	/* ----------------------------------- Public API ------------------------------------------------------*/
+-
+-	public PreLaunchHelperImpl() throws IOException
+-	{
+-
+-		s_log = LoggerController.createLogger(PreLaunchHelperImpl.class);
+-		s_stringMgr = StringManagerFactory.getStringManager(PreLaunchHelperImpl.class);
+-
+-		// i18n[PreLaunchHelperImpl.installUpdatesTitle=Updates Available]
+-		INSTALL_UPDATES_TITLE = s_stringMgr.getString("PreLaunchHelperImpl.installUpdatesTitle");
+-
+-		// i18n[PreLaunchHelperImpl.installUpdatesMessage=Updates are ready to be installed. Install them now?]
+-		INSTALL_UPDATES_MESSAGE = s_stringMgr.getString("PreLaunchHelperImpl.installUpdatesMessage");
+-
+-		// i18n[PreLaunchHelperImpl.restoreFromBackupTitle=Confirm Restore From Backup
+-		RESTORE_FROM_BACKUP_TITLE = s_stringMgr.getString("PreLaunchHelperImpl.restoreFromBackupTitle");
+-
+-		// i18n[PreLaunchHelperImpl.restoreFromBackupMessage=Restore SQuirreL to previous version before
+-		// last update?]
+-		RESTORE_FROM_BACKUP_MESSAGE = s_stringMgr.getString("PreLaunchHelperImpl.restoreFromBackupMessage");
+-
+-		// i18n[PreLaunchHelperImpl.backupFailedMessage=Backup of existing files failed. Installation cannot
+-		// proceed]
+-		BACKUP_FAILED_MESSAGE = s_stringMgr.getString("PreLaunchHelperImpl.backupFailedMessage");
+-
+-		// i18n[PreLaunchHelperImpl.installFailedMessage=Unexpected error while attempting to install updates]
+-		INSTALL_FAILED_MESSAGE = s_stringMgr.getString("PreLaunchHelperImpl.installFailedMessage");
+-
+-		// i18n[PreLaunchHelperImpl.restoreFailedMessage=Restore from backup failed. Re-installation may be
+-		// required.
+-		RESTORE_FAILED_MESSAGE = s_stringMgr.getString("PreLaunchHelperImpl.restoreFailedMessage");
+-
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.PreLaunchHelper#installUpdates(boolean)
+-	 */
+-	@Override
+-	public void installUpdates(boolean prompt)
+-	{
+-		FileWrapper changeListFile = updateUtil.getChangeListFile();
+-		if (hasChangesToBeApplied(changeListFile))
+-		{
+-			logInfo("Pre-launch update app detected a changeListFile to be processed");
+-			if (prompt)
+-			{
+-				if (showConfirmDialog(INSTALL_UPDATES_MESSAGE, INSTALL_UPDATES_TITLE))
+-				{
+-					installUpdates(changeListFile);
+-				}
+-				else
+-				{
+-					logInfo("User cancelled update installation");
+-				}
+-			}
+-			else
+-			{
+-				installUpdates(changeListFile);
+-			}
+-		}
+-	}
+-
+-	/**
+-	 * Updates the launch script with changes made necessary by the new release.
+-	 * 
+-	 * @throws IOException
+-	 *            if an I/O error occurs
+-	 */
+-	@Override
+-	public void updateLaunchScript() throws IOException
+-	{
+-		// 1. determine which script(s) to fix.
+-		List<String> launchScriptLocations = getLaunchScriptLocations();
+-		
+-		for (String launchScript : launchScriptLocations) {
+-			logInfo("Applying updates to launch script: " + launchScript);
+-
+-			// 2. Get the lines from the file, applying the line fixers
+-			List<String> lines = ioutils.getLinesFromFile(launchScript, scriptLineFixers);
+-
+-			// 3. Write the fixed lines back out to the file.
+-			ioutils.writeLinesToFile(launchScript, lines);
+-		}
+-	}
+-
+-	private List<String> getLaunchScriptLocations() {
+-		List<String> result = new ArrayList<String>();
+-		
+-		if (scriptLocation != null) {
+-			result.add(scriptLocation);
+-			return result;
+-		}
+-		
+-		String os = System.getProperty("os.name");
+-		if (os != null && os.toLowerCase().startsWith("windows")) {
+-			result.add("squirrel-sql.bat");
+-			// And for cygwin users on Windows
+-			result.add("squirrel-sql.sh");
+-		}
+-		else if (os != null && os.toLowerCase().startsWith("mac"))
+-		{
+-			// Java on Mac OS X doesn't find squirrel-sql.sh; so construct the absolute path.
+-			result.add(getMacOSContentsPath() + "/MacOS/squirrel-sql.sh");
+-		}
+-		else {
+-			result.add("squirrel-sql.sh");
+-		}
+-		
+-		return result;
+-	}
+-	
+-	private String getMacOSContentsPath() {
+-		// The user.dir property on the Mac is /Applications/SQuirreLSQL.app/Contents/Resources/Java
+-		String userdir = System.getProperty("user.dir");
+-		String[] parts = userdir.split("Contents");
+-		return parts[0] + "/Contents";
+-	}
+-	
+-	@Override
+-	public void copySplashImage() throws IOException
+-	{
+-		// The user.dir property on the Mac is /Applications/SQuirreLSQL.app/Contents/Resources/Java
+-		String squirrelHome = System.getProperty("user.dir");
+-
+-		
+-		String jarFilename = squirrelHome + "/update/downloads/core/squirrel-sql.jar";
+-		String resourceName = "splash.jpg";
+-		String pathToIconsDir  = squirrelHome + "/icons";
+-		String destinationFile = pathToIconsDir + "/" + resourceName;
+-		
+-		File iconsDir = new File(pathToIconsDir);
+-		if (!iconsDir.exists()) {
+-			logInfo("Icons directory ("+pathToIconsDir+") doesn't exist, so attempting to create it.");
+-			boolean result = iconsDir.mkdir();
+-			if (!result) {
+-				s_log.error("Failed to create icons directory ("+pathToIconsDir+")");
+-			}
+-		}		
+-		
+-		logInfo("Copying splash.jpg from jarfile ("+jarFilename+") to "+destinationFile);
+-		
+-		ioutils.copyResourceFromJarFile(jarFilename, resourceName, destinationFile);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.PreLaunchHelper#restoreFromBackup()
+-	 */
+-	@Override
+-	public void restoreFromBackup()
+-	{
+-		if (showConfirmDialog(RESTORE_FROM_BACKUP_MESSAGE, RESTORE_FROM_BACKUP_TITLE))
+-		{
+-
+-			try
+-			{
+-				FileWrapper backupDir = updateUtil.getBackupDir();
+-				FileWrapper changeListFile = updateUtil.getFile(backupDir, UpdateUtil.CHANGE_LIST_FILENAME);
+-				ChangeListXmlBean changeList = updateUtil.getChangeList(changeListFile);
+-
+-				ArtifactInstaller installer = artifactInstallerFactory.create(changeList, null);
+-				if (!installer.restoreBackupFiles())
+-				{
+-					showErrorDialog(RESTORE_FAILED_MESSAGE);
+-					s_log.error("restoreFromBackup: " + RESTORE_FAILED_MESSAGE);
+-				}
+-
+-			}
+-			catch (Throwable e)
+-			{
+-				s_log.error("Unexpected error while attempting restore from backup: " + e.getMessage(), e);
+-				showErrorDialog(RESTORE_FAILED_MESSAGE);
+-			}
+-
+-		}
+-		shutdown("Pre-launch update app finished");
+-	}
+-
+-	/* ------------------------------------- Helper methods ------------------------------------------------*/
+-
+-	/**
+-	 * Peeks into the changelist file to see if there are artifacts to change. This is precautionary as the GUI
+-	 * should prevent the changeList file from being created if there are no artifacts to be changed.
+-	 * 
+-	 * @param changeListFile
+-	 *           the file that contains the changeList
+-	 * @return true if the changeListFile exists and has changes to be applied; false otherwise.
+-	 */
+-	private boolean hasChangesToBeApplied(final FileWrapper changeListFile)
+-	{
+-		boolean result = false;
+-		try
+-		{
+-			if (changeListFile.exists())
+-			{
+-				final ChangeListXmlBean changeListBean = updateUtil.getChangeList(changeListFile);
+-				final List<ArtifactStatus> changeList = changeListBean.getChanges();
+-				final int changeListSize = changeList.size();
+-				logInfo("hasChangesToBeApplied: changeListFile (" + changeListSize + ") has " + changeListSize
+-					+ " changes to be applied");
+-
+-				if (changeList != null && changeListSize > 0)
+-				{
+-					result = true;
+-				}
+-				else
+-				{
+-					logInfo("Aborting update: changeList was found with no updates");
+-				}
+-			}
+-			else
+-			{
+-				logInfo("installUpdates: changeList file (" + changeListFile + ") doesn't exist");
+-			}
+-		}
+-		catch (FileNotFoundException e)
+-		{
+-			s_log.error("hasChangesToBeApplied: unable to get change list from file (" + changeListFile + "): "
+-				+ e.getMessage());
+-		}
+-
+-		return result;
+-	}
+-
+-	/**
+-	 * Shuts down this small pre-launch helper application.
+-	 */
+-	private void shutdown(String message)
+-	{
+-		logInfo(message);
+-		LoggerController.shutdown();
+-		System.exit(0);
+-	}
+-
+-	/**
+-	 * Install the updates, taking care to backup the originals first.
+-	 * 
+-	 * @param changeList
+-	 *           the xml file describing the changes to be made.
+-	 * @throws Exception
+-	 *            if any error occurs
+-	 */
+-	private void installUpdates(final FileWrapper changeList)
+-	{
+-		Thread t = new Thread(new Runnable()
+-		{
+-			public void run()
+-			{
+-				try
+-				{
+-					ProgressDialogController controller = new ProgressDialogControllerImpl();
+-					InstallStatusListener listener = new InstallStatusListenerImpl(controller);
+-					ArtifactInstaller installer = artifactInstallerFactory.create(changeList, listener);
+-					if (installer.backupFiles())
+-					{
+-						installer.installFiles();
+-					}
+-					else
+-					{
+-						showErrorDialog(BACKUP_FAILED_MESSAGE);
+-					}
+-					controller.hideProgressDialog();
+-					shutdown("Pre-launch update app finished");
+-				}
+-				catch (Throwable e)
+-				{
+-					String message = INSTALL_FAILED_MESSAGE + ": " + e.getMessage();
+-					s_log.error(message, e);
+-					showErrorDialog(message);
+-				}
+-
+-			}
+-
+-		});
+-		t.setName("Update Installer Thread");
+-		t.start();
+-	}
+-
+-	/**
+-	 * Ask the user a question
+-	 * 
+-	 * @param message
+-	 *           the question to ask
+-	 * @param title
+-	 *           the title of the dialog
+-	 * @return true if they said YES; false otherwise.
+-	 */
+-	private boolean showConfirmDialog(String message, String title)
+-	{
+-		int choice =
+-			JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION,
+-				JOptionPane.QUESTION_MESSAGE);
+-		return choice == JOptionPane.YES_OPTION;
+-	}
+-
+-	/**
+-	 * Show the user an error dialog.
+-	 * 
+-	 * @param message
+-	 *           the message to give in the dialog.
+-	 */
+-	private void showErrorDialog(String message)
+-	{
+-		JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
+-	}
+-
+-	private void logInfo(String message)
+-	{
+-		if (s_log.isInfoEnabled())
+-		{
+-			s_log.info(message);
+-		}
+-	}
+-
+-	/**
+-	 * @param scriptLocation
+-	 *           the scriptLocation to set
+-	 */
+-	public void setScriptLocation(String scriptLocation)
+-	{
+-		this.scriptLocation = scriptLocation;
+-	}
+-
+-	/**
+-	 * @return the scriptLocation
+-	 */
+-	public String getScriptLocation()
+-	{
+-		return scriptLocation;
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/PreLaunchUpdateApplication.java
++++ /dev/null
+@@ -1,106 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import java.io.File;
+-import java.io.IOException;
+-
+-import net.sourceforge.squirrel_sql.client.ApplicationArguments;
+-import net.sourceforge.squirrel_sql.client.SquirrelLoggerFactory;
+-import net.sourceforge.squirrel_sql.client.util.ApplicationFiles;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-import org.apache.log4j.FileAppender;
+-import org.apache.log4j.Layout;
+-import org.apache.log4j.PatternLayout;
+-import org.apache.log4j.PropertyConfigurator;
+-
+-/**
+- * This is a small application that will be launched each time SQuirreL is started to quickly check to see if
+- * updates are available to be applied. Since this application uses Spring, it sets up the Spring context.
+- */
+-public class PreLaunchUpdateApplication
+-{
+-
+-	/** The helper that most work is delegated to */
+-	private static PreLaunchHelper helper = null;
+-	
+-	public static final String PROMPT_MODE = "prompt";
+-	
+-	public static final String RESTORE_MODE = "restore";	
+-	
+-	/**
+-	 * Entry point of the 
+-	 * @param args
+-	 */
+-	public static void main(String[] args) throws IOException
+-	{
+-		ApplicationArguments.initialize(args);
+-		initializeLogger();
+-		boolean prompt = getMode(PROMPT_MODE);
+-		boolean restore = getMode(RESTORE_MODE);
+-		setupHelper();
+-		if (!restore) {
+-			helper.installUpdates(prompt);
+-			helper.updateLaunchScript();
+-			helper.copySplashImage();
+-		} else {
+-			helper.restoreFromBackup();
+-		}
+-	}
+-	
+-	// Helper methods
+-	
+-	private static void setupHelper()
+-	{
+-		PreLaunchHelperFactory preLaunchHelperFactory = new PreLaunchHelperFactoryImpl();
+-		helper = preLaunchHelperFactory.createPreLaunchHelper();
+-	}
+-	
+-	private static boolean getMode(String mode)
+-	{
+-		boolean prompt = false;
+-		if (Boolean.getBoolean(mode)) {
+-			prompt = true;
+-		}
+-		return prompt;
+-	}
+-		
+-	private static void initializeLogger() throws IOException
+-	{
+-		String logConfigFileName = ApplicationArguments.getInstance().getLoggingConfigFileName();
+-		if (logConfigFileName != null) {
+-			PropertyConfigurator.configure(logConfigFileName);
+-		} else {
+-			ApplicationFiles appFiles = new ApplicationFiles();
+-			
+-			String logMessagePattern = "%-4r [%t] %-5p %c %x - %m%n";
+-			Layout layout = new PatternLayout(logMessagePattern);
+-			
+-			File logsDir = new File(appFiles.getUserSettingsDirectory(), "logs");
+-			File updateLogFile = new File(logsDir, "updater.log");
+-			
+-			FileAppender appender = new FileAppender(layout, updateLogFile.getAbsolutePath());
+-			
+-			LoggerController.registerLoggerFactory(new SquirrelLoggerFactory(appender, false));
+-		}
+-	}	
+-	
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/ProgressDialogController.java
++++ /dev/null
+@@ -1,58 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-/**
+- * Interface for separating the display of progress for a long running task from the task that is updating it.
+- * This helps keeps UI code out of the business logic code.
+- */
+-public interface ProgressDialogController
+-{
+-
+-	/**
+-	 * Shows a progress bar with the specified title and message, with the number of increments set to total.
+-	 * 
+-	 * @param title
+-	 *           the title of the dialog
+-	 * @param msg
+-	 *           the message to display in the body of the dialog
+-	 * @param total
+-	 *           the number of increments the bar is made of
+-	 */
+-	void showProgressDialog(String title, String msg, int total);
+-
+-	/**
+-	 * Updates the detail message in the progress bar dialog
+-	 * 
+-	 * @param msg a new detail message for the body of the dialog 
+-	 */
+-	void setDetailMessage(String msg);
+-
+-	/**
+-	 * Increments the currently displayed progress bar
+-	 */
+-	void incrementProgress();
+-
+-	void resetProgressDialog(String title, String msg, int total);
+-	
+-	/**
+-	 * Hides the currently displayed progress bar
+-	 */
+-	void hideProgressDialog();
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/ProgressDialogControllerImpl.java
++++ /dev/null
+@@ -1,146 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-import java.awt.BorderLayout;
+-import java.awt.Frame;
+-import java.awt.GridLayout;
+-
+-import javax.swing.JDialog;
+-import javax.swing.JLabel;
+-import javax.swing.JPanel;
+-import javax.swing.JProgressBar;
+-
+-import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
+-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+-
+-/**
+- * Progress dialog controller that shows, updates and hides a single progress bar dialog.
+- */
+-public class ProgressDialogControllerImpl implements ProgressDialogController
+-{
+-	/** the dialog being displayed */
+-	private JDialog currentDialog = null;
+-
+-	/** The message that appears in the dialog just above the detail message */
+-	private JLabel currentMessage = null;
+-
+-	/** The message that appears in the dialog just above the progress bar */
+-	private JLabel detailMessage = null;
+-	
+-	/** the progress bar */
+-	private JProgressBar currentProgressBar = null;
+-
+-	/** Logger for this class. */
+-	private static ILogger s_log = LoggerController.createLogger(ProgressDialogControllerImpl.class);
+-	
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ProgressDialogController#hideProgressDialog()
+-	 */
+-	public void hideProgressDialog()
+-	{
+-		s_log.info("Hiding dialog");
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-			public void run()
+-			{
+-				currentDialog.setVisible(false);
+-			}
+-		}, true);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ProgressDialogController#incrementProgress()
+-	 */
+-	public void incrementProgress()
+-	{
+-		s_log.info("incrementing progress");
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-			public void run()
+-			{
+-				int currentValue = currentProgressBar.getValue();
+-				currentProgressBar.setValue(currentValue + 1);
+-			}
+-		}, true);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ProgressDialogController#setDetailMessage(java.lang.String)
+-	 */
+-	public void setDetailMessage(final String msg)
+-	{
+-		s_log.info("Setting detail message: "+msg);
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-			public void run()
+-			{
+-				detailMessage.setText(msg);
+-			}
+-		}, true);
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.ProgressDialogController#showProgressDialog(java.lang.String,
+-	 *      java.lang.String, int)
+-	 */
+-	public void showProgressDialog(final String title, final String msg, final int total)
+-	{
+-		s_log.info("showing progress dialog");
+-		GUIUtils.processOnSwingEventThread(new Runnable()
+-		{
+-			public void run()
+-			{
+-				currentDialog = new JDialog((Frame) null, title);
+-				currentMessage = new JLabel(msg);
+-				detailMessage = new JLabel("...");
+-				currentProgressBar = new JProgressBar(0, total - 1);
+-				
+-				JPanel panel = new JPanel(new BorderLayout());
+-				JPanel messagePanel = new JPanel(new GridLayout(2,1));
+-				messagePanel.add(currentMessage);
+-				messagePanel.add(detailMessage);
+-				panel.add(messagePanel, BorderLayout.CENTER);
+-				panel.add(currentProgressBar, BorderLayout.SOUTH);
+-				
+-				currentDialog.getContentPane().add(panel);
+-				currentDialog.setSize(300, 100);
+-				GUIUtils.centerWithinScreen(currentDialog);
+-				currentDialog.setVisible(true);
+-			}
+-		}, true);
+-
+-	}
+-
+-	public void resetProgressDialog(final String title, final String msg, final int total)
+-	{
+-		GUIUtils.processOnSwingEventThread(new Runnable() {
+-			public void run() {
+-				currentDialog.setTitle(title);
+-				currentMessage.setText(msg);
+-				currentProgressBar.setValue(0);
+-				currentProgressBar.setMinimum(0);
+-				currentProgressBar.setMaximum(total);
+-			}
+-		});
+-		
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/SplashScreenFixer.java
++++ /dev/null
+@@ -1,78 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.gui.installer;
+-
+-/*
+- * Copyright (C) 2010 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-
+-import net.sourceforge.squirrel_sql.fw.util.ScriptLineFixer;
+-
+-/**
+- * A line fixer implementation that adds the splash screen icon to the line that launches the SQuirreL 
+- * application in the launcher scripts. 
+- */
+-public class SplashScreenFixer implements ScriptLineFixer {
+-
+-	/** The main class.  Assumption is that this line is where the splash setting needs to be added */
+-	public static final String CLIENT_MAIN_CLASS = "net.sourceforge.squirrel_sql.client.Main";
+-	
+-	/** The splash setting */
+-	public static final String SPLASH_ICON = "splash.jpg";
+-	
+-	/** A regex pattern version of the main class */
+-	private static final String MAIN_CLASS_PATTERN = "net\\.sourceforge\\.squirrel_sql\\.client\\.Main";
+-	
+-	/** The platform-dependent newline string */
+-	public static String newline = System.getProperty("line.separator");
+-		
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.fw.util.ScriptLineFixer#fixLine(java.lang.String)
+-	 */
+-	@Override
+-	public String fixLine(String scriptFileName, String line) {
+-		String result = line;
+-		
+-		String splashIconArgument = "-splash:" + SPLASH_ICON;
+-		if (scriptFileName.toLowerCase().endsWith(".bat")) {
+-			splashIconArgument = "-splash:\"%SQUIRREL_SQL_HOME%\\icons\\"+SPLASH_ICON+"\""; 
+-		} else {
+-			splashIconArgument = "-splash:\"$SQUIRREL_SQL_HOME/icons/"+SPLASH_ICON+"\"";
+-		}
+-		
+-		if (line.contains(CLIENT_MAIN_CLASS)) {
+-			if (!line.contains(SPLASH_ICON)) {
+-				String[] parts = line.split(MAIN_CLASS_PATTERN);
+-				if (parts.length == 2) {
+-					StringBuilder newline = new StringBuilder();
+-					newline.append(parts[0]);
+-					newline.append(" ");
+-					newline.append(splashIconArgument);
+-					newline.append(" ");
+-					newline.append(CLIENT_MAIN_CLASS);
+-					newline.append(" ");
+-					newline.append(parts[1]);
+-					result = newline.toString();
+-				} else {
+-					System.err.println("Uh-oh, expected parts to be 2");
+-				}
+-			}
+-		}
+-		return result;
+-	}
+-
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/event/InstallEventType.java
++++ /dev/null
+@@ -1,76 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.event;
+-
+-
+-/**
+- * A type-safe enum to describe the type of an install event.
+- * 
+- * @author manningr
+- *
+- */
+-public enum InstallEventType {
+-
+-	/** change list initialization phase has started */
+-	INIT_CHANGELIST_STARTED,
+-	
+-	FILE_INIT_CHANGELIST_STARTED,
+-	
+-	FILE_INIT_CHANGELIST_COMPLETE,
+-	
+-	/** change list initialization phase is complete */
+-	INIT_CHANGELIST_COMPLETE,
+-	
+-	/** backup phase has started */
+-   BACKUP_STARTED,
+-   
+-   /** a particular file is about to be backed up */
+-   FILE_BACKUP_STARTED,
+-   
+-   /** a particular file has just been successfully backed up */
+-   FILE_BACKUP_COMPLETE,
+-   
+-   /** backup phase has completed successfully */
+-   BACKUP_COMPLETE,
+-   
+-   /** File removal phase has been started */
+-   REMOVE_STARTED,
+-   
+-   /** file remove has started */
+-   FILE_REMOVE_STARTED,
+-   
+-   /** file remove completed */
+-   FILE_REMOVE_COMPLETE,
+-   
+-   /** File removal phase has completed successfully */
+-   REMOVE_COMPLETE,
+-   
+-   /** install phase has started */
+-   INSTALL_STARTED,
+-
+-   /** a particular file is about to be installed */
+-   FILE_INSTALL_STARTED,
+-   
+-   /** a particular file has just been successfully installed */
+-   FILE_INSTALL_COMPLETE,   
+-   
+-   /** install phase has completed successfully */
+-   INSTALL_COMPLETE
+-   
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/event/InstallStatusEvent.java
++++ /dev/null
+@@ -1,93 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.event;
+-
+-import net.sourceforge.squirrel_sql.fw.util.Utilities;
+-
+-
+-/**
+- * An event implementation that informs the installer of key events that are 
+- * happening during installation.  The ArtifactInstaller generates these events as
+- * it is installing artifacts giving them to any listeners.  The installer UI 
+- * registers as a listener and updates the UI based on the events that it receives.
+- */
+-public class InstallStatusEvent {
+-
+-	/** The name of the artifact being installed; typically a filename (e.g. fw.jar) */
+-   private String _artifactName;
+-   
+-   /** The type of event that has occurred - see InstallEventType for detailed */
+-   private InstallEventType _type;
+-   
+-   /** The number of files that will be added, replaced or removed */
+-   private int numFilesToUpdate = 0;
+-   
+-   public InstallStatusEvent(InstallEventType type) {
+-   	Utilities.checkNull("InstallStatusEvent.init", "type", type);
+-      this._type = type;
+-   }
+-
+-   /**
+-    * @return the _artifactName
+-    */
+-   public String getArtifactName() {
+-      return _artifactName;
+-   }
+-
+-   /**
+-    * @param name the _artifactName to set
+-    */
+-   public void setArtifactName(String name) {
+-   	Utilities.checkNull("setArtifactName", "name", name);
+-      _artifactName = name;
+-   }
+-
+-   /**
+-    * @return the event type
+-    */
+-   public InstallEventType getType() {
+-      return _type;
+-   }
+-
+-   /**
+-    * @param _type the event type to set
+-    */
+-   public void setType(InstallEventType type) {
+-   	Utilities.checkNull("setType", "type", type);
+-      this._type = type;
+-   }
+-
+-	/**
+-	 * @param numFilesToUpdate the numFilesToUpdate to set
+-	 */
+-	public void setNumFilesToUpdate(int numFilesToUpdate)
+-	{
+-		this.numFilesToUpdate = numFilesToUpdate;
+-	}
+-
+-	/**
+-	 * @return the numFilesToUpdate
+-	 */
+-	public int getNumFilesToUpdate()
+-	{
+-		return numFilesToUpdate;
+-	}
+-
+-   
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/event/InstallStatusEventFactory.java
++++ /dev/null
+@@ -1,35 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.event;
+-
+-/**
+- * Interface for factory
+- * 
+- * @author manningr
+- */
+-public interface InstallStatusEventFactory
+-{
+-
+-	/**
+-	 * @param installEventType
+-	 * @return
+-	 */
+-	InstallStatusEvent create(InstallEventType installEventType);
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/event/InstallStatusEventFactoryImpl.java
++++ /dev/null
+@@ -1,34 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.event;
+-
+-/**
+- * Factory for install status events.
+- * 
+- * @author manningr
+- */
+-public class InstallStatusEventFactoryImpl implements InstallStatusEventFactory
+-{
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusEventFactory#create(net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallEventType)
+-	 */
+-	public InstallStatusEvent create(InstallEventType installEventType) {
+-		return new InstallStatusEvent(installEventType);
+-	}
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/event/InstallStatusListener.java
++++ /dev/null
+@@ -1,25 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.event;
+-
+-
+-public interface InstallStatusListener {
+-
+-   void handleInstallStatusEvent(InstallStatusEvent evt);
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/event/InstallStatusListenerImpl.java
++++ /dev/null
+@@ -1,109 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.event;
+-
+-import net.sourceforge.squirrel_sql.client.update.gui.installer.ProgressDialogController;
+-import net.sourceforge.squirrel_sql.fw.util.Utilities;
+-
+-public class InstallStatusListenerImpl implements InstallStatusListener
+-{
+-
+-	ProgressDialogController _progressDialogController = null;
+-
+-	/**
+-	 * @param progressDialogFactory
+-	 */
+-	public InstallStatusListenerImpl(ProgressDialogController progressDialogFactory)
+-	{
+-		Utilities.checkNull("InstallStatusListenerImpl.init", "progressDialogFactory", progressDialogFactory);
+-		this._progressDialogController = progressDialogFactory;
+-	}
+-
+-	/**
+-	 * @see net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusListener#
+-	 *     
+-	 *     
+-	 *      handleInstallStatusEvent(net.sourceforge.squirrel_sql.client.update.gui.installer.event.InstallStatusEvent)
+-	 */
+-	public void handleInstallStatusEvent(InstallStatusEvent evt)
+-	{
+-		if (evt.getType() == InstallEventType.INIT_CHANGELIST_STARTED) {
+-			_progressDialogController.showProgressDialog("Initializing File Change List", "Processing file:",
+-				evt.getNumFilesToUpdate());			
+-		}
+-		if (evt.getType() == InstallEventType.FILE_INIT_CHANGELIST_STARTED) {
+-			_progressDialogController.setDetailMessage(evt.getArtifactName());
+-		}
+-		if (evt.getType() == InstallEventType.FILE_INIT_CHANGELIST_COMPLETE) {
+-			_progressDialogController.incrementProgress();
+-		}		
+-		if (evt.getType() == InstallEventType.INIT_CHANGELIST_COMPLETE) {
+-			_progressDialogController.setDetailMessage("");
+-		}
+-		if (evt.getType() == InstallEventType.BACKUP_STARTED)
+-		{
+-			_progressDialogController.resetProgressDialog("Backing up files to be updated", "Backing up file:",
+-				evt.getNumFilesToUpdate());
+-		}
+-		if (evt.getType() == InstallEventType.FILE_BACKUP_STARTED)
+-		{
+-			_progressDialogController.setDetailMessage(evt.getArtifactName());
+-		}
+-		if (evt.getType() == InstallEventType.FILE_BACKUP_COMPLETE)
+-		{
+-			_progressDialogController.incrementProgress();
+-		}
+-		if (evt.getType() == InstallEventType.BACKUP_COMPLETE)
+-		{
+-			_progressDialogController.setDetailMessage("");
+-		}
+-		
+-		if (evt.getType() == InstallEventType.REMOVE_STARTED) {
+-			_progressDialogController.resetProgressDialog("Removing file to be updated", "Removing file:", 
+-				evt.getNumFilesToUpdate());
+-		}		
+-		if (evt.getType() == InstallEventType.FILE_REMOVE_STARTED) {
+-			_progressDialogController.setDetailMessage(evt.getArtifactName());
+-		}
+-		if (evt.getType() == InstallEventType.FILE_REMOVE_STARTED) {
+-			_progressDialogController.incrementProgress();
+-		}
+-		if (evt.getType() == InstallEventType.REMOVE_COMPLETE) {
+-			_progressDialogController.setDetailMessage("");
+-		}
+-		if (evt.getType() == InstallEventType.INSTALL_STARTED)
+-		{
+-			_progressDialogController.resetProgressDialog("Installing updated files", "Installing file:", 
+-				evt.getNumFilesToUpdate());
+-		}
+-		if (evt.getType() == InstallEventType.FILE_INSTALL_STARTED)
+-		{
+-			_progressDialogController.setDetailMessage(evt.getArtifactName());
+-		}
+-		if (evt.getType() == InstallEventType.FILE_INSTALL_COMPLETE)
+-		{
+-			_progressDialogController.incrementProgress();
+-		}
+-		if (evt.getType() == InstallEventType.INSTALL_COMPLETE)
+-		{
+-			_progressDialogController.hideProgressDialog();
+-		}
+-	}
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/util/InstallFileOperationInfo.java
++++ /dev/null
+@@ -1,55 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.util;
+-
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-
+-public interface InstallFileOperationInfo {
+-
+-   /**
+-    * @return the fileToInstall
+-    */
+-	FileWrapper getFileToInstall();
+-
+-   /**
+-    * @return the installDir
+-    */
+-	FileWrapper getInstallDir();
+-
+-	/**
+-    * @return the isPlugin
+-    */
+-   public boolean isPlugin();
+-
+-	/**
+-    * @param isPlugin the isPlugin to set
+-    */
+-   public void setPlugin(boolean isPlugin);
+-
+-	/**
+-	 * @param artifactName the artifactName to set
+-	 */
+-	public void setArtifactName(String artifactName);
+-
+-	/**
+-	 * @return the artifactName
+-	 */
+-	public String getArtifactName();
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/util/InstallFileOperationInfoFactory.java
++++ /dev/null
+@@ -1,26 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.util;
+-
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-
+-public interface InstallFileOperationInfoFactory {
+-
+-   InstallFileOperationInfo create(FileWrapper fileToCopy, FileWrapper installDir);
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/util/InstallFileOperationInfoFactoryImpl.java
++++ /dev/null
+@@ -1,31 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.util;
+-
+-import static net.sourceforge.squirrel_sql.fw.util.Utilities.checkNull;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-
+-public class InstallFileOperationInfoFactoryImpl implements InstallFileOperationInfoFactory {
+-
+-   
+-   public InstallFileOperationInfo create(FileWrapper fileToCopy, FileWrapper installDir) {
+-   	checkNull("InstallFileOperationInfo", "fileToCopy",fileToCopy, "installDir", installDir);
+-      return new InstallFileOperationInfoImpl(fileToCopy, installDir);
+-   }
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/gui/installer/util/InstallFileOperationInfoImpl.java
++++ /dev/null
+@@ -1,94 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.gui.installer.util;
+-
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-
+-public class InstallFileOperationInfoImpl implements InstallFileOperationInfo {
+-
+-   private FileWrapper fileToInstall;
+-   private FileWrapper installDir;
+-   private boolean isPlugin;
+-   private String artifactName;
+-   
+-   /**
+-    * @param fileToInstall
+-    * @param installDir
+-    */
+-   public InstallFileOperationInfoImpl(FileWrapper fileToInstall, FileWrapper installDir) {
+-      super();
+-      this.fileToInstall = fileToInstall;
+-      this.installDir = installDir;
+-   }
+-   
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.gui.installer.util.InstallFileOperationInfo#getFileToInstall()
+-    */
+-   public FileWrapper getFileToInstall() {
+-      return fileToInstall;
+-   }
+-   /**
+-    * @param fileToInstall the fileToInstall to set
+-    */
+-   public void setFileToInstall(FileWrapper fileToInstall) {
+-      this.fileToInstall = fileToInstall;
+-   }
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.gui.installer.util.InstallFileOperationInfo#getInstallDir()
+-    */
+-   public FileWrapper getInstallDir() {
+-      return installDir;
+-   }
+-   /**
+-    * @return the isPlugin
+-    */
+-   public boolean isPlugin() {
+-   	return isPlugin;
+-   }
+-
+-	/**
+-    * @param isPlugin the isPlugin to set
+-    */
+-   public void setPlugin(boolean isPlugin) {
+-   	this.isPlugin = isPlugin;
+-   }
+-
+-	/**
+-    * @param installDir the installDir to set
+-    */
+-   public void setInstallDir(FileWrapper installDir) {
+-      this.installDir = installDir;
+-   }
+-
+-	/**
+-	 * @param artifactName the artifactName to set
+-	 */
+-	public void setArtifactName(String artifactName)
+-	{
+-		this.artifactName = artifactName;
+-	}
+-
+-	/**
+-	 * @return the artifactName
+-	 */
+-	public String getArtifactName()
+-	{
+-		return artifactName;
+-	} 
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/util/PathUtils.java
++++ /dev/null
+@@ -1,45 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.util;
+-
+-public interface PathUtils
+-{
+-
+-	/**
+-	 * Constructs a path out of the pathElements.
+-	 * 
+-	 * @param prependSlash
+-	 *           if true this will ensure that the result begins with "/".
+-	 * @param pathElements
+-	 *           the strings to connect. They can have "/" in them which will be de-duped in the result, if
+-	 *           necessary.
+-	 * @return the path that was constructed.
+-	 */
+-	public abstract String buildPath(boolean prependSlash, String... pathElements);
+-
+-	/**
+-	 * Returns the file part of the specified path.
+-	 * 
+-	 * @param path
+-	 *           the path
+-	 * @return the file part of the path
+-	 */
+-	public abstract String getFileFromPath(String path);
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/util/PathUtilsImpl.java
++++ /dev/null
+@@ -1,71 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.util;
+-
+-/**
+- * A utility class for manipulating paths
+- * 
+- * @author manningr
+- */
+-public class PathUtilsImpl implements PathUtils
+-{
+-	/**
+-	 * Constructs a path out of the pathElements.
+-	 * 
+-	 * @param prependSlash
+-	 *           if true this will ensure that the result begins with "/".
+-	 * @param pathElements
+-	 *           the strings to connect. They can have "/" in them which will be de-duped in the result, if
+-	 *           necessary.
+-	 * @return the path that was constructed.
+-	 */
+-	public String buildPath(boolean prependSlash, String... pathElements)
+-	{
+-		StringBuilder result = new StringBuilder("/");
+-
+-		for (String pathElement : pathElements)
+-		{
+-			result.append(pathElement).append("/");
+-		}
+-
+-		String retVal = result.toString().replace("//", "/").replace("//", "/");
+-
+-		if (retVal.endsWith("/"))
+-		{
+-			retVal = retVal.substring(0, retVal.length() - 1);
+-		}
+-
+-		return retVal;
+-	}
+-
+-	/**
+-	 * Returns the file part of the specified path.
+-	 * 
+-	 * @param path
+-	 *           the path
+-	 * @return the file part of the path
+-	 */
+-	public String getFileFromPath(String path)
+-	{
+-		if (path.indexOf("/") == -1) { return path; }
+-		int slashIndex = path.lastIndexOf("/");
+-		return path.substring(slashIndex+1);
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/ArtifactXmlBean.java
++++ /dev/null
+@@ -1,224 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-import java.io.Serializable;
+-
+-/**
+- * This describes a single artifact.  An artifact is simply a file resource 
+- * required in a given release. 
+- * 
+- * @author manningr
+- */
+-public class ArtifactXmlBean implements Serializable {
+-
+-    private static final long serialVersionUID = -6653935534454353144L;
+-
+-    private String name;
+-
+-    private String type;
+-
+-    private String version;
+-
+-    private long size;
+-
+-    private long checksum;
+-
+-    private boolean installed = false;
+-    
+-    public ArtifactXmlBean() {
+-
+-    }
+-
+-    public ArtifactXmlBean(String name, String type, String version, long size,
+-            long checksum) {
+-
+-        this.name = name;
+-        this.type = type;
+-        this.version = version;
+-        this.size = size;
+-        this.checksum = checksum;
+-    }
+-
+-    /**
+-     * @return the name
+-     */
+-    public String getName() {
+-        return name;
+-    }
+-
+-    /**
+-     * @param name the name to set
+-     */
+-    public void setName(String name) {
+-        this.name = name;
+-    }
+-
+-    /**
+-     * @return the type
+-     */
+-    public String getType() {
+-        return type;
+-    }
+-
+-    /**
+-     * @param type the type to set
+-     */
+-    public void setType(String type) {
+-        this.type = type;
+-    }
+-
+-    /**
+-     * @return the version
+-     */
+-    public String getVersion() {
+-        return version;
+-    }
+-
+-    /**
+-     * @param version the version to set
+-     */
+-    public void setVersion(String version) {
+-        this.version = version;
+-    }
+-
+-    /**
+-     * @return the size
+-     */
+-    public long getSize() {
+-        return size;
+-    }
+-
+-    /**
+-     * @param size the size to set
+-     */
+-    public void setSize(long size) {
+-        this.size = size;
+-    }
+-
+-    /**
+-     * @return the checksum
+-     */
+-    public long getChecksum() {
+-        return checksum;
+-    }
+-
+-    /**
+-     * @param checksum the checksum to set
+-     */
+-    public void setChecksum(long checksum) {
+-        this.checksum = checksum;
+-    }
+-
+-   /**
+-    * @return the installed
+-    */
+-   public boolean isInstalled() {
+-      return installed;
+-   }
+-
+-   /**
+-    * @param installed the installed to set
+-    */
+-   public void setInstalled(boolean installed) {
+-      this.installed = installed;
+-   }
+-
+-   /**
+-    * @see java.lang.Object#hashCode()
+-    */
+-   @Override
+-   public int hashCode() {
+-      final int prime = 31;
+-      int result = 1;
+-      result = prime * result + (int) (checksum ^ (checksum >>> 32));
+-      result = prime * result + ((name == null) ? 0 : name.hashCode());
+-      result = prime * result + (int) (size ^ (size >>> 32));
+-      result = prime * result + ((type == null) ? 0 : type.hashCode());
+-      result = prime * result + ((version == null) ? 0 : version.hashCode());
+-      return result;
+-   }
+-
+-   /**
+-    * Artifacts that differ only by whether or not they are installed are still
+-    * considered equal for the purpose of figuring out whether the user has the
+-    * latest software.
+-    * 
+-    * @see java.lang.Object#equals(java.lang.Object)
+-    */
+-   @Override
+-   public boolean equals(Object obj) {
+-      if (this == obj)
+-         return true;
+-      if (obj == null)
+-         return false;
+-      if (getClass() != obj.getClass())
+-         return false;
+-      final ArtifactXmlBean other = (ArtifactXmlBean) obj;
+-      if (checksum != other.checksum)
+-         return false;
+-      if (name == null) {
+-         if (other.name != null)
+-            return false;
+-      } else if (!name.equals(other.name))
+-         return false;
+-      if (size != other.size)
+-         return false;
+-      if (type == null) {
+-         if (other.type != null)
+-            return false;
+-      } else if (!type.equals(other.type))
+-         return false;
+-      if (version == null) {
+-         if (other.version != null)
+-            return false;
+-      } else if (!version.equals(other.version))
+-         return false;
+-      return true;
+-   }
+-
+-	/**
+-	  * Constructs a <code>String</code> with all attributes
+-	  * in name = value format.
+-	  *
+-	  * @return a <code>String</code> representation 
+-	  * of this object.
+-	  */
+-	 @Override
+-	 public String toString()
+-	 {
+-	     final String TAB = "    ";
+-	 
+-	     StringBuilder retValue = new StringBuilder();
+-	     
+-	     retValue.append("ArtifactXmlBean ( ")
+-	         .append(super.toString()).append(TAB)
+-	         .append("name = ").append(this.name).append(TAB)
+-	         .append("type = ").append(this.type).append(TAB)
+-	         .append("version = ").append(this.version).append(TAB)
+-	         .append("size = ").append(this.size).append(TAB)
+-	         .append("checksum = ").append(this.checksum).append(TAB)
+-	         .append("installed = ").append(this.installed).append(TAB)
+-	         .append(" )");
+-	     
+-	     return retValue.toString();
+-	 }
+-
+-   
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/ChangeListXmlBean.java
++++ /dev/null
+@@ -1,55 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-import java.io.Serializable;
+-import java.util.List;
+-
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
+-
+-/**
+- * This bean is a javabean representation of the data in changeList.xml which is captured from the user's 
+- * changes that are made using the update feature. 
+- * 
+- * @author manningr
+- */
+-public class ChangeListXmlBean implements Serializable {
+-
+-	private static final long serialVersionUID = -5388272506303651886L;
+-
+-	/** the changes to make */
+-   private List<ArtifactStatus> changes = null;
+-   
+-   /**
+-    * @return the _changes
+-    */
+-   public List<ArtifactStatus> getChanges() {
+-      return changes;
+-   }
+-
+-   /**
+-    * @param _changes the _changes to set
+-    */
+-   public void setChanges(List<ArtifactStatus> changes) {
+-      this.changes = changes;
+-   }
+-   
+-   
+-   
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/ChannelXmlBean.java
++++ /dev/null
+@@ -1,119 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-public class ChannelXmlBean {
+-
+-    private String name;
+-    
+-    private ReleaseXmlBean currentRelease;
+-
+-    /**
+-     * @return the name
+-     */
+-    public String getName() {
+-        return name;
+-    }
+-
+-    /**
+-     * @param name the name to set
+-     */
+-    public void setName(String name) {
+-        this.name = name;
+-    }
+-
+-    /**
+-     * @return the currentRelease
+-     */
+-    public ReleaseXmlBean getCurrentRelease() {
+-        return currentRelease;
+-    }
+-
+-    /**
+-     * @param currentRelease the currentRelease to set
+-     */
+-    public void setCurrentRelease(ReleaseXmlBean currentRelease) {
+-        this.currentRelease = currentRelease;
+-    }
+-
+-    /**
+-     * @see java.lang.Object#hashCode()
+-     */
+-    @Override
+-    public int hashCode() {
+-        final int prime = 31;
+-        int result = 1;
+-        result = prime * result
+-                + ((currentRelease == null) ? 0 : currentRelease.hashCode());
+-        result = prime * result + ((name == null) ? 0 : name.hashCode());
+-        return result;
+-    }
+-
+-    /**
+-     * @see java.lang.Object#equals(java.lang.Object)
+-     */
+-    @Override
+-    public boolean equals(Object obj) {
+-        if (this == obj)
+-            return true;
+-        if (obj == null)
+-            return false;
+-        if (getClass() != obj.getClass())
+-            return false;
+-        final ChannelXmlBean other = (ChannelXmlBean) obj;
+-        if (currentRelease == null) {
+-            if (other.currentRelease != null)
+-                return false;
+-        } else if (!currentRelease.equals(other.currentRelease))
+-            return false;
+-        if (name == null) {
+-            if (other.name != null)
+-                return false;
+-        } else if (!name.equals(other.name))
+-            return false;
+-        return true;
+-    }
+-
+-	/**
+-	  * Constructs a <code>String</code> with all attributes
+-	  * in name = value format.
+-	  *
+-	  * @return a <code>String</code> representation 
+-	  * of this object.
+-	  */
+-	 @Override
+-	 public String toString()
+-	 {
+-	     final String TAB = "    ";
+-	 
+-	     StringBuilder retValue = new StringBuilder();
+-	     
+-	     retValue.append("ChannelXmlBean ( ")
+-	         .append(super.toString()).append(TAB)
+-	         .append("name = ").append(this.name).append(TAB)
+-	         .append("currentRelease = ").append(this.currentRelease).append(TAB)
+-	         .append(" )");
+-	     
+-	     return retValue.toString();
+-	 }
+-
+-
+-    
+-    
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/EnumPersistenceDelegate.java
++++ /dev/null
+@@ -1,58 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-import java.beans.BeanInfo;
+-import java.beans.DefaultPersistenceDelegate;
+-import java.beans.Encoder;
+-import java.beans.Expression;
+-import java.beans.IntrospectionException;
+-import java.beans.Introspector;
+-
+- at SuppressWarnings("unchecked")
+-public class EnumPersistenceDelegate extends DefaultPersistenceDelegate {
+-
+-   private static EnumPersistenceDelegate INSTANCE = new EnumPersistenceDelegate();
+-
+-   public static void installFor(Enum<?>[] values) {
+-     Class<? extends Enum> declaringClass = values[0].getDeclaringClass();
+-     installFor(declaringClass);
+-
+-     for (Enum<?> e : values)
+-       if (e.getClass() != declaringClass)
+-         installFor(e.getClass());
+-   }
+-
+-   public static void installFor(Class<? extends Enum> enumClass) {
+-     try {
+-       BeanInfo info = Introspector.getBeanInfo( enumClass );
+-       info.getBeanDescriptor().setValue( "persistenceDelegate", INSTANCE );
+-     } catch( IntrospectionException exception ) {
+-       throw new RuntimeException("Unable to persist enumerated type "+enumClass, exception);
+-     }
+-   }
+-
+-   protected Expression instantiate(Object oldInstance, Encoder out) {
+-     Enum e = (Enum)oldInstance;
+-     return new Expression(Enum.class,
+-                           "valueOf",
+-                           new Object[] { e.getDeclaringClass(),
+-                                          e.name() });
+-   }
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/ModuleType.java
++++ /dev/null
+@@ -1,33 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-import java.io.Serializable;
+-
+-/**
+- * An enum that defines the types of modules that will be available for the 
+- * user to choose to install/update.
+- * 
+- * @author manningr
+- */
+-public enum ModuleType implements Serializable {
+-    CORE,
+-    PLUGIN,
+-    I18N
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/ModuleXmlBean.java
++++ /dev/null
+@@ -1,79 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-import java.io.Serializable;
+-import java.util.HashSet;
+-import java.util.Set;
+-
+-/**
+- * A module is a group of Artifacts that work together to provide of unit of 
+- * functionality.  For instance, each plugin is a module; the core jars 
+- * squirrel-sql.jar and fw.jar are together a module. 
+- * 
+- * @author manningr
+- *
+- */
+-public class ModuleXmlBean implements Serializable {
+-
+-    private static final long serialVersionUID = -6047289718869161323L;
+-
+-    private String name;
+-    
+-    private Set<ArtifactXmlBean> artifacts = new HashSet<ArtifactXmlBean>();
+-    
+-    /**
+-     * @return the name
+-     */
+-    public String getName() {
+-        return name;
+-    }
+-
+-    /**
+-     * @param name the name to set
+-     */
+-    public void setName(String name) {
+-        this.name = name;
+-    }
+-
+-    /**
+-     * @return the artifacts
+-     */
+-    public Set<ArtifactXmlBean> getArtifacts() {
+-        return artifacts;
+-    }
+-
+-    /**
+-     * @param artifacts the artifacts to set
+-     */
+-    public void setArtifacts(Set<ArtifactXmlBean> artifacts) {
+-        this.artifacts = artifacts;
+-    }
+-    
+-    /**
+-     * Adds an artifact to the set.
+-     * 
+-     * @param artifact the artifact to add.
+-     */
+-    public void addArtifact(ArtifactXmlBean artifact) {
+-        this.artifacts.add(artifact);
+-    }
+-    
+-    
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/ReleaseXmlBean.java
++++ /dev/null
+@@ -1,243 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-import java.io.Serializable;
+-import java.text.DateFormat;
+-import java.text.SimpleDateFormat;
+-import java.util.Date;
+-import java.util.HashSet;
+-import java.util.Set;
+-
+-/**
+- * This class defines the data items that compose a release.
+- * 
+- * @author manningr
+- */
+-public class ReleaseXmlBean implements Serializable
+-{
+-
+-	private static final long serialVersionUID = -7311033877370497900L;
+-
+-	/** The name of the release (like "snapshot", "stable", etc.) */
+-	private String name;
+-
+-	/** The version of the release */
+-	private String version;
+-
+-	private Date createTime;
+-
+-	private Date lastModifiedTime;
+-
+-	/** Artifacts are things like jarfiles, property files, and the like */
+-	Set<ModuleXmlBean> modules = new HashSet<ModuleXmlBean>();
+-
+-	private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'_'HH:mm:ss.SSSZ");
+-
+-	public ReleaseXmlBean()
+-	{
+-		createTime = new Date();
+-		lastModifiedTime = createTime;
+-	}
+-
+-	public ReleaseXmlBean(String name, String version)
+-	{
+-		this();
+-		this.name = name;
+-		this.version = version;
+-	}
+-
+-	/**
+-	 * @return the name
+-	 */
+-	public String getName()
+-	{
+-		return name;
+-	}
+-
+-	/**
+-	 * @param name
+-	 *           the name to set
+-	 */
+-	public void setName(String name)
+-	{
+-		this.name = name;
+-		lastModifiedTime = new Date();
+-	}
+-
+-	/**
+-	 * @return the version
+-	 */
+-	public String getVersion()
+-	{
+-		return version;
+-	}
+-
+-	/**
+-	 * @param version
+-	 *           the version to set
+-	 */
+-	public void setVersion(String version)
+-	{
+-		this.version = version;
+-		lastModifiedTime = new Date();
+-	}
+-
+-	/**
+-	 * @return the artifacts
+-	 */
+-	public Set<ModuleXmlBean> getModules()
+-	{
+-		return modules;
+-	}
+-
+-	/**
+-	 * @param modules
+-	 *           the modules to set
+-	 */
+-	public void setModules(Set<ModuleXmlBean> modules)
+-	{
+-		this.modules = modules;
+-		lastModifiedTime = new Date();
+-	}
+-
+-	/**
+-	 * @param module
+-	 */
+-	public void addmodule(ModuleXmlBean module)
+-	{
+-		if (module == null) { return; }
+-		this.modules.add(module);
+-		lastModifiedTime = new Date();
+-	}
+-
+-	/**
+-	 * @see java.lang.Object#hashCode()
+-	 */
+-	@Override
+-	public int hashCode()
+-	{
+-		final int prime = 31;
+-		int result = 1;
+-		result = prime * result + ((name == null) ? 0 : name.hashCode());
+-		result = prime * result + ((version == null) ? 0 : version.hashCode());
+-		return result;
+-	}
+-
+-	/**
+-	 * @see java.lang.Object#equals(java.lang.Object)
+-	 */
+-	@Override
+-	public boolean equals(Object obj)
+-	{
+-		if (this == obj) return true;
+-		if (obj == null) return false;
+-		if (getClass() != obj.getClass()) return false;
+-		final ReleaseXmlBean other = (ReleaseXmlBean) obj;
+-		if (name == null)
+-		{
+-			if (other.name != null) return false;
+-		}
+-		else if (!name.equals(other.name)) return false;
+-		if (version == null)
+-		{
+-			if (other.version != null) return false;
+-		}
+-		else if (!version.equals(other.version)) return false;
+-		return true;
+-	}
+-
+-	/**
+-	 * @return the createTime
+-	 */
+-	public String getCreateTime()
+-	{
+-
+-		return dateFormat.format(createTime);
+-	}
+-
+-	/**
+-	 * @param createTime
+-	 *           the createTime to set
+-	 */
+-	public void setCreateTime(Date createTime)
+-	{
+-		if (createTime == null) {
+-			return;
+-		}
+-		this.createTime = createTime;
+-	}
+-
+-	/**
+-	 * @return the lastModifiedTime
+-	 */
+-	public String getLastModifiedTime()
+-	{
+-		return dateFormat.format(lastModifiedTime);
+-	}
+-
+-	/**
+-	 * @param lastModifiedTime
+-	 *           the lastModifiedTime to set
+-	 */
+-	public void setLastModifiedTime(Date lastModifiedTime)
+-	{
+-		if (lastModifiedTime == null) { return; }
+-		this.lastModifiedTime = lastModifiedTime;
+-	}
+-
+-	/**
+-	 * Constructs a <code>String</code> with all attributes in name = value format.
+-	 * 
+-	 * @return a <code>String</code> representation of this object.
+-	 */
+-	@Override
+-	public String toString()
+-	{
+-		final String TAB = "    ";
+-
+-		StringBuilder retValue = new StringBuilder();
+-
+-		retValue.append("ReleaseXmlBean ( ")
+-			.append(super.toString())
+-			.append(TAB)
+-			.append("name = ")
+-			.append(this.name)
+-			.append(TAB)
+-			.append("version = ")
+-			.append(this.version)
+-			.append(TAB)
+-			.append("createTime = ")
+-			.append(this.createTime)
+-			.append(TAB)
+-			.append("lastModifiedTime = ")
+-			.append(this.lastModifiedTime)
+-			.append(TAB)
+-			.append("modules = ")
+-			.append(this.modules)
+-			.append(TAB)
+-			.append("dateFormat = ")
+-			.append(this.dateFormat)
+-			.append(TAB)
+-			.append(" )");
+-
+-		return retValue.toString();
+-	}
+-
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/UpdateXmlSerializer.java
++++ /dev/null
+@@ -1,96 +0,0 @@
+-/*
+- * Copyright (C) 2008 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-import java.io.FileNotFoundException;
+-import java.io.IOException;
+-import java.io.InputStream;
+-
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-
+-public interface UpdateXmlSerializer {
+-
+-	/**
+-	 * Writes the specified Release XMLBean to the specified file.
+-	 * 
+-	 * @param channelBean
+-	 *           the bean to write.
+-	 * @param filename
+-	 *           the filename of the file to write to.
+-	 * @throws FileNotFoundException
+-	 *            if the specified file could not be written to
+-	 * 
+-	 */
+-	void write(ChannelXmlBean channelBean, String filename) throws FileNotFoundException;
+-
+-	/**
+-	 * Writes the specified ChangeList XMLBean to the specified file.
+-	 * 
+-	 * @param changeBean
+-	 *           the bean to write
+-	 * @param filename
+-	 *           the filename of the file to write to
+-	 * 
+-	 * @throws FileNotFoundException
+-	 *            if the specified file could not be written to
+-	 */
+-	void write(ChangeListXmlBean changeBean, String filename) throws FileNotFoundException;
+-
+-	/**
+-	 * Writes the specified ChangeList XMLBean to the specified file.
+-	 * 
+-	 * @param changeBean
+-	 *           the bean to write
+-	 * @param filename
+-	 *           the filename of the file to write to
+-	 * 
+-	 * @throws FileNotFoundException
+-	 *            if the specified file could not be written to
+-	 */
+-	void write(ChangeListXmlBean changeBean, FileWrapper file) throws FileNotFoundException;
+-
+-	/**
+-	 * Reads a Channel XMLBean from the specified file.
+-	 * 
+-	 * @param filename
+-	 *           the filename of the file to read the XML bean from.
+-	 * @throws IOException 
+-	 * @throws FileNotFoundException 
+-	 * 
+-	 * @throws Exception
+-	 *            if any IO exceptions occurr.
+-	 */
+-	ChannelXmlBean readChannelBean(String filename) throws FileNotFoundException, IOException;
+-
+-	ChannelXmlBean readChannelBean(FileWrapper fileWrapper) throws FileNotFoundException, IOException;
+-
+-	/**
+-	 * Reads a Channel XMLBean from the specified InputStream.
+-	 * 
+-	 * @param is
+-	 *           the InputStream to read the XML bean from.
+-	 * 
+-	 * @throws Exception
+-	 *            if any IO exceptions occurr.
+-	 */
+-	ChannelXmlBean readChannelBean(InputStream is) throws IOException;
+-
+-	ChangeListXmlBean readChangeListBean(FileWrapper file) throws FileNotFoundException;
+-
+-}
+\ No newline at end of file
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/UpdateXmlSerializerImpl.java
++++ /dev/null
+@@ -1,158 +0,0 @@
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-import java.beans.XMLDecoder;
+-import java.beans.XMLEncoder;
+-import java.io.BufferedInputStream;
+-import java.io.BufferedOutputStream;
+-import java.io.File;
+-import java.io.FileInputStream;
+-import java.io.FileNotFoundException;
+-import java.io.FileOutputStream;
+-import java.io.IOException;
+-import java.io.InputStream;
+-
+-import net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction;
+-import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
+-import net.sourceforge.squirrel_sql.fw.util.IOUtilities;
+-import net.sourceforge.squirrel_sql.fw.util.IOUtilitiesImpl;
+-
+-/**
+- * This class contains utility methods that can be used to read from and write
+- * to files containing release xml beans. The decision to use Java's XML beans
+- * support over nanoxml was difficult. If I go with nanoxml, I believe I would
+- * need a beaninfo class and some data structures might not work. Also, if we
+- * want to eliminate dependency on nanoxml, using the inherent capabilities in
+- * Java 5 seemed to be a wiser approach.
+- * 
+- * @author manningr
+- */
+-public class UpdateXmlSerializerImpl implements UpdateXmlSerializer {
+-
+-   /** Allows for encoding enums. */
+-   private EnumPersistenceDelegate enumDelegate = new EnumPersistenceDelegate();
+-   
+-   private IOUtilities _iou = new IOUtilitiesImpl();
+-   
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializer#write(net.sourceforge.squirrel_sql.client.update.xmlbeans.ChannelXmlBean, java.lang.String)
+-    */
+-   public void write(ChannelXmlBean channelBean, String filename)
+-         throws FileNotFoundException {
+-      XMLEncoder os = getXmlEncoder(filename);
+-      os.writeObject(channelBean);
+-      os.close();
+-   }
+-
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializer#write(net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean, java.lang.String)
+-    */
+-   public void write(ChangeListXmlBean changeBean, String filename)
+-         throws FileNotFoundException {
+-      XMLEncoder os = getXmlEncoder(filename);
+-      os.writeObject(changeBean);
+-      os.close();
+-   }
+-
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializer#write(net.sourceforge.squirrel_sql.client.update.xmlbeans.ChangeListXmlBean, net.sourceforge.squirrel_sql.fw.util.FileWrapper)
+-    */
+-   public void write(ChangeListXmlBean changeBean, FileWrapper file)
+-         throws FileNotFoundException {
+-      XMLEncoder os = getXmlEncoder(file.getAbsolutePath());
+-      os.writeObject(changeBean);
+-      os.close();
+-   }
+-   
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializer#readChannelBean(java.lang.String)
+-    */
+-   public ChannelXmlBean readChannelBean(String filename) throws FileNotFoundException,
+-         IOException {
+-      if (filename == null) {
+-         throw new IllegalArgumentException("filename cannot be null");
+-      }
+-      return readChannelBean(new FileInputStream(filename));
+-   }
+-
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializer#readChannelBean(net.sourceforge.squirrel_sql.fw.util.FileWrapper)
+-    */
+-   public ChannelXmlBean readChannelBean(FileWrapper fileWrapper)  throws FileNotFoundException,
+-   	IOException {
+-   	ChannelXmlBean result = null;
+-   	BufferedInputStream is = null;
+-   	try {
+-	   	is = new BufferedInputStream(new FileInputStream(fileWrapper.getAbsolutePath()));
+-	      result = readChannelBean(is);
+-   	} finally {
+-   		_iou.closeInputStream(is);
+-   	}
+-   	return result;
+-   }
+-   
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializer#readChannelBean(java.io.InputStream)
+-    */
+-   public ChannelXmlBean readChannelBean(InputStream is) throws IOException {
+-      XMLDecoder bis = null;
+-      Object result = null;
+-      try {
+-         bis = new XMLDecoder(new BufferedInputStream(is));
+-         result = bis.readObject();
+-      } finally {
+-         if (is != null) {
+-            is.close();
+-         }
+-      }
+-      return (ChannelXmlBean) result;
+-   }
+-
+-   /**
+-    * @see net.sourceforge.squirrel_sql.client.update.xmlbeans.UpdateXmlSerializer#readChangeListBean(net.sourceforge.squirrel_sql.fw.util.FileWrapper)
+-    */
+-   public ChangeListXmlBean readChangeListBean(FileWrapper file)
+-         throws FileNotFoundException {
+-      XMLDecoder bis = null;
+-      FileInputStream fis = null;
+-      Object result = null;
+-      try {
+-         fis = new FileInputStream(new File(file.getAbsolutePath()));
+-         bis = new XMLDecoder(new BufferedInputStream(fis));
+-         result = bis.readObject();
+-      } finally {
+-         _iou.closeInputStream(fis);
+-         if (bis != null) {
+-            bis.close();
+-         }
+-      }
+-      return (ChangeListXmlBean) result;      
+-   }
+-   
+-   private XMLEncoder getXmlEncoder(String filename)
+-         throws FileNotFoundException {
+-      XMLEncoder result = null;
+-      BufferedOutputStream os = 
+-         new BufferedOutputStream(new FileOutputStream(filename));
+-      result = new XMLEncoder(os);
+-      result.setPersistenceDelegate(ArtifactAction.class, enumDelegate);
+-      return result;
+-   }
+-}
+--- a/app/src/main/java/net/sourceforge/squirrel_sql/client/update/xmlbeans/XmlBeanUtilities.java
++++ /dev/null
+@@ -1,119 +0,0 @@
+-package net.sourceforge.squirrel_sql.client.update.xmlbeans;
+-
+-/*
+- * Copyright (C) 2007 Rob Manning
+- * manningr at users.sourceforge.net
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-
+-import java.io.File;
+-import java.io.IOException;
+-import java.util.Date;
+-
+-import net.sourceforge.squirrel_sql.client.ApplicationArguments;
+-import net.sourceforge.squirrel_sql.client.update.UpdateUtil;
+-import net.sourceforge.squirrel_sql.fw.util.IOUtilities;
+-import net.sourceforge.squirrel_sql.fw.util.IOUtilitiesImpl;
+-
+-/**
+- * Utility methods for working with XmlBeans. This will be used mostly for building releases.
+- * 
+- * @author manningr
+- */
+-public class XmlBeanUtilities {
+-
+-	private IOUtilities _iou = new IOUtilitiesImpl();
+-
+-	/**
+-	 * This will create a ChannelXmlBean that describes a release as it is found in the specified directory,
+-	 * using the specified releaseName and version.
+-	 * 
+-	 * @param channelName
+-	 *        the name of the channel.
+-	 * @param releaseName
+-	 *        the name of the release.
+-	 * @param version
+-	 *        the version of the release.
+-	 * @param directory
+-	 *        the directory to use as the top-level of the release.
+-	 * 
+-	 * @return
+-	 */
+-	public ChannelXmlBean buildChannelRelease(String channelName, String releaseName, String version,
+-	      String directory) throws IOException {
+-		ChannelXmlBean result = new ChannelXmlBean();
+-		result.setName(channelName);
+-		ReleaseXmlBean releaseBean = new ReleaseXmlBean(releaseName, version);
+-		releaseBean.setCreateTime(new Date());
+-		File dir = new File(directory);
+-		for (File f : dir.listFiles()) {
+-			System.out.println("Processing module directory: " + f);
+-			if (f.isDirectory()) {
+-				// f is a module
+-				ModuleXmlBean module = new ModuleXmlBean();
+-				module.setName(f.getName());
+-				for (File a : f.listFiles()) {
+-
+-					String filename = a.getName();
+-					System.out.println("Processing artifact file: " + filename);
+-					String type = filename.substring(filename.indexOf(".") + 1);
+-					ArtifactXmlBean artifact = new ArtifactXmlBean();
+-					artifact.setName(a.getName());
+-					artifact.setType(type);
+-					artifact.setVersion(version);
+-					artifact.setSize(a.length());
+-					artifact.setChecksum(_iou.getCheckSum(a));
+-					module.addArtifact(artifact);
+-				}
+-				releaseBean.addmodule(module);
+-			}
+-		}
+-		result.setCurrentRelease(releaseBean);
+-		return result;
+-	}
+-
+-	/**
+-	 * This is used by the build script to automate building the release.xml file that describes what is
+-	 * available in a particular release.
+-	 * 
+-	 * @param args
+-	 * @throws Exception
+-	 */
+-	public static void main(String[] args) throws Exception {
+-		ApplicationArguments.initialize(new String[0]);
+-		if (args.length != 3) {
+-			printUsage();
+-		} else {
+-			File f = new File(args[2], UpdateUtil.RELEASE_XML_FILENAME);
+-			String filename = f.getAbsolutePath();
+-			if (f.exists()) {
+-				System.err.println("File " + filename + " appears to already exist");
+-			} else {
+-				XmlBeanUtilities util = new XmlBeanUtilities();
+-				ChannelXmlBean channelBean = util.buildChannelRelease(args[0], args[0], args[1], args[2]);
+-				UpdateXmlSerializer serializer = new UpdateXmlSerializerImpl();
+-
+-				System.out.println("Writing channel release bean to " + filename);
+-				serializer.write(channelBean, filename);
+-			}
+-		}
+-
+-	}
+-
+-	private static void printUsage() {
+-		System.err.println("Usage: java XmlBeanUtilities <channel> <version> <directory>");
+-	}
+-}

Added: trunk/squirrel-sql/debian/patches/series
===================================================================
--- trunk/squirrel-sql/debian/patches/series	                        (rev 0)
+++ trunk/squirrel-sql/debian/patches/series	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,10 @@
+001-squirrelsql-jgoodies.patch
+002-squirrelsql-version.patch
+003-squirrelsql-plugins-parent-pom.patch
+004-squirrelsql-plugins-assembly-descripton-pom.patch
+005-squirrelsql-plugins-hibernate-HibernateUtil.patch
+006-launch-script-debian.patch
+007-squirrelsql-changelog.patch
+008-native2ascii.patch
+009-plugin-liclink.patch
+disable_autoupdate.dpatch

Added: trunk/squirrel-sql/debian/rules
===================================================================
--- trunk/squirrel-sql/debian/rules	                        (rev 0)
+++ trunk/squirrel-sql/debian/rules	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,49 @@
+#!/usr/bin/make -f
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/ant.mk
+
+PACKAGE              := $(DEB_SOURCE_PACKAGE)
+VERSION              := $(DEB_UPSTREAM_VERSION)
+JAVA_HOME            := /usr/lib/jvm/default-java
+DEB_JARS             := ant-nodeps antlr asm3 cglib commons-cli commons-codec  \
+ commons-collections3 commons-httpclient commons-logging commons-logging-api dom4j \
+ hibernate-annotations hibernate-commons-annotations hibernate-core hibernate-entitymanager \
+ hibernate3 jxl nanoxml spring-beans spring-context spring-context-support spring-core stringtemplate \
+ forms looks axis axis-jaxrpc axis-saaj
+DEB_ANT_BUILD_TARGET := package javadoc
+DEB_ANT_BUILDFILE    := debian/build.xml
+DEB_ANT_ARGS         := -Dbasedir=$(realpath .) -Dpackage=$(PACKAGE) -Dversion=$(VERSION) -Dbin.package=$(PACKAGE)
+ANT_OPTS             := -Dfile.encoding=UTF-8
+API_DOCS             := target/apidocs
+PLUGINS              := codecompletion dataimport db2 dbcopy dbdiff derby editextras example exportconfig favs \
+ graph h2 hibernate i18n informix mssql mysql netezza postgres refactoring sessionscript smarttools sqlbookmark \
+ sqlparam sqlreplace sqlscript laf firebird sqlval sybase userscript
+#FIXME: syntax firebirdmanager oracle
+
+get-orig-source:
+	uscan --download-version $(DEB_UPSTREAM_VERSION) --force-download
+
+binary-post-install/lib$(PACKAGE)-fw-java::
+	mh_installpoms -plib$(PACKAGE)-fw-java
+	mh_installjar -plib$(PACKAGE)-fw-java -dusr/share/squirrel-sql/lib/fw.jar -l fw/pom.xml fw/target/fw-$(VERSION).jar
+
+binary-post-install/$(PACKAGE)::
+	find debian/$(PACKAGE)/usr/share/squirrel-sql/doc/ -type f -exec chmod a-x {} \;
+	find debian/$(PACKAGE)/usr/share/squirrel-sql/icons/ -type f -exec chmod a-x {} \;
+	mh_installpoms -p$(PACKAGE)
+	mh_installjar -p$(PACKAGE) -dusr/share/squirrel-sql/$(PACKAGE).jar -l app/pom.xml app/target/$(PACKAGE)-$(VERSION).jar
+	mh_installjar -p$(PACKAGE) -dusr/share/squirrel-sql/lib/versioncheck.jar -l installer/squirrelsql-java-version-checker/pom.xml installer/squirrelsql-java-version-checker/target/squirrelsql-java-version-checker-$(VERSION).jar
+	dh_installchangelogs -p$(PACKAGE) doc/src/main/resources/changes.txt
+	set -e; for PLUGIN in $(PLUGINS) ; do \
+	  mh_installpom -p$(PACKAGE)-plugin-$$PLUGIN plugins/$$PLUGIN/pom.xml ; \
+	  mh_installjar -p$(PACKAGE)-plugin-$$PLUGIN -dusr/share/squirrel-sql/plugins/$$PLUGIN.jar plugins/$$PLUGIN/pom.xml plugins/$$PLUGIN/target/$$PLUGIN-$(VERSION).jar ; \
+	  dh_install -p$(PACKAGE)-plugin-$$PLUGIN -Xlicence -XLicence -Xlicense plugins/$$PLUGIN/src/main/resources/doc/* usr/share/squirrel-sql/plugins/$$PLUGIN/ ; \
+	  dh_link -p$(PACKAGE)-plugin-$$PLUGIN usr/share/common-licenses/LGPL-2.1 usr/share/squirrel-sql/plugins/$$PLUGIN/licence.txt ; \
+	  find debian/$(PACKAGE)-plugin-$$PLUGIN/usr/share/squirrel-sql/plugins/$$PLUGIN/ -type f -exec chmod a-x {} \; ; \
+	  dh_installchangelogs -p$(PACKAGE)-plugin-$$PLUGIN plugins/$$PLUGIN/src/main/resources/doc/changes.txt ; \
+	done
+
+clean::
+	-rm -rf debian/tmp
+	mh_clean
\ No newline at end of file


Property changes on: trunk/squirrel-sql/debian/rules
___________________________________________________________________
Added: svn:executable
   + 

Added: trunk/squirrel-sql/debian/source/format
===================================================================
--- trunk/squirrel-sql/debian/source/format	                        (rev 0)
+++ trunk/squirrel-sql/debian/source/format	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1 @@
+3.0 (quilt)

Added: trunk/squirrel-sql/debian/squirrel-sql-doc.doc-base.api
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql-doc.doc-base.api	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql-doc.doc-base.api	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,10 @@
+Document: squirrel-sql
+Title: API Javadoc for SQuirreL SQL Client
+Author: SQuirreL SQL developers
+Abstract: This is the API Javadoc provided for the
+ squirrel-sql application.
+Section: Programming
+
+Format: HTML
+Index: /usr/share/doc/squirrel-sql/api/index.html
+Files: /usr/share/doc/squirrel-sql/api/*

Added: trunk/squirrel-sql/debian/squirrel-sql-doc.install
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql-doc.install	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql-doc.install	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,2 @@
+
+app/target/apidocs/* usr/share/doc/squirrel-sql/api

Added: trunk/squirrel-sql/debian/squirrel-sql-plugin-laf.links
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql-plugin-laf.links	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql-plugin-laf.links	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,5 @@
+/usr/share/java/looks.jar /usr/share/squirrel-sql/plugins/laf/lafs/looks.jar
+/usr/share/java/kunststoff.jar /usr/share/squirrel-sql/plugins/laf/lafs/kunstoff-laf.jar
+/usr/share/java/skinlf.jar /usr/share/squirrel-sql/plugins/laf/lafs/skinlf.jar
+/usr/share/java/substance.jar /usr/share/squirrel-sql/plugins/laf/lafs/substance.jar
+/usr/share/java/tinylaf.jar /usr/share/squirrel-sql/plugins/laf/lafs/tinylaf.jar

Added: trunk/squirrel-sql/debian/squirrel-sql-plugin-sqlval.links
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql-plugin-sqlval.links	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql-plugin-sqlval.links	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,2 @@
+/usr/share/java/axis.jar /usr/share/squirrel-sql/lib/axis.jar
+/usr/share/java/axis-jaxrpc.jar /usr/share/squirrel-sql/lib/axis-jaxrpc.jar
\ No newline at end of file

Added: trunk/squirrel-sql/debian/squirrel-sql.1
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql.1	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql.1	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,94 @@
+.TH SQUIRREL-SQL "1" "January 2011"
+.SH NAME
+SQuirreL-SQL \- a graphical Java program that will allow you to view the structure 
+of a JDBC compliant database, browse the data in tables, issue SQL commands etc.
+.SH DESCRIPTION
+usage: squirrel\-sql [options]
+.TP
+\fB\-h\fR,\-\-help
+Display Help and exit
+.TP
+\fB\-home\fR,\-\-squirrel\-home <home>
+SQuirreL home
+directory
+.TP
+\fB\-l\fR,\-\-log\-config\-file <l>
+Logging configuration
+file
+.TP
+\fB\-m\fR,\-\-use\-default\-metal\-theme
+Use default metal
+theme
+.TP
+\fB\-n\fR,\-\-native\-laf
+Use native look and
+feel
+.TP
+\fB\-nop\fR,\-\-no\-plugins
+Don't load plugins
+.TP
+\fB\-nos\fR,\-\-no\-splash
+Don't display splash
+screen
+.TP
+\fB\-pluginlist\fR,\-\-plugin\-classpath\-list <pluginlist>
+Specify a
+comma\-delimited list
+of plugins to load
+from the CLASSPATH
+.TP
+\fB\-uidebug\fR,\-\-user\-interface\-debugging
+Provides tool\-tips and
+highlighting of UI
+components for easy
+identification
+.TP
+\fB\-userdir\fR,\-\-user\-settings\-dir <userdir>
+User settings
+directory
+.TP
+\fB\-h\fR,\-\-help
+Display Help and exit
+.TP
+\fB\-home\fR,\-\-squirrel\-home <home>
+SQuirreL home
+directory
+.TP
+\fB\-l\fR,\-\-log\-config\-file <l>
+Logging configuration
+file
+.TP
+\fB\-m\fR,\-\-use\-default\-metal\-theme
+Use default metal
+theme
+.TP
+\fB\-n\fR,\-\-native\-laf
+Use native look and
+feel
+.TP
+\fB\-nop\fR,\-\-no\-plugins
+Don't load plugins
+.TP
+\fB\-nos\fR,\-\-no\-splash
+Don't display splash
+screen
+.TP
+\fB\-pluginlist\fR,\-\-plugin\-classpath\-list <pluginlist>
+Specify a
+comma\-delimited list
+of plugins to load
+from the CLASSPATH
+.TP
+\fB\-uidebug\fR,\-\-user\-interface\-debugging
+Provides tool\-tips and
+highlighting of UI
+components for easy
+identification
+.TP
+\fB\-userdir\fR,\-\-user\-settings\-dir <userdir>
+User settings
+directory
+.SH AUTHOR
+This manual page was generated using help2man and edited by Vladimir
+Kotov <vladimir at kotov.lv>, for the Debian project (but may be used
+by others).

Added: trunk/squirrel-sql/debian/squirrel-sql.install
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql.install	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql.install	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,6 @@
+app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/gm/splash.jpg /usr/share/squirrel-sql/icons/
+doc/src/main/resources/*.* /usr/share/squirrel-sql/doc/
+doc/src/main/resources/images /usr/share/squirrel-sql/doc/
+installer/squirrelsql-launcher/src/main/resources/icons /usr/share/squirrel-sql/
+installer/squirrelsql-launcher/src/main/resources/log4j.properties /usr/share/squirrel-sql/
+installer/squirrelsql-launcher/src/main/resources/squirrel-sql.sh /usr/share/squirrel-sql/

Added: trunk/squirrel-sql/debian/squirrel-sql.links
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql.links	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql.links	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,27 @@
+/usr/share/squirrel-sql/squirrel-sql.sh /usr/bin/squirrel-sql
+/usr/share/common-licenses/LGPL-2.1     /usr/share/squirrel-sql/doc/licences/squirrel_licence.txt
+/usr/share/java/antlr.jar               /usr/share/squirrel-sql/lib/antlr.jar
+/usr/share/java/asm3.jar                /usr/share/squirrel-sql/lib/asm.jar
+/usr/share/java/asm3.jar                /usr/share/squirrel-sql/lib/asm-attrs.jar
+/usr/share/java/hibernate-annotations.jar /usr/share/squirrel-sql/lib/hibernate-annotations.jar
+/usr/share/java/hibernate-commons-annotations.jar /usr/share/squirrel-sql/lib/hibernate-commons-annotations.jar
+/usr/share/java/hibernate-entitymanager.jar /usr/share/squirrel-sql/lib/hibernate-entitymanager.jar
+/usr/share/java/spring-beans.jar        /usr/share/squirrel-sql/lib/spring-beans.jar
+/usr/share/java/hibernate3.jar          /usr/share/squirrel-sql/lib/hibernate.jar
+/usr/share/java/spring-context.jar      /usr/share/squirrel-sql/lib/spring-context.jar
+/usr/share/java/cglib.jar               /usr/share/squirrel-sql/lib/cglib.jar
+/usr/share/java/jxl.jar                 /usr/share/squirrel-sql/lib/jxl.jar
+/usr/share/java/spring-context-support.jar /usr/share/squirrel-sql/lib/spring-context-support.jar
+/usr/share/java/log4j-1.2.jar           /usr/share/squirrel-sql/lib/log4j.jar
+/usr/share/java/spring-core.jar         /usr/share/squirrel-sql/lib/spring-core.jar
+/usr/share/java/commons-cli.jar         /usr/share/squirrel-sql/lib/commons-cli.jar
+/usr/share/java/nanoxml2.jar            /usr/share/squirrel-sql/lib/nanoxml.jar
+/usr/share/java/commons-codec.jar       /usr/share/squirrel-sql/lib/commons-codec.jar
+/usr/share/java/stringtemplate.jar      /usr/share/squirrel-sql/lib/stringtemplate.jar
+/usr/share/java/commons-collections3.jar /usr/share/squirrel-sql/lib/commons-collections.jar
+/usr/share/java/commons-httpclient.jar  /usr/share/squirrel-sql/lib/commons-httpclient.jar
+/usr/share/java/commons-logging.jar     /usr/share/squirrel-sql/lib/commons-logging.jar
+/usr/share/java/forms.jar               /usr/share/squirrel-sql/lib/forms.jar
+/usr/share/java/slf4j-api.jar           /usr/share/squirrel-sql/lib/slf4j-api.jar
+/usr/share/java/slf4j-log4j12.jar       /usr/share/squirrel-sql/lib/slf4j-log4j12.jar
+

Added: trunk/squirrel-sql/debian/squirrel-sql.manpages
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql.manpages	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql.manpages	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1 @@
+debian/squirrel-sql.1

Added: trunk/squirrel-sql/debian/squirrel-sql.poms
===================================================================
--- trunk/squirrel-sql/debian/squirrel-sql.poms	                        (rev 0)
+++ trunk/squirrel-sql/debian/squirrel-sql.poms	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,3 @@
+app/pom.xml
+installer/squirrelsql-java-version-checker/pom.xml
+plugins/squirrelsql-plugins-parent-pom/pom.xml

Added: trunk/squirrel-sql/debian/watch
===================================================================
--- trunk/squirrel-sql/debian/watch	                        (rev 0)
+++ trunk/squirrel-sql/debian/watch	2011-02-10 23:58:25 UTC (rev 13286)
@@ -0,0 +1,4 @@
+version=3
+opts="uversionmangle=s/-(alpha|beta)-/~$1/" \
+  http://squirrel-sql.svn.sourceforge.net/svnroot/squirrel-sql/tags/ squirrelsql-([\d\.]+)/ \
+  debian debian/orig-tar.sh




More information about the pkg-java-commits mailing list