public int read()

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;
            }
        }