package com.hwlcn.security.subject;
import com.hwlcn.security.SecurityUtils;
import com.hwlcn.security.session.Session;
import com.hwlcn.security.subject.support.DefaultSubjectContext;
import com.hwlcn.security.util.CollectionUtils;
import com.hwlcn.security.util.StringUtils;
import java.io.Serializable;
public class SubjectBuilder {
private final SubjectContext subjectContext;
private final com.hwlcn.security.mgt.SecurityManager securityManager;
public SubjectBuilder() {
this(SecurityUtils.getSecurityManager());
}
public SubjectBuilder(com.hwlcn.security.mgt.SecurityManager securityManager) {
if (securityManager == null) {
throw new NullPointerException("SecurityManager method argument cannot be null.");
}
this.securityManager = securityManager;
this.subjectContext = newSubjectContextInstance();
if (this.subjectContext == null) {
throw new IllegalStateException("Subject instance returned from 'newSubjectContextInstance' " +
"cannot be null.");
}
this.subjectContext.setSecurityManager(securityManager);
}
protected SubjectContext newSubjectContextInstance() {
return new DefaultSubjectContext();
}
protected SubjectContext getSubjectContext() {
return this.subjectContext;
}
public SubjectBuilder sessionId(Serializable sessionId) {
if (sessionId != null) {
this.subjectContext.setSessionId(sessionId);
}
return this;
}
public SubjectBuilder host(String host) {
if (StringUtils.hasText(host)) {
this.subjectContext.setHost(host);
}
return this;
}
public SubjectBuilder session(Session session) {
if (session != null) {
this.subjectContext.setSession(session);
}
return this;
}
public SubjectBuilder principals(PrincipalCollection principals) {
if (!CollectionUtils.isEmpty(principals)) {
this.subjectContext.setPrincipals(principals);
}
return this;
}
public SubjectBuilder sessionCreationEnabled(boolean enabled) {
this.subjectContext.setSessionCreationEnabled(enabled);
return this;
}
public SubjectBuilder authenticated(boolean authenticated) {
this.subjectContext.setAuthenticated(authenticated);
return this;
}
public SubjectBuilder contextAttribute(String attributeKey, Object attributeValue) {
if (attributeKey == null) {
String msg = "Subject context map key cannot be null.";
throw new IllegalArgumentException(msg);
}
if (attributeValue == null) {
this.subjectContext.remove(attributeKey);
} else {
this.subjectContext.put(attributeKey, attributeValue);
}
return this;
}
public Subject buildSubject() {
return this.securityManager.createSubject(this.subjectContext);
}
}