From e1c8093b7a79e718b73b749b74e06e665f8528f3 Mon Sep 17 00:00:00 2001 From: Avik Sengupta Date: Sat, 23 Aug 2003 18:54:28 +0000 Subject: [PATCH] Bug id 21722: Protect record to Sheets Submitted by Rick Berman..Thanks. git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/branches/REL_2_BRANCH@353310 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/hssf/model/Sheet.java | 28 +++++++++++++++++++ .../apache/poi/hssf/record/ProtectRecord.java | 10 +++---- .../poi/hssf/record/ProtectionRev4Record.java | 14 +++++----- .../apache/poi/hssf/usermodel/HSSFSheet.java | 18 +++++++++++- .../apache/poi/hssf/usermodel/TestBugs.java | 1 + .../poi/hssf/usermodel/TestHSSFSheet.java | 22 +++++++++++++++ 6 files changed, 80 insertions(+), 13 deletions(-) diff --git a/src/java/org/apache/poi/hssf/model/Sheet.java b/src/java/org/apache/poi/hssf/model/Sheet.java index a14d06a21..4a1611157 100644 --- a/src/java/org/apache/poi/hssf/model/Sheet.java +++ b/src/java/org/apache/poi/hssf/model/Sheet.java @@ -122,6 +122,7 @@ public class Sheet implements Model private Iterator valueRecIterator = null; private Iterator rowRecIterator = null; protected int eofLoc = 0; + protected ProtectRecord protect = null; public static final byte PANE_LOWER_RIGHT = (byte)0; public static final byte PANE_UPPER_RIGHT = (byte)1; @@ -287,6 +288,10 @@ public class Sheet implements Model { retval.windowTwo = (WindowTwoRecord) rec; } + else if ( rec.getSid() == ProtectRecord.sid ) + { + retval.protect = (ProtectRecord) rec; + } if (rec != null) { @@ -418,6 +423,8 @@ public class Sheet implements Model retval.selection = (SelectionRecord) retval.createSelection(); records.add(retval.selection); + retval.protect = (ProtectRecord) retval.createProtect(); + records.add(retval.protect); records.add(retval.createEOF()); retval.records = records; log.log(log.DEBUG, "Sheet createsheet from scratch exit"); @@ -2524,6 +2531,27 @@ public class Sheet implements Model { this.selection = selection; } + /** + * creates a Protect record with protect set to false. + * @see org.apache.poi.hssf.record.ProtectRecord + * @see org.apache.poi.hssf.record.Record + * @return a ProtectRecord + */ + + protected Record createProtect() + { + log.log(log.DEBUG, "create protect record with protection disabled"); + ProtectRecord retval = new ProtectRecord(); + + retval.setProtect(false); + // by default even when we support encryption we won't + return retval; + } + + public ProtectRecord getProtect() + { + return protect; + } /** * Sets whether the gridlines are shown in a viewer. diff --git a/src/java/org/apache/poi/hssf/record/ProtectRecord.java b/src/java/org/apache/poi/hssf/record/ProtectRecord.java index 66978f9bf..a633756d5 100644 --- a/src/java/org/apache/poi/hssf/record/ProtectRecord.java +++ b/src/java/org/apache/poi/hssf/record/ProtectRecord.java @@ -139,9 +139,9 @@ public class ProtectRecord * @return whether to protect the sheet or not */ - public short getProtect() + public boolean getProtect() { - return field_1_protect; + return (field_1_protect == 1); } public String toString() @@ -149,8 +149,8 @@ public class ProtectRecord StringBuffer buffer = new StringBuffer(); buffer.append("[PROTECT]\n"); - buffer.append(" .protected = ") - .append(Integer.toHexString(getProtect())).append("\n"); + buffer.append(" .protect = ").append(getProtect()) + .append("\n"); buffer.append("[/PROTECT]\n"); return buffer.toString(); } @@ -160,7 +160,7 @@ public class ProtectRecord LittleEndian.putShort(data, 0 + offset, sid); LittleEndian.putShort(data, 2 + offset, (( short ) 0x02)); // 2 bytes (6 total) - LittleEndian.putShort(data, 4 + offset, getProtect()); + LittleEndian.putShort(data, 4 + offset, field_1_protect); return getRecordSize(); } diff --git a/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java b/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java index e385a4adf..be6493812 100644 --- a/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java +++ b/src/java/org/apache/poi/hssf/record/ProtectionRev4Record.java @@ -139,18 +139,18 @@ public class ProtectionRev4Record * @return whether to protect the workbook or not */ - public short getProtect() - { - return field_1_protect; - } + public boolean getProtect() + { + return (field_1_protect == 1); + } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("[PROT4REV]\n"); - buffer.append(" .rowheight = ") - .append(Integer.toHexString(getProtect())).append("\n"); + buffer.append(" .protect = ").append(getProtect()) + .append("\n"); buffer.append("[/PROT4REV]\n"); return buffer.toString(); } @@ -160,7 +160,7 @@ public class ProtectionRev4Record LittleEndian.putShort(data, 0 + offset, sid); LittleEndian.putShort(data, 2 + offset, (( short ) 0x02)); // 2 bytes (6 total) - LittleEndian.putShort(data, 4 + offset, getProtect()); + LittleEndian.putShort(data, 4 + offset, field_1_protect); return getRecordSize(); } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index 798b97633..9fe691724 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -873,6 +873,22 @@ public class HSSFSheet { getSheet().setMargin( margin, size ); } + + /** + * Answer whether protection is enabled or disabled + * @return true => protection enabled; false => protection disabled + */ + public boolean getProtect() { + return getSheet().getProtect().getProtect(); + } + + /** + * Sets the protection on enabled or disabled + * @param protect true => protection enabled; false => protection disabled + */ + public void setProtect(boolean protect) { + getSheet().getProtect().setProtect(protect); + } /** * Sets the zoom magnication for the sheet. The zoom is expressed as a @@ -916,7 +932,7 @@ public class HSSFSheet //dont check if it's not within the shifted area if (! (inStart && inEnd)) continue; - //only shift if the region outside the shifted rows is not merged too + //only shift if the region outside the shifted rows is not merged too if (!merged.contains(startRow-1, (short)0) && !merged.contains(endRow+1, (short)0)){ merged.setRowFrom(merged.getRowFrom()+n); merged.setRowTo(merged.getRowTo()+n); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 7c133ba51..ae6617a79 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -109,6 +109,7 @@ extends TestCase { assertTrue("File Should Exist", file.exists()); } + diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java index e2e30f73f..3779f3a78 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java @@ -62,6 +62,7 @@ import junit.framework.TestCase; import org.apache.poi.hssf.model.Sheet; import org.apache.poi.hssf.record.HCenterRecord; +import org.apache.poi.hssf.record.ProtectRecord; import org.apache.poi.hssf.record.SCLRecord; import org.apache.poi.hssf.record.VCenterRecord; import org.apache.poi.hssf.record.WSBoolRecord; @@ -238,6 +239,27 @@ public class TestHSSFSheet cell.setCellValue("Difference Check"); assertEquals(cloned.getRow((short)0).getCell((short)0).getStringCellValue(), "clone_test"); } + + /** + * Test that the ProtectRecord is included when creating or cloning a sheet + */ + public void testProtect() { + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet hssfSheet = workbook.createSheet(); + Sheet sheet = hssfSheet.getSheet(); + ProtectRecord protect = sheet.getProtect(); + + assertFalse(protect.getProtect()); + + // This will tell us that cloneSheet, and by extension, + // the list forms of createSheet leave us with an accessible + // ProtectRecord. + hssfSheet.setProtect(true); + Sheet cloned = sheet.cloneSheet(); + assertNotNull(cloned.getProtect()); + assertTrue(hssfSheet.getProtect()); + } + public void testZoom() throws Exception