001 package org.kuali.ole.service; 002 003 import org.kuali.ole.OLEConstants; 004 import org.kuali.ole.ingest.pojo.OleLocationGroup; 005 import org.kuali.ole.ingest.pojo.OleLocationIngest; 006 import org.kuali.ole.location.bo.OleLocation; 007 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader; 008 import org.kuali.rice.kew.api.exception.WorkflowException; 009 import org.kuali.rice.kim.api.identity.IdentityService; 010 import org.kuali.rice.krad.maintenance.MaintenanceDocument; 011 import org.kuali.rice.krad.rules.rule.event.SaveDocumentEvent; 012 import org.kuali.rice.krad.service.BusinessObjectService; 013 import org.kuali.rice.krad.service.DocumentService; 014 import org.kuali.rice.krad.service.KRADServiceLocator; 015 016 import java.io.IOException; 017 import java.net.URISyntaxException; 018 import java.util.ArrayList; 019 import java.util.HashMap; 020 import java.util.List; 021 import java.util.Map; 022 023 /** 024 * OleLocationServiceImpl generates list of location to perform location operation using xml content. 025 */ 026 public class OleLocationServiceImpl implements OleLocationService { 027 028 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OleLocationServiceImpl.class); 029 030 private BusinessObjectService businessObjectService; 031 private IdentityService identityService; 032 private DocumentService documentService; 033 private OleLocationConverterService oleLocationConverterService; 034 private List<OleLocationIngest> createLocationList = new ArrayList<OleLocationIngest>(); 035 private List<OleLocationIngest> updateLocationList = new ArrayList<OleLocationIngest>(); 036 037 /** 038 * Gets the instance of BusinessObjectService 039 * @return businessObjectService(BusinessObjectService) 040 */ 041 public BusinessObjectService getBusinessObjectService() { 042 if (null == businessObjectService) { 043 businessObjectService = KRADServiceLocator.getBusinessObjectService(); 044 } 045 return businessObjectService; 046 } 047 048 /** 049 * Gets the instance of IdentityService 050 * @param serviceName 051 * @param <T> 052 * @return <T extends Object> 053 */ 054 protected static <T extends Object> T getService(String serviceName) { 055 return GlobalResourceLoader.<T>getService(serviceName); 056 } 057 058 /** 059 * Sets the businessObjectService attribute value. 060 * @param businessObjectService 061 */ 062 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 063 this.businessObjectService = businessObjectService; 064 } 065 066 /** 067 * Gets the identityService attribute value. 068 * @return identityService 069 */ 070 public IdentityService getIdentityService() { 071 return identityService; 072 } 073 074 /** 075 * Sets the identityService attribute value. 076 * @param identityService 077 */ 078 public void setIdentityService(IdentityService identityService) { 079 this.identityService = identityService; 080 } 081 082 /** 083 * This method returns documentService 084 * @return DocumentService 085 */ 086 public DocumentService getDocumentService() { 087 return getService(OLEConstants.DOCUMENT_HEADER_SERVICE); 088 } 089 090 /** 091 * Sets the documentService attribute value. 092 * @param documentService 093 */ 094 public void setDocumentService(DocumentService documentService) { 095 this.documentService = documentService; 096 } 097 098 /** 099 * This method returns location using locationCode. 100 * @param locationCode 101 * @return OleLocation 102 */ 103 @Override 104 public OleLocation getLocation(String locationCode) { 105 LOG.debug("Inside the getLocation method"); 106 Map<String,Object> criteria = new HashMap<String,Object>(4); 107 criteria.put(OLEConstants.PATRON_ENTITY_ACTIVE, Boolean.TRUE); 108 return businessObjectService.findByPrimaryKey(OleLocation.class, criteria); 109 } 110 111 /** 112 * This method saves location document. 113 * @param locationDocument 114 * @return locationDocument.getDocumentNumber 115 * @throws WorkflowException 116 */ 117 private String saveLocationDocument(MaintenanceDocument locationDocument) throws WorkflowException { 118 getDocumentService().saveDocument(locationDocument, SaveDocumentEvent.class); 119 return locationDocument.getDocumentNumber(); 120 } 121 122 /** 123 * This method returns location number once location document is routed. 124 * @param locationDocument 125 * @return locationDocument.getDocumentNumber 126 * @throws WorkflowException 127 */ 128 private String routeLocationDocument(MaintenanceDocument locationDocument) throws WorkflowException{ 129 getDocumentService().routeDocument(locationDocument, null, null); 130 return locationDocument.getDocumentNumber(); 131 } 132 133 /** 134 * This method returns boolean after create location. 135 * @param oleLocation 136 * @return doc 137 */ 138 public boolean createLocation(OleLocation oleLocation) { 139 boolean doc = false; 140 OleLocation oleLocation1= getBusinessObjectService().save(oleLocation); 141 doc= true; 142 return doc; 143 } 144 145 /** 146 * This method updates location using oleLocation. 147 * @param oleLocation 148 * @return doc 149 */ 150 public boolean updateLocation(OleLocation oleLocation) { 151 boolean doc = false; 152 OleLocation oleLocation1= getBusinessObjectService().save(oleLocation); 153 doc= true; 154 return doc; 155 } 156 157 158 /** 159 * This method process the location details using xmlContent.This updates location if already exist in the list otherwise 160 * creates new location list. 161 * @param xmlContent 162 * @throws IOException 163 * @throws URISyntaxException 164 */ 165 private void processLocationDetails(String xmlContent) throws IOException, URISyntaxException { 166 167 OleLocationGroup oleLocationGroup =oleLocationConverterService.buildLocationFromFileContent(xmlContent); 168 List<OleLocation> existingLocationList = (List<OleLocation>) getBusinessObjectService().findAll(OleLocation.class); 169 String oleLocationCode ; 170 OleLocationIngest oleLocationIngest; 171 172 for(int i = 0;i<oleLocationGroup.getLocationGroup().size();i++){ 173 oleLocationIngest = oleLocationGroup.getLocationGroup().get(i); 174 oleLocationCode = oleLocationIngest.getLocationCode(); 175 for(int j=0;j<existingLocationList.size();j++){ 176 if(oleLocationCode.equals(existingLocationList.get(j).getLocationCode())){ 177 updateLocationList.add(oleLocationIngest); 178 }else if(!(oleLocationCode == null) || !(oleLocationCode.equals(""))){ 179 createLocationList.add(oleLocationIngest); 180 } 181 } 182 } 183 } 184 } 185