/* * 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; public static final int VALUETYPE_RESOURCE = 11; protected XDebugVariable fVariable; private IVariable[] fVariables; protected String fValueString; protected int fType; protected String fTypeName; private boolean fhasChanged; 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 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( getDebugTarget() == null ) { renderValueString(expression); } else { if(((XDebugTarget) getDebugTarget()).setVarValue(fVariable.getFullName(),expression)) { renderValueString(expression); return true; } } return false; } public boolean setValueA(String expression) { if(! fValueString.toString().equals(expression)) { fVariables= new IVariable[0]; fValueString = expression; fhasChanged = true; } else { fhasChanged = false; } return true; } public boolean setValueB(IValue value) { try { fTypeName = value.getReferenceTypeName(); } catch (DebugException e) { } fhasChanged = false; switch (((XDebugAbstractValue) value). getType()) { case VALUETYPE_UNINITIALIZED: case VALUETYPE_STRING: case VALUETYPE_INT: case VALUETYPE_FLOAT: case VALUETYPE_BOOLEAN: try { if (! fValueString.equals(value.getValueString())) { fValueString = value.getValueString(); fhasChanged = true; } } catch (DebugException e) { int a = 10; a++; } break; case VALUETYPE_RESOURCE: try { if (! fValueString.equals(value.getValueString())) { fValueString = value.getValueString(); fhasChanged = true; } } catch (DebugException e) { int a = 10; a++; } break; case VALUETYPE_HASH: int a = 20; a = a +2; break; case VALUETYPE_OBJECT: case VALUETYPE_ARRAY: try { IVariable[] newVariable = value.getVariables(); if (fVariables.length == 0) { if (newVariable.length > 0) { fValueString = value.getValueString(); fVariables = newVariable; fhasChanged = true; } } else { for(int i = 0; i < fVariables.length; i++) { // da capire quando e perche' try { if (! ((XDebugVariable)fVariables[i]).equals(((XDebugVariable)newVariable[i]))) { //fVariables[i].setValue(newVariable[i].getValue()); fhasChanged = true; } } catch (Exception e) { //int b = 1; } } if (fhasChanged) { fValueString = value.getValueString(); for(int i = 0; i < fVariables.length; i++) { try { fVariables[i].setValue(newVariable[i].getValue()); } catch (Exception e) { //int b = 1; } } } } } catch (DebugException e) { int b = 10; b++; } break; } return true; } public boolean setValueBOld(IValue value) { fhasChanged = false; switch (((XDebugAbstractValue) value). getType()) { case VALUETYPE_UNINITIALIZED: case VALUETYPE_STRING: case VALUETYPE_INT: case VALUETYPE_FLOAT: case VALUETYPE_BOOLEAN: try { if (! fValueString.equals(value.getValueString())) { fValueString = value.getValueString(); fhasChanged = true; } } catch (DebugException e) { } break; case VALUETYPE_HASH: int a = 20; a = a +2; break; case VALUETYPE_OBJECT: case VALUETYPE_ARRAY: try { IVariable[] newVariable = value.getVariables(); if (fVariables.length == 0) { if (newVariable.length > 0) { fValueString = value.getValueString(); fVariables = newVariable; fhasChanged = true; } } else { for(int i = 0; i < fVariables.length; i++) { if (! ((XDebugVariable)fVariables[i]).equals(((XDebugVariable)newVariable[i]))) { //fVariables[i].setValue(newVariable[i].getValue()); fhasChanged = true; } } if (fhasChanged) { fValueString = value.getValueString(); for(int i = 0; i < fVariables.length; i++) { fVariables[i].setValue(newVariable[i].getValue()); } } } } catch (DebugException e) { } break; } return true; } public int getType() { return fType; } public boolean supportsValueModification() { return false; } }