result = this.getCatalog()==null?"":this.getCatalog(); break; case CDTEXTFILE: result = this.getCdTextFile()==null?"":this.getCdTextFile(); break; case COMMENT: result = this.getComment()==null?"":this.getComment(); break; case DISCID: result = this.getDiscid()==null?"":this.getDiscid(); break; case GENRE: result = this.getGenre()==null?"":this.getGenre(); break; case PERFORMER: case ALBUMPERFORMER: result = this.getPerformer()==null?"":this.getPerformer(); break; case SONGWRITER: case ALBUMSONGWRITER: result = this.getSongwriter()==null?"":this.getSongwriter(); break; case TITLE: case ALBUMTITLE: result = this.getTitle()==null?"":this.getTitle(); break; case YEAR: result = this.getYear()==-1?"":""+this.getYear(); break;
/** * Get the last {@link jwbroek.cuelib.FileData} element. If none exist, an empty one is created and a warning * added. * * @param input * @return The last {@link jwbroek.cuelib.FileData} element. If none exist, an empty one is created and a warning * added. */ private static FileData getLastFileData(final LineOfInput input) { CueParser.logger.entering(CueParser.class.getCanonicalName(), "getLastFileData(LineOfInput)", input); List<FileData> fileDataList = input.getAssociatedSheet().getFileData(); if (fileDataList.size() == 0) { fileDataList.add(new FileData(input.getAssociatedSheet())); addWarning(input, WARNING_NO_FILE_SPECIFIED); } FileData result = fileDataList.get(fileDataList.size() - 1); CueParser.logger.exiting(CueParser.class.getCanonicalName(), "getLastFileData(LineOfInput)", result); return result; }
/** * Parse the CDTEXTFILE command. * <p/> * CDTEXTFILE [filename] * File that contains cd text data. Not mandatory. * * @param input */ private static void parseCdTextFile(final LineOfInput input) { CueParser.logger.entering(CueParser.class.getCanonicalName(), "parseCdTextFile(LineOfInput)", input); Matcher cdTextFileMatcher = PATTERN_CDTEXTFILE.matcher(input.getInput()); if (startsWith(input, "CDTEXTFILE") && cdTextFileMatcher.matches()) { if (input.getAssociatedSheet().getCdTextFile() != null) { CueParser.logger.warning(WARNING_DATUM_APPEARS_TOO_OFTEN); input.getAssociatedSheet().addWarning(input, WARNING_DATUM_APPEARS_TOO_OFTEN); } // If the file name is enclosed in quotes, remove those. String file = cdTextFileMatcher.group(1); if (file.length() > 0 && file.charAt(0) == '"' && file.charAt(file.length() - 1) == '"') { file = file.substring(1, file.length() - 1); } input.getAssociatedSheet().setCdTextFile(file); } else { addWarning(input, WARNING_UNPARSEABLE_INPUT); } CueParser.logger.exiting(CueParser.class.getCanonicalName(), "parseCdTextFile(LineOfInput)"); }
public void parse(List<Track> list, Track file, LineNumberReader cueStream, boolean embedded) { try { CueSheet cueSheet = CueParser.parse(cueStream); List<FileData> datas = cueSheet.getFileData(); String cueLocation = file.getTrackData().getFile().getAbsolutePath(); if (datas.size() > 0) { track.getTrackData().setTagFieldValues(FieldKey.ALBUM, album); String artist = trackData.getPerformer(); track.getTrackData().setTagFieldValues(FieldKey.ARTIST, artist != null && artist.length() > 0 ? artist : cueSheet.getPerformer()); track.getTrackData().setTagFieldValues(FieldKey.ALBUM_ARTIST, cueSheet.getPerformer()); track.getTrackData().setTagFieldValues(FieldKey.COMMENT, cueSheet.getComment()); track.getTrackData().setTagFieldValues(FieldKey.TITLE, trackData.getTitle()); String year = trackData.getMetaData(CueSheet.MetaDataField.YEAR);
if (input.getAssociatedSheet().getFileData().size() == 0 || getLastFileData(input).getTrackData().size() == 0 ) { if (input.getAssociatedSheet().getPerformer() != null) { addWarning(input, WARNING_DATUM_APPEARS_TOO_OFTEN); input.getAssociatedSheet().setPerformer(performer); } else {
break; case PERFORMER: result = this.getPerformer()==null?this.getParent().getParent().getPerformer():this.getPerformer(); break; case TRACKPERFORMER: break; case SONGWRITER: result = this.getSongwriter()==null?this.getParent().getParent().getSongwriter():this.getSongwriter(); break; case TRACKSONGWRITER: break; case TITLE: result = this.getTitle()==null?this.getParent().getParent().getTitle():this.getTitle(); break; case TRACKTITLE: break; default: result = this.getParent().getParent().getMetaData(metaDataField); break;
if (input.getAssociatedSheet().getFileData().size() == 0 || getLastFileData(input).getTrackData().size() == 0 ) { if (input.getAssociatedSheet().getSongwriter() != null) { addWarning(input, WARNING_DATUM_APPEARS_TOO_OFTEN); input.getAssociatedSheet().setSongwriter(songwriter); } else {
if (input.getAssociatedSheet().getFileData().size() == 0 || getLastFileData(input).getTrackData().size() == 0 ) { if (input.getAssociatedSheet().getTitle() != null) { addWarning(input, WARNING_DATUM_APPEARS_TOO_OFTEN); input.getAssociatedSheet().setTitle(title); } else {
/** * Parse the CATALOG command. * <p/> * CATALOG [media-catalog-number] * CD catalog number. Code follows UPC/EAN rules. * Usually the first command, but this is not required. Not a mandatory command. * * @param input */ private static void parseCatalog(final LineOfInput input) { CueParser.logger.entering(CueParser.class.getCanonicalName(), "parseCatalog(LineOfInput)", input); if (startsWith(input, "CATALOG")) { String catalogNumber = input.getInput().substring("CATALOG".length()).trim(); if (!PATTERN_CATALOG_NUMBER.matcher(catalogNumber).matches()) { addWarning(input, WARNING_INVALID_CATALOG_NUMBER); } if (input.getAssociatedSheet().getCatalog() != null) { addWarning(input, WARNING_DATUM_APPEARS_TOO_OFTEN); } input.getAssociatedSheet().setCatalog(catalogNumber); } else { addWarning(input, WARNING_UNPARSEABLE_INPUT); } CueParser.logger.exiting(CueParser.class.getCanonicalName(), "parseCatalog(LineOfInput)"); }
/** * Write a warning to the logging and the {@link jwbroek.cuelib.CueSheet} associated with the * {@link jwbroek.cuelib.LineOfInput}. * * @param input The {@link jwbroek.cuelib.LineOfInput} the warning pertains to. * @param warning The warning to write. */ private static void addWarning(final LineOfInput input, final String warning) { CueParser.logger.warning(warning); input.getAssociatedSheet().addWarning(input, warning); }
List<TrackData> trackDataList = input.getAssociatedSheet().getAllTrackData();
final CueSheet result = new CueSheet();
doc.appendChild(cueSheetElement); addAttribute(cueSheetElement, "genre", cueSheet.getGenre()); addAttribute(cueSheetElement, "date", cueSheet.getYear()); addAttribute(cueSheetElement, "discid", cueSheet.getDiscid()); addAttribute(cueSheetElement, "comment", cueSheet.getComment()); addAttribute(cueSheetElement, "catalog", cueSheet.getCatalog()); addAttribute(cueSheetElement, "performer", cueSheet.getPerformer()); addAttribute(cueSheetElement, "title", cueSheet.getTitle()); addAttribute(cueSheetElement, "songwriter", cueSheet.getSongwriter()); addAttribute(cueSheetElement, "cdtextfile", cueSheet.getCdTextFile()); for (FileData fileData : cueSheet.getFileData())
input.getAssociatedSheet().getFileData().add(new FileData(input.getAssociatedSheet() , file , fileMatcher.group(2).toUpperCase()
/** * Serialize the CueSheet. * * @param builder The StringBuilder to serialize to. * @param cueSheet The CueSheet to serialize. * @param indentation The current indentation. */ private void serializeCueSheet(final StringBuilder builder, final CueSheet cueSheet, final String indentation) { CueSheetSerializer.logger.entering (CueSheetSerializer.class.getCanonicalName() , "serializeCueSheet(StringBuilder,CueSheet,String)" , new Object[]{builder, cueSheet, indentation} ); CueSheetSerializer.logger.fine("Serializing cue sheet to cue format."); addField(builder, "REM GENRE", indentation, cueSheet.getGenre()); addField(builder, "REM DATE", indentation, cueSheet.getYear()); addField(builder, "REM DISCID", indentation, cueSheet.getDiscid()); addField(builder, "REM COMMENT", indentation, cueSheet.getComment()); addField(builder, "CATALOG", indentation, cueSheet.getCatalog()); addField(builder, "PERFORMER", indentation, cueSheet.getPerformer()); addField(builder, "TITLE", indentation, cueSheet.getTitle()); addField(builder, "SONGWRITER", indentation, cueSheet.getSongwriter()); addField(builder, "CDTEXTFILE", indentation, cueSheet.getCdTextFile()); for (FileData fileData : cueSheet.getFileData()) { serializeFileData(builder, fileData, indentation); } CueSheetSerializer.logger.exiting (CueSheetSerializer.class.getCanonicalName(), "serializeCueSheet(StringBuilder,CueSheet,String)"); }
List<TrackData> data = cueSheet.getFileData().get(0).getTrackData(); data.get(2).setPerformer("Minimal Disc");