Java tutorial
/* * Unless explicitly acquired and licensed from Licensor under another license, the contents of * this file are subject to the Reciprocal Public License ("RPL") Version 1.5, or subsequent * versions as allowed by the RPL, and You may not copy or use this file in either source code * or executable form, except in compliance with the terms and conditions of the RPL * * All software distributed under the RPL is provided strictly on an "AS IS" basis, WITHOUT * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND LICENSOR HEREBY DISCLAIMS ALL SUCH * WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RPL for specific language * governing rights and limitations under the RPL. * * http://opensource.org/licenses/RPL-1.5 * * Copyright 2012-2015 Open Justice Broker Consortium */ package org.ojbc.web.portal.services; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import javax.annotation.Resource; import javax.xml.transform.sax.SAXSource; import org.apache.commons.codec.CharEncoding; import org.apache.commons.lang3.StringUtils; import org.ojbc.web.portal.controllers.dto.PersonFilterCommand; import org.ojbc.web.portal.controllers.dto.SubscriptionFilterCommand; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Service; import org.xml.sax.InputSource; @Service public class SearchResultConverter implements ApplicationContextAware { @Resource XsltTransformerService xsltTransformerService; @Value("${personSearchResultXslLocation:classpath:xsl/personSearchResult.xsl}") org.springframework.core.io.Resource searchResultXsl; @Value("classpath:xsl/vehicleSearchResult.xsl") org.springframework.core.io.Resource vehicleSearchResultXsl; @Value("classpath:xsl/incidentSearchResult.xsl") org.springframework.core.io.Resource incidentSearchResultXsl; @Value("classpath:xsl/firearmSearchResult.xsl") org.springframework.core.io.Resource firearmSearchResultXsl; @Value("classpath:xsl/personFilter.xsl") org.springframework.core.io.Resource personFilterXsl; @Value("classpath:xsl/subscriptionFilter.xsl") org.springframework.core.io.Resource subscriptionFilterXsl; @Value("classpath:xsl/personFilterCleanupMerged.xsl") org.springframework.core.io.Resource personFilterCleanupMergedXsl; @Value("classpath:xsl/subscriptionSearchResult.xsl") org.springframework.core.io.Resource subscriptionSearchResultXsl; @Value("classpath:xsl/rapbackSearchResult.xsl") org.springframework.core.io.Resource rapbackSearchResultXsl; @Value("classpath:xsl/criminalIdentificationSearchResult.xsl") org.springframework.core.io.Resource criminalIdentificationSearchResultXsl; @Value("classpath:xsl/identityBasedAccessControlResult.xsl") org.springframework.core.io.Resource identityBasedAccessControlResultXsl; @Value("${rapbackValidationButtonShowingPeriod:30}") Integer rapbackValidationButtonShowingPeriod; @Resource Map<String, String> searchDetailToXsl; private ApplicationContext applicationContext; private Map<String, org.springframework.core.io.Resource> xsls = new HashMap<String, org.springframework.core.io.Resource>(); public String convertPersonSearchResult(String searchContent, Map<String, Object> params) { return convertXml(searchContent, searchResultXsl, params); } public String convertVehicleSearchResult(String searchContent, Map<String, Object> params) { return convertXml(searchContent, vehicleSearchResultXsl, params); } public String convertIncidentSearchResult(String searchContent, Map<String, Object> params) { return convertXml(searchContent, incidentSearchResultXsl, params); } public String convertFirearmSearchResult(String searchContent, Map<String, Object> params) { return convertXml(searchContent, firearmSearchResultXsl, params); } public String convertRapbackSearchResult(String searchContent) { if (StringUtils.isBlank(searchContent)) { return ""; } Map<String, Object> params = new HashMap<String, Object>(); params.put("rapbackValidationButtonShowingPeriod", rapbackValidationButtonShowingPeriod); return convertXml(searchContent, rapbackSearchResultXsl, params); } public String convertDetailSearchResult(String searchContent, String systemName, String activeAccordionId) { if (StringUtils.isNotBlank(activeAccordionId)) { Map<String, Object> params = new HashMap<String, Object>(); params.put("activeAccordionId", activeAccordionId); return convertXml(searchContent, getResource(systemName), params); } else { return convertXml(searchContent, getResource(systemName), null); } } public String convertSubscriptionSearchResult(String searchContent, Map<String, Object> params) { return convertXml(searchContent, subscriptionSearchResultXsl, params); } public String convertIdentityBasedAccessControlResult(String searchContent, Map<String, Object> params) { return convertXml(searchContent, identityBasedAccessControlResultXsl, params); } org.springframework.core.io.Resource getResource(String systemName) { systemName = systemName.trim(); org.springframework.core.io.Resource resource = xsls.get(systemName); if (resource == null) { resource = applicationContext.getResource("classpath:xsl/" + searchDetailToXsl.get(systemName)); xsls.put(systemName, resource); } return resource; } private String convertXml(String searchContent, org.springframework.core.io.Resource resource, Map<String, Object> params) { return xsltTransformerService.transform(createSource(new ByteArrayInputStream(searchContent.getBytes())), createSourceAndSetSystemId(resource), params); } private SAXSource createSource(InputStream inputStream) { InputSource inputSource = new InputSource(inputStream); inputSource.setEncoding(CharEncoding.UTF_8); return new SAXSource(inputSource); } private SAXSource createSourceAndSetSystemId(org.springframework.core.io.Resource inputStream) { try { SAXSource inputSource; inputSource = createSource(inputStream.getInputStream()); //need to setSystemId because xsl needs this set in order for to <import> to know where to look to load relative paths inputSource.setSystemId(inputStream.getURL().toExternalForm()); return inputSource; } catch (Exception e) { throw new RuntimeException("Unable to read XML/XSL", e); } } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public String filterXml(String xmlContent, PersonFilterCommand personFilterCommand) { String filterResult1 = convertXml(xmlContent, personFilterXsl, personFilterCommand.getParamsMap()); return convertXml(filterResult1, personFilterCleanupMergedXsl, personFilterCommand.getParamsMap()); } public String filterXml(String xmlContent, SubscriptionFilterCommand subFilterCmd) { Map<String, Object> paramsMap = new HashMap<String, Object>(); paramsMap.put("currentDateTime", subFilterCmd.getCurrentDate()); paramsMap.put("filterSubscriptionStatus", subFilterCmd.getSubscriptionStatus()); paramsMap.put("validationDueWarningDays", subFilterCmd.getValidationDueWarningDays()); String filterResult = convertXml(xmlContent, subscriptionFilterXsl, paramsMap); return filterResult; } public String convertCriminalIdentificationSearchResult(String searchContent) { if (StringUtils.isBlank(searchContent)) { return ""; } return convertXml(searchContent, criminalIdentificationSearchResultXsl, null); } public String convertIdentificationResultsQueryResult(String searchContent, Object object) { // TODO Auto-generated method stub return null; } }