Initial implementation of the new Debug Plugin
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.core / src / net / sourceforge / phpeclipse / xdebug / php / model / XDebugAbstractValue.java
diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugAbstractValue.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugAbstractValue.java
new file mode 100644 (file)
index 0000000..9498ed9
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * 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.Base64;
+import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils;
+
+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;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Axel
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public abstract class XDebugAbstractValue  extends XDebugElement implements IValue {
+       
+       public static final int VALUETYPE_UNKNOWN = -1;
+       public static final int VALUETYPE_UNINITIALIZED = 0;
+       public static final int VALUETYPE_STRING = 1;
+       public static final int VALUETYPE_INT = 4;
+       public static final int VALUETYPE_FLOAT = 5;
+       public static final int VALUETYPE_BOOLEAN = 6;
+       public static final int VALUETYPE_ARRAY = 8;
+       public static final int VALUETYPE_HASH = 9;
+       public static final int VALUETYPE_OBJECT = 10;
+
+       
+       protected XDebugVariable fVariable;
+       private IVariable[] fVariables;
+       protected String fValueString;
+       protected int fType;
+       protected String fTypeName;
+       
+       public XDebugAbstractValue(XDebugVariable  variable,Node varNode,String typeName) {
+               super((XDebugTarget) variable.getDebugTarget());
+               fVariable = variable;
+               if (varNode==null){
+                       try {
+                               System.out.println(variable.getName()+"=null");
+                       } catch (DebugException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                       }
+                       return; 
+               }
+               setType(typeName);
+               NodeList property = varNode.getChildNodes();
+               if (variable.hasChildren()) {
+                       renderValueString(""+property.getLength());
+                       fVariables = new IVariable[property.getLength()];
+                       for (int i = 0; i<property.getLength(); i++) {
+                               Node propertyNode = property.item(i);
+                               fVariables[i] = new XDebugVariable(variable.getStackFrame(), propertyNode);
+                       }
+               }else {
+//                     fDataString="";
+                       fVariables = new IVariable[0];
+//                     if (variable.getType()== XDebugVariable.VARTYPE_UNINITIALIZED)
+//                             fValueString="uninitialized";
+//                     else {
+                       String str="";
+                       try {
+                               str=varNode.getFirstChild().getNodeValue();
+                       } catch (NullPointerException e) {
+                               str="";
+                       }
+                       if (variable.getEncoding().equals("base64")) {
+                               if (str.length()!=0)
+                                       str=new String(Base64.decode(str));
+                               else
+                                       str="";
+                       }
+                       renderValueString(str);
+//                     }
+               }
+               String className=PHPDebugUtils.getAttributeValue(varNode,"classname");
+               if(className!="")
+                       renderValueString(className);
+
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.debug.core.model.IValue#getReferenceTypeName()
+        */
+       public String getReferenceTypeName() throws DebugException {
+               return fTypeName;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.debug.core.model.IValue#getValueString()
+        */
+       public String getValueString() throws DebugException {
+               return fValueString;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.debug.core.model.IValue#isAllocated()
+        */
+       public boolean isAllocated() throws DebugException {
+               return true;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.debug.core.model.IValue#getVariables()
+        */
+       public IVariable[] getVariables() throws DebugException {
+               return fVariables;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.debug.core.model.IValue#hasVariables()
+        */
+       public boolean hasVariables() throws DebugException {
+               return (fVariables.length>0);
+       }
+       
+       public boolean isArray() {
+               return ((fType & VALUETYPE_ARRAY) > 0);
+       }
+       
+       public abstract void setType(String typeName);
+       public abstract void renderValueString(String data);
+
+       public abstract boolean verifyValue(String expression);
+       
+       public boolean setValue(String expression) {
+               if (!verifyValue(expression))
+                       return false;
+               if(fTarget.setVarValue(fVariable.getFullName(),expression)) {
+                       renderValueString(expression);
+                       return true;
+               }
+               return false;
+       }
+
+       public boolean supportsValueModification() {
+               return false;
+       }
+}