/** * Get a textual representation of the cue sheet. If the cue sheet was parsed, then the output * of this method is not necessarily identical to the parsed sheet, though it will contain the * same data. Fields may appear in a different order, whitespace may change, comments may be * gone, etc. * * @param cueSheet The CueSheet to serialize. * @return A textual representation of the cue sheet. */ public String serializeCueSheet(final CueSheet cueSheet) { CueSheetSerializer.logger.entering (CueSheetSerializer.class.getCanonicalName(), "serializeCueSheet(CueSheet)", cueSheet); StringBuilder builder = new StringBuilder(); serializeCueSheet(builder, cueSheet, ""); String result = builder.toString(); CueSheetSerializer.logger.exiting(CueSheetSerializer.class.getCanonicalName(), "serializeCueSheet(CueSheet)", result); return result; }
/** * 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)"); }
/** * Add a field to the builder. The field is only added if the value is != null. * * @param cueBuilder * @param command The command to add. * @param value The value to add. Will be formatted as per formatPosition(Position). * @param indentation The indentation for this field. */ private void addField(final StringBuilder cueBuilder , final String command , final String indentation , final Position value ) { CueSheetSerializer.logger.entering (CueSheetSerializer.class.getCanonicalName() , "addField(StringBuilder,String,String,Position)" , new Object[]{cueBuilder, command, indentation, value} ); if (value != null) { cueBuilder.append(indentation) .append(command) .append(' ') .append(formatPosition(value)) .append('\n'); } CueSheetSerializer.logger.exiting (CueSheetSerializer.class.getCanonicalName() , "addField(StringBuilder,String,String,Position)" ); }
/** * Serialize the FileData. * * @param builder The StringBuilder to serialize to. * @param fileData The FileData to serialize. * @param indentation The current indentation. */ private void serializeFileData(final StringBuilder builder, final FileData fileData, final String indentation) { CueSheetSerializer.logger.entering (CueSheetSerializer.class.getCanonicalName() , "serializeFileData(StringBuilder,FileData,String)" , new Object[]{builder, fileData, indentation} ); builder.append(indentation).append("FILE"); if (fileData.getFile() != null) { builder.append(' ').append(quoteIfNecessary(fileData.getFile())); } if (fileData.getFileType() != null) { builder.append(' ').append(quoteIfNecessary(fileData.getFileType())); } builder.append('\n'); for (TrackData trackData : fileData.getTrackData()) { serializeTrackData(builder, trackData, indentation + this.getIndentationValue()); } CueSheetSerializer.logger.exiting (CueSheetSerializer.class.getCanonicalName(), "serializeFileData(StringBuilder,FileData,String)"); }
builder.append(' ').append(quoteIfNecessary(trackData.getDataType())); String childIndentation = indentation + this.getIndentationValue(); addField(builder, "ISRC", childIndentation, trackData.getIsrcCode()); addField(builder, "PERFORMER", childIndentation, trackData.getPerformer()); addField(builder, "TITLE", childIndentation, trackData.getTitle()); addField(builder, "SONGWRITER", childIndentation, trackData.getSongwriter()); addField(builder, "PREGAP", childIndentation, trackData.getPregap()); addField(builder, "POSTGAP", childIndentation, trackData.getPostgap()); serializeFlags(builder, trackData.getFlags(), childIndentation); serializeIndex(builder, index, childIndentation);
System.out.println((new CueSheetSerializer()).serializeCueSheet(sheet)); xmlSerializer.serializeCueSheet(sheet, System.out);
/** * Serialize the flags. * * @param builder The StringBuilder to serialize to. * @param flags The flags to serialize. * @param indentation The current indentation. */ private void serializeFlags(final StringBuilder builder, final Set<String> flags, final String indentation) { CueSheetSerializer.logger.entering (CueSheetSerializer.class.getCanonicalName() , "serializeFlags(StringBuilder,Set<String>,String)" , new Object[]{builder, flags, indentation} ); builder.append(indentation).append("FLAGS"); for (String flag : flags) { builder.append(' ').append(quoteIfNecessary(flag)); } builder.append('\n'); CueSheetSerializer.logger.exiting (CueSheetSerializer.class.getCanonicalName(), "serializeFlags(StringBuilder,Set<String>,String)"); }
CueSheetSerializer ser = new CueSheetSerializer(); String s = ser.serializeCueSheet(cueSheet);
/** * Add a field to the builder. The field is only added if the value is != null. * * @param cueBuilder * @param command The command to add. * @param value The value to add. * @param indentation The indentation for this field. */ private void addField(final StringBuilder cueBuilder , final String command , final String indentation , final String value ) { CueSheetSerializer.logger.entering (CueSheetSerializer.class.getCanonicalName() , "addField(StringBuilder,String,String,String)" , new Object[]{cueBuilder, command, indentation, value} ); if (value != null) { cueBuilder.append(indentation) .append(command) .append(' ') .append(quoteIfNecessary(value)) .append('\n'); } CueSheetSerializer.logger.exiting (CueSheetSerializer.class.getCanonicalName(), "addField(StringBuilder,String,String,String)"); }
/** * Serialize the index. * * @param builder The StringBuilder to serialize to. * @param index The Index to serialize. * @param indentation The current indentation. */ private void serializeIndex(final StringBuilder builder, final Index index, final String indentation) { CueSheetSerializer.logger.entering (CueSheetSerializer.class.getCanonicalName() , "serializeIndex(StringBuilder,Index,String)" , new Object[]{builder, index, indentation} ); builder.append(indentation).append("INDEX"); if (index.getNumber() > -1) { builder.append(' ').append(String.format("%1$02d", index.getNumber())); } if (index.getPosition() != null) { builder.append(' ').append(formatPosition(index.getPosition())); } builder.append('\n'); CueSheetSerializer.logger.exiting (CueSheetSerializer.class.getCanonicalName(), "serializeIndex(StringBuilder,Index,String)"); }