package org.apereo.cas.mgmt.services.web.beans;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Defines the service bean that is produced by the webapp
* and passed down for edit views.
*
* @author Misagh Moayyed
* @since 4.1
*/
public class RegisteredServiceEditBean implements Serializable {
private static final long serialVersionUID = 4882440567964605644L;
private FormData formData = new FormData();
private ServiceData serviceData = new ServiceData();
private int status = -1;
public ServiceData getServiceData() {
return this.serviceData;
}
public void setServiceData(final ServiceData serviceData) {
this.serviceData = serviceData;
}
public FormData getFormData() {
return this.formData;
}
public void setFormData(final FormData formData) {
this.formData = formData;
}
public int getStatus() {
return this.status;
}
public void setStatus(final int status) {
this.status = status;
}
/**
* The type Form data.
*/
public static class FormData implements Serializable {
private static final long serialVersionUID = -5201796557461644152L;
private List<String> availableAttributes = new ArrayList<>();
private Map<String, Map<String, ?>> customComponent = new HashMap<>();
public List<String> getAvailableAttributes() {
return this.availableAttributes;
}
public void setAvailableAttributes(final List<String> availableAttributes) {
this.availableAttributes = availableAttributes;
}
/**
* Visible for serialization only. Use {@link FormData#getCustomComponent(String)} instead.
*
* @return all the custom components
*/
public Map<String, Map<String, ?>> getCustomComponent() {
return this.customComponent;
}
/**
* Get the current properties for the specified custom component. The returned {@link Map} should only contain
* nested Maps, Arrays, and simple objects.
*
* @param componentName name of the component to get the properties for (this should be unique for each
* component)
* @return current custom component properties
*/
public Map<String, ?> getCustomComponent(final String componentName) {
return this.customComponent.get(componentName);
}
/**
* This is reserved for usage by any custom components that need to present their config to the management UI.
* The provided {@link Map} should only contain nested Maps, Arrays, and simple objects.
*
* @param componentName name of the component to store the properties for (this should be unique for each
* component)
* @param properties custom component properties
*/
public void setCustomComponent(final String componentName, final Map<String, ?> properties) {
this.customComponent.put(componentName, properties);
}
}
/**
* The type Service data.
*/
public static class ServiceData implements Serializable {
private static final long serialVersionUID = -8953615891363204511L;
private String assignedId;
private String serviceId;
private String name;
private String description;
private String logoUrl;
private String theme;
private String informationUrl;
private String privacyUrl;
private int evalOrder = Integer.MIN_VALUE;
private Set<String> requiredHandlers = new HashSet<>();
private String logoutUrl;
private RegisteredServiceMultifactorAuthenticationEditBean multiAuth = new RegisteredServiceMultifactorAuthenticationEditBean();
private RegisteredServiceSupportAccessEditBean supportAccess = new RegisteredServiceSupportAccessEditBean();
private String type = RegisteredServiceTypeEditBean.CAS.toString();
private RegisteredServiceOidcTypeEditBean oidc = new RegisteredServiceOidcTypeEditBean();
private RegisteredServiceOAuthTypeEditBean oauth = new RegisteredServiceOAuthTypeEditBean();
private RegisteredServiceSamlTypeEditBean saml = new RegisteredServiceSamlTypeEditBean();
private String logoutType = RegisteredServiceLogoutTypeEditBean.BACK.toString();
private RegisteredServiceUsernameAttributeProviderEditBean userAttrProvider =
new RegisteredServiceUsernameAttributeProviderEditBean();
private RegisteredServicePublicKeyEditBean publicKey = new RegisteredServicePublicKeyEditBean();
private RegisteredServiceProxyPolicyBean proxyPolicy = new RegisteredServiceProxyPolicyBean();
private RegisteredServiceAttributeReleasePolicyEditBean attrRelease
= new RegisteredServiceAttributeReleasePolicyEditBean();
private Map<String, Map<String, ?>> customComponent = new HashMap<>();
private Set<PropertyBean> properties = new LinkedHashSet<>();
public String getInformationUrl() {
return informationUrl;
}
public void setInformationUrl(final String informationUrl) {
this.informationUrl = informationUrl;
}
public String getPrivacyUrl() {
return privacyUrl;
}
public void setPrivacyUrl(final String privacyUrl) {
this.privacyUrl = privacyUrl;
}
public void setProperties(final Set<PropertyBean> properties) {
this.properties = properties;
}
public void setOidc(final RegisteredServiceOidcTypeEditBean oidc) {
this.oidc = oidc;
}
public RegisteredServiceOidcTypeEditBean getOidc() {
return oidc;
}
public Set<PropertyBean> getProperties() {
return properties;
}
public RegisteredServiceMultifactorAuthenticationEditBean getMultiAuth() {
return multiAuth;
}
public void setMultiAuth(final RegisteredServiceMultifactorAuthenticationEditBean multiAuth) {
this.multiAuth = multiAuth;
}
public RegisteredServiceAttributeReleasePolicyEditBean getAttrRelease() {
return this.attrRelease;
}
public void setAttrRelease(final RegisteredServiceAttributeReleasePolicyEditBean attrRelease) {
this.attrRelease = attrRelease;
}
public RegisteredServicePublicKeyEditBean getPublicKey() {
return this.publicKey;
}
public void setPublicKey(final RegisteredServicePublicKeyEditBean publicKey) {
this.publicKey = publicKey;
}
public RegisteredServiceProxyPolicyBean getProxyPolicy() {
return this.proxyPolicy;
}
public void setProxyPolicy(final RegisteredServiceProxyPolicyBean proxyPolicy) {
this.proxyPolicy = proxyPolicy;
}
public String getTheme() {
return this.theme;
}
public void setTheme(final String theme) {
this.theme = theme;
}
public int getEvalOrder() {
return this.evalOrder;
}
public void setEvalOrder(final int evalOrder) {
this.evalOrder = evalOrder;
}
public Set<String> getRequiredHandlers() {
return this.requiredHandlers;
}
public void setRequiredHandlers(final Set<String> requiredHandlers) {
this.requiredHandlers = requiredHandlers;
}
public String getLogoutUrl() {
return this.logoutUrl;
}
public void setLogoutUrl(final String logoutUrl) {
this.logoutUrl = logoutUrl;
}
public RegisteredServiceOAuthTypeEditBean getOauth() {
return this.oauth;
}
public void setOauth(final RegisteredServiceOAuthTypeEditBean oauth) {
this.oauth = oauth;
}
public String getLogoutType() {
return this.logoutType;
}
public void setLogoutType(final String logoutType) {
this.logoutType = logoutType;
}
public RegisteredServiceUsernameAttributeProviderEditBean getUserAttrProvider() {
return this.userAttrProvider;
}
public void setUserAttrProvider(final RegisteredServiceUsernameAttributeProviderEditBean userAttrProvider) {
this.userAttrProvider = userAttrProvider;
}
public String getType() {
return this.type;
}
public void setType(final String type) {
this.type = type;
}
public RegisteredServiceSupportAccessEditBean getSupportAccess() {
return this.supportAccess;
}
public void setSupportAccess(final RegisteredServiceSupportAccessEditBean supportAccess) {
this.supportAccess = supportAccess;
}
public String getAssignedId() {
return this.assignedId;
}
public void setAssignedId(final String assignedId) {
this.assignedId = assignedId;
}
public String getServiceId() {
return this.serviceId;
}
public void setServiceId(final String serviceId) {
this.serviceId = serviceId;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public String getDescription() {
return this.description;
}
public void setDescription(final String description) {
this.description = description;
}
public String getLogoUrl() {
return this.logoUrl;
}
public void setLogoUrl(final String logoUrl) {
this.logoUrl = logoUrl;
}
/**
* Visible for serialization only. Use {@link ServiceData#getCustomComponent(String)} instead.
*
* @return all the custom components
*/
public Map<String, ? extends Map<String, ?>> getCustomComponent() {
return this.customComponent;
}
public RegisteredServiceSamlTypeEditBean getSaml() {
return saml;
}
public void setSaml(final RegisteredServiceSamlTypeEditBean saml) {
this.saml = saml;
}
/**
* Visible for deserialization only. Use {@link ServiceData#setCustomComponent(String, Map)} instead.
*
* @param customComponent all the custom component properties
*/
public void setCustomComponent(final Map<String, Map<String, ?>> customComponent) {
this.customComponent = customComponent;
}
/**
* Get the current properties for the specified custom component. The returned {@link Map} should only contain
* nested Maps, Arrays, and simple objects.
*
* @param componentName name of the component to get the properties for (this should be unique for each
* component)
* @return current custom component properties
*/
public Map<String, ?> getCustomComponent(final String componentName) {
return this.customComponent.get(componentName);
}
/**
* This is reserved for usage by any custom components that need to present their config to the management UI.
* The provided {@link Map} should only contain nested Maps, Arrays, and simple objects.
*
* @param componentName name of the component to store the properties for (this should be unique for each
* component)
* @param properties custom component properties
*/
public void setCustomComponent(final String componentName, final Map<String, ?> properties) {
this.customComponent.put(componentName, properties);
}
/**
* The property bean.
*/
public static class PropertyBean {
private String name;
private String value;
public PropertyBean() {
}
public PropertyBean(final String name, final String value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(final String value) {
this.value = value;
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
final PropertyBean rhs = (PropertyBean) obj;
return new EqualsBuilder()
.append(this.name, rhs.name)
.append(this.value, rhs.value)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(name)
.append(value)
.toHashCode();
}
}
}
}