/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/portal/trunk/portal-render-engine-impl/impl/src/java/org/sakaiproject/portal/charon/velocity/VelocityPortalRenderContext.java $ * $Id: VelocityPortalRenderContext.java 111844 2012-08-24 20:31:42Z earle.nietzel@gmail.com $ *********************************************************************************** * * Copyright (c) 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.portal.charon.velocity; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.velocity.VelocityContext; import org.apache.velocity.context.Context; import org.sakaiproject.portal.api.PortalRenderContext; import org.sakaiproject.portal.api.PortalRenderEngine; /** * A render context based on the velocity context * * @author ieb * @since Sakai 2.4 * @version $Rev: 111844 $ */ public class VelocityPortalRenderContext implements PortalRenderContext { private static final Log log = LogFactory.getLog(VelocityPortalRenderContext.class); private Context vcontext = new VelocityContext(); private boolean debug = false; private Map options = null; private PortalRenderEngine renderEngine = null; public boolean isDebug() { return debug; } public void setDebug(boolean debug) { this.debug = debug; } public void put(String key, Object value) { vcontext.put(key, value); } public Context getVelocityContext() { return vcontext; } public String dump() { if (debug) { Object[] keys = vcontext.getKeys(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < keys.length; i++) { Object o = vcontext.get((String) keys[i]); dumpObject(sb, keys[i], o); } return sb.toString(); } else { return ""; } } private void dumpObject(StringBuilder sb, Object key, Object o) { if (o instanceof Map) { sb.append("Property ").append(key).append(".v (Map)").append("\n"); dumpMap(sb, key, (Map) o); } else if (o instanceof Collection) { sb.append("Property ").append(key).append(".v (Collection)").append("\n"); dumpCollection(sb, key, (Collection) o); } else { sb.append("Property ").append(key).append(":").append(o).append("\n"); } } private void dumpCollection(StringBuilder sb, Object key, Collection collection) { int n = 0; for (Iterator i = collection.iterator(); i.hasNext();) { String keyn = key.toString() + "." + String.valueOf(n); dumpObject(sb, keyn, i.next()); n++; } } private void dumpMap(StringBuilder sb, Object key, Map map) { for (Iterator<Entry<Object, Object>> mapIter = map.entrySet().iterator(); mapIter.hasNext();) { Entry<Object, Object> entry = mapIter.next(); Object keyn = entry.getKey(); dumpObject(sb, key + "." + keyn, entry.getValue()); } } public boolean uses(String includeOption) { if (options == null || includeOption == null) { return true; } return "true".equals(options.get(includeOption)); } public Map getOptions() { return options; } public void setOptions(Map options) { this.options = options; } /* * (non-Javadoc) * * @see org.sakaiproject.portal.api.PortalRenderContext#getRenderEngine() */ public PortalRenderEngine getRenderEngine() { return renderEngine; } public void setRenderEngine(PortalRenderEngine renderEngine) { this.renderEngine = renderEngine; } }