/** * Copyright (c) Codice Foundation * * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser * General Public License as published by the Free Software Foundation, either version 3 of the * License, or any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. A copy of the GNU Lesser General Public License * is distributed along with this program and can be found at * <http://www.gnu.org/licenses/lgpl.html>. * **/ package org.codice.ddf.spatial.ogc.csw.catalog.common; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Set; import org.apache.cxf.common.util.CollectionUtils; import org.junit.Test; import ddf.catalog.data.AttributeDescriptor; import ddf.catalog.data.Metacard; import ddf.catalog.data.MetacardType; import ddf.catalog.data.impl.AttributeImpl; import ddf.catalog.data.impl.MetacardImpl; import net.opengis.cat.csw.v_2_0_2.ObjectFactory; public class CswRecordMetacardTypeTest { public ObjectFactory objFactory; public net.opengis.cat.csw.v_2_0_2.dc.elements.ObjectFactory dcElementsObjFactory; @Test public void testConstruction() { CswRecordMetacardType cswRecordMetacardType = new CswRecordMetacardType(); assertThat(cswRecordMetacardType, not(nullValue())); Set<AttributeDescriptor> descriptors = cswRecordMetacardType.getAttributeDescriptors(); assertThat(descriptors, not(nullValue())); assertThat(CollectionUtils.isEmpty(descriptors), is(false)); assertThat(cswRecordMetacardType.getAttributeDescriptor(Metacard.ID).isMultiValued(), is(false)); } /** * Verifies can successfully create a CSW Record and set only the required minimum number of * fields. */ @Test public void testCswMetacardWithOnlyRequiredAttributesSet() { MetacardImpl metacard = new MetacardImpl(new CswRecordMetacardType()); assertThat(metacard, not(nullValue())); metacard.setAttribute(Metacard.ID, "ddf_id"); Date modifiedDate = new Date(); metacard.setAttribute(Metacard.MODIFIED, modifiedDate); String metadata = "<xml>metadata goes here ...</xml>"; metacard.setAttribute(Metacard.METADATA, metadata); metacard.setAttribute(Metacard.TITLE, "ddf_title"); metacard.setAttribute(CswRecordMetacardType.CSW_IDENTIFIER, "identifier_1"); metacard.setAttribute(CswRecordMetacardType.CSW_TITLE, "title_1"); assertThat(metacard.getId(), equalTo("ddf_id")); assertThat(metacard.getTitle(), equalTo("ddf_title")); assertThat(metacard.getModifiedDate().toString(), equalTo(modifiedDate.toString())); assertThat(metacard.getMetadata(), equalTo(metadata)); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_IDENTIFIER).getValue(), equalTo("identifier_1")); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_TITLE).getValue(), equalTo("title_1")); } /** * CSW Summary Record Sets every attribute in a CSW Summary Record with a single unique value * and then asserts that every attribute can be retrieved. */ @Test public void testCswMetacardAllSummaryRecordAttributesSetWithSingleValues() { MetacardImpl metacard = new MetacardImpl(new CswRecordMetacardType()); assertThat(metacard, not(nullValue())); metacard.setAttribute(Metacard.ID, "ddf_id"); Date modifiedDate = new Date(); metacard.setAttribute(Metacard.MODIFIED, modifiedDate); String metadata = "<xml>metadata goes here ...</xml>"; metacard.setAttribute(Metacard.METADATA, metadata); metacard.setAttribute(Metacard.TITLE, "ddf_title"); metacard.setAttribute(CswRecordMetacardType.CSW_IDENTIFIER, "identifier_1"); metacard.setAttribute(CswRecordMetacardType.CSW_TITLE, "title_1"); metacard.setAttribute(CswRecordMetacardType.CSW_TYPE, "type_1"); metacard.setAttribute(CswRecordMetacardType.CSW_FORMAT, "format_1"); metacard.setAttribute(CswRecordMetacardType.CSW_SUBJECT, "subject_1"); metacard.setAttribute(CswRecordMetacardType.CSW_RELATION, "relation_1"); Calendar cal = Calendar.getInstance(); cal.set(2013, 12, 25); Date cswModifiedDate = cal.getTime(); metacard.setAttribute(CswRecordMetacardType.CSW_MODIFIED, cswModifiedDate); metacard.setAttribute(CswRecordMetacardType.CSW_DESCRIPTION, "abstract_1"); String cswSpatial = "<dc:spatial><dcmiBox:Box name=\"Geographic\" projection=\"EPSG:4326\"><dcmiBox:northlimit units=\"decimal degrees\">42.01</dcmiBox:northlimit><dcmiBox:eastlimit units=\"decimal degrees\">-109.21</dcmiBox:eastlimit><dcmiBox:southlimit units=\"decimal degrees\">36.98</dcmiBox:southlimit><dcmiBox:westlimit units=\"decimal degrees\">-114.1</dcmiBox:westlimit></dcmiBox:Box></dc:spatial>"; metacard.setAttribute(CswRecordMetacardType.CSW_SPATIAL, cswSpatial); String cswBBox = "<ows:BoundingBox crs=\"urn:ogc:def:crs:EPSG:6.6:4326\">\r\n" + " <ows:LowerCorner>97.3805 6.74583</ows:LowerCorner>\r\n" + " <ows:UpperCorner>68.1442 35.5056</ows:UpperCorner>\r\n" + " </ows:BoundingBox>"; metacard.setAttribute(CswRecordMetacardType.OWS_BOUNDING_BOX, cswBBox); assertThat(metacard.getId(), equalTo("ddf_id")); assertThat(metacard.getTitle(), equalTo("ddf_title")); assertThat(metacard.getModifiedDate().toString(), equalTo(modifiedDate.toString())); assertThat(metacard.getMetadata(), equalTo(metadata)); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_IDENTIFIER).getValue(), equalTo("identifier_1")); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_TITLE).getValue(), equalTo("title_1")); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_TYPE).getValue(), equalTo("type_1")); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_FORMAT).getValue(), equalTo("format_1")); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_SUBJECT).getValue(), equalTo("subject_1")); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_RELATION).getValue(), equalTo("relation_1")); assertThat((Date) metacard.getAttribute(CswRecordMetacardType.CSW_MODIFIED).getValue(), equalTo(cswModifiedDate)); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_DESCRIPTION).getValue(), equalTo("abstract_1")); assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_SPATIAL).getValue(), equalTo(cswSpatial)); assertThat( (String) metacard.getAttribute(CswRecordMetacardType.OWS_BOUNDING_BOX).getValue(), equalTo(cswBBox)); } /** * Sets attributes in a CSW Summary Record with multiple values and verifies the values can be * retrieved. */ @Test public void testCswMetacardAttributeWithMultipleValues() { MetacardImpl metacard = new MetacardImpl(new CswRecordMetacardType()); assertThat(metacard, not(nullValue())); metacard.setAttribute(Metacard.ID, "ddf_id"); Date modifiedDate = new Date(); metacard.setAttribute(Metacard.MODIFIED, modifiedDate); String metadata = "<xml>metadata goes here ...</xml>"; metacard.setAttribute(Metacard.METADATA, metadata); metacard.setAttribute(Metacard.TITLE, "ddf_title"); metacard.setAttribute(CswRecordMetacardType.CSW_IDENTIFIER, "identifier_1"); metacard.setAttribute(CswRecordMetacardType.CSW_TITLE, "title_1"); Calendar cal = Calendar.getInstance(); cal.set(2013, 12, 25); Date cswModifiedDate = cal.getTime(); metacard.setAttribute(CswRecordMetacardType.CSW_MODIFIED, cswModifiedDate); AttributeImpl cswSubjects = new AttributeImpl(CswRecordMetacardType.CSW_SUBJECT, "subject_1"); cswSubjects.addValue("subject_2"); metacard.setAttribute(cswSubjects); // verifies STRING_TYPE attribute storage and retrieval assertThat((String) metacard.getAttribute(CswRecordMetacardType.CSW_IDENTIFIER).getValue(), equalTo("identifier_1")); // verifies DATE_TYPE attribute storage and retrieval assertThat((Date) metacard.getAttribute(CswRecordMetacardType.CSW_MODIFIED).getValue(), equalTo(cswModifiedDate)); // verifies multi-value attribute storage and retrieval List<?> subjects = (List<?>) metacard.getAttribute(CswRecordMetacardType.CSW_SUBJECT) .getValues(); assertThat(subjects, not(nullValue())); assertThat(subjects.size(), equalTo(2)); List<String> subjectsList = new ArrayList<String>(); subjectsList.addAll((List<? extends String>) subjects); assertThat(subjectsList.get(0), equalTo("subject_1")); assertThat(subjectsList.get(1), equalTo("subject_2")); } /** * Verifies can set multiple attributes that are substitution names for same base attribute, * e.g., date, modified, created, dateAccepted. */ @Test public void testCswMetacardMultipleSubstitutionNameAttributesSet() { MetacardImpl metacard = new MetacardImpl(new CswRecordMetacardType()); assertThat(metacard, not(nullValue())); metacard.setAttribute(Metacard.ID, "ddf_id"); Date modifiedDate = new Date(); metacard.setAttribute(Metacard.MODIFIED, modifiedDate); String metadata = "<xml>metadata goes here ...</xml>"; metacard.setAttribute(Metacard.METADATA, metadata); metacard.setAttribute(Metacard.TITLE, "ddf_title"); metacard.setAttribute(CswRecordMetacardType.CSW_IDENTIFIER, "identifier_1"); metacard.setAttribute(CswRecordMetacardType.CSW_TITLE, "title_1"); Calendar cal = Calendar.getInstance(); cal.set(2013, 12, 25); Date cswDate = cal.getTime(); metacard.setAttribute(CswRecordMetacardType.CSW_DATE, cswDate); cal.set(2013, 1, 1); Date cswModifiedDate = cal.getTime(); metacard.setAttribute(CswRecordMetacardType.CSW_MODIFIED, cswModifiedDate); cal.set(2012, 2, 2); Date cswCreatedDate = cal.getTime(); metacard.setAttribute(CswRecordMetacardType.CSW_CREATED, cswCreatedDate); cal.set(2013, 3, 3); Date cswDateAccepted = cal.getTime(); metacard.setAttribute(CswRecordMetacardType.CSW_DATE_ACCEPTED, cswDateAccepted); assertThat((Date) metacard.getAttribute(CswRecordMetacardType.CSW_DATE).getValue(), equalTo(cswDate)); assertThat((Date) metacard.getAttribute(CswRecordMetacardType.CSW_MODIFIED).getValue(), equalTo(cswModifiedDate)); assertThat((Date) metacard.getAttribute(CswRecordMetacardType.CSW_CREATED).getValue(), equalTo(cswCreatedDate)); assertThat((Date) metacard.getAttribute(CswRecordMetacardType.CSW_DATE_ACCEPTED).getValue(), equalTo(cswDateAccepted)); } @Test public void testCswMetacardHasBasicMetacardDescriptorsAsIsStoredFalse() { MetacardType cswMetacard = new CswRecordMetacardType(); assertThat(cswMetacard.getAttributeDescriptor(Metacard.ID).isStored(), is(false)); assertThat(cswMetacard.getAttributeDescriptor(Metacard.TITLE).isStored(), is(false)); assertThat(cswMetacard.getAttributeDescriptor(Metacard.METADATA).isStored(), is(false)); assertThat(cswMetacard.getAttributeDescriptor(Metacard.EFFECTIVE).isStored(), is(false)); assertThat(cswMetacard.getAttributeDescriptor(Metacard.MODIFIED).isStored(), is(false)); assertThat(cswMetacard.getAttributeDescriptor(Metacard.CREATED).isStored(), is(false)); assertThat(cswMetacard.getAttributeDescriptor(Metacard.RESOURCE_URI).isStored(), is(false)); assertThat(cswMetacard.getAttributeDescriptor(Metacard.CONTENT_TYPE).isStored(), is(false)); } }