Revision: 5816
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=5816&view=rev
Author: manningr
Date: 2010-08-21 17:46:26 +0000 (Sat, 21 Aug 2010)
Log Message:
-----------
Initial changes to convert from Ant build to Maven build
Added Paths:
-----------
trunk/sql12/plugins/i18n/pom.xml
trunk/sql12/plugins/i18n/src/main/
trunk/sql12/plugins/i18n/src/main/java/
trunk/sql12/plugins/i18n/src/main/java/net/
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/BundlesTableModel.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersController.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersPanel.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nBundle.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanel.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanelController.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nParseException.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPlugin.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nProps.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nUtils.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/TranslatorsController.java
trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/TranslatorsPanel.java
trunk/sql12/plugins/i18n/src/main/resources/
trunk/sql12/plugins/i18n/src/main/resources/doc/
trunk/sql12/plugins/i18n/src/main/resources/net/
trunk/sql12/plugins/i18n/src/main/resources/net/sourceforge/
trunk/sql12/plugins/i18n/src/main/resources/net/sourceforge/squirrel_sql/
trunk/sql12/plugins/i18n/src/main/resources/net/sourceforge/squirrel_sql/plugins/
trunk/sql12/plugins/i18n/src/main/resources/net/sourceforge/squirrel_sql/plugins/i18n/
trunk/sql12/plugins/i18n/src/main/resources/net/sourceforge/squirrel_sql/plugins/i18n/I18NStrings.properties
trunk/sql12/plugins/i18n/src/main/resources/net/sourceforge/squirrel_sql/plugins/i18n/i18n.properties
trunk/sql12/plugins/i18n/src/main/resources/net/sourceforge/squirrel_sql/plugins/i18n/images/
trunk/sql12/plugins/i18n/src/main/resources/net/sourceforge/squirrel_sql/plugins/i18n/images/open.gif
trunk/sql12/plugins/i18n/src/test/
trunk/sql12/plugins/i18n/src/test/java/
trunk/sql12/plugins/i18n/src/test/java/net/
trunk/sql12/plugins/i18n/src/test/java/net/sourceforge/
trunk/sql12/plugins/i18n/src/test/java/net/sourceforge/squirrel_sql/
trunk/sql12/plugins/i18n/src/test/java/net/sourceforge/squirrel_sql/plugins/
trunk/sql12/plugins/i18n/src/test/java/net/sourceforge/squirrel_sql/plugins/i18n/
trunk/sql12/plugins/i18n/src/test/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nBundleTest.java
trunk/sql12/plugins/i18n/src/test/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPluginTest.java
trunk/sql12/plugins/i18n/src/test/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPropsTest.java
trunk/sql12/plugins/informix/pom.xml
trunk/sql12/plugins/informix/src/main/
trunk/sql12/plugins/informix/src/main/java/
trunk/sql12/plugins/informix/src/main/java/net/
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/InformixPlugin.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/exception/
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/exception/InformixExceptionFormatter.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/exp/
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/exp/InformixSequenceExtractorImpl.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/exp/InformixSequenceInodeExpanderFactory.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/exp/InformixTableIndexExtractorImpl.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/exp/InformixTableTriggerExtractorImpl.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/tab/
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/tab/IndexDetailsTab.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/tab/InformixSourceTab.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/tab/ProcedureSourceTab.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/tab/SequenceDetailsTab.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/tab/TriggerDetailsTab.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/tab/TriggerSourceTab.java
trunk/sql12/plugins/informix/src/main/java/net/sourceforge/squirrel_sql/plugins/informix/tab/ViewSourceTab.java
trunk/sql12/plugins/informix/src/main/resources/
trunk/sql12/plugins/informix/src/main/resources/doc/
trunk/sql12/plugins/informix/src/main/resources/net/
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/squirrel_sql/
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/squirrel_sql/plugins/
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/squirrel_sql/plugins/informix/
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/squirrel_sql/plugins/informix/I18NStrings.properties
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/squirrel_sql/plugins/informix/exception/
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/squirrel_sql/plugins/informix/exception/I18NStrings.properties
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/squirrel_sql/plugins/informix/tab/
trunk/sql12/plugins/informix/src/main/resources/net/sourceforge/squirrel_sql/plugins/informix/tab/I18NStrings.properties
trunk/sql12/plugins/informix/src/test/
trunk/sql12/plugins/informix/src/test/java/
trunk/sql12/plugins/informix/src/test/java/net/
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/InformixPluginTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/exp/
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/exp/InformixSequenceExtractorImplTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/exp/InformixSequenceInodeExpanderFactoryTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/exp/InformixTableIndexExtractorImplTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/exp/InformixTableTriggerExtractorImplTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/tab/
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/tab/IndexDetailsTabTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/tab/ProcedureSourceTabTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/tab/SequenceDetailsTabTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/tab/TriggerDetailsTabTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/tab/TriggerSourceTabTest.java
trunk/sql12/plugins/informix/src/test/java/net/sourceforge/squirrel_sql/plugins/informix/tab/ViewSourceTabTest.java
trunk/sql12/plugins/isqlj/src/main/
trunk/sql12/plugins/isqlj/src/main/java/
trunk/sql12/plugins/isqlj/src/main/java/org/
trunk/sql12/plugins/isqlj/src/main/java/org/rege/
trunk/sql12/plugins/isqlj/src/main/java/org/rege/isqlj/
trunk/sql12/plugins/isqlj/src/main/java/org/rege/isqlj/squirrel/
trunk/sql12/plugins/isqlj/src/main/java/org/rege/isqlj/squirrel/ExecuteISqlJAction.java
trunk/sql12/plugins/isqlj/src/main/java/org/rege/isqlj/squirrel/ExecuteISqlJCommand.java
trunk/sql12/plugins/isqlj/src/main/java/org/rege/isqlj/squirrel/ISqlJPlugin.java
trunk/sql12/plugins/isqlj/src/main/java/org/rege/isqlj/squirrel/ISqlJPluginResources.java
trunk/sql12/plugins/isqlj/src/main/java/org/rege/isqlj/squirrel/SqscConnection.java
trunk/sql12/plugins/isqlj/src/main/resources/
trunk/sql12/plugins/isqlj/src/main/resources/org/
trunk/sql12/plugins/isqlj/src/main/resources/org/rege/
trunk/sql12/plugins/isqlj/src/main/resources/org/rege/isqlj/
trunk/sql12/plugins/isqlj/src/main/resources/org/rege/isqlj/squirrel/
trunk/sql12/plugins/isqlj/src/main/resources/org/rege/isqlj/squirrel/ISqlJ.properties
Removed Paths:
-------------
trunk/sql12/plugins/i18n/doc/
trunk/sql12/plugins/i18n/plugin_build.xml
trunk/sql12/plugins/i18n/src/net/
trunk/sql12/plugins/informix/doc/
trunk/sql12/plugins/informix/plugin_build.xml
trunk/sql12/plugins/informix/src/net/
trunk/sql12/plugins/isqlj/lib/
trunk/sql12/plugins/isqlj/plugin_build.xml
trunk/sql12/plugins/isqlj/src/org/rege/isqlj/squirrel/ExecuteISqlJAction.java
trunk/sql12/plugins/isqlj/src/org/rege/isqlj/squirrel/ExecuteISqlJCommand.java
trunk/sql12/plugins/isqlj/src/org/rege/isqlj/squirrel/ISqlJ.properties
trunk/sql12/plugins/isqlj/src/org/rege/isqlj/squirrel/ISqlJPlugin.java
trunk/sql12/plugins/isqlj/src/org/rege/isqlj/squirrel/ISqlJPluginResources.java
trunk/sql12/plugins/isqlj/src/org/rege/isqlj/squirrel/SqscConnection.java
Property Changed:
----------------
trunk/sql12/plugins/i18n/
trunk/sql12/plugins/informix/
trunk/sql12/plugins/isqlj/
Property changes on: trunk/sql12/plugins/i18n
___________________________________________________________________
Added: svn:ignore
+ target
.settings
.project
.classpath
Deleted: trunk/sql12/plugins/i18n/plugin_build.xml
===================================================================
--- trunk/sql12/plugins/i18n/plugin_build.xml 2010-08-21 17:43:09 UTC (rev 5815)
+++ trunk/sql12/plugins/i18n/plugin_build.xml 2010-08-21 17:46:26 UTC (rev 5816)
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<!--
- This is an Apache Ant build file to build the SQL script plugin
- for distribution.
--->
-<project name="plugin-i18n" default="build" basedir=".">
- <target name="init">
- <tstamp/>
- <property name="internal_name" value="i18n"/>
- <property name="version" value="0.11"/>
- <property name="debug" value="on"/>
- <property name="optimize" value="off"/>
- <property name="deprecation" value="on"/>
- <property name="targetVM" value="1.6"/>
-
- <echo message="---------------- ${internal_name} ${version} ----------------"/>
-
- <property environment="env"/>
- </target>
- <target name="initdirs" unless="p_plugin.work_dir">
- <property name="dist_dir" value="../../../squirrel-sql-dist/squirrel-sql"/>
- <property name="plugins_dist_dir" value="${dist_dir}/plugins"/>
- <property name="p_plugin.work_dir" value="${plugins_dist_dir}/${internal_name}/work"/>
- <property name="p_plugin.core_libs_dir" value="${dist_dir}/core/dist/lib"/>
- <property name="p_plugin.dist_dir" value="${dist_dir}/core/dist/plugins"/>
- </target>
- <!--
- ==================================================================
- Compile the plugin.
- No parameters.
- ==================================================================
- -->
- <target name="build" depends="init, initdirs">
- <property name="obj_dir" value="${p_plugin.work_dir}/obj"/>
-
- <mkdir dir="${obj_dir}"/>
- <mkdir dir="${p_plugin.dist_dir}"/>
-
- <javac srcdir="src"
- destdir="${obj_dir}"
- deprecation="${deprecation}"
- debug="${debug}"
- optimize="${optimize}"
- includeJavaRuntime="yes"
- source="${targetVM}"
- target="${targetVM}">
-
- <classpath>
- <fileset dir="${p_plugin.core_libs_dir}">
- <include name="**/*.*"/>
- </fileset>
- </classpath>
- </javac>
- <copy todir="${obj_dir}" >
- <fileset dir="src" >
- <include name="**/*.gif"/>
- <include name="**/*.jpg"/>
- <include name="**/*.jpeg"/>
- <include name="**/*.xml"/>
- <include name="**/*.xsl"/>
- <include name="**/*.properties"/>
- </fileset>
- </copy>
-
- <jar jarfile="${p_plugin.dist_dir}/${internal_name}.jar" compress="false">
- <fileset dir="${obj_dir}">
- <include name="**/*.*"/>
- </fileset>
- </jar>
-
- <copy todir="${p_plugin.dist_dir}/${internal_name}" >
- <fileset dir="doc" >
- <include name="*.*"/>
- </fileset>
- </copy>
-
-
- <jar jarfile="${p_plugin.dist_dir}/${internal_name}/src.jar" compress="false">
- <fileset dir=".">
- <include name="src/**/*.*"/>
- <include name="plugin_build.xml"/>
- </fileset>
- </jar>
- </target>
-
-</project>
-
Added: trunk/sql12/plugins/i18n/pom.xml
===================================================================
--- trunk/sql12/plugins/i18n/pom.xml (rev 0)
+++ trunk/sql12/plugins/i18n/pom.xml 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,135 @@
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>net.sf.squirrel-sql.plugins</groupId>
+ <artifactId>squirrelsql-plugins-parent-pom</artifactId>
+ <version>3.2.0-SNAPSHOT</version>
+ </parent>
+ <groupId>net.sf.squirrel-sql.plugins</groupId>
+ <artifactId>i18n</artifactId>
+ <version>3.2.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+ <name>I18n Plugin</name>
+ <description>I18n Plugin</description>
+ <inceptionYear>2001</inceptionYear>
+ <developers>
+ <developer>
+ <name>Gerd Wagner</name>
+ <roles>
+ <role>Administrator</role>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Rob Manning</name>
+ <roles>
+ <role>Developer</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ </developers>
+ <licenses>
+ <license>
+ <name>GNU Lesser General Public License</name>
+ <url>http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <url>http://www.squirrelsql.org/</url>
+ <scm>
+ <connection>scm:svn:https://squirrel-sql.svn.sourceforge.net/svnroot/squirrel-sql/trunk/sql12/</connection>
+ <developerConnection>scm:svn:http://squirrel-sql.svn.sourceforge.net/viewvc/squirrel-sql/trunk/sql12/</developerConnection>
+ <url>http://squirrel-sql.svn.sourceforge.net/viewvc/squirrel-sql/trunk/sql12/</url>
+ </scm>
+ <issueManagement>
+ <system>SourceForge Tracker</system>
+ <url>http://sourceforge.net/tracker/?group_id=28383%26atid=393414</url>
+ </issueManagement>
+ <ciManagement>
+ <system>Hudson</system>
+ <url>https://www.squirrel-sql.org/hudson/</url>
+ </ciManagement>
+ <dependencies>
+ <dependency>
+ <groupId>net.sf.squirrel-sql</groupId>
+ <artifactId>fw</artifactId>
+ <version>3.2.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.squirrel-sql</groupId>
+ <artifactId>squirrel-sql</artifactId>
+ <version>3.2.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.squirrel-sql</groupId>
+ <artifactId>squirrel-sql</artifactId>
+ <version>3.2.0-SNAPSHOT</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.squirrel-sql</groupId>
+ <artifactId>squirrelsql-test-utils</artifactId>
+ <version>3.2.0-SNAPSHOT</version>
+ <type>pom</type>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>${source-plugin-version}</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${surefire-plugin-version}</version>
+ <configuration>
+ <parallel>${surefire-parallel-type}</parallel>
+ <threadCount>${surefire-thread-count}</threadCount>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>${jar-plugin-version}</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>${assembly-plugin-version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>findbugs-maven-plugin</artifactId>
+ <version>${findbugs-plugin-version}</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <version>${pmd-plugin-version}</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>${checkstyle-plugin-version}</version>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <!--
+ Since generating javadoc can be time-consuming, this is not done unless a "javadoc" profile is activated.
+ -->
+ <profile>
+ <id>javadoc</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>${javadoc-plugin-version}</version>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
\ No newline at end of file
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/BundlesTableModel.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/BundlesTableModel.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/BundlesTableModel.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/BundlesTableModel.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,87 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.table.DefaultTableModel;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class BundlesTableModel extends DefaultTableModel
+{
+
+ private static final StringManager s_stringMgr =
+ StringManagerFactory.getStringManager(I18nProps.class);
+
+
+ private I18nBundle[] _bundles;
+
+ public BundlesTableModel()
+ {
+ addColumn(s_stringMgr.getString("i18n.bundle"));
+ // i18n[i18n.bundle=Bundle]
+ addColumn(s_stringMgr.getString("i18n.missingTarnslation"));
+ // i18n[i18n.missingTarnslation=Missing translations]
+
+ }
+
+ public int getColumnCount()
+ {
+ return 2;
+ }
+
+ public boolean isCellEditable(int row, int column)
+ {
+ return false;
+ }
+
+ public int getRowCount()
+ {
+ if(null == _bundles)
+ {
+ return 0;
+ }
+ else
+ {
+ return _bundles.length;
+ }
+ }
+
+ public Object getValueAt(int row, int column)
+ {
+ if(0 == column)
+ {
+ return _bundles[row].getName();
+ }
+ else if(1 == column)
+ {
+ return _bundles[row].getMissingTranslationsCount();
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unknown column " + column);
+ }
+
+ }
+
+ public void setBundles(I18nBundle[] bundles)
+ {
+ _bundles = bundles;
+
+ Arrays.sort(_bundles);
+
+ fireTableDataChanged();
+ }
+
+ public I18nBundle[] getBundlesForRows(int[] rows)
+ {
+ ArrayList<I18nBundle> ret = new ArrayList<I18nBundle>(rows.length);
+
+ for (int i = 0; i < rows.length; i++)
+ {
+ ret.add(_bundles[rows[i]]);
+ }
+
+ return ret.toArray(new I18nBundle[ret.size()]);
+ }
+}
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersController.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersController.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersController.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersController.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,486 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Properties;
+import java.util.prefs.Preferences;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+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 DevelopersController
+{
+ private static final StringManager s_stringMgr =
+ StringManagerFactory.getStringManager(DevelopersController.class);
+
+
+ private DevelopersPanel _panel;
+ private IApplication _app;
+ private static final String PREF_KEY_SOURCE_DIR = "SquirrelSQL.i18n.sourceDir";
+ private static final String PREF_KEY_INCLUDE_TIMESTAMP = "SquirrelSQL.i18n.includeTimestamp";
+
+ private static Preferences prefs = null;
+
+ public DevelopersController(DevelopersPanel pnlDevelopers)
+ {
+ _panel = pnlDevelopers;
+
+ _panel.btnChooseSourceDir.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onChooseSourceDir();
+ }
+
+ });
+
+ _panel.btnAppendI18nInCode.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onAppendI18nInCode();
+ }
+ });
+
+ prefs = Preferences.userRoot();
+ String sourceDir = prefs.get(PREF_KEY_SOURCE_DIR, null);
+ _panel.txtSourceDir.setText(sourceDir);
+ }
+
+
+ private void onChooseSourceDir()
+ {
+ String startDir = System.getProperties().getProperty("user.home");
+ if (_panel.txtSourceDir.getText() != null
+ && !"".equals(_panel.txtSourceDir.getText()))
+ {
+ startDir = _panel.txtSourceDir.getText();
+ }
+ JFileChooser chooser = new JFileChooser(startDir);
+ chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+ chooser.showOpenDialog(_app.getMainFrame());
+
+ if(null != chooser.getSelectedFile())
+ {
+ _panel.txtSourceDir.setText(chooser.getSelectedFile().getPath());
+ }
+ }
+
+ private void onAppendI18nInCode()
+ {
+ File sourceDir = getSourceDir();
+
+ if(null == sourceDir)
+ {
+ return;
+ }
+
+ appendProps(sourceDir);
+ // i18n[i18n.ParsingFinish=Parsing finished]
+ _app.getMessageHandler().showMessage(s_stringMgr.getString("i18n.ParsingFinish"));
+ }
+
+ private void appendProps(File sourceDir)
+ {
+
+ try
+ {
+ File[] files = sourceDir.listFiles();
+
+ ArrayList<String> newProps = new ArrayList<String>();
+ ArrayList<String> replaceProps = new ArrayList<String>();
+
+
+ File i18nStringFile = new File(sourceDir, "I18NStrings.properties");
+ Properties curProps = new Properties();
+ FileInputStream fis;
+
+ if(i18nStringFile.exists())
+ {
+ fis = new FileInputStream(i18nStringFile);
+ curProps.load(fis);
+ fis.close();
+ }
+
+ for (int i = 0; i < files.length; i++)
+ {
+
+ if(files[i].isDirectory() && false == "CVS".equals(files[i].getName()))
+ {
+ appendProps(files[i]);
+ }
+ else if(files[i].getName().endsWith(".java"))
+ {
+ int occurrences = 0;
+ StringBuffer code = new StringBuffer();
+ fis = new FileInputStream(files[i]);
+
+ int buf = fis.read();
+ while(-1 != buf)
+ {
+ code.append((char)buf);
+ buf = fis.read();
+ }
+
+ fis.close();
+
+
+ try
+ {
+ occurrences = parseProps(code.toString(),curProps, newProps, replaceProps);
+ if (occurrences > 0) {
+ int occurrencesFound = fixSourceFile(files[i].getAbsolutePath());
+ if (occurrences != occurrencesFound) {
+ Object[] params =
+ new Object[]{
+ Integer.valueOf(occurrences),
+ Integer.valueOf(occurrencesFound),
+ files[i].getPath()
+ };
+
+ // i18n[i18n.unequalOccurrences=Found {0} i18n comments but only {1} places
+ // to convert to s_stringMgr.getString() in file {2}]
+ String msg = s_stringMgr.getString("i18n.unequalOccurrences", params);
+ _app.getMessageHandler().showErrorMessage(msg);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Object[] params = new Object[]{files[i].getPath(), e.toString()};
+ _app.getMessageHandler().showErrorMessage(s_stringMgr.getString("i18n.failedToParse", params));
+ // i18n[i18n.failedToParse=Failed to parse {0}\n{1}]
+ continue;
+ }
+ }
+ }
+
+ if(0 < newProps.size() || 0 <replaceProps.size())
+ {
+ FileOutputStream fos = new FileOutputStream(i18nStringFile, true);
+ PrintWriter ps = new PrintWriter(fos);
+
+ String includeTimestamp = prefs.get(PREF_KEY_INCLUDE_TIMESTAMP, "true");
+ if (includeTimestamp.equals("true")) {
+ // No i18n, developers should write English props.
+ ps.println("\n#\n#Missing/changed properties generated by I18n Plugin on " +
+ new java.util.Date() + "\n#");
+ }
+
+ Collections.sort(newProps);
+ for (int j = 0; j < newProps.size(); j++)
+ {
+ ps.println(newProps.get(j));
+ }
+
+ for (int j = 0; j < replaceProps.size(); j++)
+ {
+ // No i18n, developers should write English props.
+ ps.println();
+ ps.println("# A T T E N T I O N: REPLACES SAME KEY ABOVE");
+ ps.println(replaceProps.get(j));
+ }
+
+ ps.flush();
+ fos.flush();
+ ps.close();
+ fos.close();
+
+ Object[] params = new Object[] {
+ Integer.valueOf(newProps.size()),
+ Integer.valueOf(replaceProps.size()),
+ i18nStringFile.getPath()
+ };
+
+ _app.getMessageHandler().showMessage(s_stringMgr.getString("i18n.parseSuccess", params));
+ // i18n[i18n.parseSuccess=Added {0} new and {1} replaced properties to {2}]
+ }
+
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ private int parseProps(String code,
+ Properties curProps,
+ ArrayList<String> newProps,
+ ArrayList<String> replaceProps)
+ throws I18nParseException
+ {
+ int occurrences = 0;
+ code = code.replace('\r', ' ');
+
+ Pattern pat = Pattern.compile("//\\x20*i18n\\[(.*)");
+ Matcher m = pat.matcher(code);
+
+ int[] propBounds = new int[]{0,0};
+
+ while(m.find(propBounds[1]))
+ {
+ occurrences++;
+ propBounds[0] = m.start(m.groupCount());
+ String prop = getProp(code, propBounds);
+
+ int equalsPos = prop.indexOf('=');
+ if(0 > equalsPos)
+ {
+ throw new I18nParseException("Property " + prop + " has no key.");
+ }
+ String key = prop.substring(0, equalsPos);
+ String val = prop.substring(equalsPos + 1).trim();
+
+ if(curProps.containsKey(key) && false == val.equals(I18nUtils.normalizePropVal((String) curProps.get(key))))
+ {
+ replaceProps.add(prop);
+ }
+ else if(false == curProps.containsKey(key))
+ {
+ boolean found = false;
+ for (int i = 0; i < newProps.size(); i++)
+ {
+ if(newProps.get(i).split("=")[0].startsWith(key.split("=")[0]))
+ {
+ found = true;
+ replaceProps.add(prop);
+ break;
+ }
+
+ }
+
+ if(false == found)
+ {
+ newProps.add(prop);
+ }
+
+ }
+ }
+ return occurrences;
+ }
+
+ private String getProp(String code, int[] propBounds) throws I18nParseException
+ {
+ boolean isInComment = true;
+ boolean isABracket = false;
+ boolean isASlash = false;
+ boolean isInCommentBegin = false;
+
+ StringBuffer ret = new StringBuffer();
+
+
+ for(int i=propBounds[0]; i < code.length(); ++i)
+ {
+ if(isInComment && isABracket && ']' != code.charAt(i))
+ {
+ if(isABracket)
+ {
+ propBounds[1] = i;
+ return I18nUtils.normalizePropVal(ret.toString());
+ }
+ }
+ else if(isInComment && ']' == code.charAt(i))
+ {
+ isABracket = !isABracket;
+ isASlash = false;
+ }
+ else if(isInComment && '\n' == code.charAt(i))
+ {
+ isInComment = false;
+ isABracket = false;
+ isASlash = false;
+ }
+ else if(false == isInComment && '\n' == code.charAt(i))
+ {
+ throw new I18nParseException("Property " + ret.toString() + " does not end with ]");
+ }
+ else if(false == isInComment && false == isASlash && '/' == code.charAt(i))
+ {
+ isASlash = true;
+ isABracket = false;
+ }
+ else if(false == isInComment && isASlash && '/' == code.charAt(i))
+ {
+ isInComment = true;
+ isInCommentBegin = true;
+ isABracket = false;
+ isASlash = false;
+ }
+
+ if(isInComment && false == isInCommentBegin && false == isABracket)
+ {
+ ret.append(code.charAt(i));
+ }
+
+ isInCommentBegin = false;
+
+ }
+
+ if(ret.toString().length() > 50)
+ {
+ ret.setLength(50);
+ }
+
+
+ throw new I18nParseException("Property " + ret.toString() + " does not end with ]");
+ }
+
+
+ private File getSourceDir()
+ {
+ String buf = _panel.txtSourceDir.getText();
+ if(null == buf || 0 == buf.trim().length())
+ {
+ String msg = s_stringMgr.getString("I18n.NoSourceDir");
+ // i18n[I18n.NoSourceDir=Please choose a source directory.]
+ JOptionPane.showMessageDialog(_app.getMainFrame(), msg);
+ return null;
+
+ }
+
+
+ File sourceDir = new File(buf);
+ if(false == sourceDir.isDirectory())
+ {
+ String msg = s_stringMgr.getString("I18n.SourceDirIsNotADirectory", sourceDir.getPath());
+ // i18n[I18n.SourceDirIsNotADirectory=Source directory {0} is not a directory.]
+ JOptionPane.showMessageDialog(_app.getMainFrame(), msg);
+ }
+
+ if(false == sourceDir.exists())
+ {
+ String msg = s_stringMgr.getString("I18n.SourceDirDoesNotExist", sourceDir.getPath());
+ // i18n[I18n.SourceDirDoesNotExist=Source directory {0} does not exist.]
+ JOptionPane.showMessageDialog(_app.getMainFrame(), msg);
+ return null;
+ }
+
+ return sourceDir;
+ }
+
+ private int fixSourceFile(String filename) throws Exception
+ {
+ BufferedReader in = new BufferedReader(new FileReader(filename));
+ String nextLine = in.readLine();
+ String lineToPrint = nextLine;
+ int occurrencesReplaced = 0;
+ boolean writeFixFile =false;
+
+ ArrayList<String> linesToPrint = new ArrayList<String>();
+
+ Pattern pat = Pattern.compile("\\s*//\\s*i18n\\[(.*)");
+ Pattern commentLinePattern = Pattern.compile("\\s*//");
+ while (nextLine != null)
+ {
+ Matcher m = pat.matcher(nextLine);
+ if (m.matches())
+ {
+ String[] parts = nextLine.split("\\[");
+ if (1 < parts.length)
+ {
+ parts = parts[1].split("\\]");
+ if (0 < parts.length)
+ {
+ parts = parts[0].split("=");
+ if (1 < parts.length)
+ {
+ String key = parts[0];
+ String val = parts[1];
+
+ // print the i18n comment
+ linesToPrint.add(nextLine);
+
+ nextLine = in.readLine();
+ Matcher commentMatch = commentLinePattern.matcher(nextLine);
+
+ if (!commentMatch.matches())
+ {
+ String quotedVal = "\"" + val + "\"";
+ int indexOfQuotedVal = nextLine.indexOf(quotedVal);
+
+ lineToPrint = nextLine;
+ if(-1 < indexOfQuotedVal)
+ {
+ // Rob: Removed replacement via RegExp because it needed several RegExp escapes in val.
+
+ String stringManager = "s_stringMgr.getString(\"" + key + "\")";
+ lineToPrint =
+ nextLine.substring(0, indexOfQuotedVal) +
+ stringManager +
+ nextLine.substring(indexOfQuotedVal + quotedVal.length());
+
+ writeFixFile = true;
+ occurrencesReplaced++;
+ }
+ else
+ {
+ String stringManagerBegin = "s_stringMgr.getString(\"" + key + "\""; // No end bracket, params might follow
+ if(-1 < nextLine.indexOf(stringManagerBegin))
+ {
+ // We see that the replacement was already done before so we can count this as replaced
+ occurrencesReplaced++;
+ }
+ }
+ }
+ else
+ {
+ lineToPrint = nextLine;
+ // here we've hit the second line of a multi-line i18n stanza
+ // Just skip it, we're not that sophisticated.
+ }
+ }
+ }
+ }
+
+ }
+ linesToPrint.add(lineToPrint);
+ nextLine = in.readLine();
+ lineToPrint = nextLine;
+ }
+ in.close();
+
+ if(writeFixFile)
+ {
+ String outFileName = filename + ".fixed";
+ PrintWriter out = new PrintWriter(new FileOutputStream(outFileName));
+ for (int i = 0; i < linesToPrint.size(); i++)
+ {
+ out.println(linesToPrint.get(i));
+ }
+ out.flush();
+ out.close();
+ // i18n[i18n.wroteFixedFile=Wrote file {0}]
+ _app.getMessageHandler().showMessage(s_stringMgr.getString("i18n.wroteFixedFile", outFileName));
+ }
+
+ return occurrencesReplaced;
+ }
+
+ public void initialize(IApplication app)
+ {
+ _app = app;
+ }
+
+ public void uninitialize()
+ {
+ Preferences.userRoot().put(PREF_KEY_SOURCE_DIR, _panel.txtSourceDir.getText());
+ }
+
+
+
+}
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersPanel.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersPanel.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersPanel.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/DevelopersPanel.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,72 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import net.sourceforge.squirrel_sql.client.plugin.PluginResources;
+import net.sourceforge.squirrel_sql.fw.gui.MultipleLineLabel;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+public class DevelopersPanel extends JPanel
+{
+ private static final StringManager s_stringMgr =
+ StringManagerFactory.getStringManager(DevelopersPanel.class);
+
+
+ JTextField txtSourceDir = new JTextField();
+ JButton btnChooseSourceDir;
+ JButton btnAppendI18nInCode;
+
+
+ public DevelopersPanel(PluginResources resources)
+ {
+ GridBagConstraints gbc;
+
+ setLayout(new GridBagLayout());
+
+ gbc = new GridBagConstraints(0,0,1,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0);
+ // i18n[I18n.SourceDir=Source directory]
+ add(new JLabel(s_stringMgr.getString("I18n.SourceDir")), gbc);
+
+ gbc = new GridBagConstraints(1,0,1,1,1,0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5,0,0,5),0,0);
+ add(txtSourceDir, gbc);
+
+ btnChooseSourceDir = new JButton(resources.getIcon("Open"));
+ gbc = new GridBagConstraints(2,0,1,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,0,0,5),0,0);
+ add(btnChooseSourceDir, gbc);
+
+ gbc = new GridBagConstraints(0,1,3,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5,5,5,5),0,0);
+ // i18n[I18n.appendCodeDescription=
+ // The Create/Append ... button will parse the Java files in the source directory
+ // for comments of the form // i18n[myKey=My text]] and generate a myKey=My text property in the
+ // I18nStrings.properties file in the same directory as the Java file.
+ // If the file doesn't exist it will be created.
+ // Such a comment may stretch over serveral subsequent lines.
+ // To have a ]] in a property use ]]]] in the comment. /* ... */ comments are not supported.\n\n
+ //The parser is also able to replace a string in the source code by the usual s_stringMgr.getString("key") if:\n
+ // - the string fits in none line\n
+ // - the i18n comment is placed in the line above the string\n
+ // - the string doesn't contain parameters]
+ MultipleLineLabel lblDescription = new MultipleLineLabel(s_stringMgr.getString("I18n.appendCodeDescription"));
+ add(lblDescription, gbc);
+
+ gbc = new GridBagConstraints(0,2,3,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0);
+ // i18n[I18n.appendI18nStringsProps=Create/Append I18nString.properties files]
+ btnAppendI18nInCode = new JButton(s_stringMgr.getString("I18n.appendI18nStringsProps"));
+ add(btnAppendI18nInCode, gbc);
+
+ JPanel pnlDist = new JPanel();
+ gbc = new GridBagConstraints(0,3,3,1,1,1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5,5,5,5),0,0);
+ add(pnlDist, gbc);
+
+ }
+
+
+}
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nBundle.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/I18nBundle.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nBundle.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nBundle.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,233 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.io.IOException;
+import java.util.Properties;
+import java.util.Locale;
+import java.util.Arrays;
+import java.util.prefs.Preferences;
+import java.net.URL;
+
+public class I18nBundle implements Comparable<I18nBundle>
+{
+
+ private static final StringManager s_stringMgr =
+ StringManagerFactory.getStringManager(I18nProps.class);
+
+ private I18nProps _defaultProps;
+ private Locale _locale;
+ private File _workDir;
+ private URL[] _sourceUrls;
+ private Integer _missingTranslationsCount;
+
+ private static final String PREF_KEY_INCLUDE_TIMESTAMP = "SquirrelSQL.i18n.includeTimestamp";
+
+ /**
+ * The localizations that already exist in SQuirreL.
+ * When missing props are generated for the first time this
+ * Props file will be copied to the work dir.
+ */
+ private I18nProps _localizedProps;
+
+ public I18nBundle(I18nProps defaultProps, Locale locale, File workDir, URL[] sourceUrls)
+ {
+ _defaultProps = defaultProps;
+ _locale = locale;
+ _workDir = workDir;
+ _sourceUrls = sourceUrls;
+ }
+
+
+
+ private void initMissingTranslationsCount()
+ {
+ if(null != _missingTranslationsCount)
+ {
+ return;
+ }
+
+ Properties buf = _defaultProps.getTranslateableProperties();
+ if(null != _localizedProps)
+ {
+ _localizedProps.removeProps(buf);
+ }
+
+ if(null != _workDir)
+ {
+ File pathInWorkDir = getPathRelativeTo(_workDir);
+ if(pathInWorkDir.exists())
+ {
+ new I18nProps(pathInWorkDir, _sourceUrls).removeProps(buf);
+ }
+ }
+
+ _missingTranslationsCount = Integer.valueOf(buf.size());
+ }
+
+ public void setLocalizedProp(I18nProps localizedProps)
+ {
+ _localizedProps = localizedProps;
+ }
+
+ public String toString()
+ {
+ return _defaultProps.getPath();
+ }
+
+ public String getName()
+ {
+ return _defaultProps.getName();
+ }
+
+ public Integer getMissingTranslationsCount()
+ {
+ initMissingTranslationsCount();
+ return _missingTranslationsCount;
+ }
+
+
+ public void writeMissingProps(IApplication app, File workDir)
+ {
+ try
+ {
+ Properties propsToAppend = _defaultProps.getTranslateableProperties();
+
+ File toAppendTo = getPathRelativeTo(workDir);
+ if(toAppendTo.exists())
+ {
+ new I18nProps(toAppendTo, _sourceUrls).removeProps(propsToAppend);
+ }
+ else
+ {
+ toAppendTo.getParentFile().mkdirs();
+ if(null != _localizedProps)
+ {
+ _localizedProps.copyTo(toAppendTo);
+
+ Object[] params =
+ new Object[]
+ {
+ _localizedProps.getPath(),
+ toAppendTo.getPath()
+ };
+
+ app.getMessageHandler().showMessage(s_stringMgr.getString("I18n.PropsCopyMsg", params));
+ // i18n[I18n.PropsCopyMsg=Copied existing translations from {0} to {1}]
+
+ new I18nProps(toAppendTo, _sourceUrls).removeProps(propsToAppend);
+ }
+ }
+
+
+
+ FileOutputStream fos = new FileOutputStream(toAppendTo, true);
+ PrintWriter pw = new PrintWriter(fos);
+
+ String includeTimestamp =
+ Preferences.userRoot().get(PREF_KEY_INCLUDE_TIMESTAMP, "true");
+
+ if (includeTimestamp.equals("true")) {
+ //i18n[I18n.TranlationsGenerationMessage=\n#\n#Missing
+ //translation generated by I18n Plugin on {0}\n#]
+ String msg =
+ s_stringMgr.getString("I18n.TranlationsGenerationMessage",
+ new java.util.Date());
+ pw.println(msg);
+ }
+
+
+ String[] keys = propsToAppend.keySet().toArray(new String[0]);
+ Arrays.sort(keys);
+
+
+ for (int i = 0; i < keys.length; i++)
+ {
+ String val = propsToAppend.getProperty(keys[i]);
+
+ pw.println();
+ pw.println("#" + keys[i] + "=" + I18nUtils.normalizePropVal(val));
+ pw.println("#" + keys[i] + "=");
+ }
+
+
+
+ pw.flush();
+ fos.flush();
+
+ pw.close();
+ fos.close();
+
+ Object[] params =
+ new Object[]
+ {
+ Integer.valueOf(propsToAppend.size()),
+ toAppendTo.getPath()
+ };
+
+ app.getMessageHandler().showMessage(s_stringMgr.getString("I18n.TranslationsGenerationCount", params));
+ // i18n[I18n.TranslationsGenerationCount=Generated {0} templates to {1}]
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ File getPathRelativeTo(File parentDir)
+ {
+ File toAppendTo = new File(parentDir.getPath() + File.separator + getName());
+ String localizedFileName = _defaultProps.getLocalizedFileName(_locale);
+ toAppendTo = new File(toAppendTo.getParent() + File.separator + localizedFileName);
+ return toAppendTo;
+ }
+
+ public int compareTo(I18nBundle other)
+ {
+ return getName().compareTo(other.getName());
+ }
+
+
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((getName() == null) ? 0 : getName().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 I18nBundle other = (I18nBundle) obj;
+ if (getName() == null) {
+ if (other.getName() != null)
+ return false;
+ } else if (!getName().equals(other.getName()))
+ return false;
+ return true;
+ }
+
+
+}
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanel.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanel.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanel.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanel.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,50 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+import net.sourceforge.squirrel_sql.client.plugin.PluginResources;
+import net.sourceforge.squirrel_sql.client.resources.SquirrelResources;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class I18nPanel extends JPanel
+{
+ private static final StringManager s_stringMgr =
+ StringManagerFactory.getStringManager(I18nPanel.class);
+
+ TranslatorsPanel pnlTranslators;
+ DevelopersPanel pnlDevelopers;
+
+
+ JTabbedPane tabI18n = new JTabbedPane();
+
+ JTextField txtNote;
+
+
+ public I18nPanel(PluginResources resources)
+ {
+ pnlTranslators = new TranslatorsPanel(resources);
+ pnlDevelopers = new DevelopersPanel(resources);
+
+
+ GridBagConstraints gbc;
+
+ // i18n[I18n.translators=Translators]
+ tabI18n.add(s_stringMgr.getString("I18n.translators"), pnlTranslators);
+ // i18n[I18n.developers=Developers]
+ tabI18n.add(s_stringMgr.getString("I18n.developers"), pnlDevelopers);
+
+ setLayout(new GridBagLayout());
+ gbc = new GridBagConstraints(0,0,1,1,1,1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5,0,0,5),0,0);
+ add(tabI18n, gbc);
+
+
+ txtNote = new JTextField();
+ txtNote.setText(s_stringMgr.getString("I18n.changeApplicationDefaultLocaleNote"));
+ txtNote.setEditable(false);
+ // i18n[I18n.changeApplicationDefaultLocaleNote=Example VM Parameters to change locale used by SQuirreL: -Duser.language=en -Duser.country=US]
+ gbc = new GridBagConstraints(0,1,1,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5,5,0,5),0,0);
+ add(txtNote, gbc);
+ }
+}
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanelController.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanelController.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanelController.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPanelController.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,60 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+import net.sourceforge.squirrel_sql.client.preferences.IGlobalPreferencesPanel;
+import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.client.resources.SquirrelResources;
+import net.sourceforge.squirrel_sql.client.plugin.PluginResources;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import java.awt.*;
+
+public class I18nPanelController implements IGlobalPreferencesPanel
+{
+ private static final StringManager s_stringMgr =
+ StringManagerFactory.getStringManager(I18nPanelController.class);
+
+ private I18nPanel _panel;
+ private TranslatorsController _translatorsController;
+ private DevelopersController _developersController;
+
+ I18nPanelController(PluginResources resources)
+ {
+ _panel = new I18nPanel(resources);
+ _translatorsController = new TranslatorsController(_panel.pnlTranslators);
+ _developersController = new DevelopersController(_panel.pnlDevelopers);
+ }
+
+
+ public void initialize(IApplication app)
+ {
+ _translatorsController.initialize(app);
+ _developersController.initialize(app);
+ }
+
+ public void uninitialize(IApplication app)
+ {
+ _translatorsController.uninitialize();
+ _developersController.uninitialize();
+ }
+
+ public void applyChanges()
+ {
+ }
+
+ public String getTitle()
+ {
+ return s_stringMgr.getString("I18n.title");
+ }
+
+ public String getHint()
+ {
+ return s_stringMgr.getString("I18n.hint");
+ }
+
+ public Component getPanelComponent()
+ {
+ return _panel;
+ }
+
+}
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nParseException.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/I18nParseException.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nParseException.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nParseException.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,9 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+public class I18nParseException extends Exception
+{
+ public I18nParseException(String msg)
+ {
+ super(msg);
+ }
+}
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPlugin.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/I18nPlugin.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPlugin.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nPlugin.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,149 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+import net.sourceforge.squirrel_sql.client.plugin.DefaultSessionPlugin;
+import net.sourceforge.squirrel_sql.client.plugin.PluginException;
+import net.sourceforge.squirrel_sql.client.plugin.PluginResources;
+import net.sourceforge.squirrel_sql.client.plugin.PluginSessionCallback;
+import net.sourceforge.squirrel_sql.client.plugin.PluginSessionCallbackAdaptor;
+import net.sourceforge.squirrel_sql.client.preferences.IGlobalPreferencesPanel;
+import net.sourceforge.squirrel_sql.client.session.ISession;
+
+/**
+ * The SQL Script plugin class.
+ */
+public class I18nPlugin extends DefaultSessionPlugin
+{
+ private PluginResources _resources;
+ private I18nPanelController _i18nPanelController;
+
+ /**
+ * Return the internal name of this plugin.
+ *
+ * @return the internal name of this plugin.
+ */
+ public String getInternalName()
+ {
+ return "i18n";
+ }
+
+ /**
+ * Return the descriptive name of this plugin.
+ *
+ * @return the descriptive name of this plugin.
+ */
+ public String getDescriptiveName()
+ {
+ return "I18n Plugin";
+ }
+
+ /**
+ * Returns the current version of this plugin.
+ *
+ * @return the current version of this plugin.
+ */
+ public String getVersion()
+ {
+ return "1.0";
+ }
+
+ /**
+ * Returns the authors name.
+ *
+ * @return the authors name.
+ */
+ public String getAuthor()
+ {
+ return "Gerd Wagner";
+ }
+
+ /**
+ * Returns the name of the change log for the plugin. This should
+ * be a text or HTML file residing in the <TT>getPluginAppSettingsFolder</TT>
+ * directory.
+ *
+ * @return the changelog file name or <TT>null</TT> if plugin doesn't have
+ * a change log.
+ */
+ public String getChangeLogFileName()
+ {
+ return "changes.txt";
+ }
+
+ /**
+ * Returns the name of the Help file for the plugin. This should
+ * be a text or HTML file residing in the <TT>getPluginAppSettingsFolder</TT>
+ * directory.
+ *
+ * @return the Help file name or <TT>null</TT> if plugin doesn't have
+ * a help file.
+ */
+ public String getHelpFileName()
+ {
+ return "readme.txt";
+ }
+
+ /**
+ * Returns the name of the Licence file for the plugin. This should
+ * be a text or HTML file residing in the <TT>getPluginAppSettingsFolder</TT>
+ * directory.
+ *
+ * @return the Licence file name or <TT>null</TT> if plugin doesn't have
+ * a licence file.
+ */
+ public String getLicenceFileName()
+ {
+ return "licence.txt";
+ }
+
+ /**
+ * @return Comma separated list of contributors.
+ */
+ public String getContributors()
+ {
+ return "Rob Manning";
+ }
+
+ /**
+ * Create preferences panel for the Global Preferences dialog.
+ *
+ * @return Preferences panel.
+ */
+ public IGlobalPreferencesPanel[] getGlobalPreferencePanels()
+ {
+ if(null == _i18nPanelController)
+ {
+ _i18nPanelController = new I18nPanelController(_resources);
+ }
+
+
+ return
+ new IGlobalPreferencesPanel[]
+ {
+ _i18nPanelController
+ };
+ }
+
+ /**
+ * Initialize this plugin.
+ */
+ public synchronized void initialize() throws PluginException
+ {
+ _resources = new PluginResources("net.sourceforge.squirrel_sql.plugins.i18n.i18n", this);
+ }
+
+
+ /**
+ * Called when a session started. Add commands to popup menu
+ * in object tree.
+ *
+ * @param session The session that is starting.
+ *
+ * @return An implementation of PluginSessionCallback or null to indicate
+ * the plugin does not work with this session
+ */
+ public PluginSessionCallback sessionStarted(ISession session)
+ {
+ return new PluginSessionCallbackAdaptor(this);
+ }
+
+}
Copied: trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nProps.java (from rev 5805, trunk/sql12/plugins/i18n/src/net/sourceforge/squirrel_sql/plugins/i18n/I18nProps.java)
===================================================================
--- trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nProps.java (rev 0)
+++ trunk/sql12/plugins/i18n/src/main/java/net/sourceforge/squirrel_sql/plugins/i18n/I18nProps.java 2010-08-21 17:46:26 UTC (rev 5816)
@@ -0,0 +1,262 @@
+package net.sourceforge.squirrel_sql.plugins.i18n;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class I18nProps extends Object
+{
+
+ private File _file;
+ private File _zipFile;
+ private String _entryName;
+ private String _name;
+
+ public I18nProps(File file, URL[] sourceUrls)
+ {
+ _file = file;
+ initName(sourceUrls);
+ }
+
+ public I18nProps(File zipFile, String entryName, URL[] sourceUrls)
+ {
+ _zipFile = zipFile;
+ _entryName = entryName;
+ initName(sourceUrls);
+ }
+
+ private void initName(URL[] sourceUrls)
+ {
+
+ for (int i = 0; i < sourceUrls.length; i++)
+ {
+ String classPathEntry = sourceUrls[i].getPath().replaceAll("%20", " ");
+ if(getPath().startsWith(classPathEntry))
+ {
+ _name = getPath().substring(classPathEntry.length());
+ return;
+ }
+
+ }
+ _name = getPath();
+ }
+
+ public String getPath()
+ {
+ try
+ {
+ if(null != _file)
+ {
+ return _file.toURI().toURL().getPath().replaceAll("%20", " ");
+ }
+ else
+ {
+ return new File(_zipFile.toString() + File.separator + _entryName).toURI().toURL().getPath().replaceAll("%20", " ");
+ }
+ }
+ catch (MalformedURLException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ public String getName()
+ {
+ return _name;
+ }
+
+
+ Properties getProperties()
+ {
+ try
+ {
+ Properties ret = new Properties();
+ InputStream is = getInputStream();
+ ret.load(is);
+ is.close();
+ return ret;
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private InputStream getInputStream()
+ {
+ try
+ {
+ if(null != _file)
+ {
+ return new FileInputStream(_file);
+ }
+ else
+ {
+ ZipFile zf = new ZipFile(_zipFile);
+
+ ZipEntry entry = zf.getEntry(_entryName);
+
+ return zf.getInputStream(entry);
+ }
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ public void removeProps(Properties toRemoveFrom)
+ {
+ Properties toRemove = getProperties();
+
+ for (Object key : toRemove.keySet()) {
+ toRemoveFrom.remove(key);
+ }
+ }
+
+ public void copyTo(File toCopyTo)
+ {
+ try
+ {
+ InputStream is = getInputStream();
+
+ FileOutputStream fos = new FileOutputStream(toCopyTo);
+
+ int buf = is.read();
+ while(-1 != buf)
+ {
+ fos.write(buf);
+ buf = is.read();
+
+ }
+
+ fos.flush();
+ fos.close();
+ is.close();
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public String getLocalizedFileName(Locale loc)
+ {
+ String name = new File(getPath()).getPath().substring(getPath().lastIndexOf(File.separator) + 1);
+ return new File(name.substring(0, name.lastIndexOf(".properties")) + "_" + loc + ".properties").getName();
+ }
+
+ public String getUnlocalizedPath(Locale loc)
+ {
+ String path = getPath().substring(0, new File(getPath()).getPath().lastIndexOf(File.separator));
+ String name = getPath().s...
[truncated message content] |