package com.sissi.protocol.iq.auth;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import com.sissi.protocol.Error;
import com.sissi.protocol.ErrorDetail;
import com.sissi.protocol.Protocol;
import com.sissi.protocol.error.ServerErrorText;
import com.sissi.protocol.error.detail.Aborted;
import com.sissi.protocol.error.detail.AccountDisabled;
import com.sissi.protocol.error.detail.CredentialsExpired;
import com.sissi.protocol.error.detail.EncryptionRequired;
import com.sissi.protocol.error.detail.IncorrectEncoding;
import com.sissi.protocol.error.detail.InvalidMechanism;
import com.sissi.protocol.error.detail.MalformedRequest;
import com.sissi.protocol.error.detail.MechanismTooWeak;
import com.sissi.protocol.error.detail.NotAuthorized;
import com.sissi.protocol.error.detail.TemporaryAuthFailure;
/**
* @author Kim.shen 2013-10-19
*/
@XmlRootElement
public class Failure extends Protocol implements Error {
public final static Failure INSTANCE_NOTAUTHORIZED = new Failure().add(NotAuthorized.DETAIL_ELEMENT);
public final static Failure INSTANCE_INVALIDMECHANISM = new Failure().add(InvalidMechanism.DETAIL);
public final static Failure INSTANCE_ABORTED = new Failure().add(Aborted.DETAIL);
private List<ErrorDetail> details;
private ServerErrorText text;
private String code;
private String by;
public Failure() {
}
public Failure(String code, String lang, String text) {
this.code = code;
this.text = new ServerErrorText(lang, text, null);
}
public Failure(String by, String code, String lang, String text) {
this(code, lang, text);
this.by = by;
}
public Failure add(ErrorDetail detail) {
if (this.details == null) {
this.details = new ArrayList<ErrorDetail>();
}
this.details.add(detail);
return this;
}
@XmlAttribute
public String getXmlns() {
return Auth.XMLNS;
}
@Override
@XmlAttribute
public String getCode() {
return this.code;
}
@Override
@XmlAttribute
public String getBy() {
return this.by;
}
@Override
@XmlElement
public ServerErrorText getText() {
return this.text;
}
@XmlElements({ @XmlElement(name = TemporaryAuthFailure.NAME, type = TemporaryAuthFailure.class), @XmlElement(name = MechanismTooWeak.NAME, type = MechanismTooWeak.class), @XmlElement(name = MalformedRequest.NAME, type = MalformedRequest.class), @XmlElement(name = InvalidMechanism.NAME, type = InvalidMechanism.class), @XmlElement(name = IncorrectEncoding.NAME, type = IncorrectEncoding.class), @XmlElement(name = EncryptionRequired.NAME, type = EncryptionRequired.class), @XmlElement(name = CredentialsExpired.NAME, type = CredentialsExpired.class), @XmlElement(name = AccountDisabled.NAME, type = AccountDisabled.class), @XmlElement(name = Aborted.NAME, type = Aborted.class), @XmlElement(name = NotAuthorized.NAME, type = NotAuthorized.class) })
public List<ErrorDetail> getDetails() {
return this.details;
}
}