/*
* WithOperation.java
* @Author Oleg Gorobets
* Created: 14.08.2007
* CVS-ID: $Id:
*************************************************************************/
package org.swfparser.operation;
import java.util.List;
import java.util.Stack;
import org.swfparser.CodeUtil;
import org.swfparser.ExecutionContext;
import org.swfparser.Operation;
import org.swfparser.SkipOperation;
import org.swfparser.annotations.NewAnalyzer;
import org.swfparser.exception.StatementBlockException;
import com.jswiff.swfrecords.actions.With;
@NewAnalyzer
public class WithOperation extends AbstractCompoundOperation implements SkipOperation {
// private With action;
private Operation object;
private List<Operation> operations;
private boolean skipEmptyWithBlock = false;
public WithOperation(Stack<Operation> stack, ExecutionContext context, With with) throws StatementBlockException {
super(context);
object = stack.pop();
this.operations = executeWithSameStack(context, with.getWithBlock().getActions(), this);
// skip empty with block
if (this.operations.isEmpty()) {
skipEmptyWithBlock = true;
}
}
public String getStringValue(int level) {
StringBuffer buf = new StringBuffer()
.append(CodeUtil.getIndent(level))
.append("with (")
.append(object.getStringValue(level))
.append(") {\n");
for (Operation operation : operations) {
buf
.append(operation.getStringValue(level+1))
.append(";\n");
}
buf
.append(CodeUtil.getIndent(level))
.append("}");
return buf.toString();
}
public boolean skip() {
return skipEmptyWithBlock;
}
}