diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
index e25c7b9e70..4b041ef17a 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
@@ -34,11 +34,13 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
+import java.util.Set;
import java.util.regex.Pattern;
import org.apache.commons.codec.digest.DigestUtils;
@@ -542,27 +544,40 @@ public final class HSSFWorkbook extends POIDocument implements org.apache.poi.ss
/**
* Selects multiple sheets as a group. This is distinct from
* the 'active' sheet (which is the sheet with focus).
+ * Unselects sheets that are not in indexes.
*
* @param indexes
*/
public void setSelectedTabs(int[] indexes) {
+ Collection list = new ArrayList(indexes.length);
+ for (int index : indexes) {
+ list.add(index);
+ }
+ setSelectedTabs(list);
+ }
+
+ /**
+ * Selects multiple sheets as a group. This is distinct from
+ * the 'active' sheet (which is the sheet with focus).
+ * Unselects sheets that are not in indexes.
+ *
+ * @param indexes
+ */
+ public void setSelectedTabs(Collection indexes) {
for (int index : indexes) {
validateSheetIndex(index);
}
+ // ignore duplicates
+ Set set = new HashSet(indexes);
int nSheets = _sheets.size();
for (int i=0; i arrayToList(int[] array) {
+ List list = new ArrayList(array.length);
+ for ( Integer element : array ) {
+ list.add(element);
+ }
+ return list;
+ }
+
+ private static void assertCollectionsEquals(Collection expected, Collection actual) {
+ assertEquals("size", expected.size(), actual.size());
+ for (int e : expected) {
+ assertTrue(actual.contains(e));
+ }
+ for (int a : actual) {
+ assertTrue(expected.contains(a));
+ }
+ }
@Test
public void selectMultiple() throws IOException {
- HSSFWorkbook wb=new HSSFWorkbook();
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet0 = wb.createSheet("Sheet0");
HSSFSheet sheet1 = wb.createSheet("Sheet1");
HSSFSheet sheet2 = wb.createSheet("Sheet2");
HSSFSheet sheet3 = wb.createSheet("Sheet3");
HSSFSheet sheet4 = wb.createSheet("Sheet4");
HSSFSheet sheet5 = wb.createSheet("Sheet5");
- HSSFSheet sheet6 = wb.createSheet("Sheet6");
- wb.setSelectedTabs(new int[] { 0, 2, 3});
+
+ List selected = arrayToList(new int[] { 0, 2, 3 });
+ wb.setSelectedTabs(selected);
+ assertCollectionsEquals(selected, wb.getSelectedTabs());
+ assertEquals(true, sheet0.isSelected());
+ assertEquals(false, sheet1.isSelected());
+ assertEquals(true, sheet2.isSelected());
+ assertEquals(true, sheet3.isSelected());
+ assertEquals(false, sheet4.isSelected());
+ assertEquals(false, sheet5.isSelected());
+
+ selected = arrayToList(new int[] { 1, 3, 5 });
+ wb.setSelectedTabs(selected);
+
+ // previous selection should be cleared
+ assertCollectionsEquals(selected, wb.getSelectedTabs());
+ assertEquals(false, sheet0.isSelected());
assertEquals(true, sheet1.isSelected());
assertEquals(false, sheet2.isSelected());
assertEquals(true, sheet3.isSelected());
- assertEquals(true, sheet4.isSelected());
- assertEquals(false, sheet5.isSelected());
- assertEquals(false, sheet6.isSelected());
+ assertEquals(false, sheet4.isSelected());
+ assertEquals(true, sheet5.isSelected());
- wb.setSelectedTabs(new int[] { 1, 3, 5});
-
- assertEquals(false, sheet1.isSelected());
- assertEquals(true, sheet2.isSelected());
- assertEquals(false, sheet3.isSelected());
- assertEquals(true, sheet4.isSelected());
- assertEquals(false, sheet5.isSelected());
- assertEquals(true, sheet6.isSelected());
-
- assertEquals(true, sheet1.isActive());
+ assertEquals(true, sheet0.isActive());
assertEquals(false, sheet2.isActive());
-
-
- assertEquals(true, sheet1.isActive());
- assertEquals(false, sheet3.isActive());
wb.setActiveSheet(2);
- assertEquals(false, sheet1.isActive());
- assertEquals(true, sheet3.isActive());
+ assertEquals(false, sheet0.isActive());
+ assertEquals(true, sheet2.isActive());
/*{ // helpful if viewing this workbook in excel:
+ sheet0.createRow(0).createCell(0).setCellValue(new HSSFRichTextString("Sheet0"));
sheet1.createRow(0).createCell(0).setCellValue(new HSSFRichTextString("Sheet1"));
sheet2.createRow(0).createCell(0).setCellValue(new HSSFRichTextString("Sheet2"));
sheet3.createRow(0).createCell(0).setCellValue(new HSSFRichTextString("Sheet3"));
- sheet4.createRow(0).createCell(0).setCellValue(new HSSFRichTextString("Sheet4"));
try {
File fOut = TempFile.createTempFile("sheetMultiSelect", ".xls");