/* * SetTargetOperation.java * @Author Oleg Gorobets * Created: 15.08.2007 * CVS-ID: $Id: *************************************************************************/ package org.swfparser.operation; import java.util.List; import java.util.Stack; import org.apache.log4j.Logger; import org.swfparser.CodeUtil; import org.swfparser.ExecutionContext; import org.swfparser.Operation; import org.swfparser.exception.StatementBlockException; import com.jswiff.swfrecords.actions.Action; import com.jswiff.swfrecords.actions.SetTarget; import com.jswiff.swfrecords.actions.StackValue; public class SetTargetOperation extends AbstractCompoundOperation { private static Logger logger = Logger.getLogger(SetTargetOperation.class); private SetTarget target; private Operation targetName; protected List<Operation> operations; public SetTargetOperation(Stack<Operation> stack, ExecutionContext context, List<Action> actions, SetTarget target) throws StatementBlockException { super(context); this.target = target; this.targetName = getTarget(); logger.debug("Setting target to "+targetName); operations = executeWithSameStack(context, actions, this); } protected Operation getTarget() { return new StackValue(target.getName()); } public String getStringValue(int level) { StringBuffer buf = new StringBuffer() .append(CodeUtil.getIndent(level)) .append("if (tellTarget(") .append(targetName.getStringValue(level)) .append(")) {\n") ; for (Operation op : operations) { buf .append(op.getStringValue(level+1)) .append(CodeUtil.endOfStatement(op)) .append("\n"); } buf .append(CodeUtil.getIndent(level)) .append("}"); return buf.toString(); } }