
com.brettonw.bag.formats.text.FormatReaderText Maven / Gradle / Ivy
package com.brettonw.bag.formats.text;
import com.brettonw.bag.BagArray;
import com.brettonw.bag.BagObject;
import com.brettonw.bag.formats.FormatReader;
import com.brettonw.bag.formats.MimeType;
/**
* The FormatReaderText is a configurable text format reader for any format that uses a divider
* between entries, and a divider between pairs. An optional "comment" character is supported to
* allow some entries to be skipped on load
*/
public class FormatReaderText extends FormatReader {
String entrySeparator;
String ignoreEntryMarker;
boolean accumulateEntries;
String pairSeparator;
public FormatReaderText (String input, String entrySeparator, boolean accumulateEntries, String pairSeparator) {
this (input, entrySeparator, " ", accumulateEntries, pairSeparator);
}
public FormatReaderText (String input, String entrySeparator, String ignoreEntryMarker, boolean accumulateEntries, String pairSeparator) {
super (input);
this.entrySeparator = entrySeparator;
this.ignoreEntryMarker = ignoreEntryMarker;
this.accumulateEntries = accumulateEntries;
this.pairSeparator = pairSeparator;
}
@Override
public BagArray read (BagArray bagArray) {
if (bagArray == null) bagArray = new BagArray ();
String[] entries = input.split (entrySeparator);
for (String entry : entries) {
entry = entry.trim ();
if ((entry.length () > 0) && (! (entry.startsWith (ignoreEntryMarker)))) {
if (pairSeparator != null) {
String[] fields = entry.split (pairSeparator);
if (fields.length > 1) {
BagArray fieldArray = new BagArray (fields.length);
for (String field : fields) {
fieldArray.add (field);
}
bagArray.add (fieldArray);
} else {
bagArray.add (fields[0]);
}
} else {
bagArray.add (entry);
}
}
}
return bagArray;
}
@Override
public BagObject read (BagObject bagObject) {
if (bagObject == null) bagObject = new BagObject ();
String[] entries = input.split (entrySeparator);
for (String entry : entries) {
entry = entry.trim ();
if ((entry.length () > 0) && (! (entry.startsWith (ignoreEntryMarker)))) {
String[] pair = entry.split (pairSeparator, 2);
if (pair.length == 2) {
String key = pair[0].trim ();
String value = pair[1].trim ();
if ((key.length () > 0) && (value.length () > 0)) {
if (accumulateEntries) {
bagObject.add (key, value);
} else {
bagObject.put (key, value);
}
}
}
}
}
return bagObject;
}
public FormatReaderText () { super (); }
static {
MimeType.addExtensionMapping (MimeType.PROP, "properties");
MimeType.addMimeTypeMapping (MimeType.PROP);
FormatReader.registerFormatReader (MimeType.PROP, false, (input) -> new FormatReaderText (input, "\n", "#", false, "="));
MimeType.addExtensionMapping (MimeType.URL, "url");
MimeType.addMimeTypeMapping (MimeType.URL);
FormatReader.registerFormatReader (MimeType.URL, false, (input) -> new FormatReaderText (input, "&", false, "="));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy