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:
Nick Burch 2013-07-03 11:36:11 +00:00
parent fb8d0c1076
commit 7cc22dd3c1
2 changed files with 28 additions and 41 deletions

View File

@ -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">&lt;klute@rainer-klute.de&gt;</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();
} }

View File

@ -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(