/*
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.identity.application.common.model;
import org.apache.axiom.om.OMElement;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ServiceProvider implements Serializable {
private static final long serialVersionUID = 4754526832588478582L;
private static final Log log = LogFactory.getLog(ServiceProvider.class);
private int applicationID = 0;
private String applicationName;
private String description;
private User owner;
private InboundAuthenticationConfig inboundAuthenticationConfig;
private LocalAndOutboundAuthenticationConfig localAndOutBoundAuthenticationConfig;
private RequestPathAuthenticatorConfig[] requestPathAuthenticatorConfigs;
private InboundProvisioningConfig inboundProvisioningConfig;
private OutboundProvisioningConfig outboundProvisioningConfig;
private ClaimConfig claimConfig;
private PermissionsAndRoleConfig permissionAndRoleConfig;
private boolean saasApp;
private ServiceProviderProperty []spProperties = new ServiceProviderProperty[0];
/*
* <ServiceProvider> <ApplicationID></ApplicationID> <Description></Description>
* <Owner>....</Owner>
* <IsSaaSApp>....</IsSaaSApp><InboundAuthenticationConfig>..</InboundAuthenticationConfig>
* <LocalAndOutBoundAuthenticationConfig>..</LocalAndOutBoundAuthenticationConfig>
* <RequestPathAuthenticatorConfigs>...</RequestPathAuthenticatorConfigs>
* <InboundProvisioningConfig>...</InboundProvisioningConfig>
* <OutboundProvisioningConfig>..</OutboundProvisioningConfig>
* <PermissionAndRoleConfig>...</PermissionAndRoleConfig> <ClaimConfig>...</ClaimConfig>
* </ServiceProvider>
*/
public static ServiceProvider build(OMElement serviceProviderOM) {
ServiceProvider serviceProvider = new ServiceProvider();
// by default set to true.
serviceProvider.setSaasApp(true);
Iterator<?> iter = serviceProviderOM.getChildElements();
while (iter.hasNext()) {
OMElement element = (OMElement) (iter.next());
String elementName = element.getLocalName();
if ("ApplicationID".equals(elementName)) {
if (element.getText() != null) {
serviceProvider.setApplicationID(Integer.parseInt(element.getText()));
}
} else if ("ApplicationName".equals(elementName)) {
if (element.getText() != null) {
serviceProvider.setApplicationName(element.getText());
} else {
log.error("Service provider not loaded from the file. Application Name is null.");
return null;
}
} else if ("Description".equals(elementName)) {
serviceProvider.setDescription(element.getText());
} else if ("IsSaaSApp".equals(elementName)) {
if (element.getText() != null && "true".equals(element.getText())) {
serviceProvider.setSaasApp(true);
} else {
serviceProvider.setSaasApp(false);
}
} else if ("Owner".equals(elementName)) {
// build service provider owner.
serviceProvider.setOwner(User.build(element));
} else if ("InboundAuthenticationConfig".equals(elementName)) {
// build in-bound authentication configuration.
serviceProvider.setInboundAuthenticationConfig(InboundAuthenticationConfig
.build(element));
} else if ("LocalAndOutBoundAuthenticationConfig".equals(elementName)) {
// build local and out-bound authentication configuration.
serviceProvider
.setLocalAndOutBoundAuthenticationConfig(LocalAndOutboundAuthenticationConfig
.build(element));
} else if ("RequestPathAuthenticatorConfigs".equals(elementName)) {
// build request-path authentication configurations.
Iterator<?> requestPathAuthenticatorConfigsIter = element.getChildElements();
if (requestPathAuthenticatorConfigsIter == null) {
continue;
}
List<RequestPathAuthenticatorConfig> requestPathAuthenticatorConfigsArrList;
requestPathAuthenticatorConfigsArrList = new ArrayList<RequestPathAuthenticatorConfig>();
while (requestPathAuthenticatorConfigsIter.hasNext()) {
OMElement requestPathAuthenticatorConfigsElement = (OMElement) (requestPathAuthenticatorConfigsIter
.next());
RequestPathAuthenticatorConfig reqConfig = RequestPathAuthenticatorConfig
.build(requestPathAuthenticatorConfigsElement);
if (reqConfig != null) {
// we only need not-null values.
requestPathAuthenticatorConfigsArrList.add(reqConfig);
}
}
if (CollectionUtils.isNotEmpty(requestPathAuthenticatorConfigsArrList)) {
// add to the service provider, only if we have any.
RequestPathAuthenticatorConfig[] requestPathAuthenticatorConfigsArr;
requestPathAuthenticatorConfigsArr = requestPathAuthenticatorConfigsArrList
.toArray(new RequestPathAuthenticatorConfig[0]);
serviceProvider
.setRequestPathAuthenticatorConfigs(requestPathAuthenticatorConfigsArr);
}
} else if ("InboundProvisioningConfig".equals(elementName)) {
// build in-bound provisioning configuration.
serviceProvider.setInboundProvisioningConfig(InboundProvisioningConfig
.build(element));
} else if ("OutboundProvisioningConfig".equals(elementName)) {
// build out-bound provisioning configuration.
serviceProvider.setOutboundProvisioningConfig(OutboundProvisioningConfig
.build(element));
} else if ("ClaimConfig".equals(elementName)) {
// build claim configuration.
serviceProvider.setClaimConfig(ClaimConfig.build(element));
} else if ("PermissionAndRoleConfig".equals(elementName)) {
// build permission and role configuration.
serviceProvider.setPermissionAndRoleConfig(PermissionsAndRoleConfig.build(element));
}
}
return serviceProvider;
}
/**
* @return
*/
public int getApplicationID() {
return applicationID;
}
/**
* @param applicationID
*/
public void setApplicationID(int applicationID) {
this.applicationID = applicationID;
}
/**
* @return
*/
public InboundAuthenticationConfig getInboundAuthenticationConfig() {
return inboundAuthenticationConfig;
}
/**
* @param inboundAuthenticationConfig
*/
public void setInboundAuthenticationConfig(
InboundAuthenticationConfig inboundAuthenticationConfig) {
this.inboundAuthenticationConfig = inboundAuthenticationConfig;
}
/**
* @return
*/
public LocalAndOutboundAuthenticationConfig getLocalAndOutBoundAuthenticationConfig() {
return localAndOutBoundAuthenticationConfig;
}
/**
* @param localAndOutBoundAuthenticationConfig
*/
public void setLocalAndOutBoundAuthenticationConfig(
LocalAndOutboundAuthenticationConfig localAndOutBoundAuthenticationConfig) {
this.localAndOutBoundAuthenticationConfig = localAndOutBoundAuthenticationConfig;
}
/**
* @return
*/
public RequestPathAuthenticatorConfig[] getRequestPathAuthenticatorConfigs() {
return requestPathAuthenticatorConfigs;
}
/**
* @param requestPathAuthenticatorConfigs
*/
public void setRequestPathAuthenticatorConfigs(
RequestPathAuthenticatorConfig[] requestPathAuthenticatorConfigs) {
this.requestPathAuthenticatorConfigs = requestPathAuthenticatorConfigs;
}
/**
* @return
*/
public InboundProvisioningConfig getInboundProvisioningConfig() {
return inboundProvisioningConfig;
}
/**
* @param inboundProvisioningConfig
*/
public void setInboundProvisioningConfig(InboundProvisioningConfig inboundProvisioningConfig) {
this.inboundProvisioningConfig = inboundProvisioningConfig;
}
/**
* @return
*/
public OutboundProvisioningConfig getOutboundProvisioningConfig() {
return outboundProvisioningConfig;
}
/**
* @param outboundProvisioningConfig
*/
public void setOutboundProvisioningConfig(OutboundProvisioningConfig outboundProvisioningConfig) {
this.outboundProvisioningConfig = outboundProvisioningConfig;
}
/**
* @return
*/
public ClaimConfig getClaimConfig() {
return claimConfig;
}
/**
* @param claimConfig
*/
public void setClaimConfig(ClaimConfig claimConfig) {
this.claimConfig = claimConfig;
}
/**
* @return
*/
public PermissionsAndRoleConfig getPermissionAndRoleConfig() {
return permissionAndRoleConfig;
}
/**
* @param permissionAndRoleConfig
*/
public void setPermissionAndRoleConfig(PermissionsAndRoleConfig permissionAndRoleConfig) {
this.permissionAndRoleConfig = permissionAndRoleConfig;
}
/**
* @return
*/
public String getApplicationName() {
return applicationName;
}
/**
* @param applicationName
*/
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
/**
* @return
*/
public User getOwner() {
return owner;
}
/**
* @param owner
*/
public void setOwner(User owner) {
this.owner = owner;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isSaasApp() {
return saasApp;
}
public void setSaasApp(boolean saasApp) {
this.saasApp = saasApp;
}
public ServiceProviderProperty[] getSpProperties() {
return spProperties;
}
public void setSpProperties(ServiceProviderProperty[] spProperties) {
this.spProperties = spProperties;
}
}