You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemind.apache.org by ah...@apache.org on 2006/12/22 13:25:22 UTC
svn commit: r489635 [2/2] - in /hivemind/branches/branch-2-0-annot:
framework/src/java/org/apache/hivemind/definition/
framework/src/java/org/apache/hivemind/definition/construction/
framework/src/java/org/apache/hivemind/definition/impl/ framework/src...
Added: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/HiveMindSchemaParser.java
URL: http://svn.apache.org/viewvc/hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/HiveMindSchemaParser.java?view=auto&rev=489635
==============================================================================
--- hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/HiveMindSchemaParser.java (added)
+++ hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/HiveMindSchemaParser.java Fri Dec 22 04:25:20 2006
@@ -0,0 +1,70 @@
+// Copyright 2004, 2005 The Apache Software Foundation
+//
+// Licensed 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 org.apache.hivemind.xml.definition.impl;
+
+import java.util.List;
+
+import org.apache.hivemind.Element;
+import org.apache.hivemind.definition.ConfigurationParser;
+import org.apache.hivemind.definition.construction.ContributionContext;
+import org.apache.hivemind.impl.SchemaProcessorImpl;
+import org.apache.hivemind.internal.Module;
+import org.apache.hivemind.schema.Schema;
+import org.apache.hivemind.util.Defense;
+import org.apache.hivemind.util.InstanceCreationUtils;
+
+/**
+ * Implementation of {@link ConfigurationParser} that parses data whose format
+ * is described by a HiveMind {@link Schema} definition in a HiveMind xml module.
+ */
+public final class HiveMindSchemaParser implements ConfigurationParser
+{
+ public final static String INPUT_FORMAT_NAME = "hivemind-schema";
+
+ private Schema _schema;
+
+ public HiveMindSchemaParser(Schema schema)
+ {
+ _schema = schema;
+ }
+
+ /**
+ * @param a list of {@link Element}s
+ * @see org.apache.hivemind.definition.ConfigurationParser#parseContribution(org.apache.hivemind.definition.construction.ContributionContext, java.lang.Object)
+ */
+ public Object parseContribution(ContributionContext context, Object data)
+ {
+ SchemaProcessorImpl processor = new SchemaProcessorImpl(context.getConfigurationPoint()
+ .getErrorLog(), _schema);
+ Object contributionObject = constructContributionObject(_schema, context.getDefiningModule());
+ processor.process(contributionObject, (List) data, context.getDefiningModule());
+ return contributionObject;
+ }
+
+ public Object constructContributionObject(Schema contributionsSchema, Module definingModule)
+ {
+ Defense.notNull(contributionsSchema.getRootElementClassName(), "schema.rootElementClassName");
+
+ return InstanceCreationUtils.createInstance(
+ definingModule,
+ contributionsSchema.getRootElementClassName(),
+ contributionsSchema.getLocation());
+ }
+
+ public Schema getSchema()
+ {
+ return _schema;
+ }
+}
\ No newline at end of file
Added: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/HiveMindSchemaParserConstructor.java
URL: http://svn.apache.org/viewvc/hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/HiveMindSchemaParserConstructor.java?view=auto&rev=489635
==============================================================================
--- hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/HiveMindSchemaParserConstructor.java (added)
+++ hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/HiveMindSchemaParserConstructor.java Fri Dec 22 04:25:20 2006
@@ -0,0 +1,54 @@
+package org.apache.hivemind.xml.definition.impl;
+
+import org.apache.hivemind.definition.ConfigurationParser;
+import org.apache.hivemind.definition.construction.ConfigurationParserConstructor;
+import org.apache.hivemind.definition.construction.ConstructionContext;
+import org.apache.hivemind.schema.Schema;
+import org.apache.hivemind.util.Defense;
+
+/**
+ * Constructor for {@link HiveMindSchemaParser}s.
+ */
+public class HiveMindSchemaParserConstructor implements ConfigurationParserConstructor
+{
+ private Schema _schema;
+ private String _schemaId;
+
+ public HiveMindSchemaParserConstructor(String schemaId)
+ {
+ _schemaId = schemaId;
+ }
+
+ public HiveMindSchemaParserConstructor(Schema schema)
+ {
+ _schema = schema;
+ }
+
+ public ConfigurationParser constructParser(ConstructionContext context)
+ {
+ Defense.fieldNotNull(_schema, "schema");
+
+ return new HiveMindSchemaParser(_schema);
+ }
+
+ public Schema getSchema()
+ {
+ return _schema;
+ }
+
+ public void setSchema(Schema schema)
+ {
+ _schema = schema;
+ }
+
+ public String getSchemaId()
+ {
+ return _schemaId;
+ }
+
+ public void setSchemaId(String schemaId)
+ {
+ _schemaId = schemaId;
+ }
+
+}
Added: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlConfigurationPointDefinitionImpl.java
URL: http://svn.apache.org/viewvc/hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlConfigurationPointDefinitionImpl.java?view=auto&rev=489635
==============================================================================
--- hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlConfigurationPointDefinitionImpl.java (added)
+++ hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlConfigurationPointDefinitionImpl.java Fri Dec 22 04:25:20 2006
@@ -0,0 +1,31 @@
+package org.apache.hivemind.xml.definition.impl;
+
+import org.apache.hivemind.Location;
+import org.apache.hivemind.definition.ModuleDefinition;
+import org.apache.hivemind.definition.Occurances;
+import org.apache.hivemind.definition.Visibility;
+import org.apache.hivemind.definition.impl.ConfigurationPointDefinitionImpl;
+import org.apache.hivemind.schema.Schema;
+
+/**
+ * Specialization of {@link ConfigurationPointDefinitionImpl} for configuration points defined in xml.
+ *
+ * @author Achim Huegen
+ */
+public class XmlConfigurationPointDefinitionImpl extends ConfigurationPointDefinitionImpl
+{
+ private Schema _contributionsSchema;
+ private String _contributionsSchemaId;
+
+ public XmlConfigurationPointDefinitionImpl(ModuleDefinition module)
+ {
+ super(module);
+ }
+
+ public XmlConfigurationPointDefinitionImpl(ModuleDefinition module, String id, Location location, Visibility visibility, String containerClassName, Occurances expectedContributions)
+ {
+ super(module, id, location, visibility, containerClassName, expectedContributions);
+ }
+
+
+}
Copied: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlContributionImpl.java (from r484592, hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/impl/XmlContributionImpl.java)
URL: http://svn.apache.org/viewvc/hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlContributionImpl.java?view=diff&rev=489635&p1=hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/impl/XmlContributionImpl.java&r1=484592&p2=hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlContributionImpl.java&r2=489635
==============================================================================
--- hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/impl/XmlContributionImpl.java (original)
+++ hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlContributionImpl.java Fri Dec 22 04:25:20 2006
@@ -12,24 +12,23 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.hivemind.impl;
+package org.apache.hivemind.xml.definition.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import org.apache.hivemind.ApplicationRuntimeException;
+import org.apache.hivemind.Element;
+import org.apache.hivemind.definition.ConfigurationParser;
+import org.apache.hivemind.definition.ConfigurationParserDefinition;
+import org.apache.hivemind.definition.ConfigurationPointDefinition;
import org.apache.hivemind.definition.construction.Contribution;
import org.apache.hivemind.definition.construction.ContributionContext;
-import org.apache.hivemind.impl.natures.XmlConfigurationPointNature;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.schema.Schema;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.InstanceCreationUtils;
/**
- * Implements the {@link org.apache.hivemind.definition.construction.Contribution}
- * interface, a wrapper around objects that can provide values that plug into an extension point.
+ * Implements the {@link org.apache.hivemind.definition.construction.Contribution} interface.
+ * Contributes data that is defined as xml in a HiveMind xml module.
+ * The data is passed in as instances of {@link Element}.
*
* @author Howard Lewis Ship
*/
@@ -66,52 +65,25 @@
return _elements;
}
+ /**
+ * @see org.apache.hivemind.definition.construction.Contribution#contribute(org.apache.hivemind.definition.construction.ContributionContext)
+ */
public void contribute(ContributionContext context)
{
- // Retrieve xml nature
- XmlConfigurationPointNature xmlNature = (XmlConfigurationPointNature) context
- .getConfigurationPoint().getNature(XmlConfigurationPointNature.class);
- if (xmlNature == null)
+ // Retrieve parser for HiveMind schema
+ ConfigurationPointDefinition cpd = context.getConfigurationPoint()
+ .getConfigurationPointDefinition();
+ ConfigurationParserDefinition parserDef = cpd.getParser(HiveMindSchemaParser.INPUT_FORMAT_NAME);
+ if (parserDef == null)
{
- // TODO: Enhance Exception-Handling
- throw new ApplicationRuntimeException(
- "Configuration point has no associated xml schema. You can define one with a schema element that uses the configuration-id attribute");
- }
-
- Module contributingModule = context.getDefiningModule();
-
- Schema contributionsSchema = xmlNature.getSchema();
- if (contributionsSchema != null)
- {
- SchemaProcessorImpl processor = new SchemaProcessorImpl(context.getConfigurationPoint()
- .getErrorLog(), contributionsSchema);
- Object contributionObject = constructContributionObject(contributionsSchema, context.getDefiningModule());
- processor.process(contributionObject, getElements(), contributingModule);
- context.mergeContribution(contributionObject);
- } else {
- // It's perfectly valid that a configuration point has no schema
- // In that case the unparsed elements should be returned
+ // This is a valid situation. The unparsed elements are contributed
context.mergeContribution(getElements());
+ } else {
+ // Construct and execute the parser
+ ConfigurationParser parser = parserDef.getParserConstructor().constructParser(context);
+ Object contribution = parser.parseContribution(context, getElements());
+ context.mergeContribution(contribution);
}
-
- // After constructing the result, if the result
- // will be cached, then there's no need to keep
- // the schema and extensions (used to build the
- // result); it can all be released to the GC.
-
- // TODO schema can not be deleted here since there are still other contributions
- // that need the schema
- // configurationPoint.putMetaData("schema", null);
-
}
- public Object constructContributionObject(Schema contributionsSchema, Module definingModule)
- {
- Defense.notNull(contributionsSchema.getRootElementClassName(), "schema.rootElementClassName");
-
- return InstanceCreationUtils.createInstance(
- definingModule,
- contributionsSchema.getRootElementClassName(),
- contributionsSchema.getLocation());
- }
}
Propchange: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlContributionImpl.java
------------------------------------------------------------------------------
cvs2svn:cvs-rev = 1.6
Propchange: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlContributionImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlContributionImpl.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlModuleDefinitionImpl.java
URL: http://svn.apache.org/viewvc/hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlModuleDefinitionImpl.java?view=auto&rev=489635
==============================================================================
--- hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlModuleDefinitionImpl.java (added)
+++ hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlModuleDefinitionImpl.java Fri Dec 22 04:25:20 2006
@@ -0,0 +1,56 @@
+package org.apache.hivemind.xml.definition.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.hivemind.ClassResolver;
+import org.apache.hivemind.Location;
+import org.apache.hivemind.definition.impl.ModuleDefinitionImpl;
+import org.apache.hivemind.impl.SchemaAssignment;
+import org.apache.hivemind.schema.Schema;
+
+public class XmlModuleDefinitionImpl extends ModuleDefinitionImpl
+{
+ /**
+ * Map of {@link Schema} keyed on schema id.
+ */
+ private Map _schemas = new HashMap();
+
+ /**
+ * Collection of {@link SchemaAssignment}s
+ */
+ private Collection _schemaAssignments = new ArrayList();
+
+ public XmlModuleDefinitionImpl(String id, Location location, ClassResolver resolver, String packageName)
+ {
+ super(id, location, resolver, packageName);
+ }
+
+ public void addSchema(String qualifiedSchemaId, Schema schema)
+ {
+ _schemas.put(qualifiedSchemaId, schema);
+ }
+
+ public Schema getSchema(String qualifiedSchemaId)
+ {
+ return (Schema) _schemas.get(qualifiedSchemaId);
+ }
+
+ public Collection getSchemas()
+ {
+ return _schemas.values();
+ }
+
+ public void addSchemaAssignment(SchemaAssignment assignment)
+ {
+ _schemaAssignments.add(assignment);
+ }
+
+ public Collection getSchemaAssignments()
+ {
+ return _schemaAssignments;
+ }
+
+}
Copied: hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlServicePointDefinitionImpl.java (from r484592, hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/impl/XmlServicePointDefinitionImpl.java)
URL: http://svn.apache.org/viewvc/hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlServicePointDefinitionImpl.java?view=diff&rev=489635&p1=hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/impl/XmlServicePointDefinitionImpl.java&r1=484592&p2=hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlServicePointDefinitionImpl.java&r2=489635
==============================================================================
--- hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/impl/XmlServicePointDefinitionImpl.java (original)
+++ hivemind/branches/branch-2-0-annot/xml/src/java/org/apache/hivemind/xml/definition/impl/XmlServicePointDefinitionImpl.java Fri Dec 22 04:25:20 2006
@@ -1,4 +1,4 @@
-package org.apache.hivemind.impl;
+package org.apache.hivemind.xml.definition.impl;
import org.apache.hivemind.Location;
import org.apache.hivemind.definition.ModuleDefinition;
@@ -16,6 +16,7 @@
{
private Schema _parametersSchema;
private Occurances _parametersCount = Occurances.REQUIRED;
+ private String _parametersSchemaId;
public XmlServicePointDefinitionImpl(ModuleDefinition module)
{
@@ -38,7 +39,7 @@
public void setParametersSchema(Schema schema)
{
- this._parametersSchema = schema;
+ _parametersSchema = schema;
}
/**
@@ -52,7 +53,17 @@
public void setParametersCount(Occurances parametersCount)
{
- this._parametersCount = parametersCount;
+ _parametersCount = parametersCount;
+ }
+
+ public void setParametersSchemaId(String parametersSchemaId)
+ {
+ _parametersSchemaId = parametersSchemaId;
+ }
+
+ public String getParametersSchemaId()
+ {
+ return _parametersSchemaId;
}
}
Modified: hivemind/branches/branch-2-0-annot/xml/src/test/org/apache/hivemind/impl/TestInvokeFactoryServiceConstructor.java
URL: http://svn.apache.org/viewvc/hivemind/branches/branch-2-0-annot/xml/src/test/org/apache/hivemind/impl/TestInvokeFactoryServiceConstructor.java?view=diff&rev=489635&r1=489634&r2=489635
==============================================================================
--- hivemind/branches/branch-2-0-annot/xml/src/test/org/apache/hivemind/impl/TestInvokeFactoryServiceConstructor.java (original)
+++ hivemind/branches/branch-2-0-annot/xml/src/test/org/apache/hivemind/impl/TestInvokeFactoryServiceConstructor.java Fri Dec 22 04:25:20 2006
@@ -32,6 +32,7 @@
import org.apache.hivemind.internal.ServicePoint;
import org.apache.hivemind.schema.impl.SchemaImpl;
import org.apache.hivemind.xml.XmlTestCase;
+import org.apache.hivemind.xml.definition.impl.XmlServicePointDefinitionImpl;
import org.easymock.MockControl;
/**
Modified: hivemind/branches/branch-2-0-annot/xml/src/test/org/apache/hivemind/impl/TestXmlModuleDescriptorProcessor.java
URL: http://svn.apache.org/viewvc/hivemind/branches/branch-2-0-annot/xml/src/test/org/apache/hivemind/impl/TestXmlModuleDescriptorProcessor.java?view=diff&rev=489635&r1=489634&r2=489635
==============================================================================
--- hivemind/branches/branch-2-0-annot/xml/src/test/org/apache/hivemind/impl/TestXmlModuleDescriptorProcessor.java (original)
+++ hivemind/branches/branch-2-0-annot/xml/src/test/org/apache/hivemind/impl/TestXmlModuleDescriptorProcessor.java Fri Dec 22 04:25:20 2006
@@ -21,10 +21,10 @@
import org.apache.hivemind.Element;
import org.apache.hivemind.ErrorHandler;
import org.apache.hivemind.Location;
+import org.apache.hivemind.definition.ConfigurationParserDefinition;
import org.apache.hivemind.definition.ConfigurationPointDefinition;
import org.apache.hivemind.definition.RegistryDefinition;
import org.apache.hivemind.definition.Visibility;
-import org.apache.hivemind.impl.natures.XmlConfigurationPointNature;
import org.apache.hivemind.parse.ConfigurationPointDescriptor;
import org.apache.hivemind.parse.ContributionDescriptor;
import org.apache.hivemind.parse.ModuleDescriptor;
@@ -32,6 +32,8 @@
import org.apache.hivemind.test.AggregateArgumentsMatcher;
import org.apache.hivemind.test.ArgumentMatcher;
import org.apache.hivemind.test.TypeMatcher;
+import org.apache.hivemind.xml.definition.impl.HiveMindSchemaParser;
+import org.apache.hivemind.xml.definition.impl.HiveMindSchemaParserConstructor;
import org.easymock.MockControl;
/**
@@ -72,13 +74,19 @@
errorHandler);
processor.processModuleDescriptor(fooBar);
processor.processModuleDescriptor(zipZoop);
- processor.resolveSchemas();
+
+ XmlExtensionResolver extensionResolver = new XmlExtensionResolver(definition, errorHandler);
+ extensionResolver.resolveSchemas();
ConfigurationPointDefinition point = definition.getConfigurationPoint("zip.zoop.Zap");
- XmlConfigurationPointNature xmlNature = (XmlConfigurationPointNature) point
- .getNature(XmlConfigurationPointNature.class);
- assertNotNull(xmlNature);
- assertEquals(schema, xmlNature.getSchema());
+
+ ConfigurationParserDefinition parserDef = point.getParser(HiveMindSchemaParser.INPUT_FORMAT_NAME);
+ assertNotNull(parserDef);
+
+ assertEquals(parserDef.getParserConstructor().getClass(), HiveMindSchemaParserConstructor.class);
+
+ HiveMindSchemaParserConstructor constructor = (HiveMindSchemaParserConstructor) parserDef.getParserConstructor();
+ assertEquals(schema, constructor.getSchema());
}
/**
@@ -90,7 +98,7 @@
MockControl ehControl = newControl(ErrorHandler.class);
ErrorHandler errorHandler = (ErrorHandler) ehControl.getMock();
- Log log = LogFactory.getLog(XmlModuleDescriptorProcessor.class);
+ Log log = LogFactory.getLog(XmlExtensionResolver.class);
SchemaImpl schema = new SchemaImpl("foo.bar");
schema.setId("Baz");
@@ -127,7 +135,9 @@
errorHandler);
processor.processModuleDescriptor(fooBar);
processor.processModuleDescriptor(zipZoop);
- processor.resolveSchemas();
+
+ XmlExtensionResolver extensionResolver = new XmlExtensionResolver(definition, errorHandler);
+ extensionResolver.resolveSchemas();
verifyControls();
}
@@ -159,7 +169,9 @@
XmlModuleDescriptorProcessor processor = new XmlModuleDescriptorProcessor(definition,
errorHandler);
processor.processModuleDescriptor(zipZoop);
- processor.resolveSchemas();
+
+ XmlExtensionResolver extensionResolver = new XmlExtensionResolver(definition, errorHandler);
+ extensionResolver.resolveSchemas();
verifyControls();
}
@@ -202,7 +214,7 @@
errorHandler);
processor.processModuleDescriptor(md);
- ExtensionResolver extensionResolver = new ExtensionResolver(new StrictErrorHandler(), definition);
+ ExtensionResolver extensionResolver = new ExtensionResolver(definition, new StrictErrorHandler());
extensionResolver.resolveExtensions();
ConfigurationPointDefinition configurationPoint = definition
@@ -242,7 +254,7 @@
errorHandler);
processor.processModuleDescriptor(md);
- ExtensionResolver extensionResolver = new ExtensionResolver(new StrictErrorHandler(), definition);
+ ExtensionResolver extensionResolver = new ExtensionResolver(definition, new StrictErrorHandler());
extensionResolver.resolveExtensions();
ConfigurationPointDefinition configurationPoint = definition
@@ -295,7 +307,7 @@
XmlModuleDescriptorProcessor processor = new XmlModuleDescriptorProcessor(definition, eh);
processor.processModuleDescriptor(md);
- ExtensionResolver extensionResolver = new ExtensionResolver(new StrictErrorHandler(), definition);
+ ExtensionResolver extensionResolver = new ExtensionResolver(definition, new StrictErrorHandler());
extensionResolver.resolveExtensions();
ConfigurationPointDefinition configurationPoint = definition