001 package org.apache.turbine.modules.actions; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022 import org.apache.turbine.modules.screens.TemplateScreen; 023 import org.apache.turbine.pipeline.PipelineData; 024 import org.apache.turbine.services.velocity.TurbineVelocity; 025 import org.apache.turbine.util.RunData; 026 import org.apache.turbine.util.velocity.VelocityActionEvent; 027 import org.apache.velocity.context.Context; 028 029 /** 030 * This class provides a convenience methods for Velocity Actions to use. Since 031 * this class is abstract, it should only be extended and not used directly. 032 * 033 * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a> 034 * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a> 035 * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a> 036 * @version $Id: VelocityAction.java 1066529 2011-02-02 17:01:46Z ludwig $ 037 */ 038 public abstract class VelocityAction extends VelocityActionEvent 039 { 040 /** 041 * You SHOULD NOT override this method and implement it in your action. 042 * 043 * @deprecated Use PipelineData version instead. 044 * @param data Turbine information. 045 * @throws Exception a generic exception. 046 */ 047 @Override 048 @Deprecated 049 public void doPerform(RunData data) throws Exception 050 { 051 doPerform(data, getContext(data)); 052 } 053 054 /** 055 * You SHOULD NOT override this method and implement it in your action. 056 * 057 * @param data Turbine information. 058 * @throws Exception a generic exception. 059 */ 060 @Override 061 public void doPerform(PipelineData pipelineData) throws Exception 062 { 063 doPerform(pipelineData, getContext(pipelineData)); 064 } 065 066 /** 067 * Initialize the module. 068 * 069 * @throws Exception a generic exception. 070 */ 071 @Override 072 public void initialize() throws Exception 073 { 074 initialized = true; 075 } 076 077 /** 078 * You SHOULD override this method and implement it in your action. 079 * 080 * @deprecated Use PipelineData version instead. 081 * @param data Turbine information. 082 * @param context Context for web pages. 083 * @throws Exception a generic exception. 084 */ 085 @Deprecated 086 public abstract void doPerform(RunData data, Context context) 087 throws Exception; 088 089 /** 090 * You SHOULD override this method and implement it in your action. 091 * 092 * This should become abstract when the RunData version is removed. For 093 * compatibility reasons this method will default to using the RunData 094 * method unles it is overidden, which it should be. 095 * 096 * @param data Turbine information. 097 * @param context Context for web pages. 098 * @throws Exception a generic exception. 099 */ 100 public void doPerform(PipelineData pipelineData, Context context) 101 throws Exception 102 { 103 RunData data = getRunData(pipelineData); 104 doPerform(data, context); 105 } 106 107 /** 108 * Sets up the context and then calls super.perform(); thus, subclasses 109 * don't have to worry about getting a context themselves! If a subclass 110 * throws an exception then depending on whether 111 * action.event.bubbleexception is true, then it bubbles it farther up, or 112 * traps it there. 113 * 114 * @deprecated Use PipelineData version instead. 115 * @param data Turbine information. 116 * @throws Exception a generic exception. 117 */ 118 @Deprecated 119 @Override 120 protected void perform(RunData data) throws Exception 121 { 122 try 123 { 124 super.perform(data); 125 } catch (Exception e) 126 { 127 if (bubbleUpException) 128 { 129 throw e; 130 } 131 132 } 133 } 134 135 /** 136 * Sets up the context and then calls super.perform(); thus, subclasses 137 * don't have to worry about getting a context themselves! If a subclass 138 * throws an exception then depending on whether 139 * action.event.bubbleexception is true, then it bubbles it farther up, or 140 * traps it there. 141 * 142 * @param data Turbine information. 143 * @throws Exception a generic exception. 144 */ 145 @Override 146 protected void perform(PipelineData pipelineData) throws Exception 147 { 148 try 149 { 150 super.perform(pipelineData); 151 } catch (Exception e) 152 { 153 if (bubbleUpException) 154 { 155 throw e; 156 } 157 158 } 159 } 160 161 /** 162 * This method is used when you want to short circuit an Action and change 163 * the template that will be executed next. 164 * 165 * @deprecated Use PipelineData version instead. 166 * @param data Turbine information. 167 * @param template The template that will be executed next. 168 */ 169 @Deprecated 170 public void setTemplate(RunData data, String template) 171 { 172 TemplateScreen.setTemplate(data, template); 173 } 174 175 /** 176 * This method is used when you want to short circuit an Action and change 177 * the template that will be executed next. 178 * 179 * @param data Turbine information. 180 * @param template The template that will be executed next. 181 */ 182 public void setTemplate(PipelineData pipelineData, String template) 183 { 184 TemplateScreen.setTemplate(pipelineData, template); 185 } 186 187 /** 188 * Return the Context needed by Velocity. 189 * 190 * @deprecated Use PipelineData version instead. 191 * @param data Turbine information. 192 * @return Context, a context for web pages. 193 */ 194 @Deprecated 195 protected Context getContext(RunData data) 196 { 197 return TurbineVelocity.getContext(data); 198 } 199 200 /** 201 * Return the Context needed by Velocity. 202 * 203 * @param data Turbine information. 204 * @return Context, a context for web pages. 205 */ 206 protected Context getContext(PipelineData pipelineData) 207 { 208 return TurbineVelocity.getContext(pipelineData); 209 } 210 211 }