001 /* 002 * JBoss, Home of Professional Open Source. 003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors 004 * as indicated by the @author tags. See the copyright.txt file in the 005 * distribution for a full listing of individual contributors. 006 * 007 * This is free software; you can redistribute it and/or modify it 008 * under the terms of the GNU Lesser General Public License as 009 * published by the Free Software Foundation; either version 2.1 of 010 * the License, or (at your option) any later version. 011 * 012 * This software is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this software; if not, write to the Free 019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 021 */ 022 package org.jboss.dna.sequencer.mp3; 023 024 import java.io.InputStream; 025 import org.jboss.dna.graph.sequencers.SequencerContext; 026 import org.jboss.dna.graph.sequencers.SequencerOutput; 027 import org.jboss.dna.graph.sequencers.StreamSequencer; 028 029 /** 030 * A sequencer that processes the binary content of an MP3 audio file, extracts the metadata for the file, and then writes that 031 * audio metadata to the repository. 032 * <p> 033 * This sequencer produces data that corresponds to the following structure: 034 * <ul> 035 * <li><strong>mp3:metadata</strong> node of type <code>mp3:metadata</code> 036 * <ul> 037 * <li><strong>mp3:title</strong> - optional string property for the name of the audio file or recording</li> 038 * <li><strong>mp3:author</strong> - optional string property for the author of the recording</li> 039 * <li><strong>mp3:album</strong> - optional string property for the name of the album</li> 040 * <li><strong>mp3:year</strong> - optional integer property for the year the recording as created</li> 041 * <li><strong>mp3:comment</strong> - optional string property specifying a comment</li> 042 * </ul> 043 * </li> 044 * </ul> 045 * </p> 046 * 047 * @author Stefano Maestri 048 * @author Randall Hauch 049 * @author John Verhaeg 050 */ 051 public class Mp3MetadataSequencer implements StreamSequencer { 052 053 public static final String METADATA_NODE = "mp3:metadata"; 054 public static final String MP3_PRIMARY_TYPE = "jcr:primaryType"; 055 public static final String MP3_TITLE = "mp3:title"; 056 public static final String MP3_AUTHOR = "mp3:author"; 057 public static final String MP3_ALBUM = "mp3:album"; 058 public static final String MP3_YEAR = "mp3:year"; 059 public static final String MP3_COMMENT = "mp3:comment"; 060 061 /** 062 * {@inheritDoc} 063 * 064 * @see StreamSequencer#sequence(InputStream, SequencerOutput, SequencerContext) 065 */ 066 public void sequence( InputStream stream, 067 SequencerOutput output, 068 SequencerContext context ) { 069 Mp3Metadata metadata = Mp3Metadata.instance(stream); 070 071 if (metadata != null) { 072 // Place the image metadata into the output map ... 073 output.setProperty(METADATA_NODE, MP3_PRIMARY_TYPE, "mp3:metadata"); 074 output.setProperty(METADATA_NODE, MP3_TITLE, metadata.getTitle()); 075 output.setProperty(METADATA_NODE, MP3_AUTHOR, metadata.getAuthor()); 076 output.setProperty(METADATA_NODE, MP3_ALBUM, metadata.getAlbum()); 077 output.setProperty(METADATA_NODE, MP3_YEAR, metadata.getYear()); 078 output.setProperty(METADATA_NODE, MP3_COMMENT, metadata.getComment()); 079 } 080 } 081 }