Fix variable view value modification and refactored XDebugAbstractValue and derived...
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.core / src / net / sourceforge / phpeclipse / xdebug / php / model / XDebugAbstractValue.java
index 32ea3fa..eb91e5b 100644 (file)
@@ -5,15 +5,12 @@
  */
 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.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;
-import org.w3c.dom.NodeList;
 
 /**
  * @author Axel
@@ -22,52 +19,26 @@ import org.w3c.dom.NodeList;
  * Window - Preferences - Java - Code Style - Code Templates
  */
 
-public abstract class XDebugAbstractValue  extends XDebugElement implements IValue {
+public /*abstract*/ class XDebugAbstractValue  extends XDebugElement implements IValue {
        private IVariable[] fVariables;
        private String fValueString;
        private String fTypeName;
        private boolean fhasChanged;
+       protected String rowValue;
+       
+       public XDebugAbstractValue(XDebugStackFrame frame, Node value) throws DebugException  {
+               super(frame == null ? null : (XDebugTarget)frame.getDebugTarget());
 
-       public XDebugAbstractValue(XDebugStackFrame frame, Node varNode) throws DebugException  {
-               super(frame == null ? null : (XDebugTarget) frame.getDebugTarget());
-
-               fTypeName = PHPDebugUtils.getAttributeValue(varNode,"type");
-
-               int NumChildren = 0;
-               if (!PHPDebugUtils.getAttributeValue(varNode,"numchildren").equals("")) {
-                       NumChildren = Integer.parseInt(PHPDebugUtils.getAttributeValue(varNode, "numchildren"));
-               }               
-
-               if (NumChildren > 0) {
-                       NodeList property = varNode.getChildNodes();
-                       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(frame, propertyNode);
-                       }
-               }else {
-                       fVariables = new IVariable[0];
-                       String str="";
-                       try {
-                               str=varNode.getFirstChild().getNodeValue();
-                       } catch (NullPointerException e) {
-                               str="";
-                       }
+               fTypeName = PHPDebugUtils.getAttributeValue(value, "type");
+               
+               fVariables = new IVariable[0];
 
-                       String Encoding = PHPDebugUtils.getAttributeValue(varNode,"encoding");
-                       
-                       if (Encoding.equals("base64")) {
-                               if (str.length()!=0)
-                                       str=new String(Base64.decode(str));
-                               else
-                                       str="";
-                       }
-                       renderValueString(str);
+               rowValue = "";
+               try {
+                       rowValue = value.getFirstChild().getNodeValue();
+               } catch (NullPointerException e) {
+                       rowValue = "";
                }
-               String className=PHPDebugUtils.getAttributeValue(varNode,"classname");
-               if(!"".equals(className))
-                       renderValueString(className);
        }
        
        public boolean hasChanged() {
@@ -109,26 +80,23 @@ public abstract class XDebugAbstractValue  extends XDebugElement implements IVal
                return (fVariables.length > 0);
        }
        
-       public abstract void renderValueString(String data) throws DebugException;
-
-       public abstract boolean verifyValue(String expression);
-       
        public boolean setValue(String expression) throws DebugException {
-               if (!verifyValue(expression)) {
-                       return false;
-               }
-               
-               renderValueString(expression);
-               fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CONTENT));
-        
+               return true;
+       };
+       
+       protected boolean verifyValue(String expression) {
                return true;
        }
        
-       public boolean supportsValueModification() {
+       protected boolean supportsValueModification() {
                return false;
        }
        
-       public void setValueString(String valueString) {
+       protected void setValueString(String valueString) {
                fValueString = valueString;
        }
+
+       protected void setChildren(IVariable[] newChildren) {
+               fVariables = newChildren;
+       }
 }
\ No newline at end of file