[bug-62906] ensure table display name is always set

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1858179 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
index 563df1e..d0a43af 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
@@ -4140,6 +4140,10 @@
             table.setArea(tableArea);
         }
 
+        // Bug 62906: Must set a display name; can be overridden using setDisplayName
+        final String displayName = "Table" + tableNumber;
+        table.setDisplayName(displayName);
+
         return table;
     }
 
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
index de560dd..b26f72b 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
@@ -432,6 +432,9 @@
      * @param name to use
      */
     public void setDisplayName(String name) {
+        if (name == null || name.isEmpty()) {
+            throw new IllegalArgumentException("Display name must not be null or empty");
+        }
         ctTable.setDisplayName(name);
     }
 
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java
index 7841d9a..3648f78 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java
@@ -171,7 +171,7 @@
         try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
             XSSFTable table = wb.getTable("\\_Prime.1");
             assertEquals(0, table.getStartColIndex());
-        } 
+        }
     }
 
     @Test
@@ -229,17 +229,13 @@
             assertEquals(3, table.getColumnCount());
         }
     }
-    
+
     @Test
     public void getAndSetDisplayName() throws IOException {
         try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
             XSSFTable table = wb.getTable("\\_Prime.1");
             assertEquals("\\_Prime.1", table.getDisplayName());
-
-            table.setDisplayName(null);
-            assertNull(table.getDisplayName());
-            assertEquals("\\_Prime.1", table.getName()); // name and display name are different
-
+            
             table.setDisplayName("Display name");
             assertEquals("Display name", table.getDisplayName());
             assertEquals("\\_Prime.1", table.getName()); // name and display name are different
@@ -253,6 +249,8 @@
         try (XSSFWorkbook wb = new XSSFWorkbook()) {
             XSSFSheet sh = wb.createSheet();
             XSSFTable table = sh.createTable();
+            assertNotNull(table.getDisplayName());
+            assertNotNull(table.getCTTable().getDisplayName());
             CTTable ctTable = table.getCTTable();
             ctTable.setRef("B2:E8");
 
@@ -299,7 +297,7 @@
             IOUtils.closeQuietly(wb);
         }
     }
-    
+
     @Test
     public void testGetDataRowCount() throws IOException {
         try (XSSFWorkbook wb = new XSSFWorkbook()) {
@@ -318,7 +316,7 @@
             IOUtils.closeQuietly(wb);
         }
     }
-    
+
     @Test
     public void testSetDataRowCount() throws IOException {
         try (XSSFWorkbook wb = new XSSFWorkbook()) {
@@ -358,6 +356,8 @@
 
             XSSFTable table1 = sheet.createTable(reference1);
             assertEquals("A1:C3", table1.getCTTable().getRef());
+            assertNotNull(table1.getDisplayName());
+            assertNotNull(table1.getCTTable().getDisplayName());
 
             assertEquals(1, table1.getCTTable().getTableColumns().getTableColumnArray(0).getId());
             assertEquals(2, table1.getCTTable().getTableColumns().getTableColumnArray(1).getId());
@@ -413,7 +413,7 @@
             assertEquals(2, table.getRowCount());
         }
     }
-    
+
     @Test
     public void testCreateColumn() throws IOException {
         try (XSSFWorkbook wb = new XSSFWorkbook()) {
@@ -460,7 +460,7 @@
             table.createColumn("Column 3", 3); // out of bounds
         }
     }
-    
+
     @Test
     public void testDifferentHeaderTypes() throws IOException {
         try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("TablesWithDifferentHeaders.xlsx")) {
@@ -492,7 +492,7 @@
             assertEquals("Column2", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());
         }
     }
-    
+
     /**
      * See https://stackoverflow.com/questions/44407111/apache-poi-cant-format-filled-cells-as-numeric
      */
@@ -546,4 +546,45 @@
             IOUtils.closeQuietly(wb2);
         }
     }
+
+    @Test
+    public void testSetDisplayName() throws IOException {
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet sheet = wb.createSheet();
+
+            AreaReference reference1 = wb.getCreationHelper().createAreaReference(
+                    new CellReference(0, 0), new CellReference(2, 2));
+
+            XSSFTable table1 = sheet.createTable(reference1);
+            table1.setDisplayName("TableTest");
+            assertEquals("TableTest", table1.getDisplayName());
+            assertEquals("TableTest", table1.getCTTable().getDisplayName());
+        }
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testSetDisplayNameNull() throws IOException {
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet sheet = wb.createSheet();
+
+            AreaReference reference1 = wb.getCreationHelper().createAreaReference(
+                    new CellReference(0, 0), new CellReference(2, 2));
+
+            XSSFTable table1 = sheet.createTable(reference1);
+            table1.setDisplayName(null);
+        }
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testSetDisplayNameEmpty() throws IOException {
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet sheet = wb.createSheet();
+
+            AreaReference reference1 = wb.getCreationHelper().createAreaReference(
+                    new CellReference(0, 0), new CellReference(2, 2));
+
+            XSSFTable table1 = sheet.createTable(reference1);
+            table1.setDisplayName("");
+        }
+    }
 }