From 150895c6e631f028d005889bd41a4f9f33287930 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 28 Jun 2018 12:05:42 +0200
Subject: [PATCH] when image link is to a submap subdirectry sstructure to the
 file name is possible (but not requested)

---
 .../mapviewer/converter/OverviewParser.java   |   8 +-
 .../converter/ProjectFactoryTest.java         | 165 +++++++++++-------
 .../complex_model_with_images_path.zip        | Bin 0 -> 20911 bytes
 3 files changed, 104 insertions(+), 69 deletions(-)
 create mode 100644 converter/testFiles/complex_model_with_images_path.zip

diff --git a/converter/src/main/java/lcsb/mapviewer/converter/OverviewParser.java b/converter/src/main/java/lcsb/mapviewer/converter/OverviewParser.java
index d23f450a0c..0e2473ec1b 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/OverviewParser.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/OverviewParser.java
@@ -113,7 +113,7 @@ public class OverviewParser {
   /**
    * Method that parse zip file and creates list of {@link OverviewImage images}
    * from it.
-   * 
+   *
    * @param models
    *          map with models where the key is name of the file and value is model
    *          that was parsed from the file
@@ -219,7 +219,7 @@ public class OverviewParser {
   /**
    * This method process data from {@link #COORDINATES_FILENAME} in zip archive.
    * This method adds connections between images and between images and models.
-   * 
+   *
    * @param models
    *          map with models where the key is name of the file and value is model
    *          that was parsed from the file
@@ -328,7 +328,7 @@ public class OverviewParser {
         }
         String filename = columns[filenameColumn];
         String polygon = columns[polygonColumn];
-        String modelName = FilenameUtils.removeExtension(columns[targetFilenameColumn]);
+		String modelName = FilenameUtils.getBaseName(columns[targetFilenameColumn]);
         String coord = columns[redirectionCoordinatesColumn];
         String zoomLevel = columns[zoomLevelColumn];
         String linkType = columns[targetTypeColumn];
@@ -365,7 +365,7 @@ public class OverviewParser {
   /**
    * Creates a link from parameters and place it in appropriate
    * {@link OverviewImage}.
-   * 
+   *
    * @param filename
    *          {@link OverviewImage#filename name of the image}
    * @param polygon
diff --git a/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java b/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
index fc1d6640bb..0ab238b07f 100644
--- a/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
+++ b/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
@@ -25,70 +25,105 @@ import lcsb.mapviewer.model.map.model.ModelData;
 
 public class ProjectFactoryTest {
 
-	@AfterClass
-	public static void tearDownAfterClass() throws Exception {
-	}
-
-	@Before
-	public void setUp() throws Exception {
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	@Test
-	public void testOverviewImageLink() throws Exception {
-		try {
-			ComplexZipConverter converter = new ComplexZipConverter(MockConverter.class);
-			ProjectFactory projectFactory = new ProjectFactory(converter);
-			ZipFile zipFile = new ZipFile("testFiles/complex_model_with_img.zip");
-			ComplexZipConverterParams params = new ComplexZipConverterParams();
-			params.zipFile(zipFile);
-
-			ZipEntryFileFactory factory = new ZipEntryFileFactory();
-			Enumeration<? extends ZipEntry> entries = zipFile.entries();
-			while (entries.hasMoreElements()) {
-				ZipEntry entry = entries.nextElement();
-				if (!entry.isDirectory()) {
-					params.entry(factory.createZipEntryFile(entry, zipFile));
-				}
-			}
-
-			Project project = projectFactory.create(params);
-			assertNotNull(project);
-			ModelData model = project.getModels().iterator().next();
-			assertEquals("main", model.getName());
-
-			List<OverviewImage> result = project.getOverviewImages();
-
-			assertNotNull(result);
-			assertEquals(1, result.size());
-
-			OverviewImage img = result.get(0);
-
-			assertEquals("test.png", img.getFilename());
-			assertEquals((Integer) 639, img.getHeight());
-			assertEquals((Integer) 963, img.getWidth());
-			assertEquals(2, img.getLinks().size());
-
-			OverviewLink link = img.getLinks().get(0);
-			List<Point2D> polygon = link.getPolygonCoordinates();
-			assertEquals(4, polygon.size());
-
-			assertTrue(link instanceof OverviewModelLink);
-
-			OverviewModelLink mLink = (OverviewModelLink) link;
-			assertEquals((Integer) 10, mLink.getxCoord());
-			assertEquals((Integer) 10, mLink.getyCoord());
-			assertEquals((Integer) 3, mLink.getZoomLevel());
-			assertEquals(model, mLink.getLinkedModel());
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-
-	}
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception {
+  }
+
+  @Before
+  public void setUp() throws Exception {
+  }
+
+  @After
+  public void tearDown() throws Exception {
+  }
+
+  @Test
+  public void testOverviewImageLink() throws Exception {
+    try {
+      ComplexZipConverter converter = new ComplexZipConverter(MockConverter.class);
+      ProjectFactory projectFactory = new ProjectFactory(converter);
+      ZipFile zipFile = new ZipFile("testFiles/complex_model_with_img.zip");
+      ComplexZipConverterParams params = new ComplexZipConverterParams();
+      params.zipFile(zipFile);
+
+      ZipEntryFileFactory factory = new ZipEntryFileFactory();
+      Enumeration<? extends ZipEntry> entries = zipFile.entries();
+      while (entries.hasMoreElements()) {
+        ZipEntry entry = entries.nextElement();
+        if (!entry.isDirectory()) {
+          params.entry(factory.createZipEntryFile(entry, zipFile));
+        }
+      }
+
+      Project project = projectFactory.create(params);
+      assertNotNull(project);
+      ModelData model = project.getModels().iterator().next();
+      assertEquals("main", model.getName());
+
+      List<OverviewImage> result = project.getOverviewImages();
+
+      assertNotNull(result);
+      assertEquals(1, result.size());
+
+      OverviewImage img = result.get(0);
+
+      assertEquals("test.png", img.getFilename());
+      assertEquals((Integer) 639, img.getHeight());
+      assertEquals((Integer) 963, img.getWidth());
+      assertEquals(2, img.getLinks().size());
+
+      OverviewLink link = img.getLinks().get(0);
+      List<Point2D> polygon = link.getPolygonCoordinates();
+      assertEquals(4, polygon.size());
+
+      assertTrue(link instanceof OverviewModelLink);
+
+      OverviewModelLink mLink = (OverviewModelLink) link;
+      assertEquals((Integer) 10, mLink.getxCoord());
+      assertEquals((Integer) 10, mLink.getyCoord());
+      assertEquals((Integer) 3, mLink.getZoomLevel());
+      assertEquals(model, mLink.getLinkedModel());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
+
+  @Test
+  public void testOverviewImageLinkToSubmapPath() throws Exception {
+    try {
+      ComplexZipConverter converter = new ComplexZipConverter(MockConverter.class);
+      ProjectFactory projectFactory = new ProjectFactory(converter);
+      ZipFile zipFile = new ZipFile("testFiles/complex_model_with_images_path.zip");
+      ComplexZipConverterParams params = new ComplexZipConverterParams();
+      params.zipFile(zipFile);
+
+      ZipEntryFileFactory factory = new ZipEntryFileFactory();
+      Enumeration<? extends ZipEntry> entries = zipFile.entries();
+      while (entries.hasMoreElements()) {
+        ZipEntry entry = entries.nextElement();
+        if (!entry.isDirectory()) {
+          params.entry(factory.createZipEntryFile(entry, zipFile));
+        }
+      }
+
+      Project project = projectFactory.create(params);
+      assertNotNull(project);
+      ModelData model = project.getModels().iterator().next();
+      assertEquals("main", model.getName());
+
+      List<OverviewImage> result = project.getOverviewImages();
+
+      assertNotNull(result);
+      assertEquals(2, result.size());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
 
 }
diff --git a/converter/testFiles/complex_model_with_images_path.zip b/converter/testFiles/complex_model_with_images_path.zip
new file mode 100644
index 0000000000000000000000000000000000000000..10246001ea4573b9aa068bf8d9fa3c98299104bc
GIT binary patch
literal 20911
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

literal 0
HcmV?d00001

-- 
GitLab