001: /******************************************************************************
002: * JBoss, a division of Red Hat *
003: * Copyright 2006, Red Hat Middleware, LLC, and individual *
004: * contributors as indicated by the @authors tag. See the *
005: * copyright.txt in the distribution for a full listing of *
006: * individual contributors. *
007: * *
008: * This is free software; you can redistribute it and/or modify it *
009: * under the terms of the GNU Lesser General Public License as *
010: * published by the Free Software Foundation; either version 2.1 of *
011: * the License, or (at your option) any later version. *
012: * *
013: * This software is distributed in the hope that it will be useful, *
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of *
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
016: * Lesser General Public License for more details. *
017: * *
018: * You should have received a copy of the GNU Lesser General Public *
019: * License along with this software; if not, write to the Free *
020: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
021: * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
022: ******************************************************************************/package org.jboss.portal.format.template;
023:
024: import java.util.HashMap;
025: import java.util.Iterator;
026: import java.util.Map;
027:
028: /**
029: * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
030: * @version $Revision: 8784 $
031: */
032: public class DelegateContext implements Context {
033: /** context's children */
034: private ChildrenStrategy children;
035:
036: /** template name/value pairs for substitution */
037: private Map delegate;
038:
039: /** creates a new DelegateContext object. */
040: public DelegateContext() {
041: this (new HashMap(), new HashMap());
042: }
043:
044: /**
045: * creates a new DelegateContext object.
046: *
047: * @param delegate name/value pairs for "root" data
048: * @param children name/value pairs for nested or loop data
049: */
050: public DelegateContext(Map delegate, Map children) {
051: this .delegate = delegate;
052: this .children = new ChildrenStrategy(children);
053: }
054:
055: /**
056: * create a new "root" data context and name/value pairs to be used as nested or loop data
057: *
058: * @param children name/value pairs for nested or loop data
059: * @return context to continue adding template data too
060: */
061: public static final DelegateContext createWithChildren(Map children) {
062: return new DelegateContext(new HashMap(), children);
063: }
064:
065: /**
066: * create a new data context with already existing name/value pairs
067: *
068: * @param values existing name/value pair map
069: * @return context to continue adding template data too
070: */
071: public static final DelegateContext createWithValues(Map values) {
072: return new DelegateContext(values, new HashMap());
073: }
074:
075: /**
076: * add an existing data context into this context for use in template loops or nested template data.
077: *
078: * @param name variable prefix name
079: * @param ctx context to add
080: */
081: public void append(String name, Context ctx) {
082: children.append(name, ctx);
083: }
084:
085: /** @see org.jboss.portal.format.template.Context#childIterator(java.lang.String) */
086: public Iterator childIterator(String name) {
087: return children.childIterator(name);
088: }
089:
090: /** @see org.jboss.portal.format.template.Context#get(java.lang.String) */
091: public String get(String key) {
092: return (String) delegate.get(key);
093: }
094:
095: /**
096: * create a new object to place data for use in template loops or nested template data. tpl var format: {
097: * prefix.VAR_NAME }
098: *
099: * @param name variable prefix name
100: * @return delegate context that will contain the loop or nested data
101: */
102: public DelegateContext next(String name) {
103: DelegateContext ctx = new DelegateContext();
104: append(name, ctx);
105:
106: return ctx;
107: }
108:
109: /** @see org.jboss.portal.format.template.Context#put(java.lang.String,java.lang.String) */
110: public Context put(String key, String value) {
111: delegate.put(key, value);
112:
113: return this;
114: }
115: }
|