Package com.sissi.pipeline.out

Source Code of com.sissi.pipeline.out.BlockOutputBuilder$BlockOutput

package com.sissi.pipeline.out;

import java.util.HashSet;
import java.util.Set;

import com.sissi.context.JID;
import com.sissi.context.JIDBuilder;
import com.sissi.context.JIDContext;
import com.sissi.pipeline.Output;
import com.sissi.pipeline.OutputBuilder;
import com.sissi.protocol.Element;
import com.sissi.protocol.iq.IQ;
import com.sissi.protocol.message.Message;
import com.sissi.protocol.presence.Presence;
import com.sissi.ucenter.block.BlockContext;

/**
* 黑名单策略
*
* @author kim 2013年12月9日
*/
abstract class BlockOutputBuilder implements OutputBuilder {

  private final Set<Class<? extends Element>> blockSupports = new HashSet<Class<? extends Element>>();

  private final BlockContext context;

  protected final JIDBuilder jidBuilder;

  public BlockOutputBuilder(BlockContext context, JIDBuilder jidBuilder) {
    super();
    this.context = context;
    this.jidBuilder = jidBuilder;
    this.blockSupports.add(Presence.class);
    this.blockSupports.add(Message.class);
    this.blockSupports.add(IQ.class);
  }

  abstract protected class BlockOutput implements Output {

    @Override
    public boolean output(JIDContext context, Element node) {
      JID applicant = this.applicant(context.jid(), node);
      if (this.isEmpty(context.jid(), applicant) || !BlockOutputBuilder.this.blockSupports.contains(node.getClass())) {
        return true;
      }
      return !BlockOutputBuilder.this.context.isBlock(this.verifier(context.jid(), node), applicant);
    }

    /**
     * 请求者
     *
     * @param current
     * @param node
     * @return
     */
    abstract protected JID applicant(JID current, Element node);

    /**
     * 校验者
     *
     * @param current
     * @param node
     * @return
     */
    abstract protected JID verifier(JID current, Element node);

    private boolean isEmpty(JID jid) {
      return (jid == null || jid.user() == null);
    }

    private boolean isEmpty(JID user, JID contact) {
      return this.isEmpty(user) || this.isEmpty(contact);
    }

    @Override
    public Output close() {
      return this;
    }
  }
}
TOP

Related Classes of com.sissi.pipeline.out.BlockOutputBuilder$BlockOutput

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.