blob: 8c7fc29918441b1b3f36f76d3661e6cf5c941a55 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Chase Technology Ltd - http://www.chasetechnology.co.uk
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Doug Satchwell (Chase Technology Ltd) - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xsl.jaxp.debug.debugger;
/**
* An abstract class that XSL processor implementations can subclass for their variables.
*
* @author Doug Satchwell
*/
public abstract class Variable
{
private static int idSequence = 0;
/**
* The constant denoting a local scope variable.
*/
public static final String LOCAL_SCOPE = "L"; //$NON-NLS-1$
/**
* The constant denoting a tunnel scope variable.
*/
public static final String TUNNEL_SCOPE = "T"; //$NON-NLS-1$
/**
* The constant denoting a global scope variable.
*/
public static final String GLOBAL_SCOPE = "G"; //$NON-NLS-1$
protected final static int MAXIMUM_VALUE_SIZE = 100;
protected static final String UNRESOLVED = "unresolved"; //$NON-NLS-1$
protected static final String BOOLEAN = "boolean"; //$NON-NLS-1$
protected static final String NUMBER = "number"; //$NON-NLS-1$
protected static final String STRING = "string"; //$NON-NLS-1$
protected static final String NODESET = "nodeset"; //$NON-NLS-1$
protected static final String OBJECT = "object"; //$NON-NLS-1$
protected static final String UNKNOWN = "unknown"; //$NON-NLS-1$
protected final String name;
protected final String scope;
protected final int slotNumber;
private int id;
/**
* Create a new instance of this with the given name, scope and slot number.
*
* @param name the name of this
* @param scope the scope of this
* @param slotNumber the slot number of this
*/
public Variable(String name, String scope, int slotNumber)
{
this.name = name;
this.scope = scope;
this.slotNumber = slotNumber;
this.id = idSequence++;
}
/**
* Get the id used for this.
*
* @return the variable id
*/
public int getId()
{
return id;
}
/**
* Get the variable name.
*
* @return the variable name
*/
public String getName()
{
return name;
}
/**
* Get the type of this variable e.g. string, or node
*
* @return the variable type
*/
public abstract String getType();
/**
* Get the scope of this variable - one of <code>LOCAL_SCOPE</code>, <code>TUNNEL_SCOPE</code> or <code>GLOBAL_SCOPE</code>.
*
* @return the variable scope
*/
public String getScope()
{
return scope;
}
/**
* Get the current value of this variable as a String.
*
* @return the value of this
*/
public abstract String getValue();
/**
* Get the first line of the value truncating to <code>MAXIMUM_VALUE_SIZE</code> where necessary.
*
* @return the first line of the value
*/
public String getValueFirstLine()
{
String value = getValue();
if (value != null)
{
// make sure it is not too long
value = value.replace('\n', '.');
if (value.length() > MAXIMUM_VALUE_SIZE)
value = value.substring(0, MAXIMUM_VALUE_SIZE);
}
else
value = ""; //$NON-NLS-1$
return value;
}
/**
* Get the slot number for this.
*
* @return the slot number
*/
public int getSlotNumber()
{
return slotNumber;
}
public int hashCode()
{
return 3 * scope.hashCode() + 5 * slotNumber;
}
public boolean equals(Object obj)
{
if (obj == this)
return true;
if (obj instanceof Variable)
{
Variable v = (Variable) obj;
return v.scope.equals(scope) && slotNumber == v.slotNumber;
}
return false;
}
}