Initial implementation of the new Debug Plugin
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.core / src / net / sourceforge / phpeclipse / xdebug / php / model / XDebugVariable.java
diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugVariable.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugVariable.java
new file mode 100644 (file)
index 0000000..a6646da
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ * 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;
+       }
+
+}