Package dnb.analyze.nfo

Source Code of dnb.analyze.nfo.SourNfoParser

package dnb.analyze.nfo;

import static dnb.analyze.nfo.NfoLyzer.ARTIST;
import static dnb.analyze.nfo.NfoLyzer.GENRE;
import static dnb.analyze.nfo.NfoLyzer.LINE_BEGIN;
import static dnb.analyze.nfo.NfoLyzer.LINE_END;
import static dnb.analyze.nfo.NfoLyzer.PATTERN_FLAGS;
import static dnb.analyze.nfo.NfoLyzer.TITLE;
import static dnb.analyze.nfo.NfoLyzer.WS;

import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import dnb.analyze.MatchResult;

public class SourNfoParser extends AbstractNfoParser {
 
  private static final String LBRACE = Pattern.quote("(")
  private static final String RBRACE = Pattern.quote(")");
  private static final String BRACED_GROUP = LBRACE + WS + "(.*?)" + WS + RBRACE;
  private static final String DBRACED_GROUP = LBRACE + WS + "(.*?)" + WS + BRACED_GROUP + WS + RBRACE;
 
  private static final String RELEASE_DATE = "release date";
  private static final String STREET_DATE = "street date";
  private static final String MEDIA_TYPE = "media type"
  private static final String RECORD_LABEL = "record label"
   
 
  private static Pattern createSourPattern(String entry) {
    return Pattern.compile(LINE_BEGIN + entry + WS + BRACED_GROUP
        + "(?!.*?" + RBRACE + ")" + LINE_END,
        PATTERN_FLAGS);
  }
 
  private static String option(String name) {
    return WS + name + WS + BRACED_GROUP;
  }
 
  private static final Pattern PATTERN_ARTIST = createSourPattern(ARTIST);
  private static final Pattern PATTERN_TITLE = createSourPattern(TITLE);
  private static final Pattern PATTERN_GENRE = createSourPattern(GENRE);
  private static final Pattern PATTERN_RLS_DATE = createSourPattern(RELEASE_DATE);
  private static final Pattern PATTERN_STREET_DATE = createSourPattern(STREET_DATE);
 
  private static final Pattern PATTERN_MEDIATYPE = Pattern.compile(LINE_BEGIN + MEDIA_TYPE
      + option("vinyl") + option("tape") + option("cd") + option("radio") + LINE_END,
      PATTERN_FLAGS);
   
  private static final Pattern PATTERN_LABEL = Pattern.compile(
      LINE_BEGIN + RECORD_LABEL + WS + DBRACED_GROUP + LINE_END,
      PATTERN_FLAGS);
 
  @Override protected Pattern getArtistPattern() { return PATTERN_ARTIST; }
  @Override protected Pattern getTitlePattern() { return PATTERN_TITLE;
  @Override protected Pattern getGenrePattern() { return PATTERN_GENRE; }
  @Override protected Pattern getReleaseDatePattern() { return PATTERN_RLS_DATE; }
  @Override protected Pattern getStreetDatePattern() { return PATTERN_STREET_DATE;
 
  /* (non-Javadoc)
   * @see dnb.analyze.nfo.NfoParser#parse(java.lang.String)
   */
  public void parse(String nfo, Map<NfoField, MatchResult> result) {
    // general, easy stuff
    super.parse(nfo, result);
    // sour specialties
    Matcher m = PATTERN_LABEL.matcher(nfo);
    if(m.find()) {
      result.put(NfoField.RECORD_LABEL, new MatchResult(m.start(1), m.end(1), m.group(1),
          MatchResult.Source.NFO));
      parseLabelcode(m.group(2), m.start(2), result);           
    }
   
    m = PATTERN_MEDIATYPE.matcher(nfo);   
    if(m.find()) { // find the whole option record => store groups as separate & KNOWN fields
      result.put(NfoField.MEDIA_TYPE_VINYL, new MatchResult(m.start(1), m.end(1), m.group(1), MatchResult.Status.KNOWN,
          MatchResult.Source.NFO));
      result.put(NfoField.MEDIA_TYPE_TAPE, new MatchResult(m.start(2), m.end(2), m.group(2), MatchResult.Status.KNOWN,
          MatchResult.Source.NFO));
      result.put(NfoField.MEDIA_TYPE_CD, new MatchResult(m.start(3), m.end(3), m.group(3), MatchResult.Status.KNOWN,
          MatchResult.Source.NFO));
      result.put(NfoField.MEDIA_TYPE_RADIO, new MatchResult(m.start(4), m.end(4), m.group(4), MatchResult.Status.KNOWN,
          MatchResult.Source.NFO));     
    }
  } 
}
TOP

Related Classes of dnb.analyze.nfo.SourNfoParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.