/* * Copyright (c) 2010, 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.claim.mgt; import org.wso2.carbon.claim.mgt.dto.ClaimAttributeDTO; import org.wso2.carbon.claim.mgt.dto.ClaimDTO; import org.wso2.carbon.claim.mgt.dto.ClaimDialectDTO; import org.wso2.carbon.claim.mgt.dto.ClaimMappingDTO; import org.wso2.carbon.user.api.Claim; import org.wso2.carbon.user.api.ClaimMapping; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class ClaimAdminService { /** * @throws ClaimManagementException */ public ClaimDialectDTO[] getClaimMappings() throws ClaimManagementException { ClaimMapping[] claimMappings = null; List<ClaimMapping> mappingList = null; Map<String, List<ClaimMapping>> claimMap = null; List<ClaimDialect> claims = null; ClaimDialect dto = null; claimMappings = ClaimManagerHandler.getInstance().getAllClaimMappings(); if (claimMappings == null || claimMappings.length == 0) { return new ClaimDialectDTO[0]; } claimMap = new HashMap<>(); claims = new ArrayList<>(); for (int i = 0; i < claimMappings.length; i++) { String dialectUri = claimMappings[i].getClaim().getDialectURI(); if (!claimMap.containsKey(dialectUri)) { mappingList = new ArrayList<>(); mappingList.add(claimMappings[i]); claimMap.put(dialectUri, mappingList); } else { mappingList = claimMap.get(dialectUri); mappingList.add(claimMappings[i]); } } for (Entry<String, List<ClaimMapping>> entry : claimMap.entrySet()) { mappingList = entry.getValue(); dto = new ClaimDialect(); ClaimMapping[] claimMappingArray = mappingList.toArray(new ClaimMapping[mappingList.size()]); // Sort the claims in the alphabetical order Arrays.sort(claimMappingArray, new Comparator<ClaimMapping>() { @Override public int compare(ClaimMapping o1, ClaimMapping o2) { return o1.getClaim().getDescription().toLowerCase().compareTo( o2.getClaim().getDescription().toLowerCase()); } }); dto.setClaimMapping(claimMappingArray); dto.setDialectUri(entry.getKey()); claims.add(dto); } /*convert the array of ClaimDialects in complex structure to an array of ClaimDialectDTO in simple structure for the purpose of exposing as a data structure by the web service method. That will make it easy for POJO to generate client side code and wsdl with out complexity*/ return convertClaimDialectArrayToClaimDialectDTOArray( claims.toArray(new ClaimDialect[claims.size()])); } /** * @param dialectUri * @return * @throws ClaimManagementException */ public ClaimDialectDTO getClaimMappingByDialect(String dialectUri) throws ClaimManagementException { ClaimMapping[] claimMappings; ClaimDialect claimDialect; claimMappings = ClaimManagerHandler.getInstance().getAllSupportedClaimMappings(dialectUri); class ClaimComparator implements Comparator<ClaimMapping> { @Override public int compare(ClaimMapping o1, ClaimMapping o2) { return o1.getClaim().getDisplayTag().compareTo(o2.getClaim().getDisplayTag()); } } // Sort the claims in the alphabetical order Arrays.sort(claimMappings, new Comparator<ClaimMapping>() { @Override public int compare(ClaimMapping o1, ClaimMapping o2) { return o1.getClaim().getDescription().toLowerCase().compareTo( o2.getClaim().getDescription().toLowerCase()); } }); if (claimMappings.length == 0) { return null; } claimDialect = new ClaimDialect(); claimDialect.setClaimMapping(claimMappings); claimDialect.setDialectUri(dialectUri); /*Convert the ClaimDialect type to ClaimDialectDTO type for simplicity of structure when exposing through the web service as a data structure.*/ return convertClaimDialectToClaimDialectDTO(claimDialect); } /** * @param * @throws ClaimManagementException */ public void upateClaimMapping(ClaimMappingDTO claimMappingDTO) throws ClaimManagementException { /*Convert the simple structure of ClaimMapping received, to the complex structure of ClaimMapping which is used in the back end. */ ClaimMapping claimMapping = convertClaimMappingDTOToClaimMapping(claimMappingDTO); ClaimManagerHandler.getInstance().updateClaimMapping(claimMapping); } /** * @param * @throws ClaimManagementException */ public void addNewClaimMapping(ClaimMappingDTO claimMappingDTO) throws ClaimManagementException { /*Convert the simple structure of ClaimMapping received, to the complex structure of ClaimMapping which is used in the back end. */ ClaimMapping claimMapping = convertClaimMappingDTOToClaimMapping(claimMappingDTO); ClaimManagerHandler handler = ClaimManagerHandler.getInstance(); ClaimMapping currentMapping = handler.getClaimMapping( claimMapping.getClaim().getClaimUri()); if (currentMapping != null) { throw new ClaimManagementException( "Duplicate claim exist in the system. Please pick a different Claim Uri"); } handler.addNewClaimMapping(claimMapping); } /** * @param dialectUri * @param claimUri * @throws ClaimManagementException */ public void removeClaimMapping(String dialectUri, String claimUri) throws ClaimManagementException { ClaimManagerHandler.getInstance().removeClaimMapping(dialectUri, claimUri); } /** * @param */ public void addNewClaimDialect(ClaimDialectDTO claimDialectDTO) throws ClaimManagementException { /*Convert the simple structure of ClaimDialectDTO received, to the complex structure of ClaimDialect which is used in the back end. */ ClaimDialect claimDialect = convertClaimDialectDTOToClaimDialect(claimDialectDTO); ClaimManagerHandler.getInstance().addNewClaimDialect(claimDialect); } /** * @param */ public void removeClaimDialect(String dialectUri) throws ClaimManagementException { ClaimManagerHandler.getInstance().removeClaimDialect(dialectUri); } private ClaimDialectDTO[] convertClaimDialectArrayToClaimDialectDTOArray( ClaimDialect[] claimDialects) { List<ClaimDialectDTO> claimDialectDTOList = new ArrayList<>(); for (ClaimDialect claimDialect : claimDialects) { ClaimDialectDTO claimDialectDTO = convertClaimDialectToClaimDialectDTO(claimDialect); claimDialectDTOList.add(claimDialectDTO); } return claimDialectDTOList.toArray(new ClaimDialectDTO[claimDialectDTOList.size()]); } private ClaimDialectDTO convertClaimDialectToClaimDialectDTO(ClaimDialect claimDialect) { ClaimDialectDTO claimDialectDTO = new ClaimDialectDTO(); claimDialectDTO.setClaimMappings(convertClaimMappingArrayToClaimMappingDTOArray( claimDialect.getClaimMapping())); claimDialectDTO.setDialectURI(claimDialect.getDialectUri()); claimDialectDTO.setUserStore(claimDialect.getUserStore()); return claimDialectDTO; } private ClaimMappingDTO[] convertClaimMappingArrayToClaimMappingDTOArray( ClaimMapping[] claimMappings) { List<ClaimMappingDTO> claimMappingDTOList = new ArrayList<ClaimMappingDTO>(); for (ClaimMapping claimMapping : claimMappings) { ClaimMappingDTO claimMappingDTO = convertClaimMappingToClaimMappingDTO(claimMapping); claimMappingDTOList.add(claimMappingDTO); } return claimMappingDTOList.toArray(new ClaimMappingDTO[claimMappingDTOList.size()]); } private ClaimMapping[] convertClaimMappingDTOArrayToClaimMappingArray( ClaimMappingDTO[] claimMappingDTOs) { List<ClaimMapping> claimMappings = new ArrayList<ClaimMapping>(); for (ClaimMappingDTO claimMappingDTO : claimMappingDTOs) { ClaimMapping claimMapping = convertClaimMappingDTOToClaimMapping(claimMappingDTO); claimMappings.add(claimMapping); } return claimMappings.toArray(new ClaimMapping[claimMappings.size()]); } private ClaimMappingDTO convertClaimMappingToClaimMappingDTO(ClaimMapping claimMapping) { ClaimMappingDTO claimMappingDTO = new ClaimMappingDTO(); claimMappingDTO.setClaim(convertClaimToClaimDTO(claimMapping.getClaim())); claimMappingDTO.setMappedAttribute(claimMapping.getMappedAttribute()); Map<String, String> attributes = claimMapping.getMappedAttributes(); if (attributes != null) { ClaimAttributeDTO[] attrDto = new ClaimAttributeDTO[attributes.size()]; int i = 0; for (Map.Entry<String, String> entry : attributes.entrySet()) { ClaimAttributeDTO dto = new ClaimAttributeDTO(); dto.setAttributeName(entry.getValue()); dto.setDomainName(entry.getKey()); attrDto[i++] = dto; } claimMappingDTO.setMappedAttributes(attrDto); } return claimMappingDTO; } private ClaimMapping convertClaimMappingDTOToClaimMapping(ClaimMappingDTO claimMappingDTO) { ClaimMapping claimMapping = new ClaimMapping( convertClaimDTOToClaim(claimMappingDTO.getClaim()), claimMappingDTO.getMappedAttribute()); ClaimAttributeDTO[] attributes = claimMappingDTO.getMappedAttributes(); if (attributes != null) { for (ClaimAttributeDTO attribute : attributes) { if (attribute.getDomainName() != null) { claimMapping.setMappedAttribute(attribute.getDomainName(), attribute.getAttributeName()); } } } return claimMapping; } private ClaimDTO convertClaimToClaimDTO(Claim claim) { ClaimDTO claimDTO = new ClaimDTO(); claimDTO.setClaimUri(claim.getClaimUri()); claimDTO.setDescription(claim.getDescription()); claimDTO.setDialectURI(claim.getDialectURI()); claimDTO.setDisplayOrder(claim.getDisplayOrder()); claimDTO.setDisplayTag(claim.getDisplayTag()); claimDTO.setRegEx(claim.getRegEx()); claimDTO.setRequired(claim.isRequired()); claimDTO.setSupportedByDefault(claim.isSupportedByDefault()); claimDTO.setValue(claim.getValue()); claimDTO.setCheckedAttribute(claim.isCheckedAttribute()); claimDTO.setReadOnly(claim.isReadOnly()); return claimDTO; } private Claim convertClaimDTOToClaim(ClaimDTO claimDTO) { Claim claim = new Claim(); claim.setSupportedByDefault(claimDTO.isSupportedByDefault()); claim.setValue(claimDTO.getValue()); claim.setClaimUri(claimDTO.getClaimUri()); claim.setDescription(claimDTO.getDescription()); claim.setDialectURI(claimDTO.getDialectURI()); claim.setDisplayOrder(claimDTO.getDisplayOrder()); claim.setDisplayTag(claimDTO.getDisplayTag()); claim.setRegEx(claimDTO.getRegEx()); claim.setRequired(claimDTO.isRequired()); claim.setCheckedAttribute(claimDTO.isCheckedAttribute()); claim.setReadOnly(claimDTO.isReadOnly()); return claim; } private ClaimDialect convertClaimDialectDTOToClaimDialect(ClaimDialectDTO claimDialectDTO) { ClaimDialect claimDialect = new ClaimDialect(); claimDialect.setClaimMapping(convertClaimMappingDTOArrayToClaimMappingArray( claimDialectDTO.getClaimMappings())); claimDialect.setDialectUri(claimDialectDTO.getDialectURI()); claimDialect.setUserStore(claimDialectDTO.getUserStore()); return claimDialect; } }