Browse Source

writing longtable

Andrew Grant 3 months ago
parent
commit
5cd95e2b24

+ 2 - 0
src/main/java/scot/carricksoftware/grantswriter/constants/LatexConstants.java

@@ -29,5 +29,7 @@ public class LatexConstants {
     @SuppressWarnings("SpellCheckingInspection")
     public static final String USE_PACKAGE_TERM = "\\usepackage{";
     public static final String TERM_END = "}";
+    public static final String TABLE_COLUMN_END = "&";
+    public static final String TABLE_LINE_END = "&\\\\";
 
 }

+ 2 - 1
src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexLongTabLeEndImpl.java

@@ -5,9 +5,11 @@
 
 package scot.carricksoftware.grantswriter.writer.latex;
 
+import org.springframework.stereotype.Component;
 import scot.carricksoftware.grantswriter.constants.LatexConstants;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
 
+@Component
 public class LatexLongTabLeEndImpl implements LatexLongTabLeEnd {
 
     private final FileWriter fileWriter;
@@ -16,7 +18,6 @@ public class LatexLongTabLeEndImpl implements LatexLongTabLeEnd {
         this.fileWriter = fileWriter;
     }
 
-
     @Override
     public void write() {
         fileWriter.writeLine(LatexConstants.LONG_TABLE_END);

+ 1 - 1
src/main/java/scot/carricksoftware/grantswriter/writer/latex/LatexLongTableStart.java

@@ -8,5 +8,5 @@ package scot.carricksoftware.grantswriter.writer.latex;
 public interface LatexLongTableStart {
 
     @SuppressWarnings({"EmptyMethod", "unused"})
-    void write(@SuppressWarnings("unused") String columns);
+    void write(String columns);
 }

+ 18 - 12
src/main/java/scot/carricksoftware/grantswriter/writer/latex/parts/people/subsections/PersonSubSectionTimeLineWriterImpl.java

@@ -9,18 +9,17 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
+import scot.carricksoftware.grantswriter.constants.LatexConstants;
 import scot.carricksoftware.grantswriter.data.TimelineData;
 import scot.carricksoftware.grantswriter.domains.census.CensusEntry;
 import scot.carricksoftware.grantswriter.domains.people.Person;
 import scot.carricksoftware.grantswriter.services.censusentry.CensusEntryService;
-import scot.carricksoftware.grantswriter.services.censusentry.CensusEntryServiceImpl;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
+import scot.carricksoftware.grantswriter.writer.latex.LatexLongTabLeEnd;
+import scot.carricksoftware.grantswriter.writer.latex.LatexLongTableStart;
 import scot.carricksoftware.grantswriter.writer.latex.LatexSubSectionHeader;
 
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
 
 @Component
 public class PersonSubSectionTimeLineWriterImpl implements PersonSubSectionTimeLineWriter {
@@ -31,15 +30,19 @@ public class PersonSubSectionTimeLineWriterImpl implements PersonSubSectionTimeL
     private final CensusEntryService censusEntryService;
     private final TimelineData timelineData;
     private final FileWriter fileWriter;
+    private final LatexLongTableStart latexLongTableStart;
+    private final LatexLongTabLeEnd latexLongTabLeEnd;
 
     public PersonSubSectionTimeLineWriterImpl(LatexSubSectionHeader latexSubSectionHeader,
                                               CensusEntryService censusEntryService,
                                               TimelineData timelineData,
-                                              FileWriter fileWriter) {
+                                              FileWriter fileWriter, LatexLongTableStart latexLongTableStart, LatexLongTabLeEnd latexLongTabLeEnd) {
         this.latexSubSectionHeader = latexSubSectionHeader;
         this.censusEntryService = censusEntryService;
         this.timelineData = timelineData;
         this.fileWriter = fileWriter;
+        this.latexLongTableStart = latexLongTableStart;
+        this.latexLongTabLeEnd = latexLongTabLeEnd;
     }
 
     @Override
@@ -49,7 +52,9 @@ public class PersonSubSectionTimeLineWriterImpl implements PersonSubSectionTimeL
         List<CensusEntry>  censusEntryList = censusEntryService.findAllByPerson(person);
         timelineData.clear();
         timelineData.add(censusEntryList);
+        latexLongTableStart.write("l l");
         writeData(timelineData.getTimeline());
+        latexLongTabLeEnd.write();
     }
 
     private void writeData(LinkedMultiValueMap<String, String> map) {
@@ -57,13 +62,14 @@ public class PersonSubSectionTimeLineWriterImpl implements PersonSubSectionTimeL
 
         for (String key : map.keySet()) {
             List<String> value = map.get(key);
-            for (String v : value) {
-                StringBuilder builder = new StringBuilder();
-                builder.append(key);
-                builder.append("&");
-                builder.append(v);
-                builder.append("&\\\\");
-                fileWriter.writeLine(builder.toString());
+            if (value != null) {
+                for (String v : value) {
+                    String builder = key +
+                            LatexConstants.TABLE_COLUMN_END +
+                            v +
+                            LatexConstants.TABLE_LINE_END;
+                    fileWriter.writeLine(builder);
+                }
             }
         }
 

+ 10 - 9
src/test/java/scot/carricksoftware/grantswriter/writer/latex/parts/people/subsections/PersonSubSectionTimeLineWriterTest.java

@@ -11,19 +11,13 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import scot.carricksoftware.grantswriter.data.TimelineData;
-import scot.carricksoftware.grantswriter.domains.census.CensusEntry;
-import scot.carricksoftware.grantswriter.domains.people.Person;
 import scot.carricksoftware.grantswriter.services.censusentry.CensusEntryService;
 import scot.carricksoftware.grantswriter.writer.FileWriter;
+import scot.carricksoftware.grantswriter.writer.latex.LatexLongTabLeEnd;
+import scot.carricksoftware.grantswriter.writer.latex.LatexLongTableStart;
 import scot.carricksoftware.grantswriter.writer.latex.LatexSubSectionHeader;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
 class PersonSubSectionTimeLineWriterTest {
@@ -42,13 +36,20 @@ class PersonSubSectionTimeLineWriterTest {
     @Mock
     private FileWriter fileWriterMock;
 
+    @Mock
+    private LatexLongTableStart latexLongTableStartMock;
+
+    @Mock
+    private LatexLongTabLeEnd latexLongTableEndMock;
 
     @BeforeEach
     void setUp() {
         writer = new PersonSubSectionTimeLineWriterImpl(latexSubSectionHeaderMock,
                 censusEntryServiceMock,
                 timelineDataMock,
-                fileWriterMock);
+                fileWriterMock,
+                latexLongTableStartMock,
+                latexLongTableEndMock);
     }
 
     @Test