*/
package net.sourceforge.phpeclipse.xdebug.php.model;
-import net.sourceforge.phpeclipse.xdebug.core.Base64;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Vector;
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
* Window - Preferences - Java - Code Style - Code Templates
*/
-public abstract class XDebugAbstractValue extends XDebugElement implements IValue {
- private IVariable[] fVariables;
- protected String fValueString;
- /*protected*/private String fTypeName;
- private boolean fhasChanged;
-
- public XDebugAbstractValue(XDebugStackFrame frame, Node varNode) throws DebugException {
- super((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="";
- }
+public /*abstract*/ class XDebugAbstractValue extends XDebugElement implements IValue {
+ private String fValueString;
+ private String fTypeName;
+ private boolean fhasChanged;
+ protected String rowValue;
+ private boolean fSorted;
+ private Vector fVariables; // The children of this variable (other variables) if any
- String Encoding = PHPDebugUtils.getAttributeValue(varNode,"encoding");
-
- if (Encoding.equals("base64")) {
- if (str.length()!=0)
- str=new String(Base64.decode(str));
- else
- str="";
- }
- renderValueString(str);
+ public XDebugAbstractValue(XDebugStackFrame frame, Node value) throws DebugException {
+ super(frame == null ? null : (XDebugTarget)frame.getDebugTarget());
+
+ fTypeName = PHPDebugUtils.getAttributeValue(value, "type");
+
+ fVariables = new Vector(); // Create an empty vector
+ fValueString = "";
+ rowValue = "";
+ fSorted = false;
+
+ try {
+ rowValue = value.getFirstChild().getNodeValue();
+ } catch (NullPointerException e) {
+ rowValue = "";
}
- String className=PHPDebugUtils.getAttributeValue(varNode,"classname");
- if(!"".equals(className))
- renderValueString(className);
}
-
+
public boolean hasChanged() {
return fhasChanged;
}
-
+
+ public void setChanged(boolean changed) {
+ fhasChanged = changed;
+ }
+
+ /**
+ *
+ * @param item
+ */
+ public Vector addVariable(Vector item) {
+ if (item != null) { // If there is something we want to add
+ fVariables.addAll(item);
+ fSorted = false;
+ }
+
+ return this.fVariables;
+ }
+
+ /**
+ *
+ * @param parent
+ */
+ public void setParent(XDebugVariable parent) {
+ if (!fVariables.isEmpty()) { // If we have child variables
+ Iterator iter = fVariables.iterator(); // Create an iterator for the children
+
+ while (iter.hasNext()) { // As long as we have children
+ ((XDebugVariable) iter.next()).setParent(parent); // Set all child's parent
+ }
+ }
+ }
+
/* (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 (XDebugVariable[]) getChildVariables().toArray(
+ new XDebugVariable[fVariables.size()]);
+ }
+
+ /**
+ *
+ */
+ public Vector getChildVariables() {
return fVariables;
}
-
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValue#hasVariables()
*/
public boolean hasVariables() throws DebugException {
- return (fVariables.length > 0);
+ return (fVariables.size() != 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;
}
-}
\ No newline at end of file
+
+ protected void setValueString(String valueString) {
+ fValueString = valueString;
+ }
+
+ protected void setChildren(IVariable[] newChildren) {
+ fVariables = new Vector (Arrays.asList(newChildren));
+ }
+}