--- /dev/null
+/*
+ * 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;
+ }
+
+}