⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractid3v2tag.java

📁 java+eclipse做的TTPlayer
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        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 + -