package org.solrmarc.index.specification; import org.marc4j.marc.impl.Verifier; import org.solrmarc.index.specification.conditional.Condition; //import org.solrmarc.index.specification.conditional.ConditionalParser; //import playground.solrmarc.index.fieldmatch.FieldFormatterSubstring; public class AbstractSpecificationFactory { public static boolean canHandle(final String indexConfiguration) { return (indexConfiguration.matches("[{]*(LNK)?[0-9][0-9][0-9].*")); } public static SingleSpecification makeSingleSpecification(final String tag, final String subfields) { return makeSingleSpecification(tag, subfields, null, null); } public static SingleSpecification makeSingleSpecification(final String tag, final String subfields, final String position) { return makeSingleSpecification(tag, subfields, position, null); } public static SingleSpecification makeSingleSpecification(final String tag, final String subfields, final String position, Condition cond) { SingleSpecification spec; if (Verifier.isControlField(tag)) { spec = new SingleControlFieldSpecification(tag, cond); } else if (tag.startsWith("LNK")) { spec = new SingleLinkedDataFieldSpecification(tag, subfields, cond); } else { spec = new SingleDataFieldSpecification(tag, subfields, cond); } if (position == null || position.length() == 0) { return(spec); } try { int offset = Integer.parseInt(position.replaceAll("\\[([0-9]+)(-[0-9]+)?\\]", "$1")); String endOffsetStr = position.replaceAll("\\[([0-9]+)(-)?([0-9]+)?\\]", "$3"); int endOffset = offset; if (endOffsetStr != null && endOffsetStr.length() > 0) endOffset = Integer.parseInt(endOffsetStr); spec.setSubstring(offset, endOffset+1); } catch (NumberFormatException nfe) { /* eat it */ } return(spec); } }