use of org.apache.poi.hpsf.PropertySet in project poi by apache.
the class TestUnicode method testPropertySetMethods.
/**
* Tests the {@link PropertySet} methods. The test file has two
* property set: the first one is a {@link SummaryInformation},
* the second one is a {@link DocumentSummaryInformation}.
*
* @exception IOException if an I/O exception occurs
* @exception HPSFException if an HPSF exception occurs
*/
@Test
public void testPropertySetMethods() throws IOException, HPSFException {
POIFile poiFile = Util.readPOIFiles(data, POI_FILES).get(0);
byte[] b = poiFile.getBytes();
PropertySet ps = PropertySetFactory.create(new ByteArrayInputStream(b));
assertTrue(ps.isDocumentSummaryInformation());
assertEquals(ps.getSectionCount(), 2);
Section s = ps.getSections().get(1);
assertEquals(s.getProperty(1), CodePageUtil.CP_UTF16);
assertEquals(s.getProperty(2), -96070278);
assertEquals(s.getProperty(3), "MCon_Info zu Office bei Schreiner");
assertEquals(s.getProperty(4), "petrovitsch@schreiner-online.de");
assertEquals(s.getProperty(5), "Petrovitsch, Wilhelm");
}
use of org.apache.poi.hpsf.PropertySet in project poi by apache.
the class TestReadAllFiles method recreate.
/**
* This test method does a write and read back test with all POI
* filesystems in the "data" directory by performing the following
* actions for each file:<p>
*
* <ul>
* <li>Read its property set streams.
* <li>Create a new POI filesystem containing the origin file's property set streams.
* <li>Read the property set streams from the POI filesystem just created.
* <li>Compare each property set stream with the corresponding one from
* the origin file and check whether they are equal.
* </ul>
*/
@Test
public void recreate() throws IOException, HPSFException {
/* Read the POI filesystem's property set streams: */
Map<String, PropertySet> psMap = new HashMap<String, PropertySet>();
/* Create a new POI filesystem containing the origin file's
* property set streams: */
ByteArrayOutputStream bos = new ByteArrayOutputStream();
final POIFSFileSystem poiFs = new POIFSFileSystem();
for (POIFile poifile : Util.readPropertySets(file)) {
final InputStream in = new ByteArrayInputStream(poifile.getBytes());
final PropertySet psIn = PropertySetFactory.create(in);
psMap.put(poifile.getName(), psIn);
bos.reset();
psIn.write(bos);
poiFs.createDocument(new ByteArrayInputStream(bos.toByteArray()), poifile.getName());
}
/* Read the property set streams from the POI filesystem just
* created. */
for (Map.Entry<String, PropertySet> me : psMap.entrySet()) {
final PropertySet ps1 = me.getValue();
final PropertySet ps2 = PropertySetFactory.create(poiFs.getRoot(), me.getKey());
assertNotNull(ps2);
/* Compare the property set stream with the corresponding one
* from the origin file and check whether they are equal. */
// Because of missing 0-paddings in the original input files, the bytes might differ.
// This fixes the comparison
String ps1str = ps1.toString().replace(" 00", " ").replace(".", " ").replaceAll("(?m)( +$|(size|offset): [0-9]+)", "");
String ps2str = ps2.toString().replace(" 00", " ").replace(".", " ").replaceAll("(?m)( +$|(size|offset): [0-9]+)", "");
assertEquals("Equality for file " + file.getName(), ps1str, ps2str);
}
poiFs.close();
}
use of org.apache.poi.hpsf.PropertySet in project poi by apache.
the class TestWrite method writeSimplePropertySet.
/**
* <p>Writes a simple property set with a SummaryInformation section to a
* POIFS and reads it back in.</p>
*
* @exception IOException if an I/O exception occurs
* @exception UnsupportedVariantTypeException if HPSF does not yet support
* a variant type to be written
*/
@Test
public void writeSimplePropertySet() throws IOException, UnsupportedVariantTypeException {
final String AUTHOR = "Rainer Klute";
final String TITLE = "Test Document";
final File dataDir = _samples.getFile("");
final File filename = new File(dataDir, POI_FS);
filename.deleteOnExit();
final OutputStream out = new FileOutputStream(filename);
final POIFSFileSystem poiFs = new POIFSFileSystem();
final MutablePropertySet ps = new MutablePropertySet();
final MutableSection si = new MutableSection();
si.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);
ps.clearSections();
ps.addSection(si);
final MutableProperty p = new MutableProperty();
p.setID(PropertyIDMap.PID_AUTHOR);
p.setType(Variant.VT_LPWSTR);
p.setValue(AUTHOR);
si.setProperty(p);
si.setProperty(PropertyIDMap.PID_TITLE, Variant.VT_LPSTR, TITLE);
poiFs.createDocument(ps.toInputStream(), SummaryInformation.DEFAULT_STREAM_NAME);
poiFs.writeFilesystem(out);
poiFs.close();
out.close();
/* Read the POIFS: */
final PropertySet[] psa = new PropertySet[1];
final POIFSReader r = new POIFSReader();
r.registerListener(new POIFSReaderListener() {
@Override
public void processPOIFSReaderEvent(final POIFSReaderEvent event) {
try {
psa[0] = PropertySetFactory.create(event.getStream());
} catch (Exception ex) {
fail(ex.getMessage());
}
}
}, SummaryInformation.DEFAULT_STREAM_NAME);
InputStream stream = new FileInputStream(filename);
try {
r.read(stream);
} finally {
stream.close();
}
assertNotNull(psa[0]);
assertTrue(psa[0].isSummaryInformation());
final Section s = (psa[0].getSections().get(0));
Object p1 = s.getProperty(PropertyIDMap.PID_AUTHOR);
Object p2 = s.getProperty(PropertyIDMap.PID_TITLE);
assertEquals(AUTHOR, p1);
assertEquals(TITLE, p2);
}
use of org.apache.poi.hpsf.PropertySet in project poi by apache.
the class TestWriteWellKnown method getSummaryInformation.
private static SummaryInformation getSummaryInformation(NPOIFSFileSystem poifs) throws Exception {
DocumentInputStream dis = poifs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME);
PropertySet ps = new PropertySet(dis);
SummaryInformation si = new SummaryInformation(ps);
dis.close();
return si;
}
use of org.apache.poi.hpsf.PropertySet in project poi by apache.
the class TestWriteWellKnown method getDocumentSummaryInformation.
static DocumentSummaryInformation getDocumentSummaryInformation(NPOIFSFileSystem poifs) throws IOException, NoPropertySetStreamException, UnexpectedPropertySetTypeException, MarkUnsupportedException {
if (!poifs.getRoot().hasEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)) {
return null;
}
DocumentInputStream dis = poifs.createDocumentInputStream(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
PropertySet ps = new PropertySet(dis);
DocumentSummaryInformation dsi = new DocumentSummaryInformation(ps);
dis.close();
return dsi;
}
Aggregations