View Javadoc

1   /*
2    * JDiskCatalog
3    *
4    * Copyright 2007 Przemek Więch
5    *
6    * This file is part of JDiskCatalog.
7    *
8    * JDiskCatalog is free software; you can redistribute it and/or modify
9    * it under the terms of the GNU General Public License as published by
10   * the Free Software Foundation; either version 2 of the License, or
11   * (at your option) any later version.
12   *
13   * This program is distributed in the hope that it will be useful,
14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   * GNU General Public License for more details.
17  
18   * You should have received a copy of the GNU General Public License
19   * along with this program; if not, write to the Free Software
20   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21   */
22  
23  package net.sf.jdiskcatalog.analysis;
24  
25  import java.io.IOException;
26  import java.io.InputStream;
27  import java.util.HashMap;
28  import java.util.Map;
29  
30  import net.sf.jdiskcatalog.api.NodeInfo;
31  import net.sf.jdiskcatalog.api.StreamAnalyser;
32  
33  import org.apache.nutch.util.mime.MimeType;
34  import org.apache.nutch.util.mime.MimeTypes;
35  
36  
37  /**
38   * Selects a mime-type for the file..
39   *
40   * @author Przemek Więch <pwiech@losthive.org>
41   * @version $Id$
42   */
43  public class MimeTypeAnalyser implements StreamAnalyser
44  {
45  	public static final String KEY_MIMETYPE = "mimetype";
46  
47  	private MimeTypes mimeTypes;
48  	private int minLength;
49  
50  	public MimeTypeAnalyser()
51  	{
52  		mimeTypes = MimeTypes.get("mime-types.xml");
53  		minLength = mimeTypes.getMinLength();
54  	}
55  
56  	public Map<String, Object> analyse(InputStream stream, NodeInfo nodeInfo) throws IOException
57  	{
58  		Map<String, Object> properties = new HashMap<String, Object>();
59  
60  		MimeType mimeType = mimeTypes.getMimeType(nodeInfo.getName());
61  		if (mimeType == null)
62  		{
63  			//System.out.println("MimeType: Checking contents");
64  			byte[] data = new byte[minLength];
65  			int read = stream.read(data, 0, minLength);
66  			mimeTypes.getMimeType(data);
67  			System.out.println("Read " + read + "bytes out of " + minLength + ". Found: " + mimeType);
68  		}
69  
70  		if (mimeType != null)
71  			properties.put(KEY_MIMETYPE, mimeType.getName());
72  		return properties;
73  	}
74  }