/* $Id$ */ /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.manifoldcf.scriptengine; import org.apache.manifoldcf.core.interfaces.*; /** Base class for variables. * Basically, everything is illegal until overridden. */ public class VariableBase implements Variable, VariableReference { public VariableBase() { } /** Check if the variable has a string value */ @Override public boolean hasStringValue() throws ScriptException { return false; } /** Check if the variable has a script value */ @Override public boolean hasScriptValue() throws ScriptException { return false; } /** Check if the variable has a Configuration value */ @Override public boolean hasConfigurationValue() throws ScriptException { return false; } /** Check if the variable has a ConfigurationNode value */ @Override public boolean hasConfigurationNodeValue() throws ScriptException { return false; } /** Check if the variable has a boolean value */ @Override public boolean hasBooleanValue() throws ScriptException { return false; } /** Check if the variable has an int value */ @Override public boolean hasIntValue() throws ScriptException { return false; } /** Check if the variable has a double value */ @Override public boolean hasDoubleValue() throws ScriptException { return false; } /** Check if the variable has a query argument value */ @Override public boolean hasQueryArgumentValue() throws ScriptException { return false; } /** Check if the variable has a URL path value */ @Override public boolean hasURLPathValue() throws ScriptException { return false; } /** Get the variable's script value */ @Override public String getScriptValue() throws ScriptException { throw new ScriptException(composeMessage("Variable has no script value")); } /** Get the variable's value as a string */ @Override public String getStringValue() throws ScriptException { throw new ScriptException(composeMessage("Cannot convert variable to string")); } /** Get the variable's value as a Configuration object */ @Override public Configuration getConfigurationValue() throws ScriptException { throw new ScriptException(composeMessage("Cannot convert variable to Configuration object")); } /** Get the variable's value as a ConfigurationNode object */ @Override public ConfigurationNode getConfigurationNodeValue() throws ScriptException { throw new ScriptException(composeMessage("Cannot convert variable to ConfigurationNode object")); } /** Get the variable's value as a boolean */ @Override public boolean getBooleanValue() throws ScriptException { throw new ScriptException(composeMessage("Cannot convert variable to boolean")); } /** Get the variable's value as an integer */ @Override public int getIntValue() throws ScriptException { throw new ScriptException(composeMessage("Cannot convert variable to int")); } /** Get the variable's value as a double */ @Override public double getDoubleValue() throws ScriptException { throw new ScriptException(composeMessage("Cannot convert variable to float")); } /** Get the variable's value as a properly-encoded query argument */ @Override public String getQueryArgumentValue() throws ScriptException { throw new ScriptException(composeMessage("Cannot convert variable to query argument")); } /** Get the variable's value as a URL path component */ @Override public String getURLPathValue() throws ScriptException { throw new ScriptException(composeMessage("Cannot convert variable to URL path component")); } // Operations @Override public VariableReference plus(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '+' operator illegal for this type")); } @Override public VariableReference minus(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '-' operator illegal for this type")); } @Override public VariableReference asterisk(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '*' operator illegal for this type")); } @Override public VariableReference slash(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '/' operator illegal for this type")); } @Override public VariableReference unaryMinus() throws ScriptException { throw new ScriptException(composeMessage("Unary '-' operator illegal for this type")); } @Override public VariableReference greaterAngle(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '>' operator illegal for this type")); } @Override public VariableReference lesserAngle(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '<' operator illegal for this type")); } @Override public VariableReference doubleEquals(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '==' operator illegal for this type")); } @Override public VariableReference greaterAngleEquals(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '>=' operator illegal for this type")); } @Override public VariableReference lesserAngleEquals(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '<=' operator illegal for this type")); } @Override public VariableReference exclamationEquals(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '!=' operator illegal for this type")); } @Override public VariableReference ampersand(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '&' operator illegal for this type")); } @Override public VariableReference pipe(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '|' operator illegal for this type")); } @Override public VariableReference doubleAmpersand(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '&&' operator illegal for this type")); } @Override public VariableReference doublePipe(Variable v) throws ScriptException { throw new ScriptException(composeMessage("Binary '||' operator illegal for this type")); } @Override public VariableReference unaryExclamation() throws ScriptException { throw new ScriptException(composeMessage("Unary '!' operator illegal for this type")); } // The following operations allow manipulation of a Configuration structure /** Get a named attribute of the variable; e.g. xxx.yyy */ @Override public VariableReference getAttribute(String attributeName) throws ScriptException { if (attributeName.equals(ATTRIBUTE_STRING)) return new VariableString(getStringValue()); else if (attributeName.equals(ATTRIBUTE_INT)) return new VariableInt(getIntValue()); else if (attributeName.equals(ATTRIBUTE_FLOAT)) return new VariableFloat(getDoubleValue()); else if (attributeName.equals(ATTRIBUTE_BOOLEAN)) return new VariableBoolean(getBooleanValue()); else if (attributeName.equals(ATTRIBUTE_SCRIPT)) return new VariableString(getScriptValue()); else throw new ScriptException(composeMessage("Variable has no attribute called '"+attributeName+"'")); } /** Insert an object into this variable at a position. */ @Override public void insertAt(Variable v, Variable index) throws ScriptException { throw new ScriptException(composeMessage("Variable does not support 'insert' operation")); } /** Delete an object from this variable at a position. */ @Override public void removeAt(Variable index) throws ScriptException { throw new ScriptException(composeMessage("Variable does not support 'remove' operation")); } // The following two operations correspond to <xxx> and xxx[index] /** Get an indexed property of the variable */ @Override public VariableReference getIndexed(Variable index) throws ScriptException { throw new ScriptException(composeMessage("Variable does not support subscripts")); } // As a variable reference, refer to self /** Set the reference */ @Override public void setReference(Variable object) throws ScriptException { throw new ScriptException(composeMessage("Cannot set reference")); } /** Resolve the reference */ @Override public Variable resolve() throws ScriptException { return this; } /** Check if this reference is null */ @Override public boolean isNull() { return false; } // Protected methods /** Compose a message which includes the current class name, so we can see what type of variable it is. */ protected String composeMessage(String input) { return "Variable of type '"+getClass().getName()+"': "+input; } }