/* * OWNEID3V2Frame.java * * Created on August 30, 2004, 2:05 AM * * Copyright (C)2004,2005 Paul Grebenc * * 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id: OWNEID3V2Frame.java,v 1.9 2005/02/06 18:11:24 paul Exp $ */ package org.blinkenlights.jid3.v2; import java.io.*; import org.blinkenlights.jid3.*; import org.blinkenlights.jid3.io.*; import org.blinkenlights.jid3.util.*; /** Frame containing ownership information. * * @author paul */ public class OWNEID3V2Frame extends ID3V2Frame { private TextEncoding m_oTextEncoding; private String m_sPricePaid = null; private String m_sDateOfPurchase = null; private String m_sSeller = null; /** Creates a new instance of OWNEID3V2Frame * * @param sPricePaid a price(s) string (a price string consists of a three letter ISO-4217 currency code, * followed by an amount, where "." is used as the decimal separator). Multiple prices may be separated * by a "/" characters * @param sDateOfPurchase the date of the purchase, in the format YYYYMMDD * @param sSeller the name of the seller of this file * @throws ID3Exception if sPricePaid is null or not in a valid format, if sDateOfPurchase is null or * not in the correct format, or if sSeller is null */ public OWNEID3V2Frame(String sPricePaid, String sDateOfPurchase, String sSeller) throws ID3Exception { m_oTextEncoding = TextEncoding.getDefaultTextEncoding(); if (sPricePaid == null) { throw new ID3Exception("Price paid required in OWNE frame."); } if ( ! sPricePaid.matches("(?uis)(\\w{3}\\d*\\.?\\d+/?)+")) { throw new ID3Exception("Invalid OWNE frame price string."); } m_sPricePaid = sPricePaid; if (sDateOfPurchase == null) { throw new ID3Exception("Date of purchase required in OWNE frame."); } if ( ! sDateOfPurchase.matches("(?uis)\\d{8}")) { throw new ID3Exception("Invalid date of purchase format in OWNE frame."); } m_sDateOfPurchase = sDateOfPurchase; if (sSeller == null) { throw new ID3Exception("Seller required in OWNE frame."); } m_sSeller = sSeller; } public OWNEID3V2Frame(InputStream oIS) throws ID3Exception { try { ID3DataInputStream oFrameDataID3DIS = new ID3DataInputStream(oIS); // text encoding m_oTextEncoding = TextEncoding.getTextEncoding(oFrameDataID3DIS.readUnsignedByte()); // price paid (read to null) m_sPricePaid = oFrameDataID3DIS.readStringToNull(); // date of purchase (eight digits) byte[] abyDateOfPurchase = new byte[8]; oFrameDataID3DIS.readFully(abyDateOfPurchase); m_sDateOfPurchase = new String(abyDateOfPurchase); // seller (to end) byte[] abySeller = new byte[oFrameDataID3DIS.available()]; oFrameDataID3DIS.readFully(abySeller); m_sSeller = new String(abySeller, m_oTextEncoding.getEncodingString()); } catch (Exception e) { throw new InvalidFrameID3Exception(e); } } public void accept(ID3Visitor oID3Visitor) { oID3Visitor.visitOWNEID3V2Frame(this); } /** Set ownership information. * * @param sPricePaid a price(s) string (a price string consists of a three letter ISO-4217 currency code, * followed by an amount, where "." is used as the decimal separator). Multiple prices may be separated * by a "/" characters * @param sDateOfPurchase the date of the purchase, in the format YYYYMMDD * @param sSeller the name of the seller of this file * @throws ID3Exception if sPricePaid is null or not in a valid format, if sDateOfPurchase is null or * not in the correct format, or if sSeller is null */ public void setOwnershipInformation(String sPricePaid, String sDateOfPurchase, String sSeller) throws ID3Exception { m_oTextEncoding = TextEncoding.getDefaultTextEncoding(); if (sPricePaid == null) { throw new ID3Exception("Price paid required in OWNE frame."); } if ( ! sPricePaid.matches("(?uis)(\\w{3}\\d*\\.?\\d+/?)+")) { throw new ID3Exception("Invalid OWNE frame price paid string."); } m_sPricePaid = sPricePaid; if (sDateOfPurchase == null) { throw new ID3Exception("Date of purchase required in OWNE frame."); } if ( ! sDateOfPurchase.matches("(?uis)\\d{8}")) { throw new ID3Exception("Invalid OWNE frame date of purchase."); } m_sDateOfPurchase = sDateOfPurchase; if (sSeller == null) { throw new ID3Exception("Seller required in OWNE frame."); } m_sSeller = sSeller; } /** Get price paid. * * @return the price paid */ public String getPricePaid() { return m_sPricePaid; } /** Get the date of purchase. * * @return the date of purchase */ public String getDateOfPurchase() { return m_sDateOfPurchase; } /** Get the name of the seller. * * @return the name of the seller */ public String getSeller() { return m_sSeller; } /** Set the text encoding to be used for the seller in this frame. * * @param oTextEncoding the text encoding to be used for this frame */ public void setTextEncoding(TextEncoding oTextEncoding) { if (oTextEncoding == null) { throw new NullPointerException("Text encoding cannot be null."); } m_oTextEncoding = oTextEncoding; } /** Get the text encoding used for the seller in this frame. * * @return the text encoding to be used for this frame */ public TextEncoding getTextEncoding() { return m_oTextEncoding; } protected byte[] getFrameId() { return "OWNE".getBytes(); } public String toString() { return "Ownership Frame: Price paid=[" + m_sPricePaid + "], Date of purchase=[" + m_sDateOfPurchase + "], Seller=[" + m_sSeller + "]"; } protected void writeBody(ID3DataOutputStream oIDOS) throws IOException { // text encoding oIDOS.writeUnsignedByte(m_oTextEncoding.getEncodingValue()); // price paid string oIDOS.write(m_sPricePaid.getBytes()); oIDOS.writeUnsignedByte(0); // date of purchase until oIDOS.write(m_sDateOfPurchase.getBytes()); // seller oIDOS.write(m_sSeller.getBytes(m_oTextEncoding.getEncodingString())); } public boolean equals(Object oOther) { if ((oOther == null) || (!(oOther instanceof OWNEID3V2Frame))) { return false; } OWNEID3V2Frame oOtherOWNE = (OWNEID3V2Frame)oOther; return (m_oTextEncoding.equals(oOtherOWNE.m_oTextEncoding) && m_sPricePaid.equals(oOtherOWNE.m_sPricePaid) && m_sDateOfPurchase.equals(oOtherOWNE.m_sDateOfPurchase) && m_sSeller.equals(oOtherOWNE.m_sSeller)); } }