blob: 3a76924aa90fcffa742d70673d89359f0de722a0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sis.metadata;
import java.util.Set;
import java.util.List;
import org.opengis.metadata.citation.Role;
import org.opengis.metadata.citation.PresentationForm;
import org.apache.sis.util.SimpleInternationalString;
import org.apache.sis.util.collection.TableColumn;
import org.apache.sis.util.collection.TreeTableFormat;
import org.apache.sis.metadata.iso.content.DefaultBand;
import org.apache.sis.metadata.iso.content.DefaultImageDescription;
import org.apache.sis.metadata.iso.content.DefaultAttributeGroup;
import org.apache.sis.metadata.iso.citation.DefaultCitation;
import org.apache.sis.metadata.iso.identification.DefaultDataIdentification;
import org.apache.sis.metadata.iso.lineage.DefaultProcessing;
import org.apache.sis.measure.Units;
// Test dependencies
import org.junit.jupiter.api.Test;
import org.apache.sis.metadata.iso.citation.DefaultCitationTest;
import org.apache.sis.test.TestCase;
import static org.apache.sis.test.Assertions.assertMultilinesEquals;
// Specific to the main and geoapi-3.1 branches:
import org.apache.sis.metadata.iso.citation.DefaultResponsibleParty;
/**
* Tests the {@link TreeTableFormat} applied to the formatting of metadata tree.
*
* @author Martin Desruisseaux (Geomatys)
*/
public final class TreeTableFormatTest extends TestCase {
/**
* The formatter to use.
*/
private final TreeTableFormat format;
/**
* Creates a new test case.
*/
public TreeTableFormatTest() {
format = new TreeTableFormat(null, null);
format.setColumns(TableColumn.NAME, TableColumn.VALUE);
}
/**
* Creates a band for the given minimum and maximum wavelengths, in centimetres.
*/
private static DefaultBand createBand(final double min, final double max) {
final DefaultBand band = new DefaultBand();
band.setMinValue(min);
band.setMaxValue(max);
band.setUnits(Units.CENTIMETRE);
return band;
}
/**
* Tests the formatting of a {@link DefaultCitation} object.
*
* @see <a href="https://issues.apache.org/jira/browse/SIS-298">SIS-298</a>
*/
@Test
public void testCitation() {
final DefaultCitation citation = DefaultCitationTest.create();
final String text = format.format(citation.asTreeTable());
assertMultilinesEquals(
"Citation……………………………………………………………………………… Undercurrent\n" +
"  ├─Alternate title………………………………………………… Andākarento\n" +
"  ├─Cited responsible party (1 of 2)\n" +
"  │   ├─Individual…………………………………………………… Testsuya Toyoda\n" +
"  │   └─Role…………………………………………………………………… Author\n" +
"  ├─Cited responsible party (2 of 2)\n" +
"  │   ├─Extent……………………………………………………………… World\n" +
"  │   │   └─Geographic element\n" +
"  │   │       ├─West bound longitude…… 180°W\n" +
"  │   │       ├─East bound longitude…… 180°E\n" +
"  │   │       ├─South bound latitude…… 90°S\n" +
"  │   │       ├─North bound latitude…… 90°N\n" +
"  │   │       └─Extent type code……………… True\n" +
"  │   ├─Organisation……………………………………………… Kōdansha\n" +
"  │   └─Role…………………………………………………………………… Editor\n" +
"  ├─Presentation form (1 of 2)…………………… Document digital\n" +
"  ├─Presentation form (2 of 2)…………………… Document hardcopy\n" +
"  └─ISBN……………………………………………………………………………… 9782505004509\n", text);
}
/**
* Tests the formatting of a {@link DefaultProcessing} object.
*/
@Test
public void testProcessing() {
final DefaultCitation titled = new DefaultCitation("Some specification");
final DefaultCitation coded = new DefaultCitation();
final DefaultCitation untitled = new DefaultCitation();
titled .setPresentationForms(Set.of(PresentationForm.DOCUMENT_HARDCOPY));
coded .setPresentationForms(Set.of(PresentationForm.IMAGE_HARDCOPY));
untitled.setCitedResponsibleParties(Set.of(new DefaultResponsibleParty(Role.AUTHOR)));
final DefaultProcessing processing = new DefaultProcessing();
processing.setDocumentations(List.of(titled, coded, untitled));
final String text = format.format(processing.asTreeTable());
assertMultilinesEquals(
"Processing\n" +
"  ├─Documentation (1 of 3)…………… Some specification\n" +
"  │   └─Presentation form……………… Document hardcopy\n" +
"  ├─Documentation (2 of 3)\n" +
"  │   └─Presentation form……………… Image hardcopy\n" +
"  └─Documentation (3 of 3)\n" +
"      └─Cited responsible party\n" +
"          └─Role……………………………………… Author\n", text);
}
/**
* Tests the formatting of a {@link DefaultImageDescription} object.
*/
@Test
public void testImageDescription() {
final DefaultImageDescription image = new DefaultImageDescription();
image.setAttributeGroups(List.of(
new DefaultAttributeGroup(null, createBand(0.25, 0.26)),
new DefaultAttributeGroup(null, createBand(0.28, 0.29))
));
final String text = format.format(image.asTreeTable());
assertMultilinesEquals(
"Image description\n" +
"  ├─Attribute group (1 of 2)\n" +
"  │   └─Attribute\n" +
"  │       ├─Max value………………… 0.26\n" +
"  │       ├─Min value………………… 0.25\n" +
"  │       └─Units…………………………… centimetre\n" +
"  └─Attribute group (2 of 2)\n" +
"      └─Attribute\n" +
"          ├─Max value………………… 0.29\n" +
"          ├─Min value………………… 0.28\n" +
"          └─Units…………………………… centimetre\n", text);
}
/**
* Tests the formatting of a {@link DefaultDataIdentification} object with custom code list elements
*/
@Test
public void testTreeWithCustomElements() {
final DefaultCitation citation = new DefaultCitation();
citation.setAlternateTitles(List.of(
new SimpleInternationalString("Apple"),
new SimpleInternationalString("Orange"),
new SimpleInternationalString("Kiwi")));
citation.setPresentationForms(List.of(
PresentationForm.IMAGE_DIGITAL,
PresentationForm.valueOf("AUDIO_DIGITAL"), // Existing form
PresentationForm.valueOf("test"))); // Custom form
final String text = format.format(citation.asTreeTable());
assertMultilinesEquals(
"Citation\n" +
"  ├─Alternate title (1 of 3)………… Apple\n" +
"  ├─Alternate title (2 of 3)………… Orange\n" +
"  ├─Alternate title (3 of 3)………… Kiwi\n" +
"  ├─Presentation form (1 of 3)…… Image digital\n" +
"  ├─Presentation form (2 of 3)…… Audio digital\n" +
"  └─Presentation form (3 of 3)…… Test\n",
text);
}
}