Package org.farng.mp3.filename

Source Code of org.farng.mp3.filename.FilenameDelimiter

package org.farng.mp3.filename;

import org.farng.mp3.AbstractMP3Tag;
import org.farng.mp3.TagUtility;
import org.farng.mp3.id3.AbstractID3v2Frame;
import org.farng.mp3.id3.AbstractID3v2FrameBody;
import org.farng.mp3.id3.ID3v2_4;

import java.util.Iterator;

/**
* This class is a composite subclass which represents a delimiter within a filename. Delimiters are usually punctuation
* such as " - "
*
* @author Eric Farng
* @version $Revision: 1.5 $
*/
public class FilenameDelimiter extends AbstractFilenameComposite {

    /**
     * The composite that comes before the delimiter
     */
    private AbstractFilenameComposite afterComposite = null;
    /**
     * The composite that comes after the delimiter
     */
    private AbstractFilenameComposite beforeComposite = null;
    /**
     * The delimiter that was used to split the token
     */
    private String delimiter = null;

    /**
     * Creates a new FilenameDelimiter object.
     */
    public FilenameDelimiter() {
        super();
    }

    /**
     * Creates a new FilenameDelimiter object.
     */
    public FilenameDelimiter(final FilenameDelimiter copyObject) {
        super(copyObject);
        delimiter = copyObject.delimiter;
        afterComposite = (AbstractFilenameComposite) TagUtility.copyObject(copyObject.afterComposite);
        beforeComposite = (AbstractFilenameComposite) TagUtility.copyObject(copyObject.beforeComposite);
    }

    /**
     * Sets the composite that comes after the delimiter.
     *
     * @param afterComposite The composite that comes after the delimiter.
     */
    public void setAfterComposite(final AbstractFilenameComposite afterComposite) {
        this.afterComposite = afterComposite;
    }

    /**
     * Returns the composite that comes after the delimiter.
     *
     * @return the composite that comes after the delimiter.
     */
    public AbstractFilenameComposite getAfterComposite() {
        return afterComposite;
    }

    /**
     * Sets the composite that comes before the delimiter
     *
     * @param beforeComposite the composite that comes before the delimiter
     */
    public void setBeforeComposite(final AbstractFilenameComposite beforeComposite) {
        this.beforeComposite = beforeComposite;
    }

    /**
     * Returns the composite that comes before the delimiter
     *
     * @return the composite that comes before the delimiter
     */
    public AbstractFilenameComposite getBeforeComposite() {
        return beforeComposite;
    }

    /**
     * Sets the delimiter that splits the two halves of this composite
     *
     * @param delimiter delimiter that splits the two halves of this composite
     */
    public void setDelimiter(final String delimiter) {
        this.delimiter = delimiter;
    }

    /**
     * Returns the delimiter that splits the two halfs of this composite
     *
     * @return the delimiter that splits the two halfs of this composite
     */
    public String getDelimiter() {
        return delimiter;
    }

    public void setFrame(final AbstractID3v2Frame frame) {
        if (frame != null) {
            if (beforeComposite != null) {
                beforeComposite.setFrame(frame);
            }
            if (afterComposite != null) {
                afterComposite.setFrame(frame);
            }
        }
    }

    /**
     * Create the filename that this composite represents
     *
     * @return the filename that this composite represents
     */
    public String composeFilename() {
        final StringBuffer stringBuffer = new StringBuffer(128);
        if (beforeComposite != null) {
            stringBuffer.append(beforeComposite.composeFilename());
        }
        stringBuffer.append(delimiter);
        stringBuffer.append(' ');
        if (afterComposite != null) {
            stringBuffer.append(afterComposite.composeFilename());
        }
        return stringBuffer.toString();
    }

    public ID3v2_4 createId3Tag() {
        ID3v2_4 newTag = null;
        if (beforeComposite != null) {
            newTag = beforeComposite.createId3Tag();
        }
        if (afterComposite != null) {
            if (newTag != null) {
                newTag.append(afterComposite.createId3Tag());
            } else {
                newTag = afterComposite.createId3Tag();
            }
        }
        return newTag;
    }

    /**
     * Returns an iterator through each <code>FilenameToken</code> in this composite in the correct order for the file
     * name.
     *
     * @return an iterator through each <code>FilenameToken</code> in this composite
     */
    public Iterator iterator() {
        return new FilenameDelimiterIterator(this);
    }

    /**
     * Match all elements of this composite against the keywords for this class type found in
     * <code>TagOptionSingleton</code>. If the <code>FilenameToken</code> matches the keyword, the token's class is
     * set.
     *
     * @param id3v2FrameBodyClass Class of keywords to match against.
     */
    public void matchAgainstKeyword(final Class id3v2FrameBodyClass) {
        if (AbstractID3v2FrameBody.class.isAssignableFrom(id3v2FrameBodyClass)) {
            if (beforeComposite != null) {
                beforeComposite.matchAgainstKeyword(id3v2FrameBodyClass);
            }
            if (afterComposite != null) {
                afterComposite.matchAgainstKeyword(id3v2FrameBodyClass);
            }
        }
    }

    /**
     * Match all elements of this composite against the given tag. If any element of <code>matchTag</code> matches any
     * element of this tag's composite, then this tag's composite leaf node's class is set.
     *
     * @param matchTag Tag to match against
     */
    public void matchAgainstTag(final AbstractMP3Tag matchTag) {
        if (matchTag != null) {
            if (beforeComposite != null) {
                beforeComposite.matchAgainstTag(matchTag);
            }
            if (afterComposite != null) {
                afterComposite.matchAgainstTag(matchTag);
            }
        }
    }
}
TOP

Related Classes of org.farng.mp3.filename.FilenameDelimiter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.