|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.editor.options; import org.openide.util.Task; import java.io.IOException; import org.w3c.dom.*; import org.xml.sax.*; import org.openide.filesystems.FileSystem; import org.openide.filesystems.LocalFileSystem; import org.openide.filesystems.JarFileSystem; import org.openide.loaders.XMLDataObject; import org.openide.cookies.InstanceCookie; import org.netbeans.editor.AnnotationType; import java.util.ResourceBundle; import java.awt.Color; import java.net.URL; import java.util.MissingResourceException; import java.net.MalformedURLException; import javax.swing.Action; import org.netbeans.modules.editor.options.AnnotationTypeActionsFolder; import java.util.List; import java.util.ArrayList; import javax.xml.parsers.SAXParserFactory; import java.io.ByteArrayInputStream; import java.util.Map; import java.util.HashMap; import org.openide.ErrorManager; /** Processor of the XML file. The result of parsing is instance of AnnotationType * class. * * @author David Konecny, Petr Nejedly * @since 07/2001 */ public class AnnotationTypeProcessor implements XMLDataObject.Processor, InstanceCookie { static final String DTD_PUBLIC_ID = "-//NetBeans//DTD annotation type 1.0//EN"; // NOI18N static final String DTD_SYSTEM_ID = "http://www.netbeans.org/dtds/annotation-type-1_0.dtd"; // NOI18N static final String TAG_TYPE = "type"; //NOI18N static final String ATTR_TYPE_NAME = "name"; // NOI18N static final String ATTR_TYPE_LOCALIZING_BUNDLE = "localizing_bundle"; // NOI18N static final String ATTR_TYPE_DESCRIPTION_KEY = "description_key"; // NOI18N static final String ATTR_TYPE_VISIBLE = "visible"; // NOI18N static final String ATTR_TYPE_GLYPH = "glyph"; // NOI18N static final String ATTR_TYPE_HIGHLIGHT = "highlight"; // NOI18N static final String ATTR_TYPE_FOREGROUND = "foreground"; // NOI18N static final String ATTR_TYPE_WAVEUNDERLINE = "waveunderline"; // NOI18N static final String ATTR_TYPE_TYPE = "type"; // NOI18N static final String ATTR_TYPE_CONTENTTYPE = "contenttype"; // NOI18N static final String ATTR_TYPE_ACTIONS = "actions"; // NOI18N static final String ATTR_ACTION_NAME = "name"; // NOI18N static final String TAG_COMBINATION = "combination"; // NOI18N static final String ATTR_COMBINATION_TIPTEXT_KEY = "tiptext_key"; // NOI18N static final String ATTR_COMBINATION_ORDER = "order"; // NOI18N static final String ATTR_COMBINATION_MIN_OPTIONALS = "min_optionals"; // NOI18N static final String TAG_COMBINE = "combine"; // NOI18N static final String ATTR_COMBINE_ANNOTATIONTYPE = "annotationtype"; // NOI18N static final String ATTR_COMBINE_ABSORBALL = "absorb_all"; // NOI18N static final String ATTR_COMBINE_OPTIONAL = "optional"; // NOI18N static final String ATTR_COMBINE_MIN = "min"; // NOI18N /** XML data object. */ private XMLDataObject xmlDataObject; /** * Annotation type created from XML file. */ private AnnotationType annotationType; /** When the XMLDataObject creates new instance of the processor, * it uses this method to attach the processor to the data object. * * @param xmlDO XMLDataObject */ public void attachTo(XMLDataObject xmlDO) { xmlDataObject = xmlDO; } /** Create an instance. * @return the instance of type {@link #instanceClass} * @exception IOException if an I/O error occured * @exception ClassNotFoundException if a class was not found */ public Object instanceCreate() throws java.io.IOException, ClassNotFoundException { if (annotationType != null) return annotationType; parse(); return annotationType; } /** The representation type that may be created as instances. * Can be used to test whether the instance is of an appropriate * class without actually creating it. * * @return the representation class of the instance * @exception IOException if an I/O error occurred * @exception ClassNotFoundException if a class was not found */ public Class instanceClass() { return AnnotationType.class; } /** The bean name for the instance. * @return the name */ public String instanceName() { return instanceClass().getName(); } //////////////////////////////////////////////////////////////////////// private synchronized AnnotationType parse() { if (annotationType == null) { AnnotationType at = new AnnotationType(); Handler h = new Handler(at); try { Parser xp; SAXParserFactory factory = SAXParserFactory.newInstance (); factory.setValidating (false); factory.setNamespaceAware(false); xp = factory.newSAXParser ().getParser (); xp.setEntityResolver(h); xp.setDocumentHandler(h); xp.setErrorHandler(h); xp.parse(new InputSource(xmlDataObject.getPrimaryFile().getInputStream())); at.putProp(AnnotationType.PROP_FILE, xmlDataObject.getPrimaryFile()); annotationType = at; } catch (Exception e) { ErrorManager.getDefault().notify(e); } } return annotationType; } private static class Handler extends HandlerBase { private AnnotationType at; private int depth = 0; private ResourceBundle bundle; private List combinations; Handler(AnnotationType at) { this.at=at; } private void rethrow(Exception e) throws SAXException { SAXException saxe = new SAXException(e); ErrorManager.getDefault().copyAnnotation(saxe, e); throw saxe; } public void startElement(String name, AttributeList amap) throws SAXException { switch (depth++) { case 0: if (! TAG_TYPE.equals(name)) { throw new SAXException("malformed AnnotationType xml file"); // NOI18N } // basic properties at.setName(amap.getValue(ATTR_TYPE_NAME)); if (amap.getValue(ATTR_TYPE_TYPE) == null) at.setWholeLine(true); else at.setWholeLine("line".equals(amap.getValue(ATTR_TYPE_TYPE))); // NOI18N // localization stuff if (amap.getValue(ATTR_TYPE_VISIBLE) == null) at.setVisible(true); else at.setVisible(amap.getValue(ATTR_TYPE_VISIBLE)); if (at.isVisible()) { String localizer = amap.getValue(ATTR_TYPE_LOCALIZING_BUNDLE); String key = amap.getValue(ATTR_TYPE_DESCRIPTION_KEY); at.putProp(AnnotationType.PROP_LOCALIZING_BUNDLE, localizer); at.putProp(AnnotationType.PROP_DESCRIPTION_KEY, key); } // colors try { String color = amap.getValue(ATTR_TYPE_HIGHLIGHT); if (color != null) { at.setHighlight(Color.decode(color)); at.setUseHighlightColor(true); } else { at.setUseHighlightColor(false); } color = amap.getValue(ATTR_TYPE_FOREGROUND); if (color != null) { at.setForegroundColor(Color.decode(color)); at.setInheritForegroundColor(false); } else { at.setInheritForegroundColor(true); } color = amap.getValue(ATTR_TYPE_WAVEUNDERLINE); if (color != null) { at.setWaveUnderlineColor(Color.decode(color)); at.setUseWaveUnderlineColor(true); } else { at.setUseWaveUnderlineColor(false); } } catch (NumberFormatException ex) { rethrow(ex); } // glyph try { String uri = amap.getValue(ATTR_TYPE_GLYPH); if (uri != null) { at.setGlyph(new URL(uri)); } } catch (MalformedURLException ex) { rethrow(ex); } // actions String actions = amap.getValue(ATTR_TYPE_ACTIONS); if (actions != null) { AnnotationTypeActionsFolder.readActions(at, actions); at.putProp(AnnotationType.PROP_ACTIONS_FOLDER, actions); } break; case 1: // |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.