The following commit has been merged in the master branch:
commit 4c69b220cf3bfce9ae876d37adeb8e39937058f3
Author: Jakub Adam <[email protected]>
Date:   Sun Oct 21 00:18:30 2012 +0200

    Improve system XML catalog integration

diff --git a/debian/patches/add-debian-system-catalog-reader.patch 
b/debian/patches/add-debian-system-catalog-reader.patch
index 5b2723c..8e42b25 100644
--- a/debian/patches/add-debian-system-catalog-reader.patch
+++ b/debian/patches/add-debian-system-catalog-reader.patch
@@ -5,13 +5,13 @@ Subject: add-debian-system-catalog-reader
 ---
  org.eclipse.wst.xml.core/META-INF/MANIFEST.MF      |    3 +-
  .../wst/xml/core/internal/catalog/Catalog.java     |    1 +
- .../catalog/DebianSystemCatalogReader.java         |   98 ++++++++++++++++++++
+ .../catalog/DebianSystemCatalogReader.java         |  186 ++++++++++++++++++++
  org.eclipse.wst.xml_core.feature/feature.xml       |    4 +-
- 4 files changed, 103 insertions(+), 3 deletions(-)
+ 4 files changed, 191 insertions(+), 3 deletions(-)
  create mode 100644 
org.eclipse.wst.xml.core/src-catalog/org/eclipse/wst/xml/core/internal/catalog/DebianSystemCatalogReader.java
 
 diff --git a/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF 
b/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
-index 7def97c..5199c6a 100755
+index bd55c3f..8b4886b 100644
 --- a/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
 +++ b/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
 @@ -322,6 +322,7 @@ Require-Bundle: 
org.apache.xerces;bundle-version="[2.9.0,3.0.0)";visibility:=ree
@@ -24,7 +24,7 @@ index 7def97c..5199c6a 100755
  Bundle-ActivationPolicy: lazy; 
exclude:="org.eclipse.wst.xml.core.internal.contenttype"
  Bundle-RequiredExecutionEnvironment: J2SE-1.4
 diff --git 
a/org.eclipse.wst.xml.core/src-catalog/org/eclipse/wst/xml/core/internal/catalog/Catalog.java
 
b/org.eclipse.wst.xml.core/src-catalog/org/eclipse/wst/xml/core/internal/catalog/Catalog.java
-index b6c322c..701bc83 100755
+index b6c322c..701bc83 100644
 --- 
a/org.eclipse.wst.xml.core/src-catalog/org/eclipse/wst/xml/core/internal/catalog/Catalog.java
 +++ 
b/org.eclipse.wst.xml.core/src-catalog/org/eclipse/wst/xml/core/internal/catalog/Catalog.java
 @@ -389,6 +389,7 @@ public class Catalog implements ICatalog
@@ -37,12 +37,12 @@ index b6c322c..701bc83 100755
                         * Here we save the file in order to 'reflect' the 
catalog that
 diff --git 
a/org.eclipse.wst.xml.core/src-catalog/org/eclipse/wst/xml/core/internal/catalog/DebianSystemCatalogReader.java
 
b/org.eclipse.wst.xml.core/src-catalog/org/eclipse/wst/xml/core/internal/catalog/DebianSystemCatalogReader.java
 new file mode 100644
-index 0000000..1a5643c
+index 0000000..a6fc98a
 --- /dev/null
 +++ 
b/org.eclipse.wst.xml.core/src-catalog/org/eclipse/wst/xml/core/internal/catalog/DebianSystemCatalogReader.java
-@@ -0,0 +1,98 @@
+@@ -0,0 +1,186 @@
 
+/*******************************************************************************
-+ * Copyright (c) 2011 Jakub Adam <[email protected]>.
++ * Copyright (c) 2011-2012 Jakub Adam <[email protected]>.
 + * All rights reserved. This program and the accompanying materials
 + * are made available under the terms of the Eclipse Public License v1.0
 + * which accompanies this distribution, and is available at
@@ -51,6 +51,9 @@ index 0000000..1a5643c
 +
 +package org.eclipse.wst.xml.core.internal.catalog;
 +
++import java.io.ByteArrayInputStream;
++import java.io.IOException;
++import java.net.MalformedURLException;
 +import java.util.HashSet;
 +import java.util.Iterator;
 +import java.util.Set;
@@ -58,92 +61,177 @@ index 0000000..1a5643c
 +import org.apache.xml.resolver.Catalog;
 +import org.apache.xml.resolver.CatalogEntry;
 +import org.apache.xml.resolver.CatalogManager;
++import org.apache.xml.resolver.helpers.BootstrapResolver;
 +import org.eclipse.wst.xml.core.internal.Logger;
 +import org.eclipse.wst.xml.core.internal.catalog.provisional.ICatalog;
++import org.eclipse.wst.xml.core.internal.catalog.provisional.ICatalogElement;
 +import org.eclipse.wst.xml.core.internal.catalog.provisional.ICatalogEntry;
++import org.eclipse.wst.xml.core.internal.catalog.provisional.IDelegateCatalog;
++import org.eclipse.wst.xml.core.internal.catalog.provisional.IRewriteEntry;
++import org.xml.sax.InputSource;
 +
 +public class DebianSystemCatalogReader {
 +
 +      private ICatalog wstCatalog;
-+      
-+      private Set parsedCatalogs = new HashSet();
++
 +      private CatalogManager manager;
 +
++      private Set pendingEntries = new HashSet() ;
++
 +      DebianSystemCatalogReader(ICatalog catalog) {
 +              manager = new CatalogManager();
-+              manager.setCatalogClassName(CatalogReader.class.getName());
++              manager.setCatalogClassName(SystemCatalog.class.getName());
 +              manager.setUseStaticCatalog(false);
++              manager.setBootstrapResolver(new BootstrapResolver() {
++                      public InputSource resolveEntity(String publicId, 
String systemId) {
++                              InputSource src = super.resolveEntity(publicId, 
systemId);
++                              if (src == null) {
++                                      return new InputSource(new 
ByteArrayInputStream("".getBytes()));
++                              }
++
++                              return src;
++                      }
++              });
 +
 +              wstCatalog = catalog;
 +      }
 +
-+      public class CatalogReader extends Catalog {
-+              public void read() {
-+                      parsedCatalogs.add(base.toString());
-+
++      private class SystemCatalog extends Catalog {
++              public void readCatalog() {
 +                      for (Iterator it = catalogEntries.iterator(); 
it.hasNext(); ) {
 +                              CatalogEntry entry = (CatalogEntry) it.next();
 +
-+                                      if (entry.getEntryType() == PUBLIC ||
-+                                              entry.getEntryType() == SYSTEM 
||
-+                                              entry.getEntryType() == URI)
-+                                              insertEntry(entry);
-+                                      else if (entry.getEntryType() == 
DELEGATE_SYSTEM ||
-+                                                       entry.getEntryType() 
== DELEGATE_PUBLIC ||
-+                                                       entry.getEntryType() 
== DELEGATE_URI) {
-+                                              if 
(!parsedCatalogs.contains(entry.getEntryArg(1)))
-+                                                      
readCatalog(entry.getEntryArg(1));
-+                                      }
-+                      }
++                              int entryType = 
entryTypeToCatalogType(entry.getEntryType());
++                              if (entryType == 0)
++                                      return;
 +
-+                      for (Iterator it = catalogs.iterator(); it.hasNext(); ) 
{
-+                              readCatalog((String)it.next());
++                              pendingEntries.add(new 
PendingCatalogEntry(entryType, entry.getEntryArg(0), entry.getEntryArg(1)));
 +                      }
 +              }
 +
-+              private void insertEntry(CatalogEntry entry) {
-+                      int type;
++              private int entryTypeToCatalogType(int type) {
++                      if (type == PUBLIC)
++                                      return ICatalogEntry.ENTRY_TYPE_PUBLIC;
++                      if (type == SYSTEM)
++                                      return ICatalogEntry.ENTRY_TYPE_SYSTEM;
++                      if (type == URI)
++                                      return ICatalogEntry.ENTRY_TYPE_URI;
++                      if (type == DELEGATE_PUBLIC)
++                              return IDelegateCatalog.DELEGATE_TYPE_PUBLIC;
++                      if (type == DELEGATE_SYSTEM)
++                              return IDelegateCatalog.DELEGATE_TYPE_SYSTEM;
++                      if (type == DELEGATE_URI)
++                              return IDelegateCatalog.DELEGATE_TYPE_URI;
++                      if (type == REWRITE_SYSTEM)
++                              return IRewriteEntry.REWRITE_TYPE_SYSTEM;
++                      if (type == REWRITE_URI)
++                              return IRewriteEntry.REWRITE_TYPE_URI;
++
++                      return 0;
++              }
 +
-+                      ICatalogEntry wstEntry;
++              protected Catalog newCatalog() {
++                    SystemCatalog c = new SystemCatalog();
++                    c.setCatalogManager(catalogManager);
++                    copyReaders(c);
++                    return c;
++              }
 +
-+                      if (entry.getEntryType() == PUBLIC) {
-+                              type = ICatalogEntry.ENTRY_TYPE_PUBLIC;
-+                      } else if (entry.getEntryType() == SYSTEM) {
-+                              type = ICatalogEntry.ENTRY_TYPE_SYSTEM;
-+                      } else {
-+                              type = ICatalogEntry.ENTRY_TYPE_URI;
++              public synchronized void parseCatalog(String fileName) throws 
MalformedURLException, IOException {
++                      try {
++                              super.parseCatalog(fileName);
++                              readCatalog();
++                              parseAllCatalogs();
++                      } catch (Exception e) {
++                              Logger.logException("Couldn't read catalog " + 
fileName, e);
 +                      }
-+
-+                      wstEntry = 
(ICatalogEntry)wstCatalog.createCatalogElement(type);
-+                      wstEntry.setKey(entry.getEntryArg(0));
-+                      wstEntry.setURI(entry.getEntryArg(1));
-+
-+                      wstCatalog.addCatalogElement(wstEntry);
 +              }
 +      }
 +
 +      public void readCatalog() {
 +              readCatalog("/etc/xml/catalog"); //$NON-NLS-1$
-+              readCatalog("/etc/sgml/catalog"); //$NON-NLS-1$
 +      }
 +
-+      private void readCatalog(String catalog) {
-+              CatalogReader reader = new CatalogReader();
-+              reader.setCatalogManager(manager);
-+              reader.setupReaders();
++      private void readCatalog(String catalogFileName) {
++              SystemCatalog catalog = new SystemCatalog();
++              catalog.setCatalogManager(manager);
++              catalog.setupReaders();
 +              try {
-+                      reader.parseCatalog(catalog);
-+                      reader.read();
++                      catalog.parseCatalog(catalogFileName);
++
++                      for (Iterator it = pendingEntries.iterator(); 
it.hasNext(); ) {
++                              PendingCatalogEntry entry = 
(PendingCatalogEntry)it.next();
++
++                              ICatalogElement wstElement = 
wstCatalog.createCatalogElement(entry.type);
++
++                              if (wstElement == null) {
++                                      continue;
++                              }
++
++                              switch (entry.type) {
++                                      case ICatalogEntry.ENTRY_TYPE_PUBLIC:
++                                      case ICatalogEntry.ENTRY_TYPE_SYSTEM:
++                                      case ICatalogEntry.ENTRY_TYPE_URI:
++                                              ICatalogEntry catalogEntry = 
(ICatalogEntry)wstElement;
++                                              catalogEntry.setKey(entry.arg1);
++                                              catalogEntry.setURI(entry.arg2);
++                                              break;
++                                      case 
IDelegateCatalog.DELEGATE_TYPE_PUBLIC:
++                                      case 
IDelegateCatalog.DELEGATE_TYPE_SYSTEM:
++                                      case IDelegateCatalog.DELEGATE_TYPE_URI:
++                                              IDelegateCatalog delegateEntry 
= (IDelegateCatalog)wstElement;
++                                              
delegateEntry.setStartString(entry.arg1);
++                                              
delegateEntry.setCatalogLocation(entry.arg2);
++                                              break;
++                                      case IRewriteEntry.REWRITE_TYPE_SYSTEM:
++                                      case IRewriteEntry.REWRITE_TYPE_URI:
++                                              IRewriteEntry rewriteEntry = 
(IRewriteEntry)wstElement;
++                                              
rewriteEntry.setStartString(entry.arg1);
++                                              
rewriteEntry.setRewritePrefix(entry.arg2);
++                                              break;
++                              }
++
++                              wstCatalog.addCatalogElement(wstElement);
++                      }
++
 +              } catch (Exception e) {
-+                      Logger.logException("Couldn't read catalog " + catalog, 
e);
++                      Logger.logException("Couldn't read catalog " + 
catalogFileName, e);
++              }
++      }
++
++      private class PendingCatalogEntry {
++              int type;
++              String arg1;
++              String arg2;
++
++              public PendingCatalogEntry(int type, String key, String uri) {
++                      this.type = type;
++                      this.arg1 = key;
++                      this.arg2 = uri;
++              }
++
++              public boolean equals(Object obj) {
++                      if (!(obj instanceof PendingCatalogEntry))
++                              return false;
++                      PendingCatalogEntry other = (PendingCatalogEntry) obj;
++                      return (type == other.type && arg1.equals(other.arg1) 
&& arg2.equals(other.arg2));
++              }
++
++              public int hashCode() {
++                      final int prime = 31;
++                      int result = 1;
++                      result = prime * result + ((arg1 == null) ? 0 : 
arg1.hashCode());
++                      result = prime * result + ((arg2 == null) ? 0 : 
arg2.hashCode());
++                      result = prime * result + type;
++                      return result;
 +              }
 +      }
 +}
 diff --git a/org.eclipse.wst.xml_core.feature/feature.xml 
b/org.eclipse.wst.xml_core.feature/feature.xml
-index bc31a94..8d0ab9b 100755
+index 5af3c54..1b51e35 100644
 --- a/org.eclipse.wst.xml_core.feature/feature.xml
 +++ b/org.eclipse.wst.xml_core.feature/feature.xml
-@@ -38,12 +38,12 @@
+@@ -40,12 +40,12 @@
           version="0.0.0"
           unpack="false"/>
  
@@ -158,4 +246,3 @@ index bc31a94..8d0ab9b 100755
  
     <plugin
           id="org.eclipse.wst.xml.core"
--- 

-- 
eclipse-wtp packaging

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to