/* (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;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static junit.framework.Assert.assertEquals;
import junit.framework.TestCase;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.geoserver.importer.mosaic.Mosaic;
import static org.geoserver.importer.ImporterTestUtils.unpack;
public class DirectoryTest extends TestCase {
public void testMosaicAuxillaryFiles() throws Exception {
File unpack = ImporterTestUtils.unpack("mosaic/bm.zip");
// all types of junk!
String[] aux = new String[] {
"aux", "rrd", "xml", "tif.aux.xml", "tfw"
};
File[] tifs = unpack.listFiles();
for (int i = 0; i < tifs.length; i++) {
File file = tifs[i];
for (int j = 0; j < aux.length; j++) {
new File(unpack, file.getName().replace("tif",aux[j])).createNewFile();
}
}
Mosaic m = new Mosaic(unpack);
m.prepare();
assertEquals(4, m.getFiles().size());
for (int i = 0; i < m.getFiles().size(); i++) {
assertEquals("GeoTIFF", m.getFiles().get(1).getFormat().getName());
}
// make sure the junk was actually picked up
for (FileData f: m.getFiles()) {
assertEquals(aux.length, ((SpatialFile) f).getSuppFiles().size());
}
}
public void testSingleSpatialFile() throws Exception {
File dir = unpack("shape/archsites_epsg_prj.zip");
Directory d = new Directory(dir);
d.prepare();
List<FileData> files = d.getFiles();
assertEquals(1, files.size());
assertTrue( files.get(0) instanceof SpatialFile);
SpatialFile spatial = (SpatialFile) files.get(0);
assertEquals("shp", FilenameUtils.getExtension(spatial.getFile().getName()));
assertNotNull(spatial.getPrjFile().getName());
assertEquals("prj", FilenameUtils.getExtension(spatial.getPrjFile().getName()));
assertEquals(2, spatial.getSuppFiles().size());
Set<String> exts = new HashSet<String>(Arrays.asList("shx", "dbf"));
for (File supp : spatial.getSuppFiles()) {
exts.remove(FilenameUtils.getExtension(supp.getName()));
}
assertTrue(exts.isEmpty());
}
public void testShapefileWithMacOSXDirectory() throws Exception {
File dir = unpack("shape/archsites_epsg_prj.zip");
File osxDir = new File(dir,"__MACOSX");
osxDir.mkdir();
new File(osxDir, ".archsites.shp").createNewFile();
new File(osxDir, ".archsites.dbf").createNewFile();
new File(osxDir, ".archsites.prj").createNewFile();
Directory d = new Directory(dir);
d.prepare();
assertNotNull(d.getFormat());
assertEquals(DataStoreFormat.class, d.getFormat().getClass());
List<FileData> files = d.getFiles();
assertEquals(1, files.size());
assertEquals(DataStoreFormat.class, files.get(0).getFormat().getClass());
}
public void testShapefileWithExtraFiles() throws Exception {
File dir = unpack("shape/archsites_epsg_prj.zip");
// 'extra' files
new File(dir, "archsites.shp.xml").createNewFile();
new File(dir, "archsites.sbx").createNewFile();
new File(dir, "archsites.sbn").createNewFile();
new File(dir, "archsites.shp.ed.lock").createNewFile();
Directory d = new Directory(dir);
d.prepare();
assertNotNull(d.getFormat());
assertEquals(DataStoreFormat.class, d.getFormat().getClass());
List<FileData> files = d.getFiles();
assertEquals(1, files.size());
assertEquals(DataStoreFormat.class, files.get(0).getFormat().getClass());
}
public void testMultipleSpatialFile() throws Exception {
File dir = unpack("shape/archsites_epsg_prj.zip");
unpack("shape/bugsites_esri_prj.tar.gz", dir);
Directory d = new Directory(dir);
d.prepare();
assertEquals(2, d.getFiles().size());
assertTrue( d.getFiles().get(0) instanceof SpatialFile);
assertTrue( d.getFiles().get(1) instanceof SpatialFile);
}
public void testMultipleSpatialASpatialFile() throws Exception {
File dir = unpack("shape/archsites_epsg_prj.zip");
unpack("shape/bugsites_esri_prj.tar.gz", dir);
FileUtils.touch(new File(dir, "foo.txt")); //TODO: don't rely on alphabetical order
Directory d = new Directory(dir);
d.prepare();
assertEquals(3, d.getFiles().size());
assertTrue( d.getFiles().get(0) instanceof SpatialFile);
assertTrue( d.getFiles().get(1) instanceof SpatialFile);
assertTrue( d.getFiles().get(2) instanceof ASpatialFile);
}
}