All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ojbc.util.helper.NIEMXMLUtils Maven / Gradle / Ivy

There is a newer version: 2.0.2
Show newest version
/*
 * 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.util.helper;

import org.apache.commons.lang.StringUtils;
import org.joda.time.DateTime;
import org.ojbc.util.xml.OjbcNamespaceContext;
import org.ojbc.util.xml.XmlUtils;
import org.ojbc.util.xml.namespaces.NIEMNamespaces;
import org.ojbc.util.xml.namespaces.OJBNamespaces;
import org.ojbc.web.SearchFieldMetadata;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class NIEMXMLUtils {
		
	//        
	//            2012-06-20T12:20:00
	//        
	public static Element createElementDateTime(Document doc, String wrapperElementName, DateTime dateTime)
	{
		Element dateTimeWrapperElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, wrapperElementName);
		
		Element dateTimeElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "DateTime");
		dateTimeElement.setTextContent(dateTime.toString("yyyy-MM-dd'T'HH:mm:ss"));
		
		dateTimeWrapperElement.appendChild(dateTimeElement);
		
		return dateTimeWrapperElement;
	}

	//    
	//    	1957-04-01
	//    
	public static Element createElementDate(Document doc, String wrapperElementName, DateTime dateTime)
	{
		Element dateWrapperElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, wrapperElementName);
		
		Element datelement = XmlUtils.appendElement(dateWrapperElement, OjbcNamespaceContext.NS_NC, "Date");
		datelement.setTextContent(dateTime.toString("yyyy-MM-dd"));
		
		dateWrapperElement.appendChild(datelement);
		
		return dateWrapperElement;
	}	

	//		
	//			2005
	//		
	public static Element createElementDateYear(Document doc, String wrapperElementName, Integer year)
	{
		Element dateWrapperElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, wrapperElementName);
		
		Element datelement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "Year");
		datelement.setTextContent(year.toString());
		
		dateWrapperElement.appendChild(datelement);
		
		return dateWrapperElement;
	}	

	public static Element createBirthDateRange(Document doc, Element parentElement, DateTime personDateOfBirthRangeStart, DateTime personDateOfBirthRangeEnd)
	{
		Element personDateOfBirthRangeStartElement = createElementDate(doc, "StartDate", personDateOfBirthRangeStart);
		Element personDateOfBirthRangeEndElement = createElementDate(doc, "EndDate", personDateOfBirthRangeEnd);

		parentElement.appendChild(personDateOfBirthRangeStartElement);
		parentElement.appendChild(personDateOfBirthRangeEndElement);
		
		return parentElement;
	}
	
	public static Element createNC20Element(Document doc, String elementName, String elementValue)
	{
		Element returnElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, elementName);
		returnElement.setTextContent(elementValue);
		return returnElement;
	}
	
	public static Element createMeasureRangeValueOrTextElement(Document doc,
			Integer rangeStart,
			Integer rangeEnd, 
			Integer measureTextValue,
			String lengthCode,
			String weightCode) {
		
		Element heightOrWeightElement = null;
		
		if (StringUtils.isNotBlank(lengthCode))
		{
			heightOrWeightElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "PersonHeightMeasure");
		}

		if (StringUtils.isNotBlank(weightCode))
		{
			heightOrWeightElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "PersonWeightMeasure");
		}

		Element measureRangeValueElement = null;
		Element measureTextElement = null;
		
		if (rangeStart != null && rangeEnd != null)
		{	
			measureRangeValueElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "MeasureRangeValue");
			
			Element rangeMinimumElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "RangeMinimumValue");
			rangeMinimumElement.setTextContent(String.valueOf(rangeStart));
			measureRangeValueElement.appendChild(rangeMinimumElement);
			
			Element rangeMaximumElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "RangeMaximumValue");
			rangeMaximumElement.setTextContent(String.valueOf(rangeEnd));
			measureRangeValueElement.appendChild(rangeMaximumElement);
			
			heightOrWeightElement.appendChild(measureRangeValueElement);
		}
		
		if (measureTextValue != null)
		{
			measureTextElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "MeasureText");
			measureTextElement.setTextContent(String.valueOf(measureTextValue));
			
			heightOrWeightElement.appendChild(measureTextElement);
		}	
		
		if (StringUtils.isNotBlank(lengthCode))
		{
			Element lengthUnitCode = doc.createElementNS(NIEMNamespaces.NC_20_NS, "LengthUnitCode");
			lengthUnitCode.setTextContent(lengthCode);
			heightOrWeightElement.appendChild(lengthUnitCode);
		}	
		
		if (StringUtils.isNotBlank(weightCode))
		{
			Element weightUnitCode = doc.createElementNS(NIEMNamespaces.NC_20_NS, "WeightUnitCode");
			weightUnitCode.setTextContent(weightCode);
			heightOrWeightElement.appendChild(weightUnitCode);
		}
		
		return heightOrWeightElement;
		
	}
	
	public static Element createPersonNameElement(Document doc, String personGivenName,
			SearchFieldMetadata personGivenNameMetaData,
			String personMiddleName, String personSurName,
			SearchFieldMetadata personSurNameMetaData) {

		//Set Person Name
		Element personNameElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "PersonName");

		if (StringUtils.isNotBlank(personGivenName))
		{	
			Element personGivenNameElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "PersonGivenName");
			personGivenNameElement.setTextContent(personGivenName);
			personNameElement.appendChild(personGivenNameElement);
			
			if (personGivenNameMetaData == SearchFieldMetadata.ExactMatch)
			{
				personGivenNameElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "metadata", "SM001");
			}
			if (personGivenNameMetaData == SearchFieldMetadata.StartsWith)
			{
				personGivenNameElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "metadata", "SM002");
			}	
			
		}

		if (StringUtils.isNotBlank(personMiddleName))
		{	
			Element personMiddleNameElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "PersonMiddleName");
			personMiddleNameElement.setTextContent(personMiddleName);
			personNameElement.appendChild(personMiddleNameElement);
		}

		if (StringUtils.isNotBlank(personSurName))
		{	
			Element personSurNameElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "PersonSurName");
			personSurNameElement.setTextContent(personSurName);
			personNameElement.appendChild(personSurNameElement);
			
			if (personSurNameMetaData == SearchFieldMetadata.ExactMatch)
			{
				personSurNameElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "metadata", "SM001");
			}
			if (personSurNameMetaData == SearchFieldMetadata.StartsWith)
			{
				personSurNameElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "metadata", "SM002");
			}	
			
		}
		
		return personNameElement;
	}	

	public static Element createPersonsSearchRequestElement(Document doc, String id)
	{
		Element element = doc.createElementNS(OJBNamespaces.PERSON_SEARCH_REQUEST, "PersonSearchRequest");
		element.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", "SM003");
		
		return element;
	}

	//
	//	123456789
	//
	public static Element createPersonSSNElement(Document doc,
			String personSocialSecurityNumber) {
		Element personSSNElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "PersonSSNIdentification");
		Element	identificationIDElement  = doc.createElementNS(NIEMNamespaces.NC_20_NS, "IdentificationID");
		identificationIDElement.setTextContent(personSocialSecurityNumber.trim());
		
		personSSNElement.appendChild(identificationIDElement);
		
		return personSSNElement;
	}

	//
	//	
	//		
	//			12345
	//			VT
	//		
	//	
	//	
	//		12345
	//	
	//	
	//		12345
	//	
	//
	public static Element createPersonAugmentation(Document doc,
	String personDriversLicenseNumber,
	String personDriversLicenseIssuer,
	String personSID,
	String personFBINumber)
	{
		Element personAugmentationElement = doc.createElementNS(NIEMNamespaces.JXDM_41_NS, "PersonAugmentation");

		if (StringUtils.isNotBlank(personDriversLicenseNumber) || StringUtils.isNotBlank(personDriversLicenseIssuer))
		{	
			Element driversLicenseElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "DriverLicense");
			
			Element driversLicenseIdentificationElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "DriverLicenseIdentification");
			
			if (StringUtils.isNotBlank(personDriversLicenseNumber))
			{		
				Element identificationIDElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "IdentificationID");
				identificationIDElement.setTextContent(personDriversLicenseNumber);
				
				driversLicenseIdentificationElement.appendChild(identificationIDElement);
			}	
				
			if (StringUtils.isNotBlank(personDriversLicenseIssuer))
			{	
				Element identificationSourceTextElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "IdentificationSourceText");
				identificationSourceTextElement.setTextContent(personDriversLicenseIssuer);
			
				driversLicenseIdentificationElement.appendChild(identificationSourceTextElement);
			}
				
			driversLicenseElement.appendChild(driversLicenseIdentificationElement);
			
			personAugmentationElement.appendChild(driversLicenseElement);
		}	

		if (StringUtils.isNotBlank(personFBINumber))
		{	
			Element fbiNumberElement = doc.createElementNS(NIEMNamespaces.JXDM_41_NS, "PersonFBIIdentification");
			
			Element identificationIDElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "IdentificationID");
			identificationIDElement.setTextContent(personFBINumber);
			fbiNumberElement.appendChild(identificationIDElement);
			
			personAugmentationElement.appendChild(fbiNumberElement);
		}	
		
		if (StringUtils.isNotBlank(personSID))
		{
			Element personSIDElement = doc.createElementNS(NIEMNamespaces.JXDM_41_NS, "PersonStateFingerprintIdentification");
			
			Element identificationIDElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "IdentificationID");
			identificationIDElement.setTextContent(personSID);
			personSIDElement.appendChild(identificationIDElement);
			
			personAugmentationElement.appendChild(personSIDElement);
			
		}

		return personAugmentationElement;
	}
	
	//
	//	exact
	//
	//
	//	startsWith
	//

	public static Element createSearchMetaData(Document doc, String searchFieldMetaDataNamespace, SearchFieldMetadata searchFieldMetadata)
	{
		Element searchFieldMetadataElement = doc.createElementNS(searchFieldMetaDataNamespace, "SearchMetadata");
		
		if (searchFieldMetadata != null) {
		    switch(searchFieldMetadata) {
		    case ExactMatch:
		        searchFieldMetadataElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", "SM001");
		        break; 
		    case StartsWith:
		        searchFieldMetadataElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", "SM002");
		        break;
            default:
                break; 
		    }
		}

		Element searchFieldQualifierCodeElement = doc.createElementNS(searchFieldMetaDataNamespace, "SearchQualifierCode");
		
		if (searchFieldMetadata != null) {
		    searchFieldQualifierCodeElement.setTextContent(searchFieldMetadata.getMetadata());
		}
		
		searchFieldMetadataElement.appendChild(searchFieldQualifierCodeElement);
		
		return searchFieldMetadataElement;
	}
	
	//
	//	John Doe
	//	Criminal Justice
	//
	
	public static Element createSearchMetaDataPurposeOnBehalfOf(Document doc, String searchFieldMetaDataNamespace, String id, String onBehalfOfText, String searchPurposeText)
	{
		Element searchFieldMetadataElement = doc.createElementNS(searchFieldMetaDataNamespace, "SearchMetadata");
		searchFieldMetadataElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", id);
		
		if (StringUtils.isNotBlank(onBehalfOfText))
		{
			Element searchRequestOnBehalfOfTextElement = doc.createElementNS(searchFieldMetaDataNamespace, "SearchRequestOnBehalfOfText");
			searchRequestOnBehalfOfTextElement.setTextContent(onBehalfOfText);
			searchFieldMetadataElement.appendChild(searchRequestOnBehalfOfTextElement);
		}	
				
		if (StringUtils.isNotBlank(searchPurposeText))
		{
			Element searchPurposeTextElement = doc.createElementNS(searchFieldMetaDataNamespace, "SearchPurposeText");
			searchPurposeTextElement.setTextContent(searchPurposeText);
			searchFieldMetadataElement.appendChild(searchPurposeTextElement);
		}
		
		return searchFieldMetadataElement;
	}

	public static Element createSourceSystemElement(Document doc, String sourceSystemNamespace,
			String sourceSystemName) {
		
		Element sourceSystemElement = doc.createElementNS(sourceSystemNamespace, "SourceSystemNameText");
		sourceSystemElement.setTextContent(sourceSystemName);
		return sourceSystemElement;
		
	} 
	
	//For Example
	//	
	//		ABC123
	//	
	public static Element createIdentificationElementWithParent(Document doc, String parentElementName, String identificationID) {
		Element parentElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, parentElementName);
		Element	identificationIDElement  = doc.createElementNS(NIEMNamespaces.NC_20_NS, "IdentificationID");
		identificationIDElement.setTextContent(identificationID.trim());
		
		parentElement.appendChild(identificationIDElement);
		
		return parentElement;
	}
	
	//For Example
	//	
	//		12345
	//	
	public static Element createIdentificationElementWithStructureAttrAndParent(Document doc, String parentElementName, String identificationID, String structureAttrName, String structureAttrValue) {
		Element parentElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, parentElementName);
		Element	identificationIDElement  = doc.createElementNS(NIEMNamespaces.NC_20_NS, "IdentificationID");
		identificationIDElement.setTextContent(identificationID.trim());
		identificationIDElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, structureAttrName, structureAttrValue);
		
		parentElement.appendChild(identificationIDElement);
		
		return parentElement;
	}

	//  For Example
	//	
	//		
	//			2005
	//		
	//		
	//			2009
	//		
	//	
	public static Element createYearRangeElementWithParent(Document doc,
			String parentElementName, String parentElementNamespace,
			Integer yearRangeStart, Integer yearRangeEnd) {
		
		Element parentElement = doc.createElementNS(parentElementNamespace, parentElementName);
		
		Element startYearElement = createElementDateYear(doc, "StartDate", yearRangeStart);
		Element endYearElement = createElementDateYear(doc, "EndDate", yearRangeEnd);
		
		parentElement.appendChild(startYearElement);
		parentElement.appendChild(endYearElement);
		
		return parentElement;
	}
	
	// For example
    // 
    // 
	public static Element createIncidentElement(Document doc, String structureId) {
		Element incidentElement = doc.createElementNS(OJBNamespaces.INCIDENT_SEARCH_REQUEST_EXT, "Incident");
		incidentElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", structureId);
		
		return incidentElement;
	}
	
	// For example
    // 
    // 
	public static Element createLocationElement(Document doc, String structureId) {
		Element locationElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "Location");
		locationElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", structureId);
		
		return locationElement;
	}
	
	// For example
    // 
	// 		
	// 		
	// 
	public static Element createLocationStructuredAddressElement(Document doc, String structuredAddressElementNamespace) {
		Element locationAddressElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "LocationAddress");
		
		Element structuredAddressElement = doc.createElementNS(structuredAddressElementNamespace, "StructuredAddress");
		
		locationAddressElement.appendChild(structuredAddressElement);
		
		return locationAddressElement;
	}

	// For Example
	//	
	//		
	//			2012-04-01T12:00:00
	//		
	//		
	//			2012-04-01T12:00:00
	//		
	//	
	public static Element createNC20DateRangeElementWithParent(Document doc, String parentElementName, 
			DateTime dateStart, DateTime dateEnd) {
		
		Element parentElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, parentElementName);
		
		if (dateStart != null)
		{	
			Element startDateElement = createElementDateTime(doc, "StartDate", dateStart);
			parentElement.appendChild(startDateElement);
		}

		if (dateEnd != null)
		{	
			Element endDateElement = createElementDateTime(doc, "EndDate", dateEnd);
			parentElement.appendChild(endDateElement);
		}	
		
		
		return parentElement;
	}
	
	// For Example
	//	
	//		
	//			2012-04-01
	//		
	//		
	//			2012-04-01
	//		
	//	
	public static Element createNC20DateOnlyRangeElementWithParent(Document doc, String parentElementName, 
			DateTime dateStart, DateTime dateEnd) {
		
		Element parentElement = doc.createElementNS(OjbcNamespaceContext.NS_NC, OjbcNamespaceContext.NS_PREFIX_NC + ":" + parentElementName);
		
		if (dateStart != null)
		{	
			Element startDateElement = createElementDate(doc, "StartDate", dateStart);
			startDateElement.setPrefix("nc");
			parentElement.appendChild(startDateElement);
		}

		if (dateEnd != null)
		{	
			Element endDateElement = createElementDate(doc, "EndDate", dateEnd);
			endDateElement.setPrefix("nc");
			parentElement.appendChild(endDateElement);
		}	
		
		
		return parentElement;
	}	

	// For Example
	//	
	//		
	//		
	//	
	public static Element createActivityLocationAssociationElement(
			Document doc, String activityRef, String locationRef) {
		
		Element parentElement = doc.createElementNS(NIEMNamespaces.JXDM_41_NS, "ActivityLocationAssociation");
		
		Element activityReferenceElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "ActivityReference");
		activityReferenceElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "ref", activityRef);
		
		Element locationReferenceElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "LocationReference");
		locationReferenceElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "ref", locationRef);
		
		parentElement.appendChild(activityReferenceElement);
		parentElement.appendChild(locationReferenceElement);
		
		return parentElement;
	}
	
	// For Example
	// 
	// 
	public static Element createFirearmElement(Document doc, String structureId) {
		Element firearmElement = doc.createElementNS(OJBNamespaces.FIREARM_SEARCH_REQUEST_EXT, "Firearm");
		firearmElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", structureId);
		
		return firearmElement;
	}
	
	// For Example
	// 
	//    
	//        Registration Number
	//    
	//    County
	// 
	public static Element createFirearmItemRegistration(Document doc, String structureId, String registrationId, String countyName, Boolean currentRegIndicator) {
		Element itemRegistrationElement = doc.createElementNS(OJBNamespaces.FIREARM_SEARCH_REQUEST_EXT, "ItemRegistration");
		itemRegistrationElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", structureId);
		
		if (StringUtils.isNotBlank(registrationId)) {
			Element registrationIdElement = createIdentificationElementWithParent(doc, "RegistrationIdentification", registrationId);
			itemRegistrationElement.appendChild(registrationIdElement);
		}
		
		if (StringUtils.isNotBlank(countyName)) {
			Element countyNameElement = createNC20Element(doc, "LocationCountyName", countyName);
			itemRegistrationElement.appendChild(countyNameElement);
		}
		
		if (currentRegIndicator != null) {
			Element currentRegIndicatorElement = doc.createElementNS(OJBNamespaces.FIREARM_SEARCH_REQUEST_EXT, "CurrentRegistrationIndicator");
			currentRegIndicatorElement.setTextContent(currentRegIndicator.toString());
			itemRegistrationElement.appendChild(currentRegIndicatorElement);
		}
		
		return itemRegistrationElement;
	}
	
	// For Example
	//	
	//		
	//		
	//	
	public static Element createPropertyRegistrationAssociationElement(
			Document doc, String itemRegistrationRef, String itemRef) {
		
		Element parentElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "PropertyRegistrationAssociation");
		
		Element itemRegistrationReferenceElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "ItemRegistrationReference");
		itemRegistrationReferenceElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "ref", itemRegistrationRef);
		
		Element itemReferenceElement = doc.createElementNS(NIEMNamespaces.NC_20_NS, "ItemReference");
		itemReferenceElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "ref", itemRef);
		
		parentElement.appendChild(itemRegistrationReferenceElement);
		parentElement.appendChild(itemReferenceElement);
		
		return parentElement;
	}
	
	// For example
	//  
	//			partial
	//	
	public static Element createFirearmSearchMetaData(Document doc, String searchFieldMetaDataNamespace, SearchFieldMetadata searchFieldMetadata)
	{
		Element searchFieldMetadataElement = doc.createElementNS(searchFieldMetaDataNamespace, "SearchMetadata");
		
		if (searchFieldMetadata == SearchFieldMetadata.ExactMatch)
		{	
			searchFieldMetadataElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", "SM001");
		}	

		if (searchFieldMetadata == SearchFieldMetadata.Partial)
		{	
			searchFieldMetadataElement.setAttributeNS(NIEMNamespaces.STRUCT_NS, "id", "SM002");
		}	

		Element searchFieldQualifierCodeElement = doc.createElementNS(searchFieldMetaDataNamespace, "SearchQualifierCode");
		searchFieldQualifierCodeElement.setTextContent(searchFieldMetadata.getMetadata());
		
		searchFieldMetadataElement.appendChild(searchFieldQualifierCodeElement);
		
		return searchFieldMetadataElement;
	}
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy