aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--legal/NOTICE13
-rw-r--r--src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java12
-rw-r--r--src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java9
-rw-r--r--src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java5
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hdgf/extractor/TestVisioExtractor.java107
5 files changed, 140 insertions, 6 deletions
diff --git a/legal/NOTICE b/legal/NOTICE
index d417a360a7..190d974632 100644
--- a/legal/NOTICE
+++ b/legal/NOTICE
@@ -1,5 +1,16 @@
-Apache Jakarta POI
+Apache POI
Copyright 2001-2007 The Apache Software Foundation
This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).
+
+
+Unit testing support is provided by JUnit, under the
+Common Public License Version 1.0:
+ http://www.opensource.org/licenses/cpl.php
+See http://www.junit.org/
+
+Small parts of the POI component HDGF are based on VSDump,
+and are under the GNU General Public Licence version 3 (GPL v3):
+ http://gplv3.fsf.org/
+See http://www.gnome.ru/projects/vsdump_en.html
diff --git a/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java b/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java
index 673d56edf3..5928927c4d 100644
--- a/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java
+++ b/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java
@@ -20,6 +20,8 @@ import java.util.ArrayList;
import org.apache.poi.hdgf.chunks.ChunkFactory.CommandDefinition;
import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
import org.apache.poi.util.StringUtil;
/**
@@ -45,6 +47,9 @@ public class Chunk {
/** The name of the chunk, as found from the commandDefinitions */
private String name;
+ /** For logging warnings about the structure of the file */
+ private POILogger logger = POILogFactory.getLogger(Chunk.class);
+
public Chunk(ChunkHeader header, ChunkTrailer trailer, ChunkSeparator separator, byte[] contents) {
this.header = header;
this.trailer = trailer;
@@ -149,7 +154,9 @@ public class Chunk {
// Check we seem to have enough data
if(offset >= contents.length) {
- System.err.println("Command offset " + offset + " past end of data at " + contents.length);
+ logger.log(POILogger.WARN,
+ "Command offset " + offset + " past end of data at " + contents.length
+ );
continue;
}
@@ -207,7 +214,8 @@ public class Chunk {
break;
default:
- //System.err.println("Warning - Command of type " + type + " not processed!");
+ logger.log(POILogger.INFO,
+ "Command of type " + type + " not processed!");
}
// Add to the array
diff --git a/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java b/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java
index efac0d3574..fe0fc91a4d 100644
--- a/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java
+++ b/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java
@@ -24,6 +24,9 @@ import java.util.ArrayList;
import java.util.Hashtable;
import java.util.StringTokenizer;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
+
/**
* Factor class to create the appropriate chunks, which
* needs the version of the file to process the chunk header
@@ -42,6 +45,9 @@ public class ChunkFactory {
private static String chunkTableName =
"/org/apache/poi/hdgf/chunks/chunks_parse_cmds.tbl";
+ /** For logging problems we spot with the file */
+ private POILogger logger = POILogFactory.getLogger(ChunkFactory.class);
+
public ChunkFactory(int version) throws IOException {
this.version = version;
@@ -107,7 +113,8 @@ public class ChunkFactory {
// Check we have enough data, and tweak the header size
// as required
if(endOfDataPos > data.length) {
- System.err.println("Header called for " + header.getLength() +" bytes, but that would take us passed the end of the data!");
+ logger.log(POILogger.WARN,
+ "Header called for " + header.getLength() +" bytes, but that would take us passed the end of the data!");
endOfDataPos = data.length;
header.length = data.length - offset - header.getSizeInBytes();
diff --git a/src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java b/src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java
index f7ef6df086..b2c4ee37f9 100644
--- a/src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java
+++ b/src/scratchpad/src/org/apache/poi/hdgf/extractor/VisioTextExtractor.java
@@ -57,7 +57,6 @@ public class VisioTextExtractor {
for(int i=0; i<hdgf.getTopLevelStreams().length; i++) {
findText(hdgf.getTopLevelStreams()[i], text);
}
- System.err.println("Found " + text.size() + " text string");
return (String[])text.toArray( new String[text.size()] );
}
private void findText(Stream stream, ArrayList text) {
@@ -108,6 +107,8 @@ public class VisioTextExtractor {
VisioTextExtractor extractor =
new VisioTextExtractor(new FileInputStream(args[0]));
- System.out.println(extractor.getText());
+
+ // Print not PrintLn as already has \n added to it
+ System.out.print(extractor.getText());
}
}
diff --git a/src/scratchpad/testcases/org/apache/poi/hdgf/extractor/TestVisioExtractor.java b/src/scratchpad/testcases/org/apache/poi/hdgf/extractor/TestVisioExtractor.java
new file mode 100644
index 0000000000..a6541e9b0d
--- /dev/null
+++ b/src/scratchpad/testcases/org/apache/poi/hdgf/extractor/TestVisioExtractor.java
@@ -0,0 +1,107 @@
+/* ====================================================================
+ 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.hdgf.extractor;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.PrintStream;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.hdgf.HDGFDiagram;
+import org.apache.poi.hdgf.chunks.Chunk;
+import org.apache.poi.hdgf.chunks.ChunkFactory;
+import org.apache.poi.hdgf.pointers.Pointer;
+import org.apache.poi.hdgf.pointers.PointerFactory;
+import org.apache.poi.hssf.record.formula.eval.StringOperationEval;
+import org.apache.poi.poifs.filesystem.DocumentEntry;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+
+public class TestVisioExtractor extends TestCase {
+ private String filename;
+ protected void setUp() throws Exception {
+ String dirname = System.getProperty("HDGF.testdata.path");
+ filename = dirname + "/Test_Visio-Some_Random_Text.vsd";
+ }
+
+ /**
+ * Test the 3 different ways of creating one
+ */
+ public void testCreation() throws Exception {
+ VisioTextExtractor extractor;
+
+ extractor = new VisioTextExtractor(new FileInputStream(filename));
+ assertNotNull(extractor);
+ assertNotNull(extractor.getAllText());
+ assertEquals(3, extractor.getAllText().length);
+
+ extractor = new VisioTextExtractor(
+ new POIFSFileSystem(
+ new FileInputStream(filename)
+ )
+ );
+ assertNotNull(extractor);
+ assertNotNull(extractor.getAllText());
+ assertEquals(3, extractor.getAllText().length);
+
+ extractor = new VisioTextExtractor(
+ new HDGFDiagram(
+ new POIFSFileSystem(
+ new FileInputStream(filename)
+ )
+ )
+ );
+ assertNotNull(extractor);
+ assertNotNull(extractor.getAllText());
+ assertEquals(3, extractor.getAllText().length);
+ }
+
+ public void testExtraction() throws Exception {
+ VisioTextExtractor extractor =
+ new VisioTextExtractor(new FileInputStream(filename));
+
+ // Check the array fetch
+ String[] text = extractor.getAllText();
+ assertNotNull(text);
+ assertEquals(3, text.length);
+
+ assertEquals("Test View\n", text[0]);
+ assertEquals("I am a test view\n", text[1]);
+ assertEquals("Some random text, on a page\n", text[2]);
+
+ // And the all-in fetch
+ String textS = extractor.getText();
+ assertEquals("Test View\nI am a test view\nSome random text, on a page\n", textS);
+ }
+
+ public void testMain() throws Exception {
+ PrintStream oldOut = System.out;
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintStream capture = new PrintStream(baos);
+ System.setOut(capture);
+
+ VisioTextExtractor.main(new String[] {filename});
+
+ // Put things back
+ System.setOut(oldOut);
+
+ // Check
+ capture.flush();
+ String text = baos.toString();
+ assertEquals("Test View\nI am a test view\nSome random text, on a page\n", text);
+ }
+}