/*
* GetMemberOperation.java
* @Author Oleg Gorobets
* Created: 24.07.2007
* CVS-ID: $Id:
*************************************************************************/
package org.swfparser.operation;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;
import org.apache.log4j.Logger;
import org.swfparser.BooleanOperation;
import org.swfparser.CodeUtil;
import org.swfparser.Operation;
import org.swfparser.Priority;
import com.jswiff.swfrecords.actions.StackValue;
public class GetMemberOperation extends AbstractOperation implements BooleanOperation {
private Operation objectName;
private Operation memberName;
private static Logger logger = Logger.getLogger(SetVariableOperation.class);
public GetMemberOperation(Stack<Operation> stack) {
super(stack);
memberName = stack.pop();
objectName = stack.pop();
logger.debug("#GetMemberOperation() " + memberName + " . " + objectName);
}
public int getArgsNumber() {
return 2;
}
public String getStringValue(int level) {
StringBuilder buf = new StringBuilder();
buf.append(objectName.getStringValue(level));
buf.append(CodeUtil.getMemberGetExpression(memberName, level));
return buf.toString();
}
@Override
public int getPriority() {
return Priority.HIGHEST;
}
public Operation getInvertedOperation() {
return new SimpleInvertedOperation(this);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof NotOperation) {
return obj.equals(this); // invert comparison
} else {
return super.equals(obj);
}
}
public List<Operation> getOperations() {
return Arrays.asList(memberName,objectName);
}
@Override
public String toString() {
return "GetMemberOperation("+objectName+","+memberName+")";
}
}