package org.constellation.json.metadata.v2;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Locale;
import org.apache.sis.metadata.MetadataStandard;
import org.apache.sis.metadata.iso.DefaultMetadata;
import org.apache.sis.metadata.iso.identification.DefaultKeywords;
import org.apache.sis.metadata.iso.identification.DefaultServiceIdentification;
import org.apache.sis.util.iso.SimpleInternationalString;
import org.constellation.json.metadata.binding.RootObj;
import org.geotoolkit.util.FileUtilities;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.opengis.metadata.identification.CharacterSet;
import org.opengis.metadata.identification.CouplingType;
import org.opengis.metadata.maintenance.ScopeCode;
import org.opengis.util.FactoryException;
import org.opengis.util.InternationalString;
/**
*
* @author Guilhem Legal (Geomatys)
*/
public class TemplateChangeTest {
private final ObjectMapper objectMapper = new ObjectMapper();
@Test
public void testChangeTemplate() throws IOException, FactoryException {
final DefaultMetadata metadata = new DefaultMetadata();
final DefaultServiceIdentification servIdent = new DefaultServiceIdentification();
final DefaultKeywords keywords = new DefaultKeywords();
final InternationalString kw1 = new SimpleInternationalString("hello");
final InternationalString kw2 = new SimpleInternationalString("world");
keywords.setKeywords(Arrays.asList(kw1, kw2));
servIdent.setDescriptiveKeywords(Arrays.asList(keywords));
servIdent.setCouplingType(CouplingType.LOOSE);
metadata.setIdentificationInfo(Arrays.asList(servIdent));
metadata.setMetadataStandardName("some unvalid standard name");
metadata.setMetadataStandardVersion(" wrong version");
metadata.setCharacterSet(CharacterSet.UTF_16);
metadata.setLanguage(Locale.ENGLISH);
metadata.setHierarchyLevels(Arrays.asList(ScopeCode.FEATURE));
final InputStream stream = TemplateWriterTest.class.getResourceAsStream("profile_default_raster3.json");
final RootObj root = objectMapper.readValue(stream, RootObj.class);
TemplateWriter writer = new TemplateWriter(MetadataStandard.ISO_19115);
final RootObj rootFilled = writer.writeTemplate(root, metadata, false, true);
final InputStream resStream = TemplateWriterTest.class.getResourceAsStream("result_change.json");
String expectedJson = FileUtilities.getStringFromStream(resStream);
File resultFile = File.createTempFile("test", ".json");
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
objectMapper.writeValue(new FileWriter(resultFile), rootFilled);
String resultJson = FileUtilities.getStringFromFile(resultFile);
assertEquals(expectedJson, resultJson);
final TemplateReader reader = new TemplateReader(MetadataStandard.ISO_19115);
final DefaultMetadata changedMetadata = (DefaultMetadata) reader.readTemplate(rootFilled, metadata);
//System.out.println("changed:\n" + changedMetadata + "\n\n");
final DefaultMetadata newMetadata = (DefaultMetadata) reader.readTemplate(rootFilled, new DefaultMetadata());
//System.out.println("new:\n" + newMetadata + "\n\n");
}
}