From: <to...@us...> - 2007-01-29 22:09:59
|
Revision: 9 http://techne-dev.svn.sourceforge.net/techne-dev/?rev=9&view=rev Author: tonit Date: 2007-01-29 14:09:59 -0800 (Mon, 29 Jan 2007) Log Message: ----------- Added Paths: ----------- sandbox/tonit/techne.farrt/src/techne/farrt/parser/ sandbox/tonit/techne.farrt/src/techne/farrt/parser/KXml2SAXHandler.java sandbox/tonit/techne.farrt/src/techne/farrt/parser/KXml2SAXParser.java sandbox/tonit/techne.farrt/src/techne/farrt/parser/ParseException.java Added: sandbox/tonit/techne.farrt/src/techne/farrt/parser/KXml2SAXHandler.java =================================================================== --- sandbox/tonit/techne.farrt/src/techne/farrt/parser/KXml2SAXHandler.java (rev 0) +++ sandbox/tonit/techne.farrt/src/techne/farrt/parser/KXml2SAXHandler.java 2007-01-29 22:09:59 UTC (rev 9) @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package techne.farrt.parser; + +import java.util.Properties; + +/** + * Interface for SAX handler with kXML + */ +public interface KXml2SAXHandler { + + /** + * Method called when parsing text + * + * @param ch + * @param offset + * @param length + * @exception SAXException + */ + public void characters(char[] ch, int offset, int length) throws Exception; + + /** + * Method called when a tag opens + * + * @param uri + * @param localName + * @param qName + * @param attrib + * @exception SAXException + **/ + public void startElement( + String uri, + String localName, + String qName, + Properties attrib) + throws Exception; + /** + * Method called when a tag closes + * + * @param uri + * @param localName + * @param qName + * @exception SAXException + */ + public void endElement( + java.lang.String uri, + java.lang.String localName, + java.lang.String qName) + throws Exception; + + public void processingInstruction(String target, + String data) + throws Exception; + + public void setLineNumber(int lineNumber); + + public void setColumnNumber(int columnNumber); +} Added: sandbox/tonit/techne.farrt/src/techne/farrt/parser/KXml2SAXParser.java =================================================================== --- sandbox/tonit/techne.farrt/src/techne/farrt/parser/KXml2SAXParser.java (rev 0) +++ sandbox/tonit/techne.farrt/src/techne/farrt/parser/KXml2SAXParser.java 2007-01-29 22:09:59 UTC (rev 9) @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package techne.farrt.parser; + +import java.io.Reader; +import java.util.Properties; + +import org.kxml2.io.KXmlParser; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +/** + * The KXml2SAXParser extends the XmlParser from kxml. This is a very + * simple parser that does not take into account the DTD + * + */ +public class KXml2SAXParser extends KXmlParser { + + public String uri="uri"; + + private Reader reader; + + /** + * The constructor for a parser, it receives a java.io.Reader. + * + * @param reader The reader + * @throws XmlPullParserException + */ + public KXml2SAXParser(Reader reader) throws XmlPullParserException { + super(); + this.reader=reader; + setInput(reader); + } + + /** + * Parser from the reader provided in the constructor, and call + * the startElement and endElement in a KxmlHandler + * + * @param reader The reader + * @exception Exception thrown by the superclass + */ + public void parseXML(KXml2SAXHandler handler) throws Exception { + + while (next() != XmlPullParser.END_DOCUMENT) { + handler.setLineNumber(getLineNumber()); + handler.setColumnNumber(getColumnNumber()); + if (getEventType() == XmlPullParser.START_TAG) { + Properties props = new Properties(); + for (int i = 0; i < getAttributeCount(); i++) { + props.put(getAttributeName(i), getAttributeValue(i)); + } + handler.startElement( + getNamespace(), + getName(), + getName(), + props); + } else if (getEventType() == XmlPullParser.END_TAG) { + handler.endElement(getNamespace(), getName(), getName()); + } else if (getEventType() == XmlPullParser.TEXT) { + String text = getText(); + handler.characters(text.toCharArray(),0,text.length()); + } else if (getEventType() == XmlPullParser.PROCESSING_INSTRUCTION) { + // TODO extract the target from the evt.getText() + handler.processingInstruction(null,getText()); + } else { + // do nothing + } + } + } +} Added: sandbox/tonit/techne.farrt/src/techne/farrt/parser/ParseException.java =================================================================== --- sandbox/tonit/techne.farrt/src/techne/farrt/parser/ParseException.java (rev 0) +++ sandbox/tonit/techne.farrt/src/techne/farrt/parser/ParseException.java 2007-01-29 22:09:59 UTC (rev 9) @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package techne.farrt.parser; + +public class ParseException extends Exception +{ + Exception m_originalException; + + public ParseException(String msg, Exception originalException) { + super(msg); + m_originalException = originalException; + } + + public Exception getException() { + return m_originalException; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <to...@us...> - 2007-01-29 23:33:41
|
Revision: 10 http://techne-dev.svn.sourceforge.net/techne-dev/?rev=10&view=rev Author: tonit Date: 2007-01-29 15:33:41 -0800 (Mon, 29 Jan 2007) Log Message: ----------- Added Paths: ----------- sandbox/tonit/techne.farrt/src/techne/farrt/PropertyMetadata.java sandbox/tonit/techne.farrt/src/techne/farrt/ReferenceMetadata.java sandbox/tonit/techne.farrt/src/techne/farrt/ServiceMetadata.java sandbox/tonit/techne.farrt/src/techne/farrt/XmlHandler.java Added: sandbox/tonit/techne.farrt/src/techne/farrt/PropertyMetadata.java =================================================================== --- sandbox/tonit/techne.farrt/src/techne/farrt/PropertyMetadata.java (rev 0) +++ sandbox/tonit/techne.farrt/src/techne/farrt/PropertyMetadata.java 2007-01-29 23:33:41 UTC (rev 10) @@ -0,0 +1,149 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package techne.farrt; + +import org.osgi.service.component.ComponentException; + +/** + * A property descriptor that contains the information for properties + * defined in the descriptor + * + */ +public class PropertyMetadata { + + // Name of the property (required) + private String m_name; + + // Type of the property (optional) + private String m_type = "String"; + + // Value of the type (optional) + private Object m_value; + + // Flag that indicates if this PropertyMetadata has been validated and thus has become immutable + private boolean m_validated = false; + + /** + * Set the name + * + * @param name + */ + public void setName(String name) { + if (m_validated == true) { + return; + } + + m_name = name; + } + + + /** + * Set the type + * + * @param type + */ + public void setType(String type) { + if (m_validated == true) { + return; + } + m_type = type; + } + + /** + * Set the value + * + * @param value + */ + public void setValue(String value) { + if (m_validated == true) { + return; + } + + // 112.4.5 Parsing of the value is done by the valueOf(String) method (P. 291) + // Should the type accept lowercase too? + if(m_type.equals("String")) { + m_value = String.valueOf(value); + } + else if(m_type.equals("Long")) { + m_value = Long.valueOf(value); + } + else if(m_type.equals("Double")) { + m_value = Double.valueOf(value); + } + else if(m_type.equals("Float")) { + m_value = Float.valueOf(value); + } + else if(m_type.equals("Integer")) { + m_value = Integer.valueOf(value); + } + else if(m_type.equals("Byte")) { + m_value = Byte.valueOf(value); + } + else if(m_type.equals("Char")) { + //TODO: verify if this is adequate for Characters + m_value = Byte.valueOf(value); + } + else if(m_type.equals("Boolean")) { + m_value = Boolean.valueOf(value); + } + else if(m_type.equals("Short")) { + m_value = Short.valueOf(value); + } + else { + throw new IllegalArgumentException("Undefined property type '"+m_type+"'"); + } + } + + /** + * Get the name of the property + * + * @return the name of the property + */ + public String getName() { + return m_name; + } + + /** + * Get the type of the property + * + * @return the type of the property + */ + public String getType() { + return m_type; + } + + /** + * Get the value of the property + * + * @return the value of the property as an Object + */ + public Object getValue() { + return m_value; + } + + /** + * Method used to verify if the semantics of this metadata are correct + */ + public void validate(){ + if(m_name == null) + { + throw new ComponentException("Property name attribute is mandatory"); + } + } +} Added: sandbox/tonit/techne.farrt/src/techne/farrt/ReferenceMetadata.java =================================================================== --- sandbox/tonit/techne.farrt/src/techne/farrt/ReferenceMetadata.java (rev 0) +++ sandbox/tonit/techne.farrt/src/techne/farrt/ReferenceMetadata.java 2007-01-29 23:33:41 UTC (rev 10) @@ -0,0 +1,287 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package techne.farrt; + +import org.osgi.service.component.ComponentException; + +/** + * Information associated to a dependency + * + */ +public class ReferenceMetadata { + // Name for the reference (required) + private String m_name = null; + + // Interface name (required) + private String m_interface = null; + + // Cardinality (optional, default="1..1") + private String m_cardinality = "1..1"; + + // Target (optional) + private String m_target; + + // Name of the bind method (optional) + private String m_bind = null; + + // Name of the unbind method (optional) + private String m_unbind = null; + + // Policy attribute (optional, default = static) + private String m_policy = "static"; + + // Flag that is set once the component is verified (its properties cannot be changed) + private boolean m_validated = false; + + // Flags that store the values passed as strings + private boolean m_isStatic = true; + private boolean m_isOptional = false; + private boolean m_isMultiple = false; + + /////////////////////////////////////////////// setters /////////////////////////////////// + + /** + * Setter for the name attribute + * + * @param name + */ + public void setName(String name) { + if(m_validated) { + return; + } + + m_name = name; + } + + /** + * Setter for the interfaceName attribute + * + * @param interfaceName + */ + public void setInterface(String interfaceName) { + if(m_validated) { + return; + } + + m_interface = interfaceName; + + } + + /** + * Setter for the cardinality attribute + * + * @param cardinality + */ + public void setCardinality(String cardinality) { + if(m_validated) { + return; + } + + m_cardinality = cardinality; + + if(!m_cardinality.equals("0..1") && !m_cardinality.equals("0..n") && !m_cardinality.equals("1..1") && !m_cardinality.equals("1..n")) { + throw new IllegalArgumentException ("Cardinality should take one of the following values: 0..1, 0..n, 1..1, 1..n"); + } + if(m_cardinality.equals("0..1") || m_cardinality.equals("0..n")) { + m_isOptional = true; + } + if(m_cardinality.equals("0..n") || m_cardinality.equals("1..n")) { + m_isMultiple = true; + } + } + + /** + * Setter for the policy attribute + * + * @param policy + */ + public void setPolicy(String policy) { + if(m_validated) { + return; + } + + if(!m_policy.equals("static") && !m_policy.equals("dynamic")) { + throw new IllegalArgumentException ("Policy must be either 'static' or 'dynamic'"); + } + if(policy.equals("static") == false) { + m_isStatic = false; + } + + m_policy = policy; + } + + /** + * Setter for the target attribute (filter) + * + * @param target + */ + public void setTarget(String target) { + if(m_validated) { + return; + } + + //TODO: check if we really need to extend the filter to limit seaches to a particular interface + String classnamefilter = "(objectClass="+m_interface+")"; + if(target != null) { + m_target = "(&"+classnamefilter+target+")"; + } + else { + m_target = classnamefilter; + } + } + + /** + * Setter for the bind method attribute + * + * @param bind + */ + public void setBind(String bind) { + if(m_validated) { + return; + } + + m_bind = bind; + } + + /** + * Setter for the unbind method attribute + * + * @param bind + */ + public void setUnbind(String unbind) { + if(m_validated) { + return; + } + + m_unbind = unbind; + } + + + /////////////////////////////////////////////// getters /////////////////////////////////// + + /** + * Returns the name of the reference + * + * @return A string containing the reference's name + **/ + public String getName() { + return m_name; + } + + /** + * Returns the fully qualified name of the class that is used by the component to access the service + * + * @return A string containing a fully qualified name + **/ + public String getInterface() { + return m_interface; + } + + /** + * Get the cardinality as a string + * + * @return A string with the cardinality + **/ + public String getCardinality() { + return m_cardinality; + } + + /** + * Get the policy as a string + * + * @return A string with the policy + **/ + public String getPolicy() { + return m_policy; + } + + /** + * Returns the filter expression that further constrains the set of target services + * + * @return A string with a filter + **/ + public String getTarget() { + return m_target; + } + + /** + * Get the name of a method in the component implementation class that is used to notify that + * a service is bound to the component configuration + * + * @return a String with the name of the bind method + **/ + public String getBind() { + return m_bind; + } + + /** + * Get the name of a method in the component implementation class that is used to notify that + * a service is unbound from the component configuration + * + * @return a String with the name of the unbind method + **/ + public String getUnbind() { + return m_unbind; + } + + // Getters for boolean values that determine both policy and cardinality + + /** + * Test if dependency's binding policy is static + * + * @return true if static + **/ + public boolean isStatic() { + return m_isStatic; + } + + /** + * Test if dependency is optional (0..1 or 0..n) + * + * @return true if the dependency is optional + **/ + public boolean isOptional() { + return m_isOptional; + } + + /** + * Test if dependency is multiple (0..n or 1..n) + * + * @return true if the dependency is multiple + **/ + public boolean isMultiple() { + return m_isMultiple; + } + + /** + * Method used to verify if the semantics of this metadata are correct + * + */ + void validate() { + if (m_name == null) { + throw new ComponentException("the name for the reference must be set"); + } + + if (m_interface == null) { + throw new ComponentException("the interface for the reference must be set"); + } + } + + +} \ No newline at end of file Added: sandbox/tonit/techne.farrt/src/techne/farrt/ServiceMetadata.java =================================================================== --- sandbox/tonit/techne.farrt/src/techne/farrt/ServiceMetadata.java (rev 0) +++ sandbox/tonit/techne.farrt/src/techne/farrt/ServiceMetadata.java 2007-01-29 23:33:41 UTC (rev 10) @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package techne.farrt; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.osgi.service.component.ComponentException; + +/** + * This class contains the metadata associated to a service that is provided + * by a component + * + */ +public class ServiceMetadata { + + // 112.4.6 Flag that indicates if the service is a ServiceFactory + private boolean m_serviceFactory = false; + + // List of provided interfaces + private List m_provides = new ArrayList(); + + // Flag that indicates if this metadata has been validated and has become immutable + private boolean m_validated = false; + + /** + * Setter for the servicefactory attribute of the service element + * + * @param serviceFactory + */ + public void setServiceFactory(boolean serviceFactory) { + if(m_validated) { + return; + } + + m_serviceFactory = serviceFactory; + } + + /** + * Add a provided interface to this service + * + * @param provide a String containing the name of the provided interface + */ + public void addProvide(String provide) { + if(m_validated) { + return; + } + + m_provides.add(provide); + } + + /** + * Return the flag that defines if it is a service factory or not + * + * @return a boolean flag + */ + public boolean isServiceFactory() { + return m_serviceFactory; + } + + /** + * Returns the implemented interfaces + * + * @return the implemented interfaces as a string array + */ + public String [] getProvides() { + String provides[] = new String[m_provides.size()]; + Iterator it = m_provides.iterator(); + int count = 0; + while (it.hasNext()) + { + provides[count++] = it.next().toString(); + } + return provides; + } + + /** + * Verify if the semantics of this metadata are correct + * + */ + void validate() { + if(m_provides.size() == 0) { + throw new ComponentException("At least one provided interface must be given"); + } + } +} Added: sandbox/tonit/techne.farrt/src/techne/farrt/XmlHandler.java =================================================================== --- sandbox/tonit/techne.farrt/src/techne/farrt/XmlHandler.java (rev 0) +++ sandbox/tonit/techne.farrt/src/techne/farrt/XmlHandler.java 2007-01-29 23:33:41 UTC (rev 10) @@ -0,0 +1,211 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package techne.farrt; + +import java.util.Properties; +import java.util.ArrayList; +import java.util.List; + +import techne.farrt.parser.KXml2SAXHandler; +import techne.farrt.parser.ParseException; + +/** + * + * + */ +public class XmlHandler implements KXml2SAXHandler { + + // A reference to the current component + private ComponentMetadata m_currentComponent = null; + + // The current service + private ServiceMetadata m_currentService = null; + + // A list of component descriptors contained in the file + private List m_components = new ArrayList(); + + /** + * Method called when a tag opens + * + * @param uri + * @param localName + * @param qName + * @param attrib + * @exception ParseException + **/ + public void startElement(String uri,String localName,String qName,Properties attrib) throws ParseException + { + try { + + // 112.4.3 Component Element + if (qName.equals("component")) { + + // Create a new ComponentMetadata + m_currentComponent = new ComponentMetadata(); + + // name attribute is mandatory + m_currentComponent.setName(attrib.getProperty("name")); + + // enabled attribute is optional + if(attrib.getProperty("enabled") != null) { + m_currentComponent.setEnabled(attrib.getProperty("enabled").equals("true")); + } + + // immediate attribute is optional + if(attrib.getProperty("immediate") != null) { + m_currentComponent.setImmediate(attrib.getProperty("immediate").equals("true")); + } + + // factory attribute is optional + if(attrib.getProperty("factory") != null) { + m_currentComponent.setFactoryIdentifier(attrib.getProperty("factory")); + } + + // Add this component to the list + m_components.add(m_currentComponent); + } + + // 112.4.4 Implementation + else if (qName.equals("implementation")) + { + // Set the implementation class name (mandatory) + m_currentComponent.setImplementationClassName(attrib.getProperty("class")); + } + // 112.4.5 Properties and Property Elements + else if (qName.equals("property")) { + // 112.4.5: If the value attribute is specified, the body of the element is ignored. + if( attrib.getProperty("value") != null) { + PropertyMetadata prop = new PropertyMetadata(); + + // name attribute is mandatory + prop.setName(attrib.getProperty("name")); + + // type attribute is optional + if(attrib.getProperty("type") != null) { + prop.setType(attrib.getProperty("type")); + } + + // value attribute is optional + if(attrib.getProperty("value") != null) { + prop.setValue(attrib.getProperty("value")); + } + m_currentComponent.addProperty(prop); + } + else { + // TODO: treat the case where property value is not specified (p. 291) + } + // TODO: treat the case where a properties file name is provided (p. 292) + } + else if(qName.equals("properties")) { + // TODO: implement the properties tag + } + // 112.4.6 Service Element + else if (qName.equals("service")) { + + m_currentService = new ServiceMetadata(); + + // servicefactory attribute is optional + if(attrib.getProperty("servicefactory") != null) { + m_currentService.setServiceFactory(attrib.getProperty("servicefactory").equals("true")); + } + + m_currentComponent.setService(m_currentService); + } + else if (qName.equals("provide")) { + m_currentService.addProvide(attrib.getProperty("interface")); + } + + // 112.4.7 Reference element + else if (qName.equals("reference")) { + ReferenceMetadata ref=new ReferenceMetadata (); + ref.setName(attrib.getProperty("name")); + ref.setInterface(attrib.getProperty("interface")); + + // Cardinality + if(attrib.getProperty("cardinality")!= null) { + ref.setCardinality(attrib.getProperty("cardinality")); + } + + if(attrib.getProperty("policy") != null) { + ref.setPolicy(attrib.getProperty("policy")); + } + + //if + ref.setTarget(attrib.getProperty("target")); + ref.setBind(attrib.getProperty("bind")); + ref.setUnbind(attrib.getProperty("unbind")); + + m_currentComponent.addDependency(ref); + } + } + catch(Exception ex) { + ex.printStackTrace(); + throw new ParseException("Exception during parsing",ex); + } + } + + /** + * Method called when a tag closes + * + * @param uri + * @param localName + * @param qName + * @exception ParseException + */ + public void endElement(java.lang.String uri,java.lang.String localName,java.lang.String qName) throws ParseException + { + if (qName.equals("component")) + { + // When the closing tag for a component is found, the component is validated to check if + // the implementation class has been set + m_currentComponent.validate(); + } + } + + /** + * Called to retrieve the service descriptors + * + * @return A list of service descriptors + */ + List getComponentMetadataList() + { + return m_components; + } + + public void characters(char[] ch, int offset, int length) throws Exception { + // Not used + + } + + public void processingInstruction(String target, String data) throws Exception { + // Not used + + } + + public void setLineNumber(int lineNumber) { + // Not used + + } + + public void setColumnNumber(int columnNumber) { + // Not used + + } +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |