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
This commit is contained in:
parent
9f0fb6e148
commit
e1c8093b7a
@ -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.
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -109,6 +109,7 @@ extends TestCase {
|
||||
assertTrue("File Should Exist", file.exists());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user