You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ap...@apache.org on 2006/07/31 13:28:53 UTC
svn commit: r427075 -
/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java
Author: apetrelli
Date: Mon Jul 31 04:28:53 2006
New Revision: 427075
URL: http://svn.apache.org/viewvc?rev=427075&view=rev
Log:
[SB-26]
Applied a modified version of the patch: when base definitions are already resolved a re-resolution would throw an exception.
Modified:
struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java
Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java?rev=427075&r1=427074&r2=427075&view=diff
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java (original)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java Mon Jul 31 04:28:53 2006
@@ -79,7 +79,7 @@
*/
public void addDefinitions(Map defsMap, Locale locale) throws NoSuchDefinitionException {
localeSpecificDefinitions.put(locale, defsMap);
- resolveAttributeDependencies();
+ resolveAttributeDependencies(locale);
resolveInheritances(locale);
}
@@ -157,13 +157,98 @@
Iterator j = attributes.values().iterator();
while (j.hasNext()) {
ComponentAttribute attr = (ComponentAttribute) j.next();
- if (attr.getType() != null &&
- (attr.getType().equalsIgnoreCase("definition") ||
- attr.getType().equalsIgnoreCase("instance")) ) {
- ComponentDefinition subDef = this.getDefinition((String) attr.getValue());
+ if (attr.getType() != null) {
+ if (attr.getType().equalsIgnoreCase("definition") ||
+ attr.getType().equalsIgnoreCase("instance")) {
+ ComponentDefinition subDef =
+ getDefinitionByAttribute(attr);
attr.setValue(subDef);
+ }
+ } else {
+ ComponentDefinition subDef = getDefinitionByAttribute(attr);
+ if (subDef != null) {
+ attr.setValue(subDef);
+ }
}
}
}
+ }
+
+ public void resolveAttributeDependencies(Locale locale) {
+ resolveAttributeDependencies(); // FIXME Is it necessary?
+ Map defsMap = (Map) localeSpecificDefinitions.get(locale);
+ if (defsMap == null) {
+ return;
+ }
+
+ Iterator i = defsMap.values().iterator();
+
+ while (i.hasNext()) {
+ ComponentDefinition def = (ComponentDefinition) i.next();
+ Map attributes = def.getAttributes();
+ Iterator j = attributes.values().iterator();
+ while (j.hasNext()) {
+ ComponentAttribute attr = (ComponentAttribute) j.next();
+ if (attr.getType() != null) {
+ if (attr.getType().equalsIgnoreCase("definition") ||
+ attr.getType().equalsIgnoreCase("instance")) {
+ ComponentDefinition subDef = getDefinitionByAttribute(
+ attr, locale);
+ attr.setValue(subDef);
+ }
+ } else {
+ ComponentDefinition subDef = getDefinitionByAttribute(attr,
+ locale);
+ if (subDef != null) {
+ attr.setValue(subDef);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Searches for a definition specified as an attribute.
+ *
+ * @param attr The attribute to use.
+ * @return The required definition if found, otherwise it returns
+ * <code>null</code>.
+ */
+ private ComponentDefinition getDefinitionByAttribute(
+ ComponentAttribute attr) {
+ ComponentDefinition retValue;
+
+ Object attrValue = attr.getValue();
+ if (attrValue instanceof ComponentDefinition) {
+ retValue = (ComponentDefinition) attrValue;
+ } else { // It must be a string
+ retValue = this.getDefinition((String) attr
+ .getValue());
+ }
+
+ return retValue;
+ }
+
+ /**
+ * Searches for a definition specified as an attribute.
+ *
+ * @param attr The attribute to use.
+ * @param locale The locale to search into.
+ * @return The required definition if found, otherwise it returns
+ * <code>null</code>.
+ */
+ private ComponentDefinition getDefinitionByAttribute(
+ ComponentAttribute attr, Locale locale) {
+ ComponentDefinition retValue;
+
+ Object attrValue = attr.getValue();
+ if (attrValue instanceof ComponentDefinition) {
+ retValue = (ComponentDefinition) attrValue;
+ } else { // It must be a string
+ retValue = this.getDefinition((String) attr
+ .getValue(), locale);
+ }
+
+ return retValue;
}
}