changeset 1484:bef3e4ec4b00

made OmegaT run - Made ITW to load resources from j2se/java tag too * netx/net/sourceforge/jnlp/Parser.java: constructors/methods made public to help unittests * netx/net/sourceforge/jnlp/ShortcutDesc.java: same * netx/net/sourceforge/jnlp/ResourcesDesc.java: getJars made to iterate recursively over content of j2se * tests/netx/unit/net/sourceforge/jnlp/ParserBasic.java: added testcase * tests/netx/unit/net/sourceforge/jnlp/jarsInJreDesc.jnlp: testfile copied form omegat which have this strange resources
author Jiri Vanek <jvanek@redhat.com>
date Sat, 03 Feb 2018 14:42:07 +0100
parents f9eb692bac54
children e17f060bb41a
files ChangeLog netx/net/sourceforge/jnlp/Parser.java netx/net/sourceforge/jnlp/ResourcesDesc.java netx/net/sourceforge/jnlp/ShortcutDesc.java tests/netx/unit/net/sourceforge/jnlp/ParserBasic.java tests/netx/unit/net/sourceforge/jnlp/jarsInJreDesc.jnlp
diffstat 6 files changed, 160 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Feb 03 11:43:05 2018 +0100
+++ b/ChangeLog	Sat Feb 03 14:42:07 2018 +0100
@@ -1,3 +1,12 @@
+2018-02-03  Jiri Vanek <jvanek@redhat.com>
+
+	Made ITW to load resources from j2se/java tag too
+	* netx/net/sourceforge/jnlp/Parser.java: constructors/methods made public to help unittests
+	* netx/net/sourceforge/jnlp/ShortcutDesc.java: same
+	* netx/net/sourceforge/jnlp/ResourcesDesc.java: getJars made to iterate recursively over content of j2se
+	* tests/netx/unit/net/sourceforge/jnlp/ParserBasic.java: added testcase
+	* tests/netx/unit/net/sourceforge/jnlp/jarsInJreDesc.jnlp: testfile copied form omegat which have this strange resources
+
 2018-02-03  Jiri Vanek <jvanek@redhat.com>
 	* netx/net/sourceforge/jnlp/Parser.java: auto-formatted
 
--- a/netx/net/sourceforge/jnlp/Parser.java	Sat Feb 03 11:43:05 2018 +0100
+++ b/netx/net/sourceforge/jnlp/Parser.java	Sat Feb 03 14:42:07 2018 +0100
@@ -127,7 +127,7 @@
      * @param settings the parser settings to use when parsing the JNLP file
      * @throws ParseException if the JNLP file is invalid
      */
-    Parser(JNLPFile file, URL base, Node root, ParserSettings settings) throws ParseException {
+    public Parser(JNLPFile file, URL base, Node root, ParserSettings settings) throws ParseException {
         this(file, base, root, settings, null);
     }
 
@@ -280,7 +280,7 @@
      * @param j2se true if the resources are located under a j2se or java node
      * @throws ParseException if the JNLP file is invalid
      */
-    List<ResourcesDesc> getResources(Node parent, boolean j2se)
+    public List<ResourcesDesc> getResources(Node parent, boolean j2se)
             throws ParseException {
         List<ResourcesDesc> result = new ArrayList<>();
         Node resources[] = getChildNodes(parent, "resources");
@@ -509,7 +509,7 @@
      * @param parent the parent node (jnlp)
      * @throws ParseException if the JNLP file is invalid
      */
-    List<InformationDesc> getInfo(Node parent)
+    public List<InformationDesc> getInfo(Node parent)
             throws ParseException {
         List<InformationDesc> result = new ArrayList<>();
         Node info[] = getChildNodes(parent, "information");
@@ -641,7 +641,7 @@
      * @param parent the parent node
      * @throws ParseException if the JNLP file is invalid
      */
-    SecurityDesc getSecurity(Node parent) throws ParseException {
+    public SecurityDesc getSecurity(Node parent) throws ParseException {
         Node nodes[] = getChildNodes(parent, "security");
 
         // test for too many security elements
@@ -700,7 +700,7 @@
      * @param parent the parent node
      * @throws ParseException if the JNLP file is invalid
      */
-    LaunchDesc getLauncher(Node parent) throws ParseException {
+    public LaunchDesc getLauncher(Node parent) throws ParseException {
         // check for other than one application type
         if (1 < getChildNodes(parent, "applet-desc").length
                 + getChildNodes(parent, "application-desc").length
@@ -1379,7 +1379,7 @@
      *
      * @throws ParseException if the JNLP file is invalid
      */
-    static Node getRootNode(InputStream input, ParserSettings settings) throws ParseException {
+    public static Node getRootNode(InputStream input, ParserSettings settings) throws ParseException {
         try {
             Object parser = getParserInstance(settings);
             Method m = parser.getClass().getMethod("getRootNode", InputStream.class);
--- a/netx/net/sourceforge/jnlp/ResourcesDesc.java	Sat Feb 03 11:43:05 2018 +0100
+++ b/netx/net/sourceforge/jnlp/ResourcesDesc.java	Sat Feb 03 14:42:07 2018 +0100
@@ -213,15 +213,34 @@
      */
     public <T> List<T> getResources(Class<T> type) {
         List<T> result = new ArrayList<>();
-
         for (Object resource : resources) {
-            if (type.isAssignableFrom(resource.getClass()))
-                result.add(type.cast(resource));
+            if (resource instanceof JREDesc) {
+                JREDesc jre = (JREDesc) resource;
+                List<ResourcesDesc> descs = jre.getResourcesDesc();
+                for (ResourcesDesc desc : descs) {
+                    result.addAll(desc.getResources(type));
+                }
+            }
+            if (isWontedResource(resource, type)) {
+                result.add(getWontedResource(resource, type));
+            }
         }
 
         return result;
     }
 
+    private static <T> boolean isWontedResource(Object resource, Class<T> type) {
+        T l = getWontedResource(resource, type);
+        return l != null;
+    }
+
+    private static <T> T getWontedResource(Object resource, Class<T> type) {
+        if (type.isAssignableFrom(resource.getClass())) {
+            return type.cast(resource);
+        }
+        return null;
+    }
+
     /**
      * Add a resource.
      * @param resource to be added
--- a/netx/net/sourceforge/jnlp/ShortcutDesc.java	Sat Feb 03 11:43:05 2018 +0100
+++ b/netx/net/sourceforge/jnlp/ShortcutDesc.java	Sat Feb 03 14:42:07 2018 +0100
@@ -74,7 +74,7 @@
       * For testing purposes. Verify if it have been parsed out correctly.
      * @return whether the shortcut requires being online.
      */
-    boolean isOnlineValue() {
+    public boolean isOnlineValue() {
         return requiresOnline;
     }
 
--- a/tests/netx/unit/net/sourceforge/jnlp/ParserBasic.java	Sat Feb 03 11:43:05 2018 +0100
+++ b/tests/netx/unit/net/sourceforge/jnlp/ParserBasic.java	Sat Feb 03 14:42:07 2018 +0100
@@ -33,8 +33,7 @@
 this exception to your version of the library, but you are not
 obligated to do so.  If you do not wish to do so, delete this
 exception statement from your version.
-*/
-
+ */
 package net.sourceforge.jnlp;
 
 import java.io.InputStream;
@@ -46,8 +45,10 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-/** Test that the parser works with basic jnlp files */
-public class ParserBasic extends NoStdOutErrTest{
+/**
+ * Test that the parser works with basic jnlp files
+ */
+public class ParserBasic extends NoStdOutErrTest {
 
     private static Node root;
     private static Parser parser;
@@ -214,6 +215,22 @@
     }
 
     @Test
+    public void testResourcesInsideJava() throws ParseException {
+        ClassLoader cl = ParserBasic.class.getClassLoader();
+        if (cl == null) {
+            cl = ClassLoader.getSystemClassLoader();
+        }
+        ParserSettings defaultParser = new ParserSettings();
+        InputStream jnlpStream = cl.getResourceAsStream("net/sourceforge/jnlp/jarsInJreDesc.jnlp");
+        Node omega = Parser.getRootNode(jnlpStream, defaultParser);
+        Parser omegaParser = new Parser(new DummyJNLPFile(), null, omega, defaultParser);
+        ResourcesDesc resources = omegaParser.getResources(omega, false).get(0);
+        JARDesc[] r = resources.getJARs();
+        // we ensures that also in j2se hars ar eloaded.it is 7 withutt them.
+        Assert.assertTrue(r.length>30);
+    }
+
+    @Test
     public void testResourcesJar() throws ParseException {
         ResourcesDesc resources = parser.getResources(root, false).get(0);
 
@@ -276,7 +293,7 @@
         ApplicationDesc app = (ApplicationDesc) parser.getLauncher(root);
         Assert.assertNotNull(app);
         Assert.assertEquals("MainClass", app.getMainClass());
-        Assert.assertArrayEquals(new String[] { "arg1", "arg2" }, app.getArguments());
+        Assert.assertArrayEquals(new String[]{"arg1", "arg2"}, app.getArguments());
     }
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/netx/unit/net/sourceforge/jnlp/jarsInJreDesc.jnlp	Sat Feb 03 14:42:07 2018 +0100
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+exmaple of "bad" jnlp file with resources inside j2sa
+-->
+<jnlp spec="1.0+" codebase="http://localhost/" href="jnlp.jnlp">
+	<information>
+		<title>OmegaT</title>
+		<vendor>OmegaT development team</vendor>
+		<homepage href="http://www.omegat.org" />
+		<shortcut online="false">
+			<desktop />
+			<menu submenu="OmegaT from WebStart" />
+		</shortcut>
+		<offline-allowed />
+        <association mime-type="application/x-omegat-project" extensions="project" />
+
+<!--
+		<related-content href="readme.html">
+			<title>README</title>
+			<description>
+				The README file contains additional information about
+				the product
+			</description>
+		</related-content>
+-->
+	</information>
+
+	<security>
+		<all-permissions />
+	</security>
+
+	<resources>
+		<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se">
+			<resources>
+				<jar href="OmegaT.jar" />
+				<jar href="docs.jar" />
+				<jar href="htmlparser.jar" />
+				<jar href="jmyspell-core-1.0.0-beta-2.jar" />
+				<jar href="jna.jar" />
+				<jar href="lib-mnemonics.jar" />
+				<jar href="swing-layout-1.0.4.jar" />
+				<jar href="vldocking-3.0.5-SNAPSHOT.jar" />
+				<jar href="svnkit-1.8.5.jar" />
+				<jar href="antlr-runtime-3.4.jar" />
+				<jar href="sqljet-1.1.10.jar" />
+				<jar href="sequence-library-1.0.2.jar" />
+				<jar href="org.eclipse.jgit-3.7.1.201504261725-r.jar" />
+				<jar href="jsch-0.1.49.jar" />
+				<jar href="lucene-analyzers-3.6.2.jar" />
+				<jar href="lucene-core-3.6.2.jar" />
+				<jar href="lucene-kuromoji-3.6.2.jar" />
+				<jar href="lucene-smartcn-3.6.2.jar" />
+				<jar href="tinysegmenter.jar" />
+				<jar href="commons-lang-2.4.jar"  />
+				<jar href="commons-io-2.4.jar"  />
+				<jar href="commons-logging-1.1.1.jar"  />
+				<jar href="jwordsplitter-3.4.jar"  />
+				<jar href="KoreanAnalyzer-3x-120223.jar" />
+				<jar href="LanguageTool-data.jar"  />
+				<jar href="languagetool-core-2.2.jar"  />
+				<jar href="morfologik-fsa-1.5.4.jar"  />
+				<jar href="morfologik-speller-1.5.4.jar"  />
+				<jar href="morfologik-stemming-1.5.4.jar"  />
+				<jar href="cjftransform-1.0.1.jar"  />
+				<jar href="ictclas4j-1.0.1.jar"  />
+				<jar href="segment-1.4.1.jar"  />		
+				<jar href="lucene-gosen-2.0.2-ipadic.jar"  />
+				<jar href="pdfbox-app-1.8.1.jar"  />
+				<jar href="groovy-all-2.2.2.jar"  />
+				<jar href="diff.jar" />
+				<jar href="SuperTMXMerge-for_OmegaT.jar" />
+				<jar href="slf4j-api-1.7.7.jar" />
+				<jar href="slf4j-jdk14-1.7.7.jar" />
+				<jar href="trilead-ssh2-1.0.0-build217.jar" />
+				<jar href="juniversalchardet-1.0.3.jar" />
+			</resources>
+			<resources os="Linux" arch="amd64">
+				<nativelib href="hunspell-linux64.jar" />
+			</resources>
+			<resources os="Linux" arch="i386">
+				<nativelib href="hunspell-linux32.jar" />
+			</resources>
+			<resources os="MacOS" arch="x86_64">
+				<nativelib href="hunspell-macos64.jar" />
+			</resources>
+			<resources os="MacOS" arch="i386">
+				<nativelib href="hunspell-macos32.jar" />
+			</resources>
+			<resources os="Windows" arch="amd64">
+				<nativelib href="hunspell-win64.jar" />
+			</resources>
+			<resources os="Windows" arch="x86">
+				<nativelib href="hunspell-win32.jar" />
+			</resources>
+		</j2se>
+		<property name="javaws.cfg.jauthenticator" value="true" />
+	</resources>
+	<application-desc main-class="org.omegat.Main" />
+</jnlp>
\ No newline at end of file