You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2011/02/11 11:21:48 UTC

svn commit: r1069734 [2/2] - in /commons/sandbox/digester3/trunk: ./ src/main/java/org/apache/commons/digester3/ src/main/java/org/apache/commons/digester3/internal/ src/main/java/org/apache/commons/digester3/internal/rulesbinder/ src/main/java/org/apa...

Added: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java?rev=1069734&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java (added)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java Fri Feb 11 10:21:47 2011
@@ -0,0 +1,174 @@
+/* $Id$
+ *
+ * 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 org.apache.commons.digester3.internal.rulesbinder;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Formatter;
+import java.util.List;
+
+import org.apache.commons.digester3.DigesterLoadingException;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.RulesBinder;
+import org.apache.commons.digester3.RulesModule;
+import org.apache.commons.digester3.rulesbinder.ConverterBuilder;
+import org.apache.commons.digester3.rulesbinder.LinkedRuleBuilder;
+import org.apache.commons.digester3.spi.Rules;
+import org.apache.commons.digester3.spi.TypeConverter;
+
+/**
+ * The Digester EDSL implementation.
+ */
+public final class RulesBinderImpl implements RulesBinder {
+
+    /**
+     * The default head when reporting an errors list.
+     */
+    private static final String HEADING = "Digester creation errors:%n%n";
+
+    /**
+     * Errors that can occur during binding time or rules creation.
+     */
+    private final List<ErrorMessage> errors = new ArrayList<ErrorMessage>();
+
+    /**
+     * The data structure where storing the providers binding.
+     */
+    private final Collection<RegisteredProvider> providers = new ArrayList<RegisteredProvider>();
+
+    private final ClassLoader classLoader;
+
+    public RulesBinderImpl(final ClassLoader classLoader) {
+        this.classLoader = classLoader;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addError(String messagePattern, Object... arguments) {
+        this.addError(new ErrorMessage(messagePattern, arguments));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addError(Throwable t) {
+        String message = "An exception was caught and reported. Message: " + t.getMessage();
+        this.addError(new ErrorMessage(message, t));
+    }
+
+    /**
+     * 
+     *
+     * @param errorMessage
+     */
+    private void addError(ErrorMessage errorMessage) {
+        this.errors.add(errorMessage);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void install(RulesModule rulesModule) {
+        rulesModule.configure(this);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public LinkedRuleBuilder forPattern(String pattern) {
+        final String keyPattern;
+
+        if (pattern == null || pattern.length() == 0) {
+            this.addError(new IllegalArgumentException("Null or empty pattern is not valid"));
+            keyPattern = null;
+        } else {
+            if (pattern.endsWith("/")) {
+                // to help users who accidently add '/' to the end of their patterns
+                keyPattern = pattern.substring(0, pattern.length() - 1);
+            } else {
+                keyPattern = pattern;
+            }
+        }
+
+        return new LinkedRuleBuilderImpl(this, this.providers, this.classLoader, keyPattern);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public <T> ConverterBuilder<T> convert(final Class<T> type) {
+        if (type == null) {
+            this.addError(new IllegalArgumentException("NULL type is not allowed to be converted"));
+        }
+        return new ConverterBuilder<T>() {
+
+            public void withConverter(TypeConverter<T> typeConverter) {
+                if (typeConverter == null) {
+                    addError(new IllegalArgumentException(
+                            String.format("NULL TypeConverter is not allowed for converting '%s' type",
+                                    type.getName())));
+                }
+
+                // TODO register the type converter!!!
+            }
+
+        };
+    }
+
+    /**
+     * Invokes the bound providers, then create the rule and associate it to the related pattern,
+     * storing them in the proper {@link Rules} implementation data structure.
+     *
+     * @param rules The {@link Rules} implementation to store the produced {@link Rule}s
+     */
+    public void populateRules(Rules rules) {
+        if (!this.errors.isEmpty()) {
+            Formatter fmt = new Formatter().format(HEADING);
+            int index = 1;
+
+            for (ErrorMessage errorMessage : this.errors) {
+                fmt.format("%s) %s%n", index++, errorMessage.getMessage());
+
+                Throwable cause = errorMessage.getCause();
+                if (cause != null) {
+                    StringWriter writer = new StringWriter();
+                    cause.printStackTrace(new PrintWriter(writer));
+                    fmt.format("Caused by: %s", writer.getBuffer());
+                }
+
+                fmt.format("%n");
+            }
+
+            if (this.errors.size() == 1) {
+                fmt.format("1 error");
+            } else {
+                fmt.format("%s errors", this.errors.size());
+            }
+
+            throw new DigesterLoadingException(fmt.toString());
+        }
+
+        for (RegisteredProvider registeredProvider : this.providers) {
+            rules.add(registeredProvider.getPattern(), registeredProvider.getProvider().get());
+        }
+    }
+
+}

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java?rev=1069734&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java (added)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java Fri Feb 11 10:21:47 2011
@@ -0,0 +1,42 @@
+/* $Id$
+ *
+ * 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 org.apache.commons.digester3.internal.rulesbinder;
+
+import org.apache.commons.digester3.RulesBinder;
+import org.apache.commons.digester3.SetNextRule;
+import org.apache.commons.digester3.rulesbinder.SetNextBuilder;
+
+final class SetNextBuilderImpl extends AbstractParamTypeBuilder<SetNextRule> implements SetNextBuilder {
+
+    public SetNextBuilderImpl(String keyPattern,
+            String namespaceURI,
+            RulesBinder mainBinder,
+            LinkedRuleBuilderImpl mainBuilder,
+            String methodName) {
+        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected SetNextRule createRule() {
+        return new SetNextRule(this.getMethodName(), this.getParamType(), this.isUseExactMatch());
+    }
+
+}

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertiesBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertiesBuilderImpl.java?rev=1069734&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertiesBuilderImpl.java (added)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertiesBuilderImpl.java Fri Feb 11 10:21:47 2011
@@ -0,0 +1,103 @@
+/* $Id$
+ *
+ * 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 org.apache.commons.digester3.internal.rulesbinder;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.digester3.RulesBinder;
+import org.apache.commons.digester3.SetPropertiesRule;
+import org.apache.commons.digester3.rulesbinder.SetPropertiesBuilder;
+
+/**
+ * Builder chained when invoking {@link LinkedRuleBuilderImpl#setNestedProperties()}.
+ */
+final class SetPropertiesBuilderImpl
+        extends AbstractBackToLinkedRuleBuilder<SetPropertiesRule>
+        implements SetPropertiesBuilder {
+
+    private final Map<String, String> aliases = new HashMap<String, String>();
+
+    private boolean ignoreMissingProperty = true;
+
+    public SetPropertiesBuilderImpl(String keyPattern,
+            String namespaceURI,
+            RulesBinder mainBinder,
+            LinkedRuleBuilderImpl mainBuilder) {
+        super(keyPattern, namespaceURI, mainBinder, mainBuilder);
+    }
+
+    /**
+     * Add an attribute name to the ignore list.
+     *
+     * @param attributeName The attribute to match has to be ignored
+     * @return this builder instance
+     */
+    public SetPropertiesBuilderImpl ignoreAttribute(String attributeName) {
+        if (attributeName == null) {
+            this.reportError("setProperties().ignoreAttribute(String)}", "empty 'attributeName' not allowed");
+        } else {
+            this.aliases.put(attributeName, null);
+        }
+        return this;
+    }
+
+    /**
+     * Add an additional attribute name to property name mapping.
+     *
+     * @param attributeName The attribute to match
+     * @param propertyName The java bean property to be assigned the value
+     * @return this builder instance
+     */
+    public SetPropertiesBuilderImpl addAlias(String attributeName, String propertyName) {
+        if (attributeName == null) {
+            this.reportError("setProperties().addAlias(String,String)}", "empty 'attributeName' not allowed");
+        } else {
+            if (propertyName == null) {
+                this.reportError("setProperties().addAlias(String,String)}", "empty 'propertyName' not allowed");
+            } else {
+                this.aliases.put(attributeName, propertyName);
+            }
+        }
+        return this;
+    }
+
+    /**
+     * Sets whether attributes found in the XML without matching properties should be ignored.
+     * 
+     * If set to false, the parsing will throw an {@code NoSuchMethodException}
+     * if an unmatched attribute is found.
+     * This allows to trap misspellings in the XML file.
+     *
+     * @param ignoreMissingProperty false to stop the parsing on unmatched attributes
+     * @return this builder instance
+     */
+    public SetPropertiesBuilderImpl ignoreMissingProperty(boolean ignoreMissingProperty) {
+        this.ignoreMissingProperty = ignoreMissingProperty;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected SetPropertiesRule createRule() {
+        return new SetPropertiesRule(this.aliases, this.ignoreMissingProperty);
+    }
+
+}

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertiesBuilderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertiesBuilderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertiesBuilderImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertyBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertyBuilderImpl.java?rev=1069734&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertyBuilderImpl.java (added)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertyBuilderImpl.java Fri Feb 11 10:21:47 2011
@@ -0,0 +1,64 @@
+/* $Id$
+ *
+ * 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 org.apache.commons.digester3.internal.rulesbinder;
+
+import org.apache.commons.digester3.RulesBinder;
+import org.apache.commons.digester3.SetPropertyRule;
+import org.apache.commons.digester3.rulesbinder.SetPropertyBuilder;
+
+/**
+ * Builder chained when invoking {@link LinkedRuleBuilderImpl#setProperty(String)}.
+ */
+final class SetPropertyBuilderImpl extends AbstractBackToLinkedRuleBuilder<SetPropertyRule> implements SetPropertyBuilder {
+
+    private final String attributePropertyName;
+
+    private String valueAttributeName;
+
+    public SetPropertyBuilderImpl(String keyPattern,
+            String namespaceURI,
+            RulesBinder mainBinder,
+            LinkedRuleBuilderImpl mainBuilder,
+            String attributePropertyName) {
+        super(keyPattern, namespaceURI, mainBinder, mainBuilder);
+        this.attributePropertyName = attributePropertyName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public SetPropertyBuilder extractingValueFromAttribute(String valueAttributeName) {
+        if (attributePropertyName == null || attributePropertyName.length() == 0) {
+            this.reportError(
+                    String.format("setProperty(\"%s\").extractingValueFromAttribute(String)}", this.attributePropertyName),
+                    "empty 'valueAttributeName' not allowed");
+        }
+
+        this.valueAttributeName = valueAttributeName;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected SetPropertyRule createRule() {
+        return new SetPropertyRule(this.attributePropertyName, this.valueAttributeName);
+    }
+
+}

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertyBuilderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertyBuilderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetPropertyBuilderImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java?rev=1069734&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java (added)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java Fri Feb 11 10:21:47 2011
@@ -0,0 +1,42 @@
+/* $Id$
+ *
+ * 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 org.apache.commons.digester3.internal.rulesbinder;
+
+import org.apache.commons.digester3.RulesBinder;
+import org.apache.commons.digester3.SetRootRule;
+import org.apache.commons.digester3.rulesbinder.SetRootBuilder;
+
+final class SetRootBuilderImpl extends AbstractParamTypeBuilder<SetRootRule> implements SetRootBuilder {
+
+    public SetRootBuilderImpl(String keyPattern,
+            String namespaceURI,
+            RulesBinder mainBinder,
+            LinkedRuleBuilderImpl mainBuilder,
+            String methodName) {
+        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected SetRootRule createRule() {
+        return new SetRootRule(this.getMethodName(), this.getParamType(), this.isUseExactMatch());
+    }
+
+}

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java?rev=1069734&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java (added)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java Fri Feb 11 10:21:47 2011
@@ -0,0 +1,42 @@
+/* $Id$
+ *
+ * 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 org.apache.commons.digester3.internal.rulesbinder;
+
+import org.apache.commons.digester3.RulesBinder;
+import org.apache.commons.digester3.SetTopRule;
+import org.apache.commons.digester3.rulesbinder.SetTopBuilder;
+
+final class SetTopBuilderImpl extends AbstractParamTypeBuilder<SetTopRule> implements SetTopBuilder {
+
+    public SetTopBuilderImpl(String keyPattern,
+            String namespaceURI,
+            RulesBinder mainBinder,
+            LinkedRuleBuilderImpl mainBuilder,
+            String methodName) {
+        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected SetTopRule createRule() {
+        return new SetTopRule(this.getMethodName(), this.getParamType(), this.isUseExactMatch());
+    }
+
+}

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/package-info.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/package-info.java?rev=1069734&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/package-info.java (added)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/package-info.java Fri Feb 11 10:21:47 2011
@@ -0,0 +1,22 @@
+/* $Id$
+ *
+ * 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.
+ */
+
+/**
+ * The Digester EDSL.
+ */
+package org.apache.commons.digester3.internal.rulesbinder;

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/package-info.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/package-info.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/ObjectParamBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/ObjectParamBuilder.java?rev=1069734&r1=1069733&r2=1069734&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/ObjectParamBuilder.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/ObjectParamBuilder.java Fri Feb 11 10:21:47 2011
@@ -22,7 +22,7 @@ import org.apache.commons.digester3.Obje
 /**
  * Builder chained when invoking {@link LinkedRuleBuilder#objectCreate(String)}.
  */
-public interface ObjectParamBuilder extends BackToLinkedRuleBuilder<ObjectParamRule> {
+public interface ObjectParamBuilder<T> extends BackToLinkedRuleBuilder<ObjectParamRule> {
 
     /**
      * The zero-relative index of the parameter we are saving.
@@ -30,7 +30,7 @@ public interface ObjectParamBuilder exte
      * @param paramIndex The zero-relative index of the parameter we are saving
      * @return this builder instance
      */
-    ObjectParamBuilder ofIndex(int paramIndex);
+    ObjectParamBuilder<T> ofIndex(int paramIndex);
 
     /**
      * The attribute which we are attempting to match.
@@ -38,6 +38,6 @@ public interface ObjectParamBuilder exte
      * @param attributeName The attribute which we are attempting to match
      * @return this builder instance
      */
-    ObjectParamBuilder matchingAttribute(String attributeName);
+    ObjectParamBuilder<T> matchingAttribute(String attributeName);
 
 }