mirror of https://github.com/apache/poi.git
merge trunk to branch
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/hssf_cryptoapi@1756967 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
892d978d4e
commit
fdddabe430
15
build.xml
15
build.xml
|
@ -40,7 +40,7 @@ under the License.
|
|||
|
||||
<description>The Apache POI project Ant build.</description>
|
||||
|
||||
<property name="version.id" value="3.15-beta3"/>
|
||||
<property name="version.id" value="3.15-beta4"/>
|
||||
<property name="release.rc" value="RC1"/>
|
||||
|
||||
<property environment="env"/>
|
||||
|
@ -283,13 +283,10 @@ under the License.
|
|||
NOTE: we did not update to 3.x yet because it requires Java 7, but we are still supporting Java 6 currently
|
||||
===========================================================================================================
|
||||
-->
|
||||
<condition property="findbugs.jdk6">
|
||||
<equals arg1="${ant.java.version}" arg2="1.6"/>
|
||||
<condition property="findbugs.version" value="2.0.3" else="3.0.1">
|
||||
<contains string="${java.version}" substring="1.6"/>
|
||||
</condition>
|
||||
<property name="findbugs.version" value="2.0.3" if:set="findbugs.jdk6"/>
|
||||
<property name="findbugs.version" value="3.0.1" unless:set="findbugs.jdk6"/>
|
||||
<echo message="Findbugs-Version: ${findbugs.version} for Java ${ant.java.version}"/>
|
||||
<property name="findbugs.url" value="http://prdownloads.sourceforge.net/findbugs/findbugs-noUpdateChecks-${findbugs.version}.zip?download"/>
|
||||
<property name="findbugs.url" value="http://prdownloads.sourceforge.net/findbugs/findbugs-noUpdateChecks-${findbugs.version}.zip?download"/>
|
||||
<property name="findbugs.jar" location="${main.lib}/findbugs-noUpdateChecks-${findbugs.version}.zip"/>
|
||||
|
||||
<propertyset id="junit.properties">
|
||||
|
@ -441,7 +438,7 @@ under the License.
|
|||
<target name="help" description="Prints Apache POI's Ant usage help">
|
||||
<echo>
|
||||
This is POI ${version.id}
|
||||
Java Version ${ant.java.version}
|
||||
Java Version ${ant.java.version}/${java.version}
|
||||
Timestamp ${DSTAMP}
|
||||
The main targets of interest are:
|
||||
- clean Erase all build work products (ie. everything in the build directory)
|
||||
|
@ -480,7 +477,9 @@ under the License.
|
|||
<mkdir dir="${dist.dir}"/>
|
||||
<mkdir dir="${build.site}"/>
|
||||
|
||||
<echo message="Using Ant: ${ant.version} from ${ant.home}, Ant detected Java ${ant.java.version} (may be different than actual Java sometimes...)" />
|
||||
<echo message="Using Java: ${java.version}/${java.runtime.version}/${java.vm.version}/${java.vm.name} from ${java.vm.vendor} on ${os.name}: ${os.version}" />
|
||||
<echo message="Using Findbugs: ${findbugs.version} for Java ${java.version}"/>
|
||||
|
||||
<scriptdef name="release_tag" language="javascript">
|
||||
var rel = ("REL_"+project.getProperty("version.id")).toUpperCase().replace(/\W/g,"_");
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-examples</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-excelant</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
<artifactId>poi-ooxml-schema-encryption</artifactId>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
<artifactId>poi-ooxml-schema-security</artifactId>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
<artifactId>poi-ooxml-schema</artifactId>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
<name>Apache POI - the Java API for Microsoft Documents</name>
|
||||
<description>Maven build of Apache POI for Sonar checks</description>
|
||||
<url>http://poi.apache.org/</url>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.15-beta3-SNAPSHOT</version>
|
||||
<version>3.15-beta4-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-scratchpad</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
|
|
@ -752,6 +752,10 @@ public class XSLFTextParagraph implements TextParagraph<XSLFShape,XSLFTextParagr
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return master style text paragraph properties, or <code>null</code> if
|
||||
* there are no master slides or the master slides do not contain a text paragraph
|
||||
*/
|
||||
/* package */ CTTextParagraphProperties getDefaultMasterStyle(){
|
||||
CTPlaceholder ph = _shape.getCTPlaceholder();
|
||||
String defaultStyleSelector;
|
||||
|
@ -932,7 +936,11 @@ public class XSLFTextParagraph implements TextParagraph<XSLFShape,XSLFTextParagr
|
|||
public Double getDefaultFontSize() {
|
||||
CTTextCharacterProperties endPr = _p.getEndParaRPr();
|
||||
if (endPr == null || !endPr.isSetSz()) {
|
||||
endPr = getDefaultMasterStyle().getDefRPr();
|
||||
// inherit the font size from the master style
|
||||
CTTextParagraphProperties masterStyle = getDefaultMasterStyle();
|
||||
if (masterStyle != null) {
|
||||
endPr = masterStyle.getDefRPr();
|
||||
}
|
||||
}
|
||||
return (endPr == null || !endPr.isSetSz()) ? 12 : (endPr.getSz() / 100.);
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ public class TestSXSSFSheetAutoSizeColumn {
|
|||
// longCellValue ends up with approx. column width 10_000 (on my machine)
|
||||
// so shortCellValue can be expected to be < 5000 for all fonts
|
||||
// and longCellValue can be expected to be > 5000 for all fonts
|
||||
private static final int COLUMN_WIDTH_THRESHOLD_BETWEEN_SHORT_AND_LONG = 5000;
|
||||
private static final int COLUMN_WIDTH_THRESHOLD_BETWEEN_SHORT_AND_LONG = 4000;
|
||||
private static final int MAX_COLUMN_WIDTH = 255*256;
|
||||
|
||||
private static final SortedSet<Integer> columns;
|
||||
|
|
|
@ -32,9 +32,9 @@ import org.apache.poi.poifs.filesystem.*;
|
|||
* @author Nick Burch
|
||||
*/
|
||||
public final class PowerPointExtractor extends POIOLE2TextExtractor {
|
||||
private HSLFSlideShowImpl _hslfshow;
|
||||
private HSLFSlideShow _show;
|
||||
private List<HSLFSlide> _slides;
|
||||
private final HSLFSlideShowImpl _hslfshow;
|
||||
private final HSLFSlideShow _show;
|
||||
private final List<HSLFSlide> _slides;
|
||||
|
||||
private boolean _slidesByDefault = true;
|
||||
private boolean _notesByDefault = false;
|
||||
|
@ -240,9 +240,9 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor {
|
|||
}
|
||||
|
||||
// Slide header, if set
|
||||
ret.append(headerText);
|
||||
ret.append(headerText);
|
||||
|
||||
// Slide text
|
||||
// Slide text
|
||||
textRunsToText(ret, slide.getTextParagraphs());
|
||||
|
||||
// Table text
|
||||
|
@ -256,14 +256,13 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor {
|
|||
|
||||
// Comments, if requested and present
|
||||
if (getCommentText) {
|
||||
Comment[] comments = slide.getComments();
|
||||
for (int j = 0; j < comments.length; j++) {
|
||||
ret.append(comments[j].getAuthor() + " - " + comments[j].getText() + "\n");
|
||||
for (Comment comment : slide.getComments()) {
|
||||
ret.append(comment.getAuthor() + " - " + comment.getText() + "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (getNoteText) {
|
||||
ret.append("\n");
|
||||
ret.append('\n');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -271,7 +270,7 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor {
|
|||
// Not currently using _notes, as that can have the notes of
|
||||
// master sheets in. Grab Slide list, then work from there,
|
||||
// but ensure no duplicates
|
||||
HashSet<Integer> seenNotes = new HashSet<Integer>();
|
||||
Set<Integer> seenNotes = new HashSet<Integer>();
|
||||
String headerText = "";
|
||||
String footerText = "";
|
||||
HeadersFooters hf = _show.getNotesHeadersFooters();
|
||||
|
@ -285,8 +284,8 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor {
|
|||
}
|
||||
|
||||
|
||||
for (int i = 0; i < _slides.size(); i++) {
|
||||
HSLFNotes notes = _slides.get(i).getNotes();
|
||||
for (HSLFSlide slide : _slides) {
|
||||
HSLFNotes notes = slide.getNotes();
|
||||
if (notes == null) {
|
||||
continue;
|
||||
}
|
||||
|
@ -297,13 +296,13 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor {
|
|||
seenNotes.add(id);
|
||||
|
||||
// Repeat the Notes header, if set
|
||||
ret.append(headerText);
|
||||
ret.append(headerText);
|
||||
|
||||
// Notes text
|
||||
textRunsToText(ret, notes.getTextParagraphs());
|
||||
textRunsToText(ret, notes.getTextParagraphs());
|
||||
|
||||
// Repeat the notes footer, if set
|
||||
ret.append(footerText);
|
||||
ret.append(footerText);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -315,16 +314,18 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor {
|
|||
}
|
||||
|
||||
private void extractTableText(StringBuffer ret, HSLFTable table) {
|
||||
for (int row = 0; row < table.getNumberOfRows(); row++){
|
||||
for (int col = 0; col < table.getNumberOfColumns(); col++){
|
||||
final int nrows = table.getNumberOfRows();
|
||||
final int ncols = table.getNumberOfColumns();
|
||||
for (int row = 0; row < nrows; row++){
|
||||
for (int col = 0; col < ncols; col++){
|
||||
HSLFTableCell cell = table.getCell(row, col);
|
||||
//defensive null checks; don't know if they're necessary
|
||||
if (cell != null){
|
||||
String txt = cell.getText();
|
||||
txt = (txt == null) ? "" : txt;
|
||||
ret.append(txt);
|
||||
if (col < table.getNumberOfColumns()-1){
|
||||
ret.append("\t");
|
||||
if (col < ncols-1){
|
||||
ret.append('\t');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -339,7 +340,7 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor {
|
|||
for (List<HSLFTextParagraph> lp : paragraphs) {
|
||||
ret.append(HSLFTextParagraph.getText(lp));
|
||||
if (ret.length() > 0 && ret.charAt(ret.length()-1) != '\n') {
|
||||
ret.append("\n");
|
||||
ret.append('\n');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,8 @@ import org.apache.poi.hslf.usermodel.HSLFTextShape;
|
|||
*/
|
||||
public final class HeadersFooters {
|
||||
|
||||
private static final String _ppt2007tag = "___PPT12";
|
||||
|
||||
private final HeadersFootersContainer _container;
|
||||
private final HSLFSheet _sheet;
|
||||
private final boolean _ppt2007;
|
||||
|
@ -54,7 +56,7 @@ public final class HeadersFooters {
|
|||
|
||||
// detect if this ppt was saved in Office2007
|
||||
String tag = ppt.getSlideMasters().get(0).getProgrammableTag();
|
||||
_ppt2007 = "___PPT12".equals(tag);
|
||||
_ppt2007 = _ppt2007tag.equals(tag);
|
||||
|
||||
SheetContainer sc = _sheet.getSheetContainer();
|
||||
HeadersFootersContainer hdd = (HeadersFootersContainer)sc.findFirstOfType(RecordTypes.HeadersFooters.typeID);
|
||||
|
|
|
@ -22,32 +22,10 @@ import java.io.File;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.poi.hpsf.DocumentSummaryInformation;
|
||||
import org.apache.poi.hpsf.SummaryInformation;
|
||||
import org.apache.poi.hwpf.model.BookmarksTables;
|
||||
import org.apache.poi.hwpf.model.CHPBinTable;
|
||||
import org.apache.poi.hwpf.model.ComplexFileTable;
|
||||
import org.apache.poi.hwpf.model.DocumentProperties;
|
||||
import org.apache.poi.hwpf.model.EscherRecordHolder;
|
||||
import org.apache.poi.hwpf.model.FSPADocumentPart;
|
||||
import org.apache.poi.hwpf.model.FSPATable;
|
||||
import org.apache.poi.hwpf.model.FieldsTables;
|
||||
import org.apache.poi.hwpf.model.FontTable;
|
||||
import org.apache.poi.hwpf.model.ListTables;
|
||||
import org.apache.poi.hwpf.model.NoteType;
|
||||
import org.apache.poi.hwpf.model.NotesTables;
|
||||
import org.apache.poi.hwpf.model.PAPBinTable;
|
||||
import org.apache.poi.hwpf.model.PicturesTable;
|
||||
import org.apache.poi.hwpf.model.RevisionMarkAuthorTable;
|
||||
import org.apache.poi.hwpf.model.SavedByTable;
|
||||
import org.apache.poi.hwpf.model.SectionTable;
|
||||
import org.apache.poi.hwpf.model.SinglentonTextPiece;
|
||||
import org.apache.poi.hwpf.model.StyleSheet;
|
||||
import org.apache.poi.hwpf.model.SubdocumentType;
|
||||
import org.apache.poi.hwpf.model.TextPiece;
|
||||
import org.apache.poi.hwpf.model.TextPieceTable;
|
||||
import org.apache.poi.hwpf.model.*;
|
||||
import org.apache.poi.hwpf.model.io.HWPFFileSystem;
|
||||
import org.apache.poi.hwpf.model.io.HWPFOutputStream;
|
||||
import org.apache.poi.hwpf.usermodel.Bookmarks;
|
||||
|
@ -572,12 +550,27 @@ public final class HWPFDocument extends HWPFDocumentCore {
|
|||
}
|
||||
|
||||
/**
|
||||
* Warning - not currently implemented for HWPF!
|
||||
* Write out the word file that is represented by this class, to the
|
||||
* currently open {@link File}, via the writeable {@link POIFSFileSystem}
|
||||
* it was opened as.
|
||||
*
|
||||
* <p>This will fail (with an {@link IllegalStateException} if the
|
||||
* Document was opened read-only, opened from an {@link InputStream}
|
||||
* instead of a File, or if this is not the root document. For those cases,
|
||||
* you must use {@link #write(OutputStream)} or {@link #write(File)} to
|
||||
* write to a brand new document.
|
||||
*
|
||||
* @since 3.15
|
||||
*/
|
||||
@Override
|
||||
public void write() throws IOException {
|
||||
// TODO Implement
|
||||
throw new IllegalStateException("Coming soon!");
|
||||
validateInPlaceWritePossible();
|
||||
|
||||
// Update the Document+Properties streams in the file
|
||||
write(directory.getFileSystem(), false);
|
||||
|
||||
// Sync with the File on disk
|
||||
directory.getFileSystem().writeFilesystem();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -912,23 +905,18 @@ public final class HWPFDocument extends HWPFDocumentCore {
|
|||
dataBuf = tempBuf;
|
||||
}
|
||||
|
||||
// create new document preserving order of entries
|
||||
// TODO Check "copyOtherEntries" and tweak behaviour based on that
|
||||
// TODO That's needed for in-place write
|
||||
// Create a new document preserving order of entries / Update existing
|
||||
boolean docWritten = false;
|
||||
boolean dataWritten = false;
|
||||
boolean objectPoolWritten = false;
|
||||
boolean tableWritten = false;
|
||||
boolean propertiesWritten = false;
|
||||
for ( Iterator<Entry> iter = directory.getEntries(); iter.hasNext(); )
|
||||
{
|
||||
Entry entry = iter.next();
|
||||
for (Entry entry : directory) {
|
||||
if ( entry.getName().equals( STREAM_WORD_DOCUMENT ) )
|
||||
{
|
||||
if ( !docWritten )
|
||||
{
|
||||
pfs.createDocument( new ByteArrayInputStream( mainBuf ),
|
||||
STREAM_WORD_DOCUMENT );
|
||||
write(pfs, mainBuf, STREAM_WORD_DOCUMENT);
|
||||
docWritten = true;
|
||||
}
|
||||
}
|
||||
|
@ -936,7 +924,11 @@ public final class HWPFDocument extends HWPFDocumentCore {
|
|||
{
|
||||
if ( !objectPoolWritten )
|
||||
{
|
||||
_objectPool.writeTo( pfs.getRoot() );
|
||||
if ( copyOtherEntries ) {
|
||||
_objectPool.writeTo( pfs.getRoot() );
|
||||
} else {
|
||||
// Object pool is already there, no need to change/copy
|
||||
}
|
||||
objectPoolWritten = true;
|
||||
}
|
||||
}
|
||||
|
@ -945,8 +937,7 @@ public final class HWPFDocument extends HWPFDocumentCore {
|
|||
{
|
||||
if ( !tableWritten )
|
||||
{
|
||||
pfs.createDocument( new ByteArrayInputStream( tableBuf ),
|
||||
STREAM_TABLE_1 );
|
||||
write(pfs, tableBuf, STREAM_TABLE_1);
|
||||
tableWritten = true;
|
||||
}
|
||||
}
|
||||
|
@ -965,29 +956,25 @@ public final class HWPFDocument extends HWPFDocumentCore {
|
|||
{
|
||||
if ( !dataWritten )
|
||||
{
|
||||
pfs.createDocument( new ByteArrayInputStream( dataBuf ),
|
||||
STREAM_DATA );
|
||||
write(pfs, dataBuf, STREAM_DATA);
|
||||
dataWritten = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if ( copyOtherEntries )
|
||||
{
|
||||
EntryUtils.copyNodeRecursively( entry, pfs.getRoot() );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !docWritten )
|
||||
pfs.createDocument( new ByteArrayInputStream( mainBuf ),
|
||||
STREAM_WORD_DOCUMENT );
|
||||
write(pfs, mainBuf, STREAM_WORD_DOCUMENT);
|
||||
if ( !tableWritten )
|
||||
pfs.createDocument( new ByteArrayInputStream( tableBuf ),
|
||||
STREAM_TABLE_1 );
|
||||
write(pfs, tableBuf, STREAM_TABLE_1);
|
||||
if ( !propertiesWritten )
|
||||
writeProperties( pfs );
|
||||
if ( !dataWritten )
|
||||
pfs.createDocument( new ByteArrayInputStream( dataBuf ),
|
||||
STREAM_DATA );
|
||||
if ( !objectPoolWritten )
|
||||
write(pfs, dataBuf, STREAM_DATA);
|
||||
if ( !objectPoolWritten && copyOtherEntries )
|
||||
_objectPool.writeTo( pfs.getRoot() );
|
||||
|
||||
this.directory = pfs.getRoot();
|
||||
|
@ -1000,6 +987,9 @@ public final class HWPFDocument extends HWPFDocumentCore {
|
|||
this._tableStream = tableStream.toByteArray();
|
||||
this._dataStream = dataBuf;
|
||||
}
|
||||
private static void write(NPOIFSFileSystem pfs, byte[] data, String name) throws IOException {
|
||||
pfs.createOrUpdateDocument(new ByteArrayInputStream(data), name);
|
||||
}
|
||||
|
||||
@Internal
|
||||
public byte[] getDataStream()
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.apache.poi.util.Internal;
|
|||
import org.apache.poi.util.POILogFactory;
|
||||
import org.apache.poi.util.POILogger;
|
||||
|
||||
|
||||
@Internal
|
||||
public final class SectionSprmUncompressor extends SprmUncompressor
|
||||
{
|
||||
|
@ -58,15 +59,14 @@ public final class SectionSprmUncompressor extends SprmUncompressor
|
|||
*/
|
||||
static void unCompressSEPOperation (SectionProperties newSEP, SprmOperation sprm)
|
||||
{
|
||||
final int operation = sprm.getOperation();
|
||||
final int operand = sprm.getOperand();
|
||||
int operation = sprm.getOperation();
|
||||
switch (operation)
|
||||
{
|
||||
case 0:
|
||||
newSEP.setCnsPgn ((byte) operand);
|
||||
newSEP.setCnsPgn ((byte) sprm.getOperand());
|
||||
break;
|
||||
case 0x1:
|
||||
newSEP.setIHeadingPgn ((byte) operand);
|
||||
newSEP.setIHeadingPgn ((byte) sprm.getOperand());
|
||||
break;
|
||||
case 0x2:
|
||||
byte[] buf = new byte[sprm.size() - 3];
|
||||
|
@ -80,110 +80,110 @@ public final class SectionSprmUncompressor extends SprmUncompressor
|
|||
//not quite sure
|
||||
break;
|
||||
case 0x5:
|
||||
newSEP.setFEvenlySpaced (getFlag (operand));
|
||||
newSEP.setFEvenlySpaced (getFlag (sprm.getOperand()));
|
||||
break;
|
||||
case 0x6:
|
||||
newSEP.setFUnlocked (getFlag (operand));
|
||||
newSEP.setFUnlocked (getFlag (sprm.getOperand()));
|
||||
break;
|
||||
case 0x7:
|
||||
newSEP.setDmBinFirst ((short) operand);
|
||||
newSEP.setDmBinFirst ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x8:
|
||||
newSEP.setDmBinOther ((short) operand);
|
||||
newSEP.setDmBinOther ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x9:
|
||||
newSEP.setBkc ((byte) operand);
|
||||
newSEP.setBkc ((byte) sprm.getOperand());
|
||||
break;
|
||||
case 0xa:
|
||||
newSEP.setFTitlePage (getFlag (operand));
|
||||
newSEP.setFTitlePage (getFlag (sprm.getOperand()));
|
||||
break;
|
||||
case 0xb:
|
||||
newSEP.setCcolM1 ((short) operand);
|
||||
newSEP.setCcolM1 ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0xc:
|
||||
newSEP.setDxaColumns (operand);
|
||||
newSEP.setDxaColumns (sprm.getOperand());
|
||||
break;
|
||||
case 0xd:
|
||||
newSEP.setFAutoPgn (getFlag (operand));
|
||||
newSEP.setFAutoPgn (getFlag (sprm.getOperand()));
|
||||
break;
|
||||
case 0xe:
|
||||
newSEP.setNfcPgn ((byte) operand);
|
||||
newSEP.setNfcPgn ((byte) sprm.getOperand());
|
||||
break;
|
||||
case 0xf:
|
||||
newSEP.setDyaPgn ((short) operand);
|
||||
newSEP.setDyaPgn ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x10:
|
||||
newSEP.setDxaPgn ((short) operand);
|
||||
newSEP.setDxaPgn ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x11:
|
||||
newSEP.setFPgnRestart (getFlag (operand));
|
||||
newSEP.setFPgnRestart (getFlag (sprm.getOperand()));
|
||||
break;
|
||||
case 0x12:
|
||||
newSEP.setFEndNote (getFlag (operand));
|
||||
newSEP.setFEndNote (getFlag (sprm.getOperand()));
|
||||
break;
|
||||
case 0x13:
|
||||
newSEP.setLnc ((byte) operand);
|
||||
newSEP.setLnc ((byte) sprm.getOperand());
|
||||
break;
|
||||
case 0x14:
|
||||
newSEP.setGrpfIhdt ((byte) operand);
|
||||
newSEP.setGrpfIhdt ((byte) sprm.getOperand());
|
||||
break;
|
||||
case 0x15:
|
||||
newSEP.setNLnnMod ((short) operand);
|
||||
newSEP.setNLnnMod ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x16:
|
||||
newSEP.setDxaLnn (operand);
|
||||
newSEP.setDxaLnn (sprm.getOperand());
|
||||
break;
|
||||
case 0x17:
|
||||
newSEP.setDyaHdrTop (operand);
|
||||
newSEP.setDyaHdrTop (sprm.getOperand());
|
||||
break;
|
||||
case 0x18:
|
||||
newSEP.setDyaHdrBottom (operand);
|
||||
newSEP.setDyaHdrBottom (sprm.getOperand());
|
||||
break;
|
||||
case 0x19:
|
||||
newSEP.setFLBetween (getFlag (operand));
|
||||
newSEP.setFLBetween (getFlag (sprm.getOperand()));
|
||||
break;
|
||||
case 0x1a:
|
||||
newSEP.setVjc ((byte) operand);
|
||||
newSEP.setVjc ((byte) sprm.getOperand());
|
||||
break;
|
||||
case 0x1b:
|
||||
newSEP.setLnnMin ((short) operand);
|
||||
newSEP.setLnnMin ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x1c:
|
||||
newSEP.setPgnStart ((short) operand);
|
||||
newSEP.setPgnStart ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x1d:
|
||||
newSEP.setDmOrientPage( operand != 0 );
|
||||
newSEP.setDmOrientPage( sprm.getOperand() != 0 );
|
||||
break;
|
||||
case 0x1e:
|
||||
|
||||
//nothing
|
||||
break;
|
||||
case 0x1f:
|
||||
newSEP.setXaPage (operand);
|
||||
newSEP.setXaPage (sprm.getOperand());
|
||||
break;
|
||||
case 0x20:
|
||||
newSEP.setYaPage (operand);
|
||||
newSEP.setYaPage (sprm.getOperand());
|
||||
break;
|
||||
case 0x21:
|
||||
newSEP.setDxaLeft (operand);
|
||||
newSEP.setDxaLeft (sprm.getOperand());
|
||||
break;
|
||||
case 0x22:
|
||||
newSEP.setDxaRight (operand);
|
||||
newSEP.setDxaRight (sprm.getOperand());
|
||||
break;
|
||||
case 0x23:
|
||||
newSEP.setDyaTop (operand);
|
||||
newSEP.setDyaTop (sprm.getOperand());
|
||||
break;
|
||||
case 0x24:
|
||||
newSEP.setDyaBottom (operand);
|
||||
newSEP.setDyaBottom (sprm.getOperand());
|
||||
break;
|
||||
case 0x25:
|
||||
newSEP.setDzaGutter (operand);
|
||||
newSEP.setDzaGutter (sprm.getOperand());
|
||||
break;
|
||||
case 0x26:
|
||||
newSEP.setDmPaperReq ((short) operand);
|
||||
newSEP.setDmPaperReq ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x27:
|
||||
newSEP.setFPropMark (getFlag (operand));
|
||||
newSEP.setFPropMark (getFlag (sprm.getOperand()));
|
||||
break;
|
||||
case 0x28:
|
||||
break;
|
||||
|
@ -204,40 +204,40 @@ public final class SectionSprmUncompressor extends SprmUncompressor
|
|||
newSEP.setBrcRight(new BorderCode(sprm.getGrpprl(), sprm.getGrpprlOffset()));
|
||||
break;
|
||||
case 0x2f:
|
||||
newSEP.setPgbProp (operand);
|
||||
newSEP.setPgbProp (sprm.getOperand());
|
||||
break;
|
||||
case 0x30:
|
||||
newSEP.setDxtCharSpace (operand);
|
||||
newSEP.setDxtCharSpace (sprm.getOperand());
|
||||
break;
|
||||
case 0x31:
|
||||
newSEP.setDyaLinePitch (operand);
|
||||
newSEP.setDyaLinePitch (sprm.getOperand());
|
||||
break;
|
||||
case 0x33:
|
||||
newSEP.setWTextFlow ((short) operand);
|
||||
newSEP.setWTextFlow ((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x3C:
|
||||
// [MS-DOC], v20140721, 2.6.4, sprmSRncFtn
|
||||
newSEP.setRncFtn((short) operand);
|
||||
newSEP.setRncFtn((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x3E:
|
||||
// [MS-DOC], v20140721, 2.6.4, sprmSRncEdn
|
||||
newSEP.setRncEdn((short) operand);
|
||||
newSEP.setRncEdn((short) sprm.getOperand());
|
||||
break;
|
||||
case 0x3F:
|
||||
// [MS-DOC], v20140721, 2.6.4, sprmSNFtn
|
||||
newSEP.setNFtn(operand);
|
||||
newSEP.setNFtn((int) sprm.getOperand());
|
||||
break;
|
||||
case 0x40:
|
||||
// [MS-DOC], v20140721, 2.6.4, sprmSNFtnRef
|
||||
newSEP.setNfcFtnRef(operand);
|
||||
newSEP.setNfcFtnRef((int) sprm.getOperand());
|
||||
break;
|
||||
case 0x41:
|
||||
// [MS-DOC], v20140721, 2.6.4, sprmSNEdn
|
||||
newSEP.setNEdn(operand);
|
||||
newSEP.setNEdn((int) sprm.getOperand());
|
||||
break;
|
||||
case 0x42:
|
||||
// [MS-DOC], v20140721, 2.6.4, sprmSNEdnRef
|
||||
newSEP.setNfcEdnRef(operand);
|
||||
newSEP.setNfcEdnRef((int) sprm.getOperand());
|
||||
break;
|
||||
default:
|
||||
logger.log(POILogger.INFO, "Unsupported Sprm operation: " + operation + " (" + HexDump.byteToHex(operation) + ")");
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
package org.apache.poi.hslf.extractor;
|
||||
|
||||
import static org.apache.poi.POITestCase.assertContains;
|
||||
import static org.apache.poi.POITestCase.assertContainsIgnoreCase;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
@ -26,7 +27,6 @@ import static org.junit.Assert.assertTrue;
|
|||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.hslf.model.OLEShape;
|
||||
|
@ -355,7 +355,7 @@ public final class TestExtractor {
|
|||
ppe = new PowerPointExtractor(hslf);
|
||||
|
||||
text = ppe.getText();
|
||||
assertContains(text.toLowerCase(Locale.ROOT), "master");
|
||||
assertContainsIgnoreCase(text, "master");
|
||||
assertContains(text, masterText);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,11 +21,16 @@ import java.io.ByteArrayInputStream;
|
|||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.hwpf.HWPFDocument;
|
||||
import org.apache.poi.hwpf.HWPFTestCase;
|
||||
import org.apache.poi.hwpf.HWPFTestDataSamples;
|
||||
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
||||
import org.apache.poi.poifs.filesystem.OPOIFSFileSystem;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.apache.poi.util.TempFile;
|
||||
|
||||
/**
|
||||
|
@ -75,7 +80,65 @@ public final class TestHWPFWrite extends HWPFTestCase {
|
|||
r = doc.getRange();
|
||||
assertEquals("I am a test document\r", r.getParagraph(0).text());
|
||||
doc.close();
|
||||
}
|
||||
}
|
||||
|
||||
// TODO In-place write positive and negative checks
|
||||
/**
|
||||
* Writing to the file we opened from - note, uses a temp file to
|
||||
* avoid changing our test files!
|
||||
*/
|
||||
@SuppressWarnings("resource")
|
||||
public void testInPlaceWrite() throws Exception {
|
||||
// Setup as a copy of a known-good file
|
||||
final File file = TempFile.createTempFile("TestDocument", ".doc");
|
||||
IOUtils.copy(
|
||||
POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc"),
|
||||
new FileOutputStream(file)
|
||||
);
|
||||
|
||||
// Open from the temp file in read-write mode
|
||||
HWPFDocument doc = new HWPFDocument(new NPOIFSFileSystem(file, false).getRoot());
|
||||
Range r = doc.getRange();
|
||||
assertEquals("I am a test document\r", r.getParagraph(0).text());
|
||||
|
||||
// Change
|
||||
r.replaceText("X XX a test document\r", false);
|
||||
|
||||
// Save in-place, close, re-open and check
|
||||
doc.write();
|
||||
doc.close();
|
||||
|
||||
doc = new HWPFDocument(new NPOIFSFileSystem(file).getRoot());
|
||||
assertEquals("X XX a test document\r", r.getParagraph(0).text());
|
||||
}
|
||||
|
||||
@SuppressWarnings("resource")
|
||||
public void testInvalidInPlaceWrite() throws Exception {
|
||||
HWPFDocument doc;
|
||||
|
||||
// Can't work for InputStream opened files
|
||||
doc = new HWPFDocument(
|
||||
POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc"));
|
||||
try {
|
||||
doc.write();
|
||||
fail("Shouldn't work for InputStream");
|
||||
} catch (IllegalStateException e) {}
|
||||
|
||||
// Can't work for OPOIFS
|
||||
OPOIFSFileSystem ofs = new OPOIFSFileSystem(
|
||||
POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc"));
|
||||
doc = new HWPFDocument(ofs.getRoot());
|
||||
try {
|
||||
doc.write();
|
||||
fail("Shouldn't work for OPOIFSFileSystem");
|
||||
} catch (IllegalStateException e) {}
|
||||
|
||||
// Can't work for Read-Only files
|
||||
NPOIFSFileSystem fs = new NPOIFSFileSystem(
|
||||
POIDataSamples.getDocumentInstance().getFile("SampleDoc.doc"), true);
|
||||
doc = new HWPFDocument(fs.getRoot());
|
||||
try {
|
||||
doc.write();
|
||||
fail("Shouldn't work for Read Only");
|
||||
} catch (IllegalStateException e) {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,13 +32,16 @@ import java.security.PrivilegedActionException;
|
|||
import java.security.PrivilegedExceptionAction;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.poi.util.SuppressForbidden;
|
||||
import org.apache.poi.util.Internal;
|
||||
|
||||
/**
|
||||
* Util class for POI JUnit TestCases, which provide additional features
|
||||
*/
|
||||
@Internal
|
||||
public final class POITestCase {
|
||||
public static void assertContains(String haystack, String needle) {
|
||||
assertNotNull(haystack);
|
||||
|
@ -48,6 +51,19 @@ public final class POITestCase {
|
|||
);
|
||||
}
|
||||
|
||||
public static void assertContainsIgnoreCase(String haystack, String needle, Locale locale) {
|
||||
assertNotNull(haystack);
|
||||
assertNotNull(needle);
|
||||
String hay = haystack.toLowerCase(locale);
|
||||
String n = needle.toLowerCase(locale);
|
||||
assertTrue("Unable to find expected text '" + needle + "' in text:\n" + haystack,
|
||||
hay.contains(n)
|
||||
);
|
||||
}
|
||||
public static void assertContainsIgnoreCase(String haystack, String needle) {
|
||||
assertContainsIgnoreCase(haystack, needle, Locale.ROOT);
|
||||
}
|
||||
|
||||
public static void assertNotContained(String haystack, String needle) {
|
||||
assertNotNull(haystack);
|
||||
assertFalse(
|
||||
|
|
|
@ -0,0 +1,126 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.poi.POITestCase;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* A class for testing the POI Junit TestCase utility class
|
||||
*/
|
||||
public final class TestPOITestCase {
|
||||
@Test
|
||||
public void assertContains() {
|
||||
POITestCase.assertContains("There is a needle in this haystack", "needle");
|
||||
/*try {
|
||||
POITestCase.assertContains("There is gold in this haystack", "needle");
|
||||
fail("found a needle");
|
||||
} catch (final junit.framework.AssertionFailedError e) {
|
||||
// expected
|
||||
}*/
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertContainsIgnoreCase_Locale() {
|
||||
POITestCase.assertContainsIgnoreCase("There is a Needle in this haystack", "needlE", Locale.ROOT);
|
||||
// FIXME: test failing case
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertContainsIgnoreCase() {
|
||||
POITestCase.assertContainsIgnoreCase("There is a Needle in this haystack", "needlE");
|
||||
// FIXME: test failing case
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertNotContained() {
|
||||
POITestCase.assertNotContained("There is a needle in this haystack", "gold");
|
||||
// FIXME: test failing case
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertMapContains() {
|
||||
Map<String, String> haystack = Collections.singletonMap("needle", "value");
|
||||
POITestCase.assertContains(haystack, "needle");
|
||||
// FIXME: test failing case
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Utility method to get the value of a private/protected field.
|
||||
* Only use this method in test cases!!!
|
||||
*/
|
||||
@Ignore
|
||||
@Test
|
||||
public void getFieldValue() {
|
||||
/*
|
||||
final Class<? super T> clazz;
|
||||
final T instance;
|
||||
final Class<R> fieldType;
|
||||
final String fieldName;
|
||||
|
||||
final R expected;
|
||||
final R actual = POITestCase.getFieldValue(clazz, instance, fieldType, fieldName);
|
||||
assertEquals(expected, actual);
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to call a private/protected method.
|
||||
* Only use this method in test cases!!!
|
||||
*/
|
||||
@Ignore
|
||||
@Test
|
||||
public void callMethod() {
|
||||
/*
|
||||
final Class<? super T> clazz;
|
||||
final T instance;
|
||||
final Class<R> returnType;
|
||||
final String methodName;
|
||||
final Class<?>[] parameterTypes;
|
||||
final Object[] parameters;
|
||||
|
||||
final R expected;
|
||||
final R actual = POITestCase.callMethod(clazz, instance, returnType, methodName, parameterTypes, parameters);
|
||||
assertEquals(expected, actual);
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to shallow compare all fields of the objects
|
||||
* Only use this method in test cases!!!
|
||||
*/
|
||||
@Ignore
|
||||
@Test
|
||||
public void assertReflectEquals() throws Exception {
|
||||
/*
|
||||
final Object expected;
|
||||
final Object actual;
|
||||
POITestCase.assertReflectEquals(expected, actual);
|
||||
*/
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue