⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultiofilterchainbuilder.java

📁 mina是以Java实现的一个开源的网络程序框架
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                return e.getFilter();            }        }        throw new IllegalArgumentException("Filter not found: " + filterType.getName());    }    public synchronized IoFilter replace(String name, IoFilter newFilter) {        checkBaseName(name);        EntryImpl e = (EntryImpl) get(name);        IoFilter oldFilter = e.getFilter();        e.setFilter(newFilter);        return oldFilter;    }    public synchronized void replace(IoFilter oldFilter, IoFilter newFilter) {        for (Entry e : entries) {            if (e.getFilter() == oldFilter) {                ((EntryImpl) e).setFilter(newFilter);                return;            }        }        throw new IllegalArgumentException("Filter not found: "                + oldFilter.getClass().getName());    }    public synchronized void replace(Class<? extends IoFilter> oldFilterType,            IoFilter newFilter) {        for (Entry e : entries) {            if (oldFilterType.isAssignableFrom(e.getFilter().getClass())) {                ((EntryImpl) e).setFilter(newFilter);                return;            }        }        throw new IllegalArgumentException("Filter not found: "                + oldFilterType.getName());    }    /**     * @see IoFilterChain#clear()     */    public synchronized void clear() {        entries.clear();    }        /**     * Clears the current list of filters and adds the specified     * filter mapping to this builder.  Please note that you must specify     * a {@link Map} implementation that iterates the filter mapping in the     * order of insertion such as {@link LinkedHashMap}.  Otherwise, it will     * throw an {@link IllegalArgumentException}.     */    public void setFilters(Map<String, ? extends IoFilter> filters) {        if (filters == null) {            throw new NullPointerException("filters");        }                if (!isOrderedMap(filters)) {            throw new IllegalArgumentException(                    "filters is not an ordered map. Please try " +                     LinkedHashMap.class.getName() + ".");        }        filters = new LinkedHashMap<String, IoFilter>(filters);        for (Map.Entry<String, ? extends IoFilter> e: filters.entrySet()) {            if (e.getKey() == null) {                throw new NullPointerException("filters contains a null key.");            }            if (e.getValue() == null) {                throw new NullPointerException("filters contains a null value.");            }        }                synchronized (this) {            clear();            for (Map.Entry<String, ? extends IoFilter> e: filters.entrySet()) {                addLast(e.getKey(), e.getValue());            }        }    }        @SuppressWarnings("unchecked")    private boolean isOrderedMap(Map map) {        Class<?> mapType = map.getClass();        if (LinkedHashMap.class.isAssignableFrom(mapType)) {            if (logger.isDebugEnabled()) {                logger.debug(mapType.getSimpleName() + " is an ordered map.");            }            return true;        }                if (logger.isDebugEnabled()) {            logger.debug(mapType.getName() + " is not a " + LinkedHashMap.class.getSimpleName());        }        // Detect Jakarta Commons Collections OrderedMap implementations.        Class<?> type = mapType;        while (type != null) {            for (Class<?> i: type.getInterfaces()) {                if (i.getName().endsWith("OrderedMap")) {                    if (logger.isDebugEnabled()) {                        logger.debug(                                mapType.getSimpleName() +                                " is an ordered map (guessed from that it " +                                " implements OrderedMap interface.)");                    }                    return true;                }            }            type = type.getSuperclass();        }                if (logger.isDebugEnabled()) {            logger.debug(                    mapType.getName() +                    " doesn't implement OrderedMap interface.");        }                // Last resort: try to create a new instance and test if it maintains        // the insertion order.        logger.debug(                "Last resort; trying to create a new map instance with a " +                "default constructor and test if insertion order is " +                "maintained.");                Map newMap;        try {            newMap = (Map) mapType.newInstance();        } catch (Exception e) {            if (logger.isDebugEnabled()) {                logger.debug(                        "Failed to create a new map instance of '" +                         mapType.getName() +"'.", e);            }            return false;        }                Random rand = new Random();        List<String> expectedNames = new ArrayList<String>();        IoFilter dummyFilter = new IoFilterAdapter();        for (int i = 0; i < 65536; i ++) {            String filterName;            do {                filterName = String.valueOf(rand.nextInt());            } while (newMap.containsKey(filterName));                        newMap.put(filterName, dummyFilter);            expectedNames.add(filterName);            Iterator<String> it = expectedNames.iterator();            for (Object key: newMap.keySet()) {                if (!it.next().equals(key)) {                    if (logger.isDebugEnabled()) {                        logger.debug(                                "The specified map didn't pass the insertion " +                                "order test after " + (i + 1) + " tries.");                    }                    return false;                }            }        }                if (logger.isDebugEnabled()) {            logger.debug(                    "The specified map passed the insertion order test.");        }        return true;    }    public void buildFilterChain(IoFilterChain chain) throws Exception {        for (Entry e : entries) {            chain.addLast(e.getName(), e.getFilter());        }    }    @Override    public String toString() {        StringBuilder buf = new StringBuilder();        buf.append("{ ");        boolean empty = true;        for (Entry e : entries) {            if (!empty) {                buf.append(", ");            } else {                empty = false;            }            buf.append('(');            buf.append(e.getName());            buf.append(':');            buf.append(e.getFilter());            buf.append(')');        }        if (empty) {            buf.append("empty");        }        buf.append(" }");        return buf.toString();    }    private void checkBaseName(String baseName) {        if (baseName == null) {            throw new NullPointerException("baseName");        }        if (!contains(baseName)) {            throw new IllegalArgumentException("Unknown filter name: "                    + baseName);        }    }    private void register(int index, Entry e) {        if (contains(e.getName())) {            throw new IllegalArgumentException(                    "Other filter is using the same name: " + e.getName());        }        entries.add(index, e);    }    private class EntryImpl implements Entry {        private final String name;        private volatile IoFilter filter;        private EntryImpl(String name, IoFilter filter) {            if (name == null) {                throw new NullPointerException("name");            }            if (filter == null) {                throw new NullPointerException("filter");            }            this.name = name;            this.filter = filter;        }        public String getName() {            return name;        }        public IoFilter getFilter() {            return filter;        }        private void setFilter(IoFilter filter) {            this.filter = filter;        }        public NextFilter getNextFilter() {            throw new IllegalStateException();        }        @Override        public String toString() {            return "(" + getName() + ':' + filter + ')';        }        public void addAfter(String name, IoFilter filter) {            DefaultIoFilterChainBuilder.this.addAfter(getName(), name, filter);        }        public void addBefore(String name, IoFilter filter) {            DefaultIoFilterChainBuilder.this.addBefore(getName(), name, filter);        }        public void remove() {            DefaultIoFilterChainBuilder.this.remove(getName());        }        public void replace(IoFilter newFilter) {            DefaultIoFilterChainBuilder.this.replace(getName(), newFilter);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -