
org.ojbc.util.helper.NIEMXMLUtils Maven / Gradle / Ivy
/*
* 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