diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java')
-rw-r--r-- | bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java | 885 |
1 files changed, 0 insertions, 885 deletions
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java deleted file mode 100644 index 8f4f2952d..000000000 --- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java +++ /dev/null @@ -1,885 +0,0 @@ -/******************************************************************************* - * Copyright (c) 1997, 2010 by ProSyst Software GmbH - * http://www.prosyst.com - * 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 - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * ProSyst Software GmbH - initial API and implementation - * Lazar Kirchev - bug.id = 320377 - *******************************************************************************/ -package org.eclipse.equinox.internal.ds.model; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.*; -import org.eclipse.equinox.internal.ds.Activator; -import org.eclipse.equinox.internal.ds.Messages; -import org.eclipse.equinox.internal.util.xml.*; -import org.eclipse.osgi.util.NLS; -import org.osgi.framework.*; -import org.osgi.service.log.LogService; - -/** - * Processes the parsing of the component description XMLs - * - * @author Valentin Valchev - * @author Stoyan Boshev - * @author Pavlin Dobrev - * @author Teodor Bakardzhiev - */ -public class DeclarationParser implements ExTagListener { - - private static final String XMLNS_1_0 = "http://www.osgi.org/xmlns/scr/v1.0.0"; //$NON-NLS-1$ - private static final String XMLNS_1_1 = "http://www.osgi.org/xmlns/scr/v1.1.0"; //$NON-NLS-1$ - private static final String XMLNS_1_2 = "http://www.osgi.org/xmlns/scr/v1.2.0"; //$NON-NLS-1$ - private static final String ATTR_XMLNS = "xmlns"; //$NON-NLS-1$ - - private static final String COMPONENT_TAG_NAME = "component"; //$NON-NLS-1$ - - //component attributes - private static final String ATTR_AUTOENABLE = "enabled"; //$NON-NLS-1$ - private static final String ATTR_NAME = "name"; //$NON-NLS-1$ - private static final String ATTR_FACTORY = "factory"; //$NON-NLS-1$ - private static final String ATTR_IMMEDIATE = "immediate"; //$NON-NLS-1$ - //component attributes according to schema v1.1 - private static final String ATTR_CONF_POLICY = "configuration-policy"; //$NON-NLS-1$ - private static final String ATTR_ACTIVATE = "activate"; //$NON-NLS-1$ - private static final String ATTR_DEACTIVATE = "deactivate"; //$NON-NLS-1$ - private static final String ATTR_MODIFIED = "modified"; //$NON-NLS-1$ - //component attributes according to schema v1.2 - private static final String ATTR_CONFIGURATION_PID = "configuration-pid"; //$NON-NLS-1$ - - private static final String TAG_IMPLEMENTATION = "implementation"; //$NON-NLS-1$ - private static final String ATTR_CLASS = "class"; //$NON-NLS-1$ - - private static final String TAG_PROPERTY = "property"; //$NON-NLS-1$ - private static final String ATTR_VALUE = "value"; //$NON-NLS-1$ - private static final String ATTR_TYPE = "type"; //$NON-NLS-1$ - - private static final String TAG_PROPERTIES = "properties"; //$NON-NLS-1$ - private static final String ATTR_ENTRY = "entry"; //$NON-NLS-1$ - - private static final String TAG_SERVICE = "service"; //$NON-NLS-1$ - private static final String ATTR_SERVICEFACTORY = "servicefactory"; //$NON-NLS-1$ - private static final String TAG_PROVIDE = "provide"; //$NON-NLS-1$ - private static final String ATTR_INTERFACE = "interface"; //$NON-NLS-1$ - - private static final String TAG_REFERENCE = "reference"; //$NON-NLS-1$ - private static final String ATTR_CARDINALITY = "cardinality"; //$NON-NLS-1$ - private static final String ATTR_POLICY = "policy"; //$NON-NLS-1$ - private static final String ATTR_TARGET = "target"; //$NON-NLS-1$ - private static final String ATTR_BIND = "bind"; //$NON-NLS-1$ - private static final String ATTR_UNBIND = "unbind"; //$NON-NLS-1$ - //reference attributes according to schema v1.2 - private static final String ATTR_UPDATED = "updated"; //$NON-NLS-1$ - private static final String ATTR_POLICY_OPTION = "policy-option"; //$NON-NLS-1$ - - /** Constant for String property type */ - public static final int STRING = 1; - /** Constant for Long property type */ - public static final int LONG = 2; - /** Constant for Integer property type */ - public static final int INTEGER = 3; - /** Constant for Short property type */ - public static final int SHORT = 4; - /** Constant for Char property type */ - public static final int CHARACTER = 5; - /** Constant for Byte property type */ - public static final int BYTE = 6; - /** Constant for Double property type */ - public static final int DOUBLE = 7; - /** Constant for Float property type */ - public static final int FLOAT = 8; - /** Constant for Boolean property type */ - public static final int BOOLEAN = 11; - - public Vector components; - - private boolean throwErrors = false; - - private Bundle bundle; - private BundleContext bc; - private ServiceComponent currentComponent; - private String closeTag; - boolean immediateSet = false; - private Hashtable namespaces = null; - private boolean rootPassed = false; - private String currentURL = null; - - public DeclarationParser() { - this(false); - } - - public DeclarationParser(boolean toThrowErrors) { - this.throwErrors = toThrowErrors; - } - - /** - * This method parses an XML file read from the given stream and converts - * the components definitions into a java object. - * <p> - * - * It also performs a full XML verification of the definition.� - * - * @param in - * the input stream to the XML declaration file - * @param bundle - * this is used to load the 'properties' tag - * @param components sets the components Vector where the parsed components should be placed - * @param processingURL the URL of the XML which is being processed. Will be used for debugging purposes - * @throws Exception if any unhandled exception occurs during the parsing - */ - public void parse(InputStream in, Bundle bundle, Vector components, String processingURL) throws Exception { - this.components = components; - this.bundle = bundle; - this.bc = bundle.getBundleContext(); - this.currentURL = processingURL; - rootPassed = false; - XMLParser.parseXML(in, this, -1); - - // release temporary objects - this.bundle = null; - this.bc = null; - this.currentComponent = null; - this.currentURL = null; - this.closeTag = null; - this.namespaces = null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.equinox.internal.util.xml.ExTagListener#startTag(org.eclipse.equinox.internal.util.xml.Tag) - */ - public final void startTag(Tag tag) { - try { - processNamespacesEnter(tag); - String tagName = tag.getName(); - if (isCorrectComponentTag(tagName)) { - doCorrectComponentTag(tag, tagName); - } - } catch (IllegalArgumentException iae) { - currentComponent = null; //the component is bad - ignoring it - closeTag = null; - Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_START_TAG, currentURL, bundle) + iae.getMessage(), null); - if (Activator.DEBUG) { - Activator.log.debug("[SCR] Tracing the last exception", iae); //$NON-NLS-1$ - } - if (throwErrors) { - throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_START_TAG, currentURL, bundle) + iae.getMessage(), iae); - } - } catch (Throwable e) { - Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_START_TAG, currentURL, bundle), e); - if (throwErrors) { - throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_START_TAG, currentURL, bundle) + e.getMessage(), e); - } - } finally { - if (!rootPassed) { - rootPassed = true; - } - } - } - - private void doEndTag(Tag tag) throws InvalidSyntaxException { - if (currentComponent != null) { - String tagName = tag.getName().intern(); - if (tagName == TAG_IMPLEMENTATION) { - doImplementation(tag); - } else if (tagName == TAG_PROPERTY) { - doProperty(tag); - } else if (tagName == TAG_PROPERTIES) { - doProperties(tag); - } else if (tagName == TAG_SERVICE) { - doService(tag); - } else if (tagName == TAG_REFERENCE) { - doReference(tag); - } else if (tagName == TAG_PROVIDE) { - // empty - this tag is processed within the service tag - } else if (tagName == closeTag) { - // the component is completed - we can now fully validate it! - - if (!immediateSet && (currentComponent.factory == null)) { - // if unset, immediate attribute is false if service element is - // specified or true otherwise - // if component factory then immediate by default is false - currentComponent.setImmediate(currentComponent.serviceInterfaces == null); - } - currentComponent.validate(tag.getLine(), getNamespace(tag.getName())); - if (components == null) { - components = new Vector(1, 1); - } - components.addElement(currentComponent); - currentComponent = null; - closeTag = null; - } else { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.ILLEGAL_TAG_FOUND, tagName, Integer.toString(tag.getLine()))); - throw e; - } - } - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.equinox.internal.util.xml.ExTagListener#endTag(org.eclipse.equinox.internal.util.xml.Tag) - */ - public final void endTag(Tag tag) { - try { - doEndTag(tag); - processNamespacesLeave(tag); - } catch (IllegalArgumentException iae) { - currentComponent = null; - closeTag = null; - Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_END_TAG, currentURL, bundle) + iae.getMessage(), null); - if (Activator.DEBUG) { - Activator.log.debug("[SCR] Tracing the last exception", iae); //$NON-NLS-1$ - } - if (throwErrors) { - throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_END_TAG, currentURL, bundle) + iae.getMessage(), iae); - } - } catch (Throwable e) { - currentComponent = null; - closeTag = null; - Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_END_TAG, currentURL, bundle), e); - if (throwErrors) { - throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_END_TAG, currentURL, bundle) + e.getMessage(), e); - } - } - } - - /** - * This method will return convert a string to a cardinality constant - * - * @param value - * the input string - * @return the cardinality or -1 to indicate error - */ - private int getCardinality(String value) { - if ("0..1".equals(value)) { //$NON-NLS-1$ - return ComponentReference.CARDINALITY_0_1; - } else if ("0..n".equals(value)) { //$NON-NLS-1$ - return ComponentReference.CARDINALITY_0_N; - } else if ("1..1".equals(value)) { //$NON-NLS-1$ - return ComponentReference.CARDINALITY_1_1; - } else if ("1..n".equals(value)) { //$NON-NLS-1$ - return ComponentReference.CARDINALITY_1_N; - } else { - return -1; - } - } - - private void doReference(Tag tag) throws InvalidSyntaxException { - String name = tag.getAttribute(ATTR_NAME); - String iface = tag.getAttribute(ATTR_INTERFACE); - if (iface == null) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.NO_INTERFACE_ATTR_IN_REFERENCE_TAG, Integer.toString(tag.getLine()))); - throw e; - } - - String cardinalityS = tag.getAttribute(ATTR_CARDINALITY); - int cardinality = ComponentReference.CARDINALITY_1_1; // default - if (cardinalityS != null) { - cardinality = getCardinality(cardinalityS); - if (cardinality < 0) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_CARDINALITY_ATTR, cardinalityS, Integer.toString(tag.getLine()))); - throw e; - } - } // if null - default cardinality is already initialized in - // constructor - - String policyS = tag.getAttribute(ATTR_POLICY); - int policy = ComponentReference.POLICY_STATIC; // default - if (policyS != null) { - // verify the policy attribute values - if (policyS.equals("dynamic")) { //$NON-NLS-1$ - policy = ComponentReference.POLICY_DYNAMIC; - } else if (policyS.equals("static")) { //$NON-NLS-1$ - policy = ComponentReference.POLICY_STATIC; - } else { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_POLICY_ATTR, policyS, Integer.toString(tag.getLine()))); - throw e; - } - } // if null - default policy is already initialized in constructor - - String bind = tag.getAttribute(ATTR_BIND); - String unbind = tag.getAttribute(ATTR_UNBIND); - if (bind != null) { - if (bind.equals("")) { //$NON-NLS-1$ - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_REFERENCE_TAG__BIND_ATTR_EMPTY, Integer.toString(tag.getLine()))); - throw e; - } - if (bind.equals(unbind)) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_REFERENCE_TAG__BIND_EQUALS_UNBIND, Integer.toString(tag.getLine()))); - throw e; - } - } - if (unbind != null && unbind.equals("")) { //$NON-NLS-1$ - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_REFERENCE_TAG__UNBIND_ATTR_EMPTY, Integer.toString(tag.getLine()))); - throw e; - } - - String updated = tag.getAttribute(ATTR_UPDATED); - if (updated != null && updated.equals("")) { //$NON-NLS-1$ - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_REFERENCE_TAG__UPDATED_ATTR_EMPTY, Integer.toString(tag.getLine()))); - throw e; - } - - String policyOption = tag.getAttribute(ATTR_POLICY_OPTION); - int policyOptionProcessed = ComponentReference.POLICY_OPTION_RELUCTANT; //default - if (policyOption != null) { - if (policyOption.equals("greedy")) { //$NON-NLS-1$ - policyOptionProcessed = ComponentReference.POLICY_OPTION_GREEDY; - } else if (policyOption.equals("reluctant")) { //$NON-NLS-1$ - policyOptionProcessed = ComponentReference.POLICY_OPTION_RELUCTANT; - } else { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_POLICY_OPTION_ATTR, policyOption, Integer.toString(tag.getLine()))); - throw e; - } - } - - //check if the current component namespace is suitable for the latest reference attributes - if (!isNamespaceAtLeast12(closeTag)) { - if (updated != null) { - throw new IllegalArgumentException(NLS.bind(Messages.INVALID_TAG_ACCORDING_TO_NAMESPACE1_2, ATTR_UPDATED, Integer.toString(tag.getLine()))); - } - if (policyOption != null) { - throw new IllegalArgumentException(NLS.bind(Messages.INVALID_TAG_ACCORDING_TO_NAMESPACE1_2, ATTR_POLICY_OPTION, Integer.toString(tag.getLine()))); - } - } - - // the reference is autoadded in the ServiceComponent's list of - // references - // in its constructor - ComponentReference ref = new ComponentReference(currentComponent); - ref.name = name; - ref.interfaceName = iface; - ref.cardinality = cardinality; - ref.policy = policy; - ref.bind = bind; - ref.unbind = unbind; - ref.updated = updated; - ref.policy_option = policyOptionProcessed; - ref.target = tag.getAttribute(ATTR_TARGET); - // validate the target filter - if (ref.target != null) { - Activator.createFilter(ref.target); - } - } - - private void doImplementation(Tag tag) { - if (currentComponent.implementation != null) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_COMPONENT_TAG__MULTIPLE_IMPL_ATTRIBS, Integer.toString(tag.getLine()))); - throw e; - } - String tmp = tag.getAttribute(ATTR_CLASS); - if (tmp == null) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_COMPONENT_TAG__NO_CLASS_ATTR, Integer.toString(tag.getLine()))); - throw e; - } - currentComponent.implementation = tmp; - } - - private void doService(Tag tag) { - String tmp = tag.getAttribute(ATTR_SERVICEFACTORY); - if (tmp != null) { - currentComponent.serviceFactory = Boolean.valueOf(tmp).booleanValue(); - } - int size = tag.size(); - if (size == 0) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_SERVICE_TAG__NO_PROVIDE_TAG, Integer.toString(tag.getLine()))); - throw e; - } - if (currentComponent.serviceInterfaces != null) { - //there are already defined service interfaces. The service tag seems to be duplicated - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.DUPLICATED_SERVICE_TAGS, Integer.toString(tag.getLine()))); - throw e; - } - for (int i = 0; i < size; i++) { - Tag p = tag.getTagAt(i); - String pName = p.getName().intern(); - if (pName == TAG_PROVIDE) { - String iFace = p.getAttribute(ATTR_INTERFACE); - if (iFace == null) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_PROVIDE_TAG__NO_INTERFACE_ATTR, Integer.toString(tag.getLine()))); - throw e; - } - if (currentComponent.serviceInterfaces == null) { - currentComponent.serviceInterfaces = new Vector(size); - } - currentComponent.serviceInterfaces.addElement(iFace); - } else { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.ILLEGAL_ELEMENT_IN_SERVICE_TAG, pName, Integer.toString(tag.getLine()))); - throw e; - } - } - } - - private void doProperty(Tag tag) { - String name = null; - try { - name = tag.getAttribute(ATTR_NAME); - if (name == null) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_PROPERTY_TAG__NO_NAME_ATTR, Integer.toString(tag.getLine()))); - throw e; - } - - String type = tag.getAttribute(ATTR_TYPE); - int mtType; - if (type == null || "String".equals(type)) { //$NON-NLS-1$ - mtType = STRING; - } else if ("Boolean".equals(type)) { //$NON-NLS-1$ - mtType = BOOLEAN; - } else if ("Integer".equals(type)) { //$NON-NLS-1$ - mtType = INTEGER; - } else if ("Long".equals(type)) { //$NON-NLS-1$ - mtType = LONG; - } else if ("Char".equals(type) || "Character".equals(type)) { //$NON-NLS-1$ //$NON-NLS-2$ - mtType = CHARACTER; - } else if ("Double".equals(type)) { //$NON-NLS-1$ - mtType = DOUBLE; - } else if ("Float".equals(type)) { //$NON-NLS-1$ - mtType = FLOAT; - } else if ("Byte".equals(type)) { //$NON-NLS-1$ - mtType = BYTE; - } else if ("Short".equals(type)) { //$NON-NLS-1$ - mtType = SHORT; - } else { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_PROPERTY_TYPE, type, Integer.toString(tag.getLine()))); - throw e; - } - - String value = tag.getAttribute(ATTR_VALUE); - Object _value; - if (value != null) { - _value = makeObject(value, mtType); - } else { - // body must be specified - value = tag.getContent(); - if (value == null) { - IllegalArgumentException e = new IllegalArgumentException(Messages.INVALID_PROPERTY_TAG__NO_BODY_CONTENT); - throw e; - } - StringTokenizer tok = new StringTokenizer(value, "\n\r"); //$NON-NLS-1$ - Vector el = new Vector(10); - while (tok.hasMoreTokens()) { - String next = tok.nextToken().trim(); - if (next.length() > 0) { - el.addElement(next); - } - } - if (el.size() == 0) { - IllegalArgumentException e = new IllegalArgumentException(Messages.INVALID_PROPERTY_TAG__NO_BODY_CONTENT); - throw e; - } - String[] values = new String[el.size()]; - el.copyInto(values); - _value = makeArr(values, mtType); - } - if (currentComponent.properties == null) { - currentComponent.properties = new Properties(); - } - currentComponent.properties.put(name, _value); - } catch (IllegalArgumentException iae) { - Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_PROPERTY, name, currentURL) + iae.getMessage(), null); - if (Activator.DEBUG) { - Activator.log.debug("[SCR] Tracing the last exception", iae); //$NON-NLS-1$ - } - if (throwErrors) { - throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_PROPERTY, name, currentURL) + iae.getMessage(), iae); - } - } catch (Throwable e) { - //logging unrecognized exception - Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_PROPERTY, name, currentURL), e); - if (throwErrors) { - throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_PROPERTY, name, currentURL) + e.getMessage(), e); - } - } - } - - private void doProperties(Tag tag) { - String fileEntry = tag.getAttribute(ATTR_ENTRY); - if (fileEntry == null) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_PROPERTIES_TAG__NO_ENTRY_ATTR, Integer.toString(tag.getLine()))); - throw e; - } - - InputStream is = null; - try { - URL resource = bundle.getEntry(fileEntry); - is = resource != null ? resource.openStream() : null; - } catch (IOException ignore) { - //ignore - } - - boolean invalid = true; - // FIXME: this will not work on properties defined like - // com.prosyst.bla.component.properties - // in this case the path should be converted as - // com/prosyst/bla/component.properties - if (is != null) { - if (currentComponent.properties == null) { - currentComponent.properties = new Properties(); - } - try { - currentComponent.properties.load(is); - invalid = false; - } catch (IOException e) { - Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, Messages.ERROR_LOADING_PROPERTIES_FILE, e); - if (throwErrors) { - throw new RuntimeException(Messages.ERROR_LOADING_PROPERTIES_FILE + e, e); - } - } - } - - if (invalid) { - IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_PROPERTIES_TAG__INVALID_ENTRY_VALUE, Integer.toString(tag.getLine()), fileEntry)); - throw e; - } - } - - private void doCorrectComponentTag(Tag tag, String tagName) { - closeTag = tagName.intern(); - String tmp = tag.getAttribute(ATTR_NAME); - immediateSet = false; - - currentComponent = new ServiceComponent(); - // make sure that the bundle attribute is set - it is required further - currentComponent.bundle = bundle; - currentComponent.bc = bc; - currentComponent.name = tmp; - tmp = tag.getAttribute(ATTR_AUTOENABLE); - if (tmp != null) { - currentComponent.autoenable = Boolean.valueOf(tmp).booleanValue(); - } - tmp = tag.getAttribute(ATTR_FACTORY); - if (tmp != null && tmp.length() == 0) { - tmp = null; - } - currentComponent.factory = tmp; - tmp = tag.getAttribute(ATTR_IMMEDIATE); - if (tmp != null && tmp.length() == 0) { - tmp = null; - } - if (tmp != null) { - currentComponent.immediate = Boolean.valueOf(tmp).booleanValue(); - immediateSet = true; - } - if (isNamespaceAtLeast11(tagName)) { - //processing attribute configuration-policy - tmp = tag.getAttribute(ATTR_CONF_POLICY); - if (tmp != null && tmp.length() == 0) { - tmp = null; - } - if (tmp != null) { - currentComponent.configurationPolicy = tmp.intern(); - } - //processing attribute activate - tmp = tag.getAttribute(ATTR_ACTIVATE); - if (tmp != null && tmp.length() == 0) { - tmp = null; - } - if (tmp != null) { - currentComponent.activateMethodName = tmp; - currentComponent.activateMethodDeclared = true; - } - //processing attribute deactivate - tmp = tag.getAttribute(ATTR_DEACTIVATE); - if (tmp != null && tmp.length() == 0) { - tmp = null; - } - if (tmp != null) { - currentComponent.deactivateMethodName = tmp; - currentComponent.deactivateMethodDeclared = true; - } - //processing attribute modified - tmp = tag.getAttribute(ATTR_MODIFIED); - if (tmp != null && tmp.length() == 0) { - tmp = null; - } - if (tmp != null) { - currentComponent.modifyMethodName = tmp; - } - } else { - if (tag.getAttribute(ATTR_CONF_POLICY) != null) { - throw new IllegalArgumentException(NLS.bind(Messages.INVALID_TAG_ACCORDING_TO_NAMESPACE1_0, ATTR_CONF_POLICY, Integer.toString(tag.getLine()))); - } - if (tag.getAttribute(ATTR_ACTIVATE) != null) { - throw new IllegalArgumentException(NLS.bind(Messages.INVALID_TAG_ACCORDING_TO_NAMESPACE1_0, ATTR_ACTIVATE, Integer.toString(tag.getLine()))); - } - if (tag.getAttribute(ATTR_DEACTIVATE) != null) { - throw new IllegalArgumentException(NLS.bind(Messages.INVALID_TAG_ACCORDING_TO_NAMESPACE1_0, ATTR_DEACTIVATE, Integer.toString(tag.getLine()))); - } - if (tag.getAttribute(ATTR_MODIFIED) != null) { - throw new IllegalArgumentException(NLS.bind(Messages.INVALID_TAG_ACCORDING_TO_NAMESPACE1_0, ATTR_MODIFIED, Integer.toString(tag.getLine()))); - } - } - - if (isNamespaceAtLeast12(tagName)) { - //processing attribute configuration-policy - tmp = tag.getAttribute(ATTR_CONFIGURATION_PID); - if (tmp != null && tmp.length() == 0) { - tmp = null; - } - if (tmp != null) { - currentComponent.configurationPID = tmp; - } - } else { - if (tag.getAttribute(ATTR_CONFIGURATION_PID) != null) { - throw new IllegalArgumentException(NLS.bind(Messages.INVALID_TAG_ACCORDING_TO_NAMESPACE1_2, ATTR_CONFIGURATION_PID, Integer.toString(tag.getLine()))); - } - } - - } - - private boolean isCorrectComponentTag(String tagName) { - String qualifier = getNamespaceQualifier(tagName); - String localTagName = (qualifier.length() == 0) ? tagName : tagName.substring(qualifier.length() + 1); // + one char for ':' - if (!localTagName.equals(COMPONENT_TAG_NAME)) { - return false; - } - String namespace = getCurrentNamespace(qualifier); - if (!rootPassed) { // this is the root element - return namespace.length() == 0 || namespace.equals(XMLNS_1_1) || namespace.equals(XMLNS_1_2) || namespace.equals(XMLNS_1_0); - } - // not a root element - return namespace.equals(XMLNS_1_1) || namespace.equals(XMLNS_1_2) || namespace.equals(XMLNS_1_0); - } - - /** - * Creates an object from a <code>String</code> value and a type, as defined by the objectType parameter. - * - * @param string The <code>String</code> value representation of the object. - * @param objectType Defines the type of the object to be generated - * - * @return an Object, which is of a type, corresponding to the given, - * and value - got from the string parameter. - * - * @exception IllegalArgumentException if a proper object can not be created - * due to incompatibility of objectType and value or if the parameters are not correct - * (e.g. objectType is not a valid constant). - */ - public static Object makeObject(String string, int objectType) throws IllegalArgumentException { - try { - switch (objectType) { - case STRING : { - return string; - } - case INTEGER : { - return new Integer(string); - } - case LONG : { - return new Long(string); - } - case FLOAT : { - return new Float(string); - } - case DOUBLE : { - return new Double(string); - } - case BYTE : { - return new Byte(string); - } - case SHORT : { - return new Short(string); - } - case CHARACTER : { - if (string.length() == 0) { - throw new IllegalArgumentException(Messages.MISSING_CHARACTER); - } - return new Character(string.charAt(0)); - } - case BOOLEAN : { - return Boolean.valueOf(string); - } - default : { - throw new IllegalArgumentException(NLS.bind(Messages.UNSUPPORTED_TYPE, String.valueOf(objectType))); - } - } - } catch (NumberFormatException ex) { - throw new IllegalArgumentException(NLS.bind(Messages.INCORRECT_VALUE_TYPE, string)); - } - } - - /** - * Makes an array from the string array value and the object type. - * - * @param array <code>String</code> array representation of an array. - * @param objectType The array's object type. - * - * @return an array of primitives or objects, whose component type corresponds to <code>objectType</code>, - * and value build from the string array passed. - * - * @exception IllegalArgumentException if any of the elements in the string array - * can not be converted to a proper object or primitive, or if the <code>objectType</code> is not a valid constant. - */ - public static Object makeArr(String[] array, int objectType) throws IllegalArgumentException { - switch (objectType) { - case STRING : { - return array; - } - case INTEGER : { - int[] ints = new int[array.length]; - for (int i = 0; i < array.length; i++) { - ints[i] = Integer.parseInt(array[i]); - } - return ints; - } - case LONG : { - long[] longs = new long[array.length]; - for (int i = 0; i < array.length; i++) { - longs[i] = Long.parseLong(array[i]); - } - return longs; - } - case FLOAT : { - float[] floats = new float[array.length]; - for (int i = 0; i < array.length; i++) { - floats[i] = Float.valueOf(array[i]).floatValue(); - } - return floats; - } - case DOUBLE : { - double[] doubles = new double[array.length]; - for (int i = 0; i < array.length; i++) { - doubles[i] = Double.valueOf(array[i]).doubleValue(); - } - return doubles; - } - case BYTE : { - byte[] bytes = new byte[array.length]; - for (int i = 0; i < array.length; i++) { - bytes[i] = Byte.parseByte(array[i]); - } - return bytes; - } - case SHORT : { - short[] shorts = new short[array.length]; - for (int i = 0; i < array.length; i++) { - shorts[i] = Short.parseShort(array[i]); - } - return shorts; - } - case CHARACTER : { - char[] chars = new char[array.length]; - for (int i = 0; i < array.length; i++) { - chars[i] = array[i].charAt(0); - } - return chars; - } - case BOOLEAN : { - boolean[] booleans = new boolean[array.length]; - for (int i = 0; i < array.length; i++) { - booleans[i] = Boolean.valueOf(array[i]).booleanValue(); - } - return booleans; - } - default : { - throw new IllegalArgumentException(NLS.bind(Messages.UNSUPPORTED_TYPE, String.valueOf(objectType))); - } - } - } - - private int getNamespace(String tagName) { - String qualifier = getNamespaceQualifier(tagName); - String namespace = getCurrentNamespace(qualifier); - if (!rootPassed) { // this is the root element - if (namespace.length() == 0) { - return ServiceComponent.NAMESPACE_1_0; - } - } - // not a root element - if (namespace.equals(XMLNS_1_0)) { - return ServiceComponent.NAMESPACE_1_0; - } else if (namespace.equals(XMLNS_1_1)) { - return ServiceComponent.NAMESPACE_1_1; - } else if (namespace.equals(XMLNS_1_2)) { - return ServiceComponent.NAMESPACE_1_2; - } - - //namespace is not known - return -1; - } - - private boolean isNamespaceAtLeast11(String tagName) { - int namespace = getNamespace(tagName); - return (namespace >= ServiceComponent.NAMESPACE_1_1); - } - - private boolean isNamespaceAtLeast12(String tagName) { - int namespace = getNamespace(tagName); - return (namespace >= ServiceComponent.NAMESPACE_1_2); - } - - private void processNamespacesEnter(Tag tag) { - Enumeration en = tag.getAttributeNames(); - while (en.hasMoreElements()) { - String attrName = (String) en.nextElement(); - if (attrName.startsWith(ATTR_XMLNS)) { - String qualifier = attrName.substring(ATTR_XMLNS.length()); - if ((qualifier.length() == 0) || // <- default namespace - ((qualifier.charAt(0) == ':') ? (qualifier = qualifier.substring(1)).length() > 0 : false)) { - - if (namespaces == null) { - namespaces = new Hashtable(); - } - Stack stack = null; - if ((stack = (Stack) namespaces.get(qualifier)) == null) { - stack = new Stack(); - namespaces.put(qualifier, stack); - } - stack.push(tag.getAttribute(attrName)); - } - } - } - } - - private String getCurrentNamespace(String qualifier) { - if (namespaces == null || qualifier == null) { - return ""; //$NON-NLS-1$ - } - Stack stack = (Stack) namespaces.get(qualifier); - if (stack == null || stack.empty()) { - return ""; //$NON-NLS-1$ - } - - return (String) stack.peek(); - } - - private void processNamespacesLeave(Tag tag) { - if (namespaces == null) { - return; - } - Enumeration en = tag.getAttributeNames(); - while (en.hasMoreElements()) { - String attrName = (String) en.nextElement(); - if (attrName.startsWith(ATTR_XMLNS)) { - String qualifier = attrName.substring(ATTR_XMLNS.length()); - if ((qualifier.length() == 0) || // <- default namespace - ((qualifier.charAt(0) == ':') ? (qualifier = qualifier.substring(1)).length() > 0 : false)) { - - Stack stack = (Stack) namespaces.get(qualifier); - if (stack != null) { - if (!stack.empty()) { - stack.pop(); - } - if (stack.empty()) { - namespaces.remove(qualifier); - } - } - } - } - } - } - - private String getNamespaceQualifier(String name) { - int index = name.indexOf(':'); - if (index < 0) { - return ""; //$NON-NLS-1$ - } - return name.substring(0, index); - } -} |