Refactor to avoid logic duplication on the property value -> string conversion
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1499329 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
fb8d0c1076
commit
7cc22dd3c1
@ -51,17 +51,14 @@ import org.apache.poi.util.LittleEndian;
|
|||||||
* general {@link PropertySet}. However, the current implementation
|
* general {@link PropertySet}. However, the current implementation
|
||||||
* went the other way round historically: the convenience classes came
|
* went the other way round historically: the convenience classes came
|
||||||
* only late to my mind.</p>
|
* only late to my mind.</p>
|
||||||
*
|
|
||||||
* @author Rainer Klute <a
|
|
||||||
* href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
|
|
||||||
*/
|
*/
|
||||||
public abstract class SpecialPropertySet extends MutablePropertySet
|
public abstract class SpecialPropertySet extends MutablePropertySet
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The id to name mapping of the properties
|
* The id to name mapping of the properties
|
||||||
* in this set.
|
* in this set.
|
||||||
*/
|
*/
|
||||||
public abstract PropertyIDMap getPropertySetIDMap();
|
public abstract PropertyIDMap getPropertySetIDMap();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>The "real" property set <code>SpecialPropertySet</code>
|
* <p>The "real" property set <code>SpecialPropertySet</code>
|
||||||
@ -332,15 +329,17 @@ public abstract class SpecialPropertySet extends MutablePropertySet
|
|||||||
* @return The property as a String, or null if unavailable
|
* @return The property as a String, or null if unavailable
|
||||||
*/
|
*/
|
||||||
protected String getPropertyStringValue(final int propertyId) {
|
protected String getPropertyStringValue(final int propertyId) {
|
||||||
Object o = getProperty(propertyId);
|
Object propertyValue = getProperty(propertyId);
|
||||||
|
return getPropertyStringValue(propertyValue);
|
||||||
|
}
|
||||||
|
protected static String getPropertyStringValue(final Object propertyValue) {
|
||||||
// Normal cases
|
// Normal cases
|
||||||
if (o == null) return null;
|
if (propertyValue == null) return null;
|
||||||
if (o instanceof String) return (String)o;
|
if (propertyValue instanceof String) return (String)propertyValue;
|
||||||
|
|
||||||
// Do our best with some edge cases
|
// Do our best with some edge cases
|
||||||
if (o instanceof byte[]) {
|
if (propertyValue instanceof byte[]) {
|
||||||
byte[] b = (byte[])o;
|
byte[] b = (byte[])propertyValue;
|
||||||
if (b.length == 0) {
|
if (b.length == 0) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -356,7 +355,7 @@ public abstract class SpecialPropertySet extends MutablePropertySet
|
|||||||
// Maybe it's a string? who knows!
|
// Maybe it's a string? who knows!
|
||||||
return new String(b);
|
return new String(b);
|
||||||
}
|
}
|
||||||
return o.toString();
|
return propertyValue.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ import org.apache.poi.hpsf.SummaryInformation;
|
|||||||
import org.apache.poi.hpsf.wellknown.PropertyIDMap;
|
import org.apache.poi.hpsf.wellknown.PropertyIDMap;
|
||||||
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
||||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||||
import org.apache.poi.util.LittleEndian;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extracts all of the HPSF properties, both
|
* Extracts all of the HPSF properties, both
|
||||||
@ -66,7 +65,7 @@ public class HPSFPropertiesExtractor extends POITextExtractor {
|
|||||||
Iterator<String> keys = cps.nameSet().iterator();
|
Iterator<String> keys = cps.nameSet().iterator();
|
||||||
while (keys.hasNext()) {
|
while (keys.hasNext()) {
|
||||||
String key = keys.next();
|
String key = keys.next();
|
||||||
String val = getPropertyValueText( cps.get(key) );
|
String val = HelperPropertySet.getPropertyValueText( cps.get(key) );
|
||||||
text.append(key + " = " + val + "\n");
|
text.append(key + " = " + val + "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,35 +97,12 @@ public class HPSFPropertiesExtractor extends POITextExtractor {
|
|||||||
type = typeObj.toString();
|
type = typeObj.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
String val = getPropertyValueText( props[i].getValue() );
|
String val = HelperPropertySet.getPropertyValueText( props[i].getValue() );
|
||||||
text.append(type + " = " + val + "\n");
|
text.append(type + " = " + val + "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return text.toString();
|
return text.toString();
|
||||||
}
|
}
|
||||||
private static String getPropertyValueText(Object val) {
|
|
||||||
if (val == null) {
|
|
||||||
return "(not set)";
|
|
||||||
}
|
|
||||||
if (val instanceof byte[]) {
|
|
||||||
byte[] b = (byte[])val;
|
|
||||||
if (b.length == 0) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
if (b.length == 1) {
|
|
||||||
return Byte.toString(b[0]);
|
|
||||||
}
|
|
||||||
if (b.length == 2) {
|
|
||||||
return Integer.toString( LittleEndian.getUShort(b) );
|
|
||||||
}
|
|
||||||
if (b.length == 4) {
|
|
||||||
return Long.toString( LittleEndian.getUInt(b) );
|
|
||||||
}
|
|
||||||
// Maybe it's a string? who knows!
|
|
||||||
return new String(b);
|
|
||||||
}
|
|
||||||
return val.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the text of all the properties defined in
|
* @return the text of all the properties defined in
|
||||||
@ -143,6 +119,18 @@ public class HPSFPropertiesExtractor extends POITextExtractor {
|
|||||||
throw new IllegalStateException("You already have the Metadata Text Extractor, not recursing!");
|
throw new IllegalStateException("You already have the Metadata Text Extractor, not recursing!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static abstract class HelperPropertySet extends SpecialPropertySet {
|
||||||
|
public HelperPropertySet() {
|
||||||
|
super(null);
|
||||||
|
}
|
||||||
|
public static String getPropertyValueText(Object val) {
|
||||||
|
if (val == null) {
|
||||||
|
return "(not set)";
|
||||||
|
}
|
||||||
|
return SpecialPropertySet.getPropertyStringValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
for (String file : args) {
|
for (String file : args) {
|
||||||
HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(
|
HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(
|
||||||
|
Loading…
Reference in New Issue
Block a user