if (logger.isLoggable(Level.FINER)) { StringBuffer buffer = new StringBuffer("dispatch "); buffer.append(epoch); buffer.append(SConstants.UID_DIVIDER); buffer.append(name); buffer.append(": "); buffer.append(StringUtil.delimitedString(values)); logger.finer(buffer.toString()); }
    public boolean dispatch(String name, String[] values) {        /*          System.out.println("Dispatcher LLE: " + name);          for (int i = 0; i < values.length; ++i) {          System.out.println("\t"+i+"="+values[i]);          }        */        boolean result = false;        int dividerIndex = name.indexOf(SConstants.UID_DIVIDER);        String epoch = null;        // no Alias        if (dividerIndex > 0) {            epoch = name.substring(0, dividerIndex);            name = name.substring(dividerIndex + 1);            if (logger.isLoggable(Level.FINER)) {                StringBuffer buffer = new StringBuffer("dispatch ");                buffer.append(epoch);                buffer.append(SConstants.UID_DIVIDER);                buffer.append(name);                buffer.append(": ");                buffer.append(StringUtil.delimitedString(values));                logger.finer(buffer.toString());            }        }        // make ImageButtons work in Forms .. browsers return        // the click position as .x and .y suffix of the name        if (name.endsWith(".x") || name.endsWith(".X")) {            name = name.substring(0, name.length()-2);        }        else if (name.endsWith(".y") || name.endsWith(".Y")) {            // .. but don't process the same event twice.            logger.finer("discard '.y' part of image event");            return false;        }                // is value encoded in name ? Then append it to the values we have.        int p = name.indexOf(SConstants.UID_DIVIDER);        if (p > -1) {            String v = name.substring(p+1);            name = name.substring(0, p);            String[] va = new String[values.length+1];            System.arraycopy(values, 0, va, 0, values.length);            va[values.length] = v;            values = va;        }                List l = (List)listener.get(name);        if (l != null && l.size() > 0 ) {            logger.fine("process event '" + epoch + "_" + name + "'");            for (int i=0; i < l.size(); ++i) {                LowLevelEventListener gl = (LowLevelEventListener)l.get(i);                if ( gl.isEnabled() ) {                    if ( checkEpoch(epoch, name, gl) ) {                        logger.fine("process event '" + name + "' by " +                                    gl.getClass() + "(" + gl.getLowLevelEventId() +                                    ")" );                        gl.processLowLevelEvent(name, values);                        result = true;                    }                }            }        }        return result;    }