📄 tagoptionsingleton.java
字号:
/**
* @author : Paul Taylor
* @author : Eric Farng
*
* Version @version:$Id: TagOptionSingleton.java,v 1.13 2007/08/06 16:04:36 paultaylor Exp $
*
* MusicTag Copyright (C)2003,2004
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser
* General Public License as published by the Free Software Foundation; either version 2.1 of the License,
* or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not,
* you can get a copy from http://www.opensource.org/licenses/lgpl-license.php or write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Description:
* Options that are used for every datatype and class in this library.
*
*/
package com.hadeslee.audiotag.tag;
import com.hadeslee.audiotag.tag.id3.framebody.AbstractID3v2FrameBody;
import com.hadeslee.audiotag.tag.id3.framebody.FrameBodyCOMM;
import com.hadeslee.audiotag.tag.id3.framebody.FrameBodyTIPL;
import com.hadeslee.audiotag.tag.id3.valuepair.GenreTypes;
import com.hadeslee.audiotag.tag.id3.valuepair.Languages;
import com.hadeslee.audiotag.tag.id3.valuepair.TextEncoding;
import com.hadeslee.audiotag.tag.lyrics3.Lyrics3v2Fields;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
public class TagOptionSingleton
{
/**
*
*/
private static HashMap tagOptionTable = new HashMap();
/**
*
*/
private static String DEFAULT = "default";
/**
*
*/
private static Object defaultOptions = DEFAULT;
/**
*
*/
private HashMap keywordMap = new HashMap();
/**
* Map of lyric ID's to Boolean objects if we should or should not save the
* specific Kyrics3 field. Defaults to true.
*/
private HashMap lyrics3SaveFieldMap = new HashMap();
/**
* parenthesis map stuff
*/
private HashMap parenthesisMap = new HashMap();
/**
* <code>HashMap</code> listing words to be replaced if found
*/
private HashMap replaceWordMap = new HashMap();
/**
* default language for any ID3v2 tags frameswhich require it. This string
* is in the [ISO-639-2] ISO/FDIS 639-2 definition
*/
private String language = "eng";
/**
*
*/
private boolean filenameTagSave = false;
/**
* if we should save any fields of the ID3v1 tag or not. Defaults to true.
*/
private boolean id3v1Save = true;
/**
* if we should save the album field of the ID3v1 tag or not. Defaults to
* true.
*/
private boolean id3v1SaveAlbum = true;
/**
* if we should save the artist field of the ID3v1 tag or not. Defaults to
* true.
*/
private boolean id3v1SaveArtist = true;
/**
* if we should save the comment field of the ID3v1 tag or not. Defaults to
* true.
*/
private boolean id3v1SaveComment = true;
/**
* if we should save the genre field of the ID3v1 tag or not. Defaults to
* true.
*/
private boolean id3v1SaveGenre = true;
/**
* if we should save the title field of the ID3v1 tag or not. Defaults to
* true.
*/
private boolean id3v1SaveTitle = true;
/**
* if we should save the track field of the ID3v1 tag or not. Defaults to
* true.
*/
private boolean id3v1SaveTrack = true;
/**
* if we should save the year field of the ID3v1 tag or not. Defaults to
* true.
*/
private boolean id3v1SaveYear = true;
/**
* When adjusting the ID3v2 padding, if should we copy the current ID3v2
* tag to the new MP3 file. Defaults to true.
*/
private boolean id3v2PaddingCopyTag = true;
/**
* When adjusting the ID3v2 padding, if we should shorten the length of the
* ID3v2 tag padding. Defaults to false.
*/
private boolean id3v2PaddingWillShorten = false;
/**
* if we should save any fields of the ID3v2 tag or not. Defaults to true.
*/
private boolean id3v2Save = true;
/**
* if we should keep an empty Lyrics3 field while we're reading. This is
* different from a string of white space. Defaults to false.
*/
private boolean lyrics3KeepEmptyFieldIfRead = false;
/**
* if we should save any fields of the Lyrics3 tag or not. Defaults to
* true.
*/
private boolean lyrics3Save = true;
/**
* if we should save empty Lyrics3 field or not. Defaults to false.
*
* todo I don't think this is implemented yet.
*/
private boolean lyrics3SaveEmptyField = false;
/**
*
*/
private boolean originalSavedAfterAdjustingID3v2Padding = true;
/**
* default time stamp format for any ID3v2 tag frames which require it.
*/
private byte timeStampFormat = 2;
/**
* number of frames to sync when trying to find the start of the MP3 frame
* data. The start of the MP3 frame data is the start of the music and is
* different from the ID3v2 frame data.
*/
private int numberMP3SyncFrame = 3;
/** Unsynchronize tags/frames this is rarely required these days and can cause more
* problems than it solves
*/
private boolean unsyncTags = false;
/**
* iTunes needlessly writes null terminators at the end for TextEncodedStringSizeTerminated values,
* if this option is enabled these characters are removed
*/
private boolean removeTrailingTerminatorOnWrite=true;
/**
* This is the default text encoding to use for new v23 frames, when unicode is required
* UTF16 will always be used because that is the only valid option for v23.
*/
private byte id3v23DefaultTextEncoding = TextEncoding.ISO_8859_1;
/**
* This is the default text encoding to use for new v24 frames, it defaults to simple ISO8859
* but by changing this value you could always used UTF8 for example whether you needed to or not
*/
private byte id3v24DefaultTextEncoding = TextEncoding.ISO_8859_1;
/**
* This is text encoding to use for new v24 frames when unicode is required, it defaults to UTF16 just
* because this encoding is understand by all ID3 versions
*/
private byte id3v24UnicodeTextEncoding = TextEncoding.UTF_16;
/**
* When writing frames if this is set to true then the frame will be written
* using the defaults disregarding the text e ncoding originally used to create
* the frame.
*/
private boolean resetTextEncodingForExistingFrames = false;
/**
* Creates a new TagOptions datatype. All Options are set to their default
* values
*/
private TagOptionSingleton()
{
setToDefault();
}
/**
*
*
* @return
*/
public static TagOptionSingleton getInstance()
{
return getInstance(defaultOptions);
}
/**
*
*
* @param instanceKey
* @return
*/
public static TagOptionSingleton getInstance(Object instanceKey)
{
TagOptionSingleton tagOptions = (TagOptionSingleton) tagOptionTable.get(instanceKey);
if (tagOptions == null)
{
tagOptions = new TagOptionSingleton();
tagOptionTable.put(instanceKey, tagOptions);
}
return tagOptions;
}
/**
*
*
* @param filenameTagSave
*/
public void setFilenameTagSave(boolean filenameTagSave)
{
this.filenameTagSave = filenameTagSave;
}
/**
*
*
* @return
*/
public boolean isFilenameTagSave()
{
return filenameTagSave;
}
/**
*
*
* @param instanceKey
*/
public void setInstanceKey(Object instanceKey)
{
TagOptionSingleton.defaultOptions = instanceKey;
}
/**
*
*
* @return
*/
public static Object getInstanceKey()
{
return defaultOptions;
}
/**
*
*
* @param id3v1Save
*/
public void setId3v1Save(boolean id3v1Save)
{
this.id3v1Save = id3v1Save;
}
/**
*
*
* @return
*/
public boolean isId3v1Save()
{
return id3v1Save;
}
/**
*
*
* @param id3v1SaveAlbum
*/
public void setId3v1SaveAlbum(boolean id3v1SaveAlbum)
{
this.id3v1SaveAlbum = id3v1SaveAlbum;
}
/**
*
*
* @return
*/
public boolean isId3v1SaveAlbum()
{
return id3v1SaveAlbum;
}
/**
*
*
* @param id3v1SaveArtist
*/
public void setId3v1SaveArtist(boolean id3v1SaveArtist)
{
this.id3v1SaveArtist = id3v1SaveArtist;
}
/**
*
*
* @return
*/
public boolean isId3v1SaveArtist()
{
return id3v1SaveArtist;
}
/**
*
*
* @param id3v1SaveComment
*/
public void setId3v1SaveComment(boolean id3v1SaveComment)
{
this.id3v1SaveComment = id3v1SaveComment;
}
/**
*
*
* @return
*/
public boolean isId3v1SaveComment()
{
return id3v1SaveComment;
}
/**
*
*
* @param id3v1SaveGenre
*/
public void setId3v1SaveGenre(boolean id3v1SaveGenre)
{
this.id3v1SaveGenre = id3v1SaveGenre;
}
/**
*
*
* @return
*/
public boolean isId3v1SaveGenre()
{
return id3v1SaveGenre;
}
/**
*
*
* @param id3v1SaveTitle
*/
public void setId3v1SaveTitle(boolean id3v1SaveTitle)
{
this.id3v1SaveTitle = id3v1SaveTitle;
}
/**
*
*
* @return
*/
public boolean isId3v1SaveTitle()
{
return id3v1SaveTitle;
}
/**
*
*
* @param id3v1SaveTrack
*/
public void setId3v1SaveTrack(boolean id3v1SaveTrack)
{
this.id3v1SaveTrack = id3v1SaveTrack;
}
/**
*
*
* @return
*/
public boolean isId3v1SaveTrack()
{
return id3v1SaveTrack;
}
/**
*
*
* @param id3v1SaveYear
*/
public void setId3v1SaveYear(boolean id3v1SaveYear)
{
this.id3v1SaveYear = id3v1SaveYear;
}
/**
*
*
* @return
*/
public boolean isId3v1SaveYear()
{
return id3v1SaveYear;
}
/**
*
*
* @param id3v2PaddingCopyTag
*/
public void setId3v2PaddingCopyTag(boolean id3v2PaddingCopyTag)
{
this.id3v2PaddingCopyTag = id3v2PaddingCopyTag;
}
/**
*
*
* @return
*/
public boolean isId3v2PaddingCopyTag()
{
return id3v2PaddingCopyTag;
}
/**
*
*
* @param id3v2PaddingWillShorten
*/
public void setId3v2PaddingWillShorten(boolean id3v2PaddingWillShorten)
{
this.id3v2PaddingWillShorten = id3v2PaddingWillShorten;
}
/**
*
*
* @return
*/
public boolean isId3v2PaddingWillShorten()
{
return id3v2PaddingWillShorten;
}
/**
*
*
* @param id3v2Save
*/
public void setId3v2Save(boolean id3v2Save)
{
this.id3v2Save = id3v2Save;
}
/**
*
*
* @return
*/
public boolean isId3v2Save()
{
return id3v2Save;
}
/**
*
*
* @return
*/
public Iterator getKeywordIterator()
{
return keywordMap.keySet().iterator();
}
/**
*
*
* @param id3v2_4FrameBody
* @return
*/
public Iterator getKeywordListIterator(Class id3v2_4FrameBody)
{
return ((LinkedList) keywordMap.get(id3v2_4FrameBody)).iterator();
}
/**
* Sets the default language for any ID3v2 tag frames which require it.
* While the value will already exist when reading from a file, this value
* will be used when a new ID3v2 Frame is created from scratch.
*
* @param lang language ID, [ISO-639-2] ISO/FDIS 639-2 definition
*/
public void setLanguage(String lang)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -