Package com.sissi.protocol.muc

Source Code of com.sissi.protocol.muc.Item

package com.sissi.protocol.muc;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import com.sissi.context.JID;
import com.sissi.io.read.Collector;
import com.sissi.io.read.Metadata;
import com.sissi.protocol.Error;
import com.sissi.protocol.presence.Presence;
import com.sissi.protocol.presence.PresenceType;
import com.sissi.ucenter.relation.muc.MucItem;
import com.sissi.ucenter.relation.muc.MucRelation;

/**
* @author kim 2014年2月11日
*/
@Metadata(uri = XMucAdmin.XMLNS, localName = Item.NAME)
@XmlType(namespace = XMuc.XMLNS)
@XmlRootElement(name = Item.NAME)
public class Item implements MucItem, Collector {

  public final static String NAME = "item";

  private String role;

  private String nick;

  private String jid;

  private String affiliation;

  private boolean limit;

  private boolean hidden;

  private XMucAdmin admin;

  private Reason reason;

  private Actor actor;

  private Error error;

  private JID group;

  public Item() {
  }

  public Item(boolean hidden, String nick, MucRelation relation) {
    super();
    this.relation(relation).hidden = hidden;
    this.nick = nick;
  }

  public Item(boolean hidden, MucRelation relation) {
    super();
    this.relation(relation).hidden = hidden;
  }

  Item admin(XMucAdmin admin) {
    this.admin = admin;
    return this;
  }

  private Presence presence(XMucAdminAction action, String affiliation) {
    this.limit = !ItemAffiliation.parse(this.getAffiliation()).contains(affiliation);
    return new Presence().setType(this.limit ? PresenceType.UNAVAILABLE.toString() : XMucAdminAction.AFFILIATION == action ? ItemAffiliation.parse(this.getAffiliation()).presence() : ItemRole.parse(this.getRole()).presence()).setFrom(this.group).cast(Presence.class);
  }

  public Item relation(MucRelation relation) {
    this.jid = relation.jid();
    this.role = relation.role();
    this.nick = relation.name();
    this.affiliation = relation.affiliation();
    return this;
  }

  public boolean forbidden() {
    return this.limit;
  }

  public boolean error(Error error) {
    return (this.error = error) != null;
  }

  public Error error() {
    return this.error;
  }

  public Item hidden(boolean hidden) {
    this.hidden = hidden;
    return this;
  }

  public Presence presence() {
    return this.presence(XMucAdminAction.ROLE, null);
  }

  public Presence presence(String affiliation) {
    return this.presence(XMucAdminAction.AFFILIATION, affiliation);
  }

  public JID group(JID jid) {
    return this.group = jid.resource(this.getNick());
  }

  public Item jid(JID jid) {
    this.jid = jid.asStringWithBare();
    return this;
  }

  public Item setJid(String jid) {
    this.admin.add((this.jid = jid) != null);
    return this;
  }

  @XmlAttribute
  public String getJid() {
    return this.hidden ? null : this.jid;
  }

  public Item setAffiliation(String affiliation) {
    this.affiliation = affiliation;
    if (this.admin != null) {
      this.admin.valid(this.getRole() == null);
    }
    return this;
  }

  @XmlAttribute
  public String getAffiliation() {
    return this.affiliation;
  }

  public Item setRole(String role) {
    this.role = role;
    if (this.admin != null) {
      this.admin.valid(this.getAffiliation() == null);
    }
    return this;
  }

  @XmlAttribute
  public String getRole() {
    return this.limit ? ItemRole.NONE.toString() : this.role;
  }

  public Item setNick(String nick) {
    this.admin.add(this.nick = nick);
    return this;
  }

  @XmlAttribute
  public String getNick() {
    return this.nick;
  }

  public String reason() {
    return this.getReason() != null ? this.getReason().getText() : null;
  }

  public Item reason(String reason) {
    if (this.getReason() == null) {
      this.reason = new Reason(reason);
    }
    this.getReason().setText(reason);
    return this;
  }

  @XmlElement
  public Reason getReason() {
    return this.reason;
  }

  public Item actor(JID actor) {
    if (this.actor == null) {
      this.actor = new Actor();
    }
    this.actor.jid(actor);
    return this;
  }

  @XmlElement
  public Actor getActor() {
    return this.hidden ? null : this.actor;
  }

  @Override
  public void set(String localName, Object ob) {
    this.reason = Reason.class.cast(ob);
  }

  public <T extends MucItem> T cast(Class<T> clazz) {
    return clazz.cast(this);
  }
}
TOP

Related Classes of com.sissi.protocol.muc.Item

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.