/* * Created on 23.11.2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package net.sourceforge.phpeclipse.xdebug.php.model; import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IValue; import org.eclipse.debug.core.model.IVariable; import org.w3c.dom.Node; /** * @author Axel * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class XDebugVariable extends XDebugElement implements IVariable { public static final int VARTYPE_UNKNOWN = -1; public static final int VARTYPE_UNINITIALIZED = 0; public static final int VARTYPE_STRING = 1; public static final int VARTYPE_INT = 2; public static final int VARTYPE_FLOAT = 3; public static final int VARTYPE_ARRAY = 8; public static final int VARTYPE_HASH = 9; public static final int VARTYPE_OBJECT = 10; // name & stack frmae private String fName; private XDebugStackFrame fFrame; private String fFullName; // private String fTypeName; // private int fType; private XDebugAbstractValue fValue; private String fEncoding; private int fNumChildren; // private Node fVariableNode; /** * Constructs a variable contained in the given stack frame with the given * name. * * @param frame * owning stack frame * @param name * variable name */ public XDebugVariable(XDebugStackFrame frame, Node property) { super((XDebugTarget) frame.getDebugTarget()); fFrame = frame; init(property); } private void init(Node property) { fFullName = PHPDebugUtils.getAttributeValue(property, "fullname"); fName = PHPDebugUtils.getAttributeValue(property, "name"); fEncoding = PHPDebugUtils.getAttributeValue(property, "encoding"); if (PHPDebugUtils.getAttributeValue(property, "numchildren").equals("")) fNumChildren = 0; else fNumChildren = Integer.parseInt(PHPDebugUtils.getAttributeValue( property, "numchildren")); String typeName = PHPDebugUtils.getAttributeValue(property, "type"); // if (typeName.equals("uninitialized") ) // fValue= new XDebugValue(this,property,typeName); if (typeName.equals("int")) fValue = new XDebugIntValue(this, property, typeName); else if (typeName.equals("float")) fValue = new XDebugFloatValue(this, property, typeName); else if (typeName.equals("bool")) fValue = new XDebugBooleanValue(this, property, typeName); else if (typeName.equals("string")) fValue = new XDebugStringValue(this, property, typeName); else if (typeName.equals("array")) fValue = new XDebugArrayValue(this, property, typeName); else if (typeName.equals("hash")) fValue = new XDebugArrayValue(this, property, typeName); else if (typeName.equals("object")) fValue = new XDebugArrayValue(this, property, typeName); else fValue = new XDebugValue(this, property, typeName); // else if (typeName.equals("float") ) // fTypeName= VARTYPE_FLOAT; // else if (typeName.equals("string") ) // fTypeName= VARTYPE_STRING; // else if (typeName.equals("hash") ) // fTypeName= VARTYPE_HASH; // else if (typeName.equals("array") ) // fTypeName= VARTYPE_ARRAY; // else if (typeName.equals("object") ) // fTypeName= VARTYPE_OBJECT; // fTypeName=type; // // fValue= new XDebugValue(this,property); } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IVariable#getValue() */ public IValue getValue() throws DebugException { return fValue; // return ((XDebugTarget)getDebugTarget()).getVariableValue(this); } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IVariable#getName() */ public String getName() throws DebugException { if (fFullName.endsWith("]")) return fFullName.substring(fFullName.lastIndexOf('[')); else return fName; } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName() */ public String getReferenceTypeName() throws DebugException { return fValue.getReferenceTypeName(); } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IVariable#hasValueChanged() */ public boolean hasValueChanged() throws DebugException { // TODO Auto-generated method stub return false; } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IValueModification#setValue(java.lang.String) */ public void setValue(String expression) throws DebugException { if (fValue.setValue(expression)) fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CONTENT)); } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IValueModification#setValue(org.eclipse.debug.core.model.IValue) */ public void setValue(IValue value) throws DebugException { } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IValueModification#supportsValueModification() */ public boolean supportsValueModification() { return fValue.supportsValueModification(); } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IValueModification#verifyValue(java.lang.String) */ public boolean verifyValue(String expression) throws DebugException { return fValue.verifyValue(expression); } /* * (non-Javadoc) * * @see org.eclipse.debug.core.model.IValueModification#verifyValue(org.eclipse.debug.core.model.IValue) */ public boolean verifyValue(IValue value) throws DebugException { return false; } /** * Returns the stack frame owning this variable. * * @return the stack frame owning this variable */ protected XDebugStackFrame getStackFrame() { return fFrame; } // public int getType() { // return fType; // } public String getValueString() throws DebugException { return fValue.getValueString(); } public boolean hasChildren() { return (fNumChildren > 0); } public boolean isArray() { return (fValue.isArray()); } public String getEncoding() { return fEncoding; } public void setEncoding(String encoding) { fEncoding = encoding; } public String toString() { return fValue.toString(); } public String getFullName() { return fFullName; } }