/**
* DataCleaner (community edition)
* Copyright (C) 2014 Neopost - Customer Information Management
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.datacleaner.reference;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.Arrays;
import java.util.TreeMap;
import java.util.TreeSet;
import org.apache.commons.lang.SerializationUtils;
import org.datacleaner.util.ChangeAwareObjectInputStream;
import org.junit.Ignore;
import junit.framework.TestCase;
public class ReferenceDataDeserializationTest extends TestCase {
public void testDeserializeSimpleDictionary() throws Exception {
final SimpleDictionary obj = deserialize("src/test/resources/serialized_ref_data/dc_4_dictionary_simple.dat");
assertEquals("simple dictionary", obj.getName());
assertEquals("[bar, baz, foo]", new TreeSet<>(obj.getValueSet()).toString());
assertTrue(obj.isCaseSensitive());
}
public void testDeserializeTextFileDictionary() throws Exception {
final TextFileDictionary obj =
deserialize("src/test/resources/serialized_ref_data/dc_4_dictionary_text_file.dat");
assertEquals("text file dictionary", obj.getName());
assertEquals("dictionary.txt", obj.getFilename());
assertEquals("UTF8", obj.getEncoding());
assertTrue(obj.isCaseSensitive());
}
public void testDeserializeDatastoreDictionary() throws Exception {
final DatastoreDictionary obj =
deserialize("src/test/resources/serialized_ref_data/dc_4_dictionary_datastore.dat");
assertEquals("datastore dictionary", obj.getName());
assertEquals("orderdb", obj.getDatastoreName());
assertEquals("dictionary.term", obj.getQualifiedColumnName());
}
public void testDeserializeSimpleSynonymCatalog() throws Exception {
final SimpleSynonymCatalog obj =
deserialize("src/test/resources/serialized_ref_data/dc_4_synonym_catalog_simple.dat");
assertEquals("simple synonym catalog", obj.getName());
assertEquals("{DK=DK, DNK=DK, Danmark=DK, Denmark=DK}", new TreeMap<>(obj.getSynonymMap()).toString());
assertTrue(obj.isCaseSensitive());
}
public void testDeserializeTextFileSynonymCatalog() throws Exception {
final TextFileSynonymCatalog obj =
deserialize("src/test/resources/serialized_ref_data/dc_4_synonym_catalog_text_file.dat");
assertEquals("text file synonym catalog", obj.getName());
assertEquals("synonyms.txt", obj.getFilename());
assertEquals("UTF8", obj.getEncoding());
assertTrue(obj.isCaseSensitive());
}
public void testDeserializeDatastoreSynonymCatalog() throws Exception {
final DatastoreSynonymCatalog obj =
deserialize("src/test/resources/serialized_ref_data/dc_4_synonym_catalog_datastore.dat");
assertEquals("datastore synonym catalog", obj.getName());
assertEquals("orderdb", obj.getDatastoreName());
assertEquals("synonyms.master", obj.getMasterTermColumnPath());
assertEquals("[synonyms.syn1, synonyms.syn2]", Arrays.toString(obj.getSynonymColumnPaths()));
}
@SuppressWarnings("unchecked")
private <T> T deserialize(final String path) throws Exception {
try (FileInputStream in = new FileInputStream(new File(path))) {
try (ChangeAwareObjectInputStream objectInputStream = new ChangeAwareObjectInputStream(in)) {
return (T) objectInputStream.readObject();
}
}
}
@Ignore
public void testSerialize() throws Exception {
final Dictionary dict1 = new SimpleDictionary("simple dictionary", "foo", "bar", "baz");
serialize(dict1, "target/dc_4_dictionary_simple.dat");
final Dictionary dict2 = new TextFileDictionary("text file dictionary", "dictionary.txt", "UTF8");
serialize(dict2, "target/dc_4_dictionary_text_file.dat");
final Dictionary dict3 = new DatastoreDictionary("datastore dictionary", "orderdb", "dictionary.term");
serialize(dict3, "target/dc_4_dictionary_datastore.dat");
final Synonym synonym = new SimpleSynonym("DK", "Denmark", "Danmark", "DNK");
final SynonymCatalog sc1 = new SimpleSynonymCatalog("simple synonym catalog", synonym);
serialize(sc1, "target/dc_4_synonym_catalog_simple.dat");
final SynonymCatalog sc2 =
new TextFileSynonymCatalog("text file synonym catalog", "synonyms.txt", true, "UTF8");
serialize(sc2, "target/dc_4_synonym_catalog_text_file.dat");
final SynonymCatalog sc3 =
new DatastoreSynonymCatalog("datastore synonym catalog", "orderdb", "synonyms.master",
new String[] { "synonyms.syn1", "synonyms.syn2" });
serialize(sc3, "target/dc_4_synonym_catalog_datastore.dat");
}
private void serialize(final Serializable obj, final String path) throws Exception {
try (OutputStream out = new FileOutputStream(new File(path))) {
SerializationUtils.serialize(obj, out);
}
}
}