in extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/resources/deprecated/ResourceImpl.java [100:171]
public int read() throws IOException {
int c1 = delegate.read();
if (c1 == -1) return -1;
if (((char) c1) == '#') {
int c2 = delegate.read();
if (c2 == -1) return -1;
if (((char) c2) == '{') {
//It is a value expression. We need
//to look for a occurrence of } to
//extract the expression and evaluate it,
//the result should be unread.
List<Integer> expressionList = new ArrayList<Integer>();
int c3 = delegate.read();
while (c3 != -1 && ((char) c3) != '}') {
expressionList.add(c3);
c3 = delegate.read();
}
if (c3 == -1) {
//get back the data, because we can't
//extract any value expression
for (int i = 0; i < expressionList.size(); i++) {
delegate.unread(expressionList.get(i));
}
delegate.unread(c2);
return c1;
} else {
//EL expression found. Evaluate it and pushback
//the result into the stream
FacesContext context = FacesContext.getCurrentInstance();
ELContext elContext = context.getELContext();
try {
ValueExpression ve = context.getApplication().
getExpressionFactory().createValueExpression(
elContext,
"#{" + convertToExpression(expressionList) + "}",
String.class);
String value = (String) ve.getValue(elContext);
for (int i = value.length() - 1; i >= 0; i--) {
delegate.unread((int) value.charAt(i));
}
} catch (ELException e) {
ExceptionQueuedEventContext equecontext = new ExceptionQueuedEventContext(context, e, null);
context.getApplication().publishEvent(context, ExceptionQueuedEvent.class, equecontext);
Logger log = Logger.getLogger(ResourceImpl.class.getName());
if (log.isLoggable(Level.SEVERE))
log.severe("Cannot evaluate EL expression " + convertToExpression(expressionList) + " in resource " + getLibraryName() + ":" + getResourceName());
delegate.unread(c3);
for (int i = expressionList.size() - 1; i >= 0; i--) {
delegate.unread(expressionList.get(i));
}
delegate.unread(c2);
return c1;
}
//read again
return delegate.read();
}
} else {
delegate.unread(c2);
return c1;
}
} else {
//just continue
return c1;
}
}