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,9 +51,6 @@ import org.apache.poi.util.LittleEndian;
|
||||
* general {@link PropertySet}. However, the current implementation
|
||||
* went the other way round historically: the convenience classes came
|
||||
* 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
|
||||
{
|
||||
@ -332,15 +329,17 @@ public abstract class SpecialPropertySet extends MutablePropertySet
|
||||
* @return The property as a String, or null if unavailable
|
||||
*/
|
||||
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
|
||||
if (o == null) return null;
|
||||
if (o instanceof String) return (String)o;
|
||||
if (propertyValue == null) return null;
|
||||
if (propertyValue instanceof String) return (String)propertyValue;
|
||||
|
||||
// Do our best with some edge cases
|
||||
if (o instanceof byte[]) {
|
||||
byte[] b = (byte[])o;
|
||||
if (propertyValue instanceof byte[]) {
|
||||
byte[] b = (byte[])propertyValue;
|
||||
if (b.length == 0) {
|
||||
return "";
|
||||
}
|
||||
@ -356,7 +355,7 @@ public abstract class SpecialPropertySet extends MutablePropertySet
|
||||
// Maybe it's a string? who knows!
|
||||
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.poifs.filesystem.NPOIFSFileSystem;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
||||
/**
|
||||
* Extracts all of the HPSF properties, both
|
||||
@ -66,7 +65,7 @@ public class HPSFPropertiesExtractor extends POITextExtractor {
|
||||
Iterator<String> keys = cps.nameSet().iterator();
|
||||
while (keys.hasNext()) {
|
||||
String key = keys.next();
|
||||
String val = getPropertyValueText( cps.get(key) );
|
||||
String val = HelperPropertySet.getPropertyValueText( cps.get(key) );
|
||||
text.append(key + " = " + val + "\n");
|
||||
}
|
||||
}
|
||||
@ -98,35 +97,12 @@ public class HPSFPropertiesExtractor extends POITextExtractor {
|
||||
type = typeObj.toString();
|
||||
}
|
||||
|
||||
String val = getPropertyValueText( props[i].getValue() );
|
||||
String val = HelperPropertySet.getPropertyValueText( props[i].getValue() );
|
||||
text.append(type + " = " + val + "\n");
|
||||
}
|
||||
|
||||
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
|
||||
@ -143,6 +119,18 @@ public class HPSFPropertiesExtractor extends POITextExtractor {
|
||||
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 {
|
||||
for (String file : args) {
|
||||
HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(
|
||||
|
Loading…
Reference in New Issue
Block a user