/* * InitObjectOperation.java * @Author Oleg Gorobets * Created: 26.07.2007 * CVS-ID: $Id: *************************************************************************/ package org.swfparser.operation; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Stack; import org.apache.log4j.Logger; import org.swfparser.Operation; import com.jswiff.swfrecords.actions.StackValue; public class InitObjectOperation extends InitOperation { private static Logger logger = Logger.getLogger(InitObjectOperation.class); protected List<Map.Entry<Operation, Operation>> values; public InitObjectOperation(Stack<Operation> stack) { super(stack); } @Override protected void readArguments() { values = new ArrayList<Map.Entry<Operation, Operation>>(numberOfArgs); for (int j=0;j<numberOfArgs;j++) { Operation value = stack.pop(); Operation key = stack.pop(); Map.Entry<Operation, Operation> entry = new Entry(key,value); values.add(entry); } Collections.reverse(values); } public String getStringValue(int level) { StringBuffer buf = new StringBuffer(); buf.append("{"); int idx=0; for (Map.Entry<Operation, Operation> entry : values) { if (idx++ > 0) { buf.append(","); } String memberName = ( entry.getKey() instanceof StackValue && StackValue.TYPE_STRING == ((StackValue)entry.getKey()).getType()) ? ((StackValue)entry.getKey()).getString() : entry.getKey().getStringValue(level); buf.append(memberName); buf.append(":"); buf.append(entry.getValue().getStringValue(level)); } buf.append("}"); return buf.toString(); } private class Entry implements Map.Entry { private Operation key; private Operation value; public Entry(Operation key, Operation value) { super(); this.key = key; this.value = value; } public Object getKey() { return key; } public Object getValue() { return value; } public Object setValue(Object value) { Object oldValue = this.value; this.value = (Operation) value; return oldValue; } } public List<Operation> getOperations() { for (Map.Entry<Operation, Operation> entry : values) { underOperations.add(entry.getValue()); underOperations.add(entry.getKey()); } return underOperations; } }