/* Copyright (c) 2013-2014 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Gabriel Roldan (Boundless) - initial implementation */ package org.locationtech.geogig.geotools.cli.porcelain; import java.io.File; import java.util.Arrays; import jline.UnsupportedTerminal; import jline.console.ConsoleReader; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.locationtech.geogig.api.porcelain.CommitOp; import org.locationtech.geogig.cli.CommandFailedException; import org.locationtech.geogig.cli.GeogigCLI; import org.locationtech.geogig.cli.InvalidParameterException; import org.locationtech.geogig.test.integration.RepositoryTestCase; public class ShpExportTest extends RepositoryTestCase { @Rule public ExpectedException exception = ExpectedException.none(); private GeogigCLI cli; @Override public void setUpInternal() throws Exception { ConsoleReader consoleReader = new ConsoleReader(System.in, System.out, new UnsupportedTerminal()); cli = new GeogigCLI(consoleReader); cli.setGeogig(geogig); // Add points insertAndAdd(points1); insertAndAdd(points2); insertAndAdd(points3); geogig.command(CommitOp.class).call(); // Add lines insertAndAdd(lines1); insertAndAdd(lines2); insertAndAdd(lines3); geogig.command(CommitOp.class).call(); } @Override public void tearDownInternal() throws Exception { cli.close(); } @Test public void testExportWithDifferentFeatureTypes() throws Exception { insertAndAdd(points1B); geogig.command(CommitOp.class).call(); ShpExport exportCommand = new ShpExport(); String shapeFileName = new File(geogig.getPlatform().pwd(), "TestPoints.shp") .getAbsolutePath(); exportCommand.args = Arrays.asList("Points", shapeFileName); exportCommand.dataStoreFactory = TestHelper.createTestFactory(); exception.expect(CommandFailedException.class); exportCommand.run(cli); deleteShapeFile(shapeFileName); } @Test public void testExport() throws Exception { ShpExport exportCommand = new ShpExport(); String shapeFileName = new File(geogig.getPlatform().pwd(), "TestPoints.shp") .getAbsolutePath(); exportCommand.args = Arrays.asList("Points", shapeFileName); exportCommand.dataStoreFactory = TestHelper.createTestFactory(); exportCommand.run(cli); deleteShapeFile(shapeFileName); } @Test public void testExportWithNullFeatureType() throws Exception { ShpExport exportCommand = new ShpExport(); String shapeFileName = new File(geogig.getPlatform().pwd(), "TestPoints.shp") .getAbsolutePath(); exportCommand.args = Arrays.asList(null, shapeFileName); exportCommand.dataStoreFactory = TestHelper.createTestFactory(); exception.expect(InvalidParameterException.class); exportCommand.run(cli); } @Test public void testExportWithInvalidFeatureType() throws Exception { ShpExport exportCommand = new ShpExport(); String shapeFileName = new File(geogig.getPlatform().pwd(), "TestPoints.shp") .getAbsolutePath(); exportCommand.args = Arrays.asList("invalidType", shapeFileName); exportCommand.dataStoreFactory = TestHelper.createTestFactory(); exception.expect(InvalidParameterException.class); exportCommand.run(cli); } @Test public void testExportWithFeatureNameInsteadOfType() throws Exception { ShpExport exportCommand = new ShpExport(); String shapeFileName = new File(geogig.getPlatform().pwd(), "TestPoints.shp") .getAbsolutePath(); exportCommand.args = Arrays.asList("Points/Points.1", shapeFileName); exportCommand.dataStoreFactory = TestHelper.createTestFactory(); try { exportCommand.run(cli); fail(); } catch (InvalidParameterException e) { } finally { deleteShapeFile(shapeFileName); } } @Test public void testExportToFileThatAlreadyExists() throws Exception { ShpExport exportCommand = new ShpExport(); String shapeFileName = new File(geogig.getPlatform().pwd(), "TestPoints.shp") .getAbsolutePath(); ; exportCommand.args = Arrays.asList("WORK_HEAD:Points", shapeFileName); exportCommand.dataStoreFactory = TestHelper.createTestFactory(); exportCommand.run(cli); exportCommand.args = Arrays.asList("Lines", shapeFileName); try { exportCommand.run(cli); fail(); } catch (CommandFailedException e) { } finally { deleteShapeFile(shapeFileName); } } @Test public void testExportWithNoArgs() throws Exception { ShpExport exportCommand = new ShpExport(); exportCommand.args = Arrays.asList(); exportCommand.dataStoreFactory = TestHelper.createNullTestFactory(); exception.expect(CommandFailedException.class); exportCommand.run(cli); } @Test public void testExportToFileThatAlreadyExistsWithOverwrite() throws Exception { ShpExport exportCommand = new ShpExport(); String shapeFileName = new File(geogig.getPlatform().pwd(), "TestPoints.shp") .getAbsolutePath(); exportCommand.args = Arrays.asList("Points", shapeFileName); exportCommand.dataStoreFactory = TestHelper.createTestFactory(); exportCommand.run(cli); exportCommand.args = Arrays.asList("Lines", shapeFileName); exportCommand.overwrite = true; exportCommand.run(cli); deleteShapeFile(shapeFileName); } private void deleteShapeFile(String shapeFileName) { File file = new File(shapeFileName + ".shp"); if (file.exists()) { file.delete(); } file = new File(shapeFileName + ".fix"); if (file.exists()) { file.delete(); } file = new File(shapeFileName + ".shx"); if (file.exists()) { file.delete(); } file = new File(shapeFileName + ".qix"); if (file.exists()) { file.delete(); } file = new File(shapeFileName + ".prj"); if (file.exists()) { file.delete(); } file = new File(shapeFileName + ".dbf"); if (file.exists()) { file.delete(); } } }