/**
* @author Axel
- *
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
+ *
+ * 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 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, String typeName) {
+ super((XDebugTarget) variable.getDebugTarget());
+ fVariable = variable;
+ setType(typeName);
+ fVariables= new IVariable[0];
+ }
- public XDebugAbstractValue(XDebugVariable variable, Node varNode,
- String typeName) {
+
+ public XDebugAbstractValue(XDebugVariable variable,Node varNode,String typeName) {
super((XDebugTarget) variable.getDebugTarget());
fVariable = variable;
- if (varNode == null) {
+ if (varNode==null){
try {
- System.out.println(variable.getName() + "=null");
+ System.out.println(variable.getName()+"=null");
} catch (DebugException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
- return;
+ return;
}
setType(typeName);
NodeList property = varNode.getChildNodes();
if (variable.hasChildren()) {
- renderValueString("" + property.getLength());
+ renderValueString(""+property.getLength());
fVariables = new IVariable[property.getLength()];
- for (int i = 0; i < property.getLength(); i++) {
+ for (int i = 0; i<property.getLength(); i++) {
Node propertyNode = property.item(i);
- fVariables[i] = new XDebugVariable(variable.getStackFrame(),
- propertyNode);
+ fVariables[i] = new XDebugVariable(variable.getStackFrame(), propertyNode);
}
- } else {
- // fDataString="";
+ }else {
+// fDataString="";
fVariables = new IVariable[0];
- // if (variable.getType()== XDebugVariable.VARTYPE_UNINITIALIZED)
- // fValueString="uninitialized";
- // else {
- String str = "";
+// if (variable.getType()== XDebugVariable.VARTYPE_UNINITIALIZED)
+// fValueString="uninitialized";
+// else {
+ String str="";
try {
- str = varNode.getFirstChild().getNodeValue();
+ str=varNode.getFirstChild().getNodeValue();
} catch (NullPointerException e) {
- str = "";
+ str="";
}
if (variable.getEncoding().equals("base64")) {
- if (str.length() != 0)
- str = new String(Base64.decode(str));
+ if (str.length()!=0)
+ str=new String(Base64.decode(str));
else
- str = "";
+ str="";
}
renderValueString(str);
- // }
+// }
}
- String className = PHPDebugUtils
- .getAttributeValue(varNode, "classname");
- if (className != "")
+ String className=PHPDebugUtils.getAttributeValue(varNode,"classname");
+ if(!"".equals(className))
renderValueString(className);
}
-
- /*
- * (non-Javadoc)
- *
+
+ public boolean hasChanged() {
+ return fhasChanged;
+ }
+
+ public void sethasChanged(boolean hasChanged) {
+ fhasChanged = hasChanged;
+ }
+
+ public void setChildVariables(IVariable[] newChildVariables) {
+ fVariables = newChildVariables;
+ }
+
+ /* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValue#getReferenceTypeName()
*/
public String getReferenceTypeName() throws DebugException {
return fTypeName;
}
-
- /*
- * (non-Javadoc)
- *
+
+ /* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValue#getValueString()
*/
public String getValueString() throws DebugException {
return fValueString;
}
-
- /*
- * (non-Javadoc)
- *
+
+ /* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValue#isAllocated()
*/
public boolean isAllocated() throws DebugException {
return true;
}
-
- /*
- * (non-Javadoc)
- *
+
+ /* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValue#getVariables()
*/
public IVariable[] getVariables() throws DebugException {
return fVariables;
}
-
- /*
- * (non-Javadoc)
- *
+
+ /* (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;
- }
+ if( fTarget == null ) {
+ renderValueString(expression);
+ } else {
+ if(fTarget.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;
}
-}
+}
\ No newline at end of file