diff --git a/src/main/java/org/sunbird/common/util/Constants.java b/src/main/java/org/sunbird/common/util/Constants.java index 08fc19862..e3f1c57d1 100644 --- a/src/main/java/org/sunbird/common/util/Constants.java +++ b/src/main/java/org/sunbird/common/util/Constants.java @@ -504,6 +504,9 @@ public class Constants { public static final String PUBLIC_COURSE_LIST = "exploreOpenCourseList"; public static final String LAST_UPDATED_ON = "lastUpdatedOn"; public static final String DESCENDING_ORDER = "desc"; + public static final String SB_SUB_ORG_TYPE = "sbSubOrgType"; + public static final String ORG_CODE = "orgCode"; + public static final String MDO = "mdo"; private Constants() { throw new IllegalStateException("Utility class"); diff --git a/src/main/java/org/sunbird/org/service/ExtendedOrgServiceImpl.java b/src/main/java/org/sunbird/org/service/ExtendedOrgServiceImpl.java index 57715f6a1..72e58becf 100644 --- a/src/main/java/org/sunbird/org/service/ExtendedOrgServiceImpl.java +++ b/src/main/java/org/sunbird/org/service/ExtendedOrgServiceImpl.java @@ -60,28 +60,48 @@ public SBApiResponse createOrg(Map request, String userToken) { Map updateRequest = new HashMap(); updateRequest.put(Constants.SB_ORG_ID.toLowerCase(), orgId); String orgType = (String) requestData.get(Constants.ORGANIZATION_TYPE); - if (requestData.containsKey(Constants.SB_ROOT_ORG_ID) - && StringUtils.isNotEmpty((String) requestData.get(Constants.SB_ROOT_ORG_ID))) { - updateRequest.put(Constants.SB_ROOT_ORG_ID, (String) requestData.get(Constants.SB_ROOT_ORG_ID)); - } else if (!(Constants.STATE.equalsIgnoreCase(orgType) - || Constants.MINISTRY.equalsIgnoreCase(orgType))) { - // OrgType is not state / ministry and sbRootOrgId value given as Null... let's - // find the rootOrgId - String sbRootOrgId = findRootOrgId((String) requestData.get(Constants.ORG_NAME), - (String) requestData.get(Constants.MAP_ID)); - if (StringUtils.isNotEmpty(sbRootOrgId)) { - updateRequest.put(Constants.SB_ROOT_ORG_ID, sbRootOrgId); - } + String orgName = (String) requestData.get(Constants.ORG_NAME); + updateRequest.put(Constants.SB_ORG_ID, orgId); + updateRequest.put(Constants.ORG_NAME, orgName); + updateRequest.put(Constants.SB_ORG_TYPE, orgType); + String mapId = (String) requestData.get(Constants.MAP_ID); + String orgCode = (String) requestData.get(Constants.ORG_CODE); + String sbRootOrgid = (String) requestData.get(Constants.SB_ROOT_ORG_ID); + updateRequest.put(Constants.SB_SUB_ORG_TYPE, requestData.get(Constants.ORGANIZATION_SUB_TYPE)); + if (!StringUtils.isEmpty(mapId)) { + updateRequest.put(Constants.MAP_ID, mapId); + } else { + mapId = createMapId(requestData); + updateRequest.put(Constants.MAP_ID, mapId); + updateRequest.put(Constants.ORG_CODE, mapId); } - Map compositeKey = new HashMap() { - private static final long serialVersionUID = 1L; - { - put(Constants.ORG_NAME, requestData.get(Constants.ORG_NAME)); - put(Constants.MAP_ID, requestData.get(Constants.MAP_ID)); + if (!StringUtils.isEmpty(orgCode)) { + updateRequest.put(Constants.ORG_CODE, orgCode); + } + if (!Constants.STATE.equalsIgnoreCase(orgType) && !Constants.MINISTRY.equalsIgnoreCase(orgType)) { + updateRequest.put(Constants.PARENT_MAP_ID, requestData.get(Constants.PARENT_MAP_ID)); + if (!StringUtils.isEmpty(sbRootOrgid)) { + updateRequest.put(Constants.SB_ROOT_ORG_ID, sbRootOrgid); + } else { + updateRequest.put(Constants.SB_ROOT_ORG_ID, fetchRootOrgId(requestData)); } - }; - cassandraOperation.updateRecord(Constants.SUNBIRD_KEY_SPACE_NAME, Constants.TABLE_ORG_HIERARCHY, - updateRequest, compositeKey); + } else { + updateRequest.put(Constants.PARENT_MAP_ID, Constants.SPV); + } + if (!StringUtils.isEmpty((String) requestData.get(Constants.MAP_ID))) { + Map compositeKey = new HashMap() { + private static final long serialVersionUID = 1L; + { + put(Constants.ORG_NAME, orgName); + put(Constants.MAP_ID, requestData.get(Constants.MAP_ID)); + } + }; + cassandraOperation.updateRecord(Constants.SUNBIRD_KEY_SPACE_NAME, Constants.TABLE_ORG_HIERARCHY, + updateRequest, compositeKey); + } else { + cassandraOperation.insertRecord(Constants.SUNBIRD_KEY_SPACE_NAME, Constants.TABLE_ORG_HIERARCHY, + updateRequest); + } response.getResult().put(Constants.ORGANIZATION_ID, orgId); response.getResult().put(Constants.RESPONSE, Constants.SUCCESS); } else { @@ -195,6 +215,7 @@ public SBApiResponse orgExtSearch(Map request) throws Exception private String validateOrgRequest(Map requestData) { List params = new ArrayList(); StringBuilder strBuilder = new StringBuilder(); + String orgType = (String) requestData.get(Constants.ORGANIZATION_TYPE); Map request = (Map) requestData.get(Constants.REQUEST); if (ObjectUtils.isEmpty(request)) { strBuilder.append("Request object is empty."); @@ -205,18 +226,18 @@ private String validateOrgRequest(Map requestData) { params.add(Constants.ORG_NAME); } - if (StringUtils.isEmpty((String) request.get(Constants.ORGANIZATION_TYPE))) { + if (StringUtils.isEmpty(((String) orgType))) { params.add(Constants.ORGANIZATION_TYPE); + } else if (!Constants.STATE.equalsIgnoreCase(orgType) && !Constants.MINISTRY.equalsIgnoreCase(orgType)) { + if (StringUtils.isEmpty((String) request.get(Constants.PARENT_MAP_ID))) { + params.add(Constants.PARENT_MAP_ID); + } } if (StringUtils.isEmpty((String) request.get(Constants.ORGANIZATION_SUB_TYPE))) { params.add(Constants.ORGANIZATION_SUB_TYPE); } - if (StringUtils.isEmpty((String) request.get(Constants.MAP_ID))) { - params.add(Constants.MAP_ID); - } - if (ObjectUtils.isEmpty(request.get(Constants.IS_TENANT))) { params.add(Constants.IS_TENANT); } @@ -346,4 +367,57 @@ private String findRootOrgId(String orgName, String mapId) { return StringUtils.EMPTY; } + + private String createMapId(Map requestData) { + Map queryRequest = new HashMap<>(); + String prefix = StringUtils.EMPTY; + String mapIdNew = StringUtils.EMPTY; + String orgType = (String) requestData.get(Constants.ORGANIZATION_TYPE); + if (!Constants.STATE.equalsIgnoreCase(orgType) && !Constants.MINISTRY.equalsIgnoreCase(orgType)) { + queryRequest.put(Constants.PARENT_MAP_ID, requestData.get(Constants.PARENT_MAP_ID)); + if (Constants.MDO.equalsIgnoreCase(orgType)) { + prefix = "D_"; + } else if (Constants.ORG.equalsIgnoreCase(orgType)) { + prefix = "O_"; + } else { + prefix = "X_"; + } + } else { + queryRequest.put(Constants.SB_ORG_TYPE, orgType); + if (Constants.STATE.equalsIgnoreCase(orgType)) { + prefix = "S_"; + } else if (Constants.MINISTRY.equalsIgnoreCase(orgType)) { + prefix = "M_"; + } + } + List> existingDataList = cassandraOperation.getRecordsByProperties( + Constants.KEYSPACE_SUNBIRD, Constants.TABLE_ORG_HIERARCHY, queryRequest, + Arrays.asList(Constants.MAP_ID)); + if (CollectionUtils.isNotEmpty(existingDataList)) { + List mapIdList = new ArrayList<>(); + for (Map map : existingDataList) { + if (((String) map.get(Constants.MAP_ID)).startsWith(prefix)) + mapIdList.add((String) map.get(Constants.MAP_ID)); + } + mapIdNew = prefix + (mapIdList.size() + 1); + } else { + mapIdNew = prefix + "1"; + } + return mapIdNew; + } + + private String fetchRootOrgId(Map requestData) { + String sbOrgId = null; + Map queryRequest = new HashMap<>(); + queryRequest.put(Constants.MAP_ID, requestData.get(Constants.PARENT_MAP_ID)); + List fields = new ArrayList<>(); + fields.add(Constants.SB_ORG_ID); + List> sbRootOrgList = cassandraOperation.getRecordsByProperties(Constants.KEYSPACE_SUNBIRD, + Constants.TABLE_ORG_HIERARCHY, queryRequest, fields); + if (CollectionUtils.isNotEmpty(sbRootOrgList)) { + Map data = sbRootOrgList.get(0); + sbOrgId = (String) data.get(Constants.SB_ORG_ID); + } + return sbOrgId; + } } diff --git a/src/main/resources/cassandratablecolumn.properties b/src/main/resources/cassandratablecolumn.properties index c736dc121..ce07461be 100644 --- a/src/main/resources/cassandratablecolumn.properties +++ b/src/main/resources/cassandratablecolumn.properties @@ -37,3 +37,5 @@ enddate=endDate startdate=startDate firstname=firstName lastname=lastName +mapid=mapId +sborgid=sbOrgId \ No newline at end of file