/* * 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; } }