--- /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.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;
+ }
+}