1 19 20 package org.netbeans.modules.xml.catalog.impl.sun; 21 22 import java.awt.Image ; 23 import java.io.*; 24 import java.beans.*; 25 import java.util.*; 26 import java.net.*; 27 28 import org.xml.sax.*; 29 30 31 import org.netbeans.modules.xml.catalog.spi.*; 32 33 import org.apache.xml.resolver.tools.CatalogResolver; 34 import org.apache.xml.resolver.CatalogException; 35 import org.apache.xml.resolver.CatalogManager; 36 37 46 public final class Catalog 47 implements org.netbeans.modules.xml.catalog.spi.CatalogReader, CatalogDescriptor, Serializable, EntityResolver{ 48 49 private static final long serialVersionUID = 123659121L; 50 51 private transient PropertyChangeSupport pchs; 52 53 private transient EntityResolver peer; 54 55 private transient String desc; 56 57 private String location; 59 60 private boolean preference = true; 62 63 private static final String PROP_LOCATION = "cat-loc"; 64 65 private static final String PROP_PREF_PUBLIC = "cat-pref"; 66 67 private static final String PROP_DESC = CatalogDescriptor.PROP_CATALOG_DESC; 68 69 70 public Catalog() { 71 } 72 73 76 public void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { 77 in.defaultReadObject(); 78 79 setShortDescription(Util.THIS.getString("MSG_prepared", location)); 81 } 82 83 86 public synchronized void setLocation(String location) { 87 String old = this.location; 88 this.location = location; 89 peer = null; getPCHS().firePropertyChange(PROP_LOCATION, old, location); 91 updateDisplayName(); 92 } 93 94 97 public String getLocation() { 98 return location; 99 } 100 101 104 public void setPreferPublic(boolean val) { 105 boolean old = preference; 106 this.preference = val; 107 getPCHS().firePropertyChange(PROP_LOCATION, old, val); 108 } 109 110 113 public boolean isPreferPublic() { 114 return preference; 115 } 116 117 121 public void addCatalogListener(CatalogListener l) { 122 throw new UnsupportedOperationException (); 123 } 124 125 126 public void addPropertyChangeListener(PropertyChangeListener l) { 127 getPCHS().addPropertyChangeListener(l); 128 } 129 130 133 public String getDisplayName() { 134 String src = location; 135 if (src == null || "".equals(src.trim())) { 136 return Util.THIS.getString("PROP_missing_location"); 137 } else { 138 return Util.THIS.getString("TITLE_catalog", location); 139 } 140 } 141 142 public String getName() { 143 return getClass() + location + preference; 144 } 145 146 149 public void updateDisplayName() { 150 String name = getDisplayName(); 151 getPCHS().firePropertyChange(CatalogDescriptor.PROP_CATALOG_NAME, null, name); 152 } 153 154 159 public Image getIcon(int type) { 160 return null; 161 } 162 163 167 public Iterator getPublicIDs() { 168 Object p = getPeer(); 169 if (p instanceof org.apache.xml.resolver.tools.CatalogResolver) { 170 org.apache.xml.resolver.Catalog cat = ((org.apache.xml.resolver.tools.CatalogResolver) p).getCatalog(); 171 return cat.getPublicIDs(); 172 } 173 return null; 174 } 175 176 179 public String getShortDescription() { 180 return desc; 181 } 182 183 public void setShortDescription(String desc) { 184 String old = this.desc; 185 this.desc = desc; 186 getPCHS().firePropertyChange(PROP_DESC, old, desc); 187 } 188 189 193 public String getSystemID(String publicId) { 194 Object p = getPeer(); 195 if (p instanceof org.apache.xml.resolver.tools.CatalogResolver) 196 try { 197 return ((org.apache.xml.resolver.tools.CatalogResolver) p).getCatalog().resolveSystem(publicId); 198 } catch (java.net.MalformedURLException ex) {} 199 catch (java.io.IOException ex) {} 200 return null; 201 } 202 203 206 public synchronized void refresh() { 207 peer = createPeer(location, preference); 208 } 209 210 214 public void removeCatalogListener(CatalogListener l) { 215 throw new UnsupportedOperationException (); 216 } 217 218 219 public void removePropertyChangeListener(PropertyChangeListener l) { 220 getPCHS().removePropertyChangeListener(l); 221 } 222 223 226 public InputSource resolveEntity(String publicID, String systemID) throws SAXException, IOException { 227 return getPeer().resolveEntity(publicID, systemID); 228 } 229 230 246 251 private EntityResolver createPeer(String location, boolean pref) { 252 try { 253 CatalogManager manager = new CatalogManager(null); 254 manager.setUseStaticCatalog(false); 255 manager.setPreferPublic(pref); 256 257 CatalogResolver catalogResolver = new CatalogResolver(manager); 258 org.apache.xml.resolver.Catalog cat = catalogResolver.getCatalog(); 259 cat.parseCatalog(new URL(location)); 260 setShortDescription(Util.THIS.getString("DESC_loaded")); 261 return catalogResolver; 262 } catch (IOException ex) { 263 setShortDescription(Util.THIS.getString("DESC_error_loading", ex.getLocalizedMessage())); 264 if ( Util.THIS.isLoggable() ) Util.THIS.debug("I/O error loading catalog " + location, ex); 265 } 266 267 return new EntityResolver () { 269 public InputSource resolveEntity(String p, String s) { 270 return null; 271 } 272 }; 273 } 274 275 278 private synchronized PropertyChangeSupport getPCHS() { 279 if (pchs == null) pchs = new PropertyChangeSupport(this); 280 return pchs; 281 } 282 283 286 private synchronized EntityResolver getPeer() { 287 288 if (peer == null) peer = createPeer(location, preference); 289 return peer; 290 } 291 292 296 public String resolveURI(String name) { 297 Object p = getPeer(); 298 if (p instanceof org.apache.xml.resolver.tools.CatalogResolver) 299 try { 300 return ((org.apache.xml.resolver.tools.CatalogResolver) p).getCatalog().resolveURI(name); 301 } catch (java.net.MalformedURLException ex) {} 302 catch (java.io.IOException ex) {} 303 return null; 304 } 305 309 public String resolvePublic(String publicId) { 310 Object p = getPeer(); 311 if (p instanceof org.apache.xml.resolver.tools.CatalogResolver) 312 try { 313 return ((org.apache.xml.resolver.tools.CatalogResolver) p).getCatalog().resolvePublic(publicId,null); 314 } catch (java.net.MalformedURLException ex) {} 315 catch (java.io.IOException ex) {} 316 return null; 317 } 318 319 } 320 | Popular Tags |