package org.solrmarc.index.extractor.impl.direct; import java.util.Collection; import org.marc4j.marc.VariableField; import org.solrmarc.index.specification.SingleSpecification; public class FieldMatch { VariableField vf; SingleSpecification spec; public FieldMatch(VariableField vf, SingleSpecification spec) { this.vf = vf; this.spec = spec; } public VariableField getVf() { return vf; } public void setVf(VariableField vf) { this.vf = vf; } public SingleSpecification getSpec() { return spec; } public void setSpec(SingleSpecification spec) { this.spec = spec; } public void addValuesTo(Collection<String> results) throws Exception { spec.addFieldValues(results, vf); } // static Collection<String> collect(Collection<FieldMatch> matches) // { // Collection<String> result = matches. // for (FieldMatch fm : matches) // { // SingleSpecification spec = fm.getSpec(); // VariableField vf = fm.getVf(); // spec.addFieldValues(result, vf); // } // return result; // } // /// added for testing parser and conditionals // public String toString(String separator, String sfTagPattern, boolean // cleanAll, boolean cleanEnd, String translationMapName) // { // if (vf instanceof ControlField) // { // String data = ((ControlField) vf).getData(); // String s1 = this.spec.subfields; // if (s1 == null || s1.length() == 0) return(data); // int offset = Integer.parseInt(s1.replaceAll("\\[([0-9]+)(-[0-9]+)\\]", // "$1")); // String endOffsetStr = s1.replaceAll("\\[([0-9]+-)([0-9]+)\\]", "$2"); // int endOffset = offset; // if (endOffsetStr != null) endOffset = Integer.parseInt(endOffsetStr); // if (data.length() < offset) return(""); // String posVal = data.substring(offset, endOffset+1); // if (translationMapName != null) // { // TranslationMap map = // TranslationMapFactory.theMaps.findMapFromSpec(translationMapName); // if (map != null) // posVal = map.remap(posVal); // } // return(posVal); // } // else // { // StringBuffer buffer = new StringBuffer(""); // Pattern subfieldPattern = Pattern.compile(spec.subfields.length() == 0 ? // "." : spec.subfields); // DataField marcField = (DataField) vf; // List<Subfield> subfields = marcField.getSubfields(); // for (Subfield subfield : subfields) // { // String codeStr = "" + subfield.getCode(); // Matcher matcher = subfieldPattern.matcher(codeStr); // if (matcher.matches()) // { // if (buffer.length() > 0) // buffer.append(separator != null ? separator : " "); // if (sfTagPattern != null) // { // String tagPattern = sfTagPattern.replaceAll("[?]", codeStr); // buffer.append(tagPattern); // } // buffer.append(cleanAll ? Utils.cleanData(subfield.getData().trim()) : // subfield.getData().trim()); // } // } // String result = cleanEnd ? Utils.cleanData(buffer.toString()) : // buffer.toString(); // if (translationMapName != null && result != null) // { // TranslationMap map = // TranslationMapFactory.theMaps.findMapFromSpec(translationMapName); // if (map != null) // result = map.remap(result); // } // return(result); // } // } // public Collection<String> toStringSet(String separator, String // sfTagPattern, boolean cleanAll, boolean cleanEnd) // { // if (vf instanceof ControlField) // { // String data = ((ControlField) vf).getData(); // String s1 = this.spec.subfields; // if (s1 == null || s1.length() == 0) return(data); // int offset = Integer.parseInt(s1.replaceAll("\\[([0-9]+)(-[0-9]+)\\]", // "$1")); // String endOffsetStr = s1.replaceAll("\\[([0-9]+-)([0-9]+)\\]", "$2"); // int endOffset = offset; // if (endOffsetStr != null) endOffset = Integer.parseInt(endOffsetStr); // if (data.length() < offset) return(""); // String posVal = data.substring(offset, endOffset+1); // return(posVal); // } // else // { // StringBuffer buffer = new StringBuffer(""); // Pattern subfieldPattern = Pattern.compile(spec.subfields.length() == 0 ? // "." : spec.subfields); // DataField marcField = (DataField) vf; // List<Subfield> subfields = marcField.getSubfields(); // for (Subfield subfield : subfields) // { // String codeStr = "" + subfield.getCode(); // Matcher matcher = subfieldPattern.matcher(codeStr); // if (matcher.matches()) // { // if (buffer.length() > 0) // buffer.append(separator != null ? separator : " "); // if (sfTagPattern != null) // { // String tagPattern = sfTagPattern.replaceAll("[?]", codeStr); // buffer.append(tagPattern); // } // buffer.append(cleanAll ? Utils.cleanData(subfield.getData().trim()) : // subfield.getData().trim()); // } // } // if (buffer.length() > 0) // return(cleanEnd ? Utils.cleanData(buffer.toString()) : // buffer.toString()); // else // return(null); // } // } }