📄 abstractid3v2tag.java
字号:
while (iterator.hasNext())
{
Object o = iterator.next();
if (o instanceof AbstractID3v2Frame)
{
frame = (AbstractID3v2Frame) o;
frame.write(bodyBuffer);
}
else
{
ArrayList multiFrames = (ArrayList) o;
for (ListIterator li = multiFrames.listIterator(); li.hasNext();)
{
frame = (AbstractID3v2Frame) li.next();
frame.write(bodyBuffer);
}
}
}
return bodyBuffer;
}
public void createStructure()
{
createStructureHeader();
createStructureBody();
}
public void createStructureHeader()
{
MP3File.getStructureFormatter().addElement(this.TYPE_DUPLICATEBYTES, this.duplicateBytes);
MP3File.getStructureFormatter().addElement(this.TYPE_DUPLICATEFRAMEID, this.duplicateFrameId);
MP3File.getStructureFormatter().addElement(this.TYPE_EMPTYFRAMEBYTES, this.emptyFrameBytes);
MP3File.getStructureFormatter().addElement(this.TYPE_FILEREADSIZE, this.fileReadSize);
MP3File.getStructureFormatter().addElement(this.TYPE_INVALIDFRAMEBYTES, this.invalidFrameBytes);
}
public void createStructureBody()
{
MP3File.getStructureFormatter().openHeadingElement(TYPE_BODY, "");
AbstractID3v2Frame frame;
for (Object o : frameMap.values())
{
if (o instanceof AbstractID3v2Frame)
{
frame = (AbstractID3v2Frame) o;
frame.createStructure();
}
else
{
ArrayList multiFrames = (ArrayList) o;
for (ListIterator li = multiFrames.listIterator(); li.hasNext();)
{
frame = (AbstractID3v2Frame) li.next();
frame.createStructure();
}
}
}
MP3File.getStructureFormatter().closeHeadingElement(TYPE_BODY);
}
/**
* Retrieve the values that exists for this id3 frame id
*/
public List<TagField> get(String id) throws KeyNotFoundException
{
Object o = getFrame(id);
if (o == null)
{
return new ArrayList<TagField>();
}
else if (o instanceof List)
{
//TODO should return copy
return (List) o;
}
else if (o instanceof AbstractID3v2Frame)
{
List list = new ArrayList<TagField>();
list.add(o);
return list;
}
else
{
throw new RuntimeException("Found entry in frameMap that was not a frame or a list:" + o);
}
}
public List getAlbum()
{
return get(getAlbumId());
}
public List getArtist()
{
return get(getArtistId());
}
public List getComment()
{
return get(getCommentId());
}
public List getGenre()
{
return get(getGenreId());
}
public List getTitle()
{
return get(getTitleId());
}
public List getTrack()
{
return get(getTrackId());
}
public List getYear()
{
return get(getYearId());
}
/**
* @return
*/
public String getFirstAlbum()
{
List l = getAlbum();
return (l.size() != 0) ? ((AbstractFrameBodyTextInfo) ((AbstractID3v2Frame) l.get(0)).getBody()).getText() : "";
}
/**
* @return
*/
public String getFirstArtist()
{
List l = getArtist();
return (l.size() != 0) ? ((AbstractFrameBodyTextInfo) ((AbstractID3v2Frame) l.get(0)).getBody()).getText() : "";
}
/**
* @return
*/
public String getFirstComment()
{
List l = getComment();
return (l.size() != 0) ? ((FrameBodyCOMM) ((AbstractID3v2Frame) l.get(0)).getBody()).getText() : "";
}
/**
* @return
*/
public String getFirstGenre()
{
List l = getGenre();
return (l.size() != 0) ? ((AbstractFrameBodyTextInfo) ((AbstractID3v2Frame) l.get(0)).getBody()).getText() : "";
}
/**
* @return
*/
public String getFirstTitle()
{
List l = getTitle();
return (l.size() != 0) ? ((AbstractFrameBodyTextInfo) ((AbstractID3v2Frame) l.get(0)).getBody()).getText() : "";
}
/**
* @return
*/
public String getFirstTrack()
{
List l = getTrack();
return (l.size() != 0) ? ((AbstractFrameBodyTextInfo) ((AbstractID3v2Frame) l.get(0)).getBody()).getText() : "";
}
/**
* @return
*/
public String getFirstYear()
{
List l = getYear();
return (l.size() != 0) ? ((AbstractFrameBodyTextInfo) ((AbstractID3v2Frame) l.get(0)).getBody()).getText() : "";
}
/**
* @return
*/
protected abstract String getArtistId();
/**
* @return
*/
protected abstract String getAlbumId();
/**
* @return
*/
protected abstract String getTitleId();
/**
* @return
*/
protected abstract String getTrackId();
/**
* @return
*/
protected abstract String getYearId();
/**
* @return
*/
protected abstract String getCommentId();
/**
* @return
*/
protected abstract String getGenreId();
/**
* Create Frame of correct ID3 version with the specified id
*
* @param id
* @return
*/
public abstract AbstractID3v2Frame createFrame(String id);
/**
* @param content
* @return
*/
public TagField createArtistField(String content)
{
AbstractID3v2Frame frame = createFrame(getArtistId());
((AbstractFrameBodyTextInfo) frame.getBody()).setText(content);
return frame;
}
/**
* @param content
* @return
*/
public TagField createAlbumField(String content)
{
AbstractID3v2Frame frame = createFrame(getAlbumId());
((AbstractFrameBodyTextInfo) frame.getBody()).setText(content);
return frame;
}
/**
* @param content
* @return
*/
public TagField createTitleField(String content)
{
AbstractID3v2Frame frame = createFrame(getTitleId());
((AbstractFrameBodyTextInfo) frame.getBody()).setText(content);
return frame;
}
/**
* @param content
* @return
*/
public TagField createTrackField(String content)
{
AbstractID3v2Frame frame = createFrame(getTrackId());
((AbstractFrameBodyTextInfo) frame.getBody()).setText(content);
return frame;
}
/**
* @param content
* @return
*/
public TagField createYearField(String content)
{
AbstractID3v2Frame frame = createFrame(getYearId());
((AbstractFrameBodyTextInfo) frame.getBody()).setText(content);
return frame;
}
/**
* @param content
* @return
*/
public TagField createCommentField(String content)
{
AbstractID3v2Frame frame = createFrame(getCommentId());
((FrameBodyCOMM) frame.getBody()).setText(content);
return frame;
}
/**
* @param content
* @return
*/
public TagField createGenreField(String content)
{
AbstractID3v2Frame frame = createFrame(getGenreId());
((AbstractFrameBodyTextInfo) frame.getBody()).setText(content);
return frame;
}
//TODO
public boolean hasCommonFields()
{
return true;
}
/**
* Does this tag contain a field with the specified id
*
* @see com.hadeslee.jaudiotagger.tag.Tag#hasField(java.lang.String)
*/
public boolean hasField(String id)
{
return get(id).size() != 0;
}
/**
* Is this tag empty
*
* @see com.hadeslee.jaudiotagger.tag.Tag#isEmpty()
*/
public boolean isEmpty()
{
return frameMap.size() == 0;
}
public Iterator getFields()
{
final Iterator<Map.Entry<String,Object>> it = this.frameMap.entrySet().iterator();
return new Iterator()
{
private Iterator fieldsIt;
private void changeIt()
{
if (!it.hasNext())
{
return;
}
Map.Entry<String,Object> e = it.next();
if(e.getValue() instanceof List)
{
List<TagField> l = (List)e.getValue();
fieldsIt = l.iterator();
}
else
{
//TODO must be a better way
List<TagField> l = new ArrayList<TagField>();
l.add((TagField)e.getValue());
fieldsIt = l.iterator();
}
}
public boolean hasNext()
{
if (fieldsIt == null)
{
changeIt();
}
return it.hasNext() || (fieldsIt != null && fieldsIt.hasNext());
}
public Object next()
{
if (!fieldsIt.hasNext())
{
changeIt();
}
return fieldsIt.next();
}
public void remove()
{
fieldsIt.remove();
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -