/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.importer.bdb;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.custommonkey.xmlunit.XMLAssert;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.config.util.XStreamPersister;
import org.geoserver.config.util.XStreamPersisterFactory;
import org.geoserver.importer.Directory;
import org.geoserver.importer.ImportContext;
import org.geoserver.importer.ImportTask;
import org.geoserver.importer.ImporterTestSupport;
import org.junit.Test;
import org.w3c.dom.Document;
import com.sleepycat.je.DatabaseEntry;
public class XStreamInfoSerialBindingTest extends ImporterTestSupport {
@Test
public void testSerializeWithNewStore() throws Exception {
File dir = unpack("shape/archsites_epsg_prj.zip");
ImportContext context = importer.createContext(new Directory(dir));
XStreamPersister xp = importer.createXStreamPersisterXML();
XStreamInfoSerialBinding<ImportContext> binding =
new XStreamInfoSerialBinding<ImportContext>(xp, ImportContext.class);
binding.setCompress(false);
DatabaseEntry e = new DatabaseEntry();
binding.objectToEntry(context, e);
Document dom = dom(new ByteArrayInputStream(e.getData(), 0, e.getSize()));
print(dom);
XMLAssert.assertXpathExists("/import", dom);
print(dom);
//workspace referenced by id
XMLAssert.assertXpathExists("/import/targetWorkspace/id", dom);
//store inline
XMLAssert.assertXpathExists("/import/tasks/task[position()=1]/store/name", dom);
XMLAssert.assertXpathNotExists("/import/tasks/task[position()=1]/store/id", dom);
ImportContext context2 = binding.entryToObject(e);
assertNotNull(context2.getTargetWorkspace());
assertNotNull(context2.getTargetWorkspace().getId());
assertNotNull(context2.getTargetWorkspace().getName());
ImportTask task = context2.getTasks().get(0);
assertNotNull(task.getStore());
assertNull(task.getStore().getId());
assertNotNull(task.getStore().getName());
assertNotNull(task.getLayer());
//assertNotNull(item.getLayer().getResource());
}
Document dom(DatabaseEntry e) throws Exception {
String xml = "<?xml version='1.0' encoding='UTF-8'?>" + new String(e.getData());
System.out.println(xml);
return dom(new ByteArrayInputStream(xml.getBytes()));
}
@Test
public void testSerialize2() throws Exception {
Catalog cat = getCatalog();
DataStoreInfo ds = cat.getFactory().createDataStore();
ds.setWorkspace(cat.getDefaultWorkspace());
ds.setName("spearfish");
ds.setType("H2");
Map params = new HashMap();
params.put("database", getTestData().getDataDirectoryRoot().getPath()+"/spearfish");
params.put("dbtype", "h2");
ds.getConnectionParameters().putAll(params);
ds.setEnabled(true);
cat.add(ds);
File dir = tmpDir();
unpack("shape/archsites_epsg_prj.zip", dir);
unpack("shape/bugsites_esri_prj.tar.gz", dir);
ds = cat.getDataStore(ds.getId());
ImportContext context = importer.createContext(new Directory(dir), ds);
assertEquals(2, context.getTasks().size());
XStreamPersister xp = new XStreamPersisterFactory().createXMLPersister();
xp.getXStream().omitField(ImportTask.class, "context");
XStreamInfoSerialBinding<ImportContext> binding =
new XStreamInfoSerialBinding<ImportContext>(xp, ImportContext.class);
binding.setCompress(false);
DatabaseEntry e = new DatabaseEntry();
binding.objectToEntry(context, e);
}
}