src/core/net/sf/basedb/util/bfs/GenericBaseDataWriterFactory.java

Code
Comments
Other
Rev Date Author Line
5198 15 Dec 09 nicklas 1 /**
5198 15 Dec 09 nicklas 2   $Id$
5198 15 Dec 09 nicklas 3
5198 15 Dec 09 nicklas 4   Copyright (C) 2009 Nicklas Nordborg
5198 15 Dec 09 nicklas 5
5198 15 Dec 09 nicklas 6   This file is part of BASE - BioArray Software Environment.
5198 15 Dec 09 nicklas 7   Available at http://base.thep.lu.se/
5198 15 Dec 09 nicklas 8
5198 15 Dec 09 nicklas 9   BASE is free software; you can redistribute it and/or
5198 15 Dec 09 nicklas 10   modify it under the terms of the GNU General Public License
5198 15 Dec 09 nicklas 11   as published by the Free Software Foundation; either version 3
5198 15 Dec 09 nicklas 12   of the License, or (at your option) any later version.
5198 15 Dec 09 nicklas 13
5198 15 Dec 09 nicklas 14   BASE is distributed in the hope that it will be useful,
5198 15 Dec 09 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5198 15 Dec 09 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5198 15 Dec 09 nicklas 17   GNU General Public License for more details.
5198 15 Dec 09 nicklas 18
5198 15 Dec 09 nicklas 19   You should have received a copy of the GNU General Public License
5198 15 Dec 09 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5198 15 Dec 09 nicklas 21 */
5198 15 Dec 09 nicklas 22 package net.sf.basedb.util.bfs;
5198 15 Dec 09 nicklas 23
5198 15 Dec 09 nicklas 24 import java.io.IOException;
5198 15 Dec 09 nicklas 25 import java.io.OutputStream;
5198 15 Dec 09 nicklas 26
5198 15 Dec 09 nicklas 27 import net.sf.basedb.core.DbControl;
5198 15 Dec 09 nicklas 28 import net.sf.basedb.core.Directory;
5198 15 Dec 09 nicklas 29 import net.sf.basedb.core.File;
5198 15 Dec 09 nicklas 30
5198 15 Dec 09 nicklas 31 /**
5198 15 Dec 09 nicklas 32   Generic implementation of a data writer factory that create
5198 15 Dec 09 nicklas 33   files in the BASE file system.
5198 15 Dec 09 nicklas 34
5198 15 Dec 09 nicklas 35   @author Nicklas
5198 15 Dec 09 nicklas 36   @version 2.15
5198 15 Dec 09 nicklas 37   @base.modified $Date$
5198 15 Dec 09 nicklas 38 */
5198 15 Dec 09 nicklas 39 public class GenericBaseDataWriterFactory<T>
5198 15 Dec 09 nicklas 40   extends AbstractDataWriterFactory<T>
5198 15 Dec 09 nicklas 41 {
5198 15 Dec 09 nicklas 42
5198 15 Dec 09 nicklas 43   private final DbControl dc;
5198 15 Dec 09 nicklas 44   private final Directory dir;
5198 15 Dec 09 nicklas 45   
5198 15 Dec 09 nicklas 46   /**
5198 15 Dec 09 nicklas 47     Create a new factory that creates files in the given
5198 15 Dec 09 nicklas 48     directory. The directory should already exist.
5198 15 Dec 09 nicklas 49     @param dir The directory to create files in
5198 15 Dec 09 nicklas 50   */
5212 12 Jan 10 nicklas 51   public GenericBaseDataWriterFactory(DbControl dc, Directory dir, 
5212 12 Jan 10 nicklas 52     FilenameGenerator<T> filenameGenerator)
5198 15 Dec 09 nicklas 53     throws IOException
5198 15 Dec 09 nicklas 54   {
5212 12 Jan 10 nicklas 55     super(filenameGenerator);
5198 15 Dec 09 nicklas 56     if (dir == null) throw new NullPointerException("dir");
5198 15 Dec 09 nicklas 57     this.dc = dc;
5198 15 Dec 09 nicklas 58     this.dir = dir;
5198 15 Dec 09 nicklas 59   }
5198 15 Dec 09 nicklas 60
5198 15 Dec 09 nicklas 61   /**
5198 15 Dec 09 nicklas 62     Create a new file in the data directory with the given file
5198 15 Dec 09 nicklas 63     name.
5198 15 Dec 09 nicklas 64   */
5198 15 Dec 09 nicklas 65   @Override
5198 15 Dec 09 nicklas 66   protected OutputStream getOutputStream(String filename) 
5198 15 Dec 09 nicklas 67     throws IOException
5198 15 Dec 09 nicklas 68   {
5210 11 Jan 10 nicklas 69     File file = File.getFile(dc, dir, filename, true);
5198 15 Dec 09 nicklas 70     file.setName(filename);
5198 15 Dec 09 nicklas 71     setFileProperties(file);
5210 11 Jan 10 nicklas 72     if (!file.isInDatabase()) dc.saveItem(file);
5198 15 Dec 09 nicklas 73     return file.getUploadStream(false);
5198 15 Dec 09 nicklas 74   }
5198 15 Dec 09 nicklas 75   
5198 15 Dec 09 nicklas 76   /**
5198 15 Dec 09 nicklas 77     Set file properties on the newly created file object. The default
5198 15 Dec 09 nicklas 78     implementation sets the character set to UTF-8 and the MIME type
5198 15 Dec 09 nicklas 79     to text/plain. A subclass may override this method to set other 
5198 15 Dec 09 nicklas 80     properties.
5198 15 Dec 09 nicklas 81     @param file The new file
5198 15 Dec 09 nicklas 82   */
5198 15 Dec 09 nicklas 83   protected void setFileProperties(File file)
5198 15 Dec 09 nicklas 84   {
5198 15 Dec 09 nicklas 85     file.setCharacterSet("UTF-8");
5198 15 Dec 09 nicklas 86     file.setMimeType("text/plain");
5198 15 Dec 09 nicklas 87   }
5198 15 Dec 09 nicklas 88 }