001 // Copyright 2004, 2005 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry.script; 016 017 import java.util.Map; 018 019 import org.apache.hivemind.Resource; 020 import org.apache.tapestry.IRequestCycle; 021 import org.apache.tapestry.IScriptProcessor; 022 import org.apache.tapestry.coerce.ValueConverter; 023 import org.apache.tapestry.services.ExpressionEvaluator; 024 025 /** 026 * The result of executing a script, the session is used during the parsing process as well. 027 * Following 028 * {@link org.apache.tapestry.IScript#execute(org.apache.tapestry.IRequestCycle, org.apache.tapestry.IScriptProcessor, java.util.Map)}, 029 * the session provides access to output symbols as well as the body and initialization blocks 030 * created by the script tokens. 031 * 032 * @author Howard Lewis Ship 033 * @since 0.2.9 034 */ 035 036 public class ScriptSessionImpl implements ScriptSession 037 { 038 private IRequestCycle _cycle; 039 040 private IScriptProcessor _processor; 041 042 private Resource _scriptTemplateResource; 043 044 private Map _symbols; 045 046 /** @since 4.0 */ 047 private ExpressionEvaluator _evaluator; 048 049 /** @since 4.0 */ 050 private ValueConverter _valueConverter; 051 052 public ScriptSessionImpl(Resource scriptTemplateResource, IRequestCycle cycle, 053 IScriptProcessor processor, ExpressionEvaluator evaluator, 054 ValueConverter valueConverter, Map symbols) 055 { 056 _scriptTemplateResource = scriptTemplateResource; 057 _cycle = cycle; 058 _processor = processor; 059 _symbols = symbols; 060 _evaluator = evaluator; 061 _valueConverter = valueConverter; 062 } 063 064 public Object evaluate(String expression) 065 { 066 return _evaluator.read(_symbols, expression); 067 } 068 069 public Object evaluate(String expression, Class desiredType) 070 { 071 Object raw = evaluate(expression); 072 073 return _valueConverter.coerceValue(raw, desiredType); 074 } 075 076 public Resource getScriptTemplateResource() 077 { 078 return _scriptTemplateResource; 079 } 080 081 public Map getSymbols() 082 { 083 return _symbols; 084 } 085 086 public IRequestCycle getRequestCycle() 087 { 088 return _cycle; 089 } 090 091 public void addBodyScript(String script) 092 { 093 _processor.addBodyScript(script); 094 } 095 096 public void addExternalScript(Resource resource) 097 { 098 _processor.addExternalScript(resource); 099 } 100 101 public void addInitializationScript(String script) 102 { 103 _processor.addInitializationScript(script); 104 } 105 106 public String getUniqueString(String baseValue) 107 { 108 return _processor.getUniqueString(baseValue); 109 } 110 111 public String toString() 112 { 113 StringBuffer buffer = new StringBuffer(); 114 115 buffer.append("ScriptSession["); 116 buffer.append(_scriptTemplateResource); 117 buffer.append(']'); 118 119 return buffer.toString(); 120 } 121 }