home *** CD-ROM | disk | FTP | other *** search
Wrap
package allaire.util.template; import allaire.util.Assert; import allaire.util.TypeConversionException; import allaire.util.TypelessValue; import netscape.util.Vector; public abstract class Function { FunctionInfo m_functionInfo; public static final int ARG_NONE = -1; public static final int ARG_ANY = 0; public static final int ARG_STRING = 1; public static final int ARG_NUMBER = 2; public static final int ARG_POSITIVE = 3; public static final int ARG_POSITIVE_NZ = 4; public TypelessValue doIt(Vector var1) throws FunctionCallException { return new TypelessValue(""); } protected boolean checkArgument(TypelessValue var1, int var2) { boolean var3; try { switch (var2) { case -1: Assert.fail("Internal: mismatched argument type info"); case 0: case 1: break; case 2: var1.asReal(); break; case 3: double var7 = var1.asReal(); if (var7 < (double)0.0F) { throw new TypeConversionException(""); } break; case 4: double var4 = var1.asReal(); if (var4 <= (double)0.0F) { throw new TypeConversionException(""); } break; default: Assert.fail("Internal: unknown argument type"); } var3 = true; } catch (TypeConversionException var6) { var3 = false; } return var3; } protected String getArgumentAsString(Vector var1, int var2) { TypelessValue var3 = (TypelessValue)var1.elementAt(var2); return var3.asString(); } private void checkArguments(Vector var1) throws FunctionCallException { int var2 = var1.count(); if (var2 < this.m_functionInfo.m_nNumRequired) { throw new FunctionCallException(151, var2 + " arguments were passed " + "to function '" + this.m_functionInfo.m_strName + "' (" + this.m_functionInfo.m_nNumRequired + " arguments are required)."); } else if (!this.m_functionInfo.m_bHasOptional && var2 > this.m_functionInfo.m_nNumRequired) { throw new FunctionCallException(152, var2 + " arguments were passed " + "to function '" + this.m_functionInfo.m_strName + "' (" + this.m_functionInfo.m_nNumRequired + " arguments are required). "); } else { int var3 = Math.min(var2, 4); for(int var4 = 0; var4 < var3; ++var4) { boolean var5 = this.checkArgument((TypelessValue)var1.elementAt(var4), this.m_functionInfo.m_enTypes[var4]); if (!var5) { throw new FunctionCallException(150, "Argument number " + String.valueOf(var4 + 1) + " of function " + this.m_functionInfo.m_strName + " is not of the correct type"); } } } } public Function(FunctionInfo var1) { this.m_functionInfo = var1; } protected boolean getArgumentAsBoolean(Vector var1, int var2) { try { TypelessValue var3 = (TypelessValue)var1.elementAt(var2); return var3.asBoolean(); } catch (TypeConversionException var4) { return false; } } TypelessValue call(TemplateRuntimeContext var1, Vector var2) throws FunctionCallException { this.checkArguments(var2); return this.doItWithContext(var1, var2); } String getName() { return this.m_functionInfo.m_strName; } protected double getArgumentAsReal(Vector var1, int var2) { try { TypelessValue var3 = (TypelessValue)var1.elementAt(var2); return var3.asReal(); } catch (TypeConversionException var4) { return (double)0.0F; } } public TypelessValue doItWithContext(TemplateRuntimeContext var1, Vector var2) throws FunctionCallException { return this.doIt(var2); } }