001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: */
016: package org.apache.catalina.tribes.group.interceptors;
017:
018: import org.apache.catalina.tribes.ChannelMessage;
019: import org.apache.catalina.tribes.Member;
020: import org.apache.catalina.tribes.group.ChannelInterceptorBase;
021: import org.apache.catalina.tribes.membership.MemberImpl;
022: import org.apache.catalina.tribes.membership.Membership;
023: import java.util.Arrays;
024:
025: /**
026: * <p>Title: Member domain filter interceptor </p>
027: *
028: * <p>Description: Filters membership based on domain.
029: * </p>
030: *
031: * @author Filip Hanik
032: * @version 1.0
033: */
034: public class DomainFilterInterceptor extends ChannelInterceptorBase {
035:
036: private static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory
037: .getLog(DomainFilterInterceptor.class);
038:
039: protected Membership membership = null;
040:
041: protected byte[] domain = new byte[0];
042:
043: public void messageReceived(ChannelMessage msg) {
044: //should we filter incoming based on domain?
045: super .messageReceived(msg);
046: }//messageReceived
047:
048: public void memberAdded(Member member) {
049: if (membership == null)
050: setupMembership();
051: boolean notify = false;
052: synchronized (membership) {
053: notify = Arrays.equals(domain, member.getDomain());
054: if (notify)
055: notify = membership.memberAlive((MemberImpl) member);
056: }
057: if (notify)
058: super .memberAdded(member);
059: }
060:
061: public void memberDisappeared(Member member) {
062: if (membership == null)
063: setupMembership();
064: boolean notify = false;
065: synchronized (membership) {
066: notify = Arrays.equals(domain, member.getDomain());
067: membership.removeMember((MemberImpl) member);
068: }
069: if (notify)
070: super .memberDisappeared(member);
071: }
072:
073: public boolean hasMembers() {
074: if (membership == null)
075: setupMembership();
076: return membership.hasMembers();
077: }
078:
079: public Member[] getMembers() {
080: if (membership == null)
081: setupMembership();
082: return membership.getMembers();
083: }
084:
085: public Member getMember(Member mbr) {
086: if (membership == null)
087: setupMembership();
088: return membership.getMember(mbr);
089: }
090:
091: public Member getLocalMember(boolean incAlive) {
092: return super .getLocalMember(incAlive);
093: }
094:
095: protected synchronized void setupMembership() {
096: if (membership == null) {
097: membership = new Membership((MemberImpl) super
098: .getLocalMember(true));
099: }
100:
101: }
102:
103: public byte[] getDomain() {
104: return domain;
105: }
106:
107: public void setDomain(byte[] domain) {
108: this.domain = domain;
109: }
110: }
|