You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2008/06/29 18:24:19 UTC
svn commit: r672635 - in /tiles/framework/trunk:
tiles-api/src/main/java/org/apache/tiles/
tiles-api/src/test/java/org/apache/tiles/
tiles-core/src/main/java/org/apache/tiles/context/
tiles-core/src/main/java/org/apache/tiles/definition/digester/ tiles...
Author: apetrelli
Date: Sun Jun 29 09:24:19 2008
New Revision: 672635
URL: http://svn.apache.org/viewvc?rev=672635&view=rev
Log:
TILES-83
Moved ListAttribute to tiles-api.
Now ListAttribute has a new "inherit" property and a "inherit" method to inherit from a parent list attribute.
Added:
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/ListAttribute.java (contents, props changed)
- copied, changed from r671310, tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ListAttribute.java
Removed:
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ListAttribute.java
Modified:
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java
tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/BasicAttributeContextTest.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java
tiles/framework/trunk/tiles-core/src/main/resources/org/apache/tiles/resources/tiles-config_2_1.dtd
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java
Modified: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java?rev=672635&r1=672634&r2=672635&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java (original)
+++ tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/BasicAttributeContext.java Sun Jun 29 09:24:19 2008
@@ -29,6 +29,7 @@
import java.util.Map;
import java.util.Set;
+
/**
* Basic implementation for <code>AttributeContext</code>.
*
@@ -225,14 +226,28 @@
if (names != null && !names.isEmpty()) {
for (String name : names) {
Attribute attribute = parent.getCascadedAttribute(name);
- putAttribute(name, attribute, true);
+ Attribute destAttribute = getCascadedAttribute(name);
+ if (destAttribute == null) {
+ putAttribute(name, attribute, true);
+ } else if (attribute instanceof ListAttribute
+ && destAttribute instanceof ListAttribute
+ && ((ListAttribute) destAttribute).isInherit()) {
+ ((ListAttribute) destAttribute).inherit((ListAttribute) attribute);
+ }
}
}
names = parent.getLocalAttributeNames();
if (names != null && !names.isEmpty()) {
for (String name : names) {
Attribute attribute = parent.getLocalAttribute(name);
- putAttribute(name, attribute, false);
+ Attribute destAttribute = getLocalAttribute(name);
+ if (destAttribute == null) {
+ putAttribute(name, attribute, false);
+ } else if (attribute instanceof ListAttribute
+ && destAttribute instanceof ListAttribute
+ && ((ListAttribute) destAttribute).isInherit()) {
+ ((ListAttribute) destAttribute).inherit((ListAttribute) attribute);
+ }
}
}
}
@@ -472,8 +487,14 @@
}
for (Map.Entry<String, Attribute> entry : source.entrySet()) {
String key = entry.getKey();
- if (!destination.containsKey(key)) {
+ Attribute destAttribute = destination.get(key);
+ if (destAttribute == null) {
destination.put(key, entry.getValue());
+ } else if (destAttribute instanceof ListAttribute
+ && entry.getValue() instanceof ListAttribute
+ && ((ListAttribute) destAttribute).isInherit()) {
+ ((ListAttribute) destAttribute)
+ .inherit((ListAttribute) entry.getValue());
}
}
}
Copied: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/ListAttribute.java (from r671310, tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ListAttribute.java)
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/ListAttribute.java?p2=tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/ListAttribute.java&p1=tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ListAttribute.java&r1=671310&r2=672635&rev=672635&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/ListAttribute.java (original)
+++ tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/ListAttribute.java Sun Jun 29 09:24:19 2008
@@ -18,9 +18,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tiles.context;
+package org.apache.tiles;
-import org.apache.tiles.Attribute;
import java.util.ArrayList;
import java.util.List;
@@ -35,19 +34,19 @@
* @version $Rev$ $Date$
*/
public class ListAttribute extends Attribute {
+
/**
- * List.
- * We declare a List to avoid cast.
- * Parent "value" property points to the same list.
+ * If true, the attribute will put the elements of the attribute with the
+ * same name of the parent definition before the ones specified here. By
+ * default, it is 'false'.
*/
- private List<Object> list;
+ private boolean inherit = false;
/**
* Constructor.
*/
public ListAttribute() {
- list = new ArrayList<Object>();
- setValue(list);
+ setValue(new ArrayList<Object>());
}
/**
@@ -58,7 +57,6 @@
*/
public ListAttribute(String name, List<Object> value) {
super(name, value);
- list = value;
}
/**
@@ -67,8 +65,9 @@
*
* @param element XmlAttribute to add.
*/
+ @SuppressWarnings("unchecked")
public void add(Attribute element) {
- list.add(element);
+ ((List<Object>) value).add(element);
}
/**
@@ -76,6 +75,7 @@
*
* @param value Object to add.
*/
+ @SuppressWarnings("unchecked")
public void add(Object value) {
//list.add( value );
// To correct a bug in digester, we need to check the object type
@@ -83,7 +83,7 @@
if (value instanceof Attribute) {
add((Attribute) value);
} else {
- list.add(value);
+ ((List<Object>) this.value).add(value);
}
}
@@ -92,8 +92,44 @@
*
* @param value Object to add.
*/
+ @SuppressWarnings("unchecked")
public void addObject(Object value) {
- list.add(value);
- }
+ ((List<Object>) this.value).add(value);
+ }
+
+ /**
+ * If true, the attribute will put the elements of the attribute with the
+ * same name of the parent definition before the ones specified here. By
+ * default, it is 'false'
+ *
+ * @param inherit The "inherit" value.
+ */
+ public void setInherit(boolean inherit) {
+ this.inherit = inherit;
+ }
+
+ /**
+ * If true, the attribute will put the elements of the attribute with the
+ * same name of the parent definition before the ones specified here. By
+ * default, it is 'false'
+ *
+ * @return inherit The "inherit" value.
+ */
+ public boolean isInherit() {
+ return inherit;
+ }
+ /**
+ * Inherits elements present in a "parent" list attribute. The elements will
+ * be put before the ones already present.
+ *
+ * @param parent The parent list attribute.
+ */
+ @SuppressWarnings("unchecked")
+ public void inherit(ListAttribute parent) {
+ List<Object> tempList = new ArrayList<Object>();
+ tempList.addAll((List<Object>) parent.value);
+ tempList.addAll((List<Object>) value);
+ setValue(tempList);
+ }
}
Propchange: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/ListAttribute.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/ListAttribute.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/ListAttribute.java
------------------------------------------------------------------------------
svn:mergeinfo =
Modified: tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/BasicAttributeContextTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/BasicAttributeContextTest.java?rev=672635&r1=672634&r2=672635&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/BasicAttributeContextTest.java (original)
+++ tiles/framework/trunk/tiles-api/src/test/java/org/apache/tiles/BasicAttributeContextTest.java Sun Jun 29 09:24:19 2008
@@ -23,6 +23,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -171,6 +172,43 @@
}
/**
+ * Tests {@link BasicAttributeContext#inherit(BasicAttributeContext)}
+ * testing inheritance between {@link ListAttribute} instances.
+ */
+ @SuppressWarnings("unchecked")
+ public void testInheritListAttribute() {
+ AttributeContext toCopy = new BasicAttributeContext();
+ ListAttribute parentListAttribute = new ListAttribute();
+ parentListAttribute.add("first");
+ toCopy.putAttribute("list", parentListAttribute);
+ AttributeContext context = new BasicAttributeContext();
+ ListAttribute listAttribute = new ListAttribute();
+ listAttribute.setInherit(true);
+ listAttribute.add("second");
+ context.putAttribute("list", listAttribute);
+ context.inherit(toCopy);
+ ListAttribute result = (ListAttribute) context.getAttribute("list");
+ assertNotNull("The attribute must exist", result);
+ List<Object> value = (List<Object>) result.getValue();
+ assertNotNull("The list must exist", value);
+ assertEquals("The size is not correct", 2, value.size());
+ assertEquals("The first element is not correct", "first", value.get(0));
+ assertEquals("The second element is not correct", "second", value.get(1));
+
+ context = new BasicAttributeContext();
+ listAttribute = new ListAttribute();
+ listAttribute.add("second");
+ context.putAttribute("list", listAttribute);
+ context.inherit(toCopy);
+ result = (ListAttribute) context.getAttribute("list");
+ assertNotNull("The attribute must exist", result);
+ value = (List<Object>) result.getValue();
+ assertNotNull("The list must exist", value);
+ assertEquals("The size is not correct", 1, value.size());
+ assertEquals("The second element is not correct", "second", value.get(0));
+ }
+
+ /**
* Tests {@link BasicAttributeContext#inheritCascadedAttributes(AttributeContext)}.
*/
public void testInherit() {
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java?rev=672635&r1=672634&r2=672635&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/digester/DigesterDefinitionsReader.java Sun Jun 29 09:24:19 2008
@@ -31,7 +31,7 @@
import org.apache.commons.digester.Rule;
import org.apache.tiles.Attribute;
import org.apache.tiles.Definition;
-import org.apache.tiles.context.ListAttribute;
+import org.apache.tiles.ListAttribute;
import org.apache.tiles.definition.DefinitionsFactoryException;
import org.apache.tiles.definition.DefinitionsReader;
import org.xml.sax.Attributes;
Modified: tiles/framework/trunk/tiles-core/src/main/resources/org/apache/tiles/resources/tiles-config_2_1.dtd
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/resources/org/apache/tiles/resources/tiles-config_2_1.dtd?rev=672635&r1=672634&r2=672635&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/resources/org/apache/tiles/resources/tiles-config_2_1.dtd (original)
+++ tiles/framework/trunk/tiles-core/src/main/resources/org/apache/tiles/resources/tiles-config_2_1.dtd Sun Jun 29 09:24:19 2008
@@ -183,6 +183,12 @@
@attr cascade If true, the attribute will be cascaded to all inner
definitions. By default, cascade is false.
-->
+<!ATTLIST put-list-attribute inherit %Boolean; #IMPLIED>
+<!--
+@attr inherit If true, the attribute will put the elements of the attribute
+ with the same name of the parent definition before the ones
+ specified here. By default, it is 'false'.
+-->
<!ATTLIST put-list-attribute cascade %Boolean; #IMPLIED>
<!-- ========== Subordinate Elements ====================================== -->
@@ -234,6 +240,12 @@
specified java classtype. This bean is initialized with appropriate nested
<set-property>.
-->
+<!ATTLIST put-list-attribute inherit %Boolean; #IMPLIED>
+<!--
+@attr inherit If true, the attribute will put the elements of the attribute
+ with the same name of the parent definition before the ones
+ specified here. By default, it is 'false'.
+-->
<!ELEMENT bean (set-property*)>
<!ATTLIST bean id ID #IMPLIED>
<!--
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java?rev=672635&r1=672634&r2=672635&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/digester/TestDigesterDefinitionsReader.java Sun Jun 29 09:24:19 2008
@@ -34,7 +34,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.tiles.Attribute;
import org.apache.tiles.Definition;
-import org.apache.tiles.context.ListAttribute;
+import org.apache.tiles.ListAttribute;
import org.apache.tiles.definition.DefinitionsFactoryException;
import org.apache.tiles.definition.DefinitionsReader;