1:
31: package ;
32:
33: import ;
34: import ;
35: import ;
36: import ;
37: import ;
38: import ;
39: import ;
40: import ;
41: import ;
42:
43:
48: public class ReplaceFunction implements Function
49: {
50: public ReplaceFunction()
51: {
52: }
53:
54: public TypeValuePair evaluate(final FormulaContext context,
55: final ParameterCallback parameters) throws EvaluationException
56: {
57: final int parameterCount = parameters.getParameterCount();
58: if (parameterCount != 4)
59: {
60: throw new EvaluationException(LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE);
61: }
62: final TypeRegistry typeRegistry = context.getTypeRegistry();
63:
64: final Type newTextType = parameters.getType(3);
65: final Object newTextValue = parameters.getValue(3);
66: final Type textType = parameters.getType(0);
67: final Object textValue = parameters.getValue(0);
68: final Type startType = parameters.getType(1);
69: final Object startValue = parameters.getValue(1);
70: final Type lengthType = parameters.getType(2);
71: final Object lengthValue = parameters.getValue(2);
72:
73: final String newText = typeRegistry.convertToText(newTextType, newTextValue);
74: final String text = typeRegistry.convertToText(textType, textValue);
75: final Number start = typeRegistry.convertToNumber(startType, startValue);
76: final Number length = typeRegistry.convertToNumber(lengthType, lengthValue);
77:
78: final MidFunction function = new MidFunction();
79: final String result1 = function.process(text, new Integer(1), new Integer(start.intValue() - 1));
80: final String result2 = function.process(text,
81: new Integer(start.intValue() + length.intValue()), new Integer(text.length()));
82:
83:
84: final StringBuffer buffer = new StringBuffer();
85: buffer.append(result1);
86: buffer.append(newText);
87: buffer.append(result2);
88: return new TypeValuePair(TextType.TYPE, buffer.toString());
89: }
90:
91: public String getCanonicalName()
92: {
93: return "REPLACE";
94: }
95: