Source for org.jfree.repository.file.FileContentLocation

   1: /**
   2:  * ===========================================================
   3:  * LibRepository : a free Java content repository access layer
   4:  * ===========================================================
   5:  *
   6:  * Project Info:  http://jfreereport.pentaho.org/librepository/
   7:  *
   8:  * (C) Copyright 2006, by Pentaho Corporation and Contributors.
   9:  *
  10:  * This library is free software; you can redistribute it and/or modify it under the terms
  11:  * of the GNU Lesser General Public License as published by the Free Software Foundation;
  12:  * either version 2.1 of the License, or (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  15:  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  16:  * See the GNU Lesser General Public License for more details.
  17:  *
  18:  * You should have received a copy of the GNU Lesser General Public License along with this
  19:  * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  20:  * Boston, MA 02111-1307, USA.
  21:  *
  22:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
  23:  * in the United States and other countries.]
  24:  *
  25:  * ------------
  26:  * FileContentLocation.java
  27:  * ------------
  28:  * (C) Copyright 2006, by Pentaho Corporation.
  29:  */
  30: 
  31: package org.jfree.repository.file;
  32: 
  33: import java.io.File;
  34: import java.io.IOException;
  35: 
  36: import org.jfree.io.IOUtils;
  37: import org.jfree.repository.ContentCreationException;
  38: import org.jfree.repository.ContentEntity;
  39: import org.jfree.repository.ContentIOException;
  40: import org.jfree.repository.ContentItem;
  41: import org.jfree.repository.ContentLocation;
  42: import org.jfree.repository.Repository;
  43: 
  44: /**
  45:  * Creation-Date: 13.11.2006, 12:01:11
  46:  *
  47:  * @author Thomas Morgner
  48:  */
  49: public class FileContentLocation extends FileContentEntity implements ContentLocation
  50: {
  51:   public FileContentLocation(final ContentLocation parent, final File backend)
  52:   {
  53:     super(parent, backend);
  54:   }
  55: 
  56:   public FileContentLocation(final Repository repository, final File backend)
  57:   {
  58:     super(repository, backend);
  59:   }
  60: 
  61:   public ContentEntity[] listContents() throws ContentIOException
  62:   {
  63:     final File file = getBackend();
  64:     final File[] files = file.listFiles();
  65:     final ContentEntity[] entities = new ContentEntity[files.length];
  66:     for (int i = 0; i < files.length; i++)
  67:     {
  68:       final File child = files[i];
  69:       if (child.isDirectory())
  70:       {
  71:         entities[i] = new FileContentLocation(this, child);
  72:       }
  73:       else if (child.isFile())
  74:       {
  75:         entities[i] = new FileContentLocation(this, child);
  76:       }
  77:     }
  78:     return entities;
  79:   }
  80: 
  81:   public ContentEntity getEntry(final String name) throws ContentIOException
  82:   {
  83:     final File file = getBackend();
  84:     final File child = new File (file, name);
  85:     if (child.exists() == false)
  86:     {
  87:       throw new ContentIOException("Not found.");
  88:     }
  89:     try
  90:     {
  91:       if (IOUtils.getInstance().isSubDirectory(file, child))
  92:       {
  93:         throw new ContentIOException("Not sub-directory");
  94:       }
  95:     }
  96:     catch (IOException e)
  97:     {
  98:       throw new ContentIOException("IO Error.");
  99:     }
 100: 
 101:     if (child.isDirectory())
 102:     {
 103:       return new FileContentLocation(this, child);
 104:     }
 105:     else if (child.isFile())
 106:     {
 107:       return new FileContentItem(this, child);
 108:     }
 109:     else
 110:     {
 111:       throw new ContentIOException("Not File nor directory.");
 112:     }
 113:   }
 114: 
 115:   public ContentItem createItem(final String name) throws ContentCreationException
 116:   {
 117:     final File file = getBackend();
 118:     final File child = new File (file, name);
 119:     if (child.exists())
 120:     {
 121:       throw new ContentCreationException("File already exists.");
 122:     }
 123:     try
 124:     {
 125:       if (child.createNewFile() == false)
 126:       {
 127:         throw new ContentCreationException("Unable to create");
 128:       }
 129:       return new FileContentItem(this, child);
 130:     }
 131:     catch (IOException e)
 132:     {
 133:       throw new ContentCreationException("IOError while create");
 134:     }
 135:   }
 136: 
 137:   public ContentLocation createLocation(final String name)
 138:       throws ContentCreationException
 139:   {
 140:     final File file = getBackend();
 141:     final File child = new File (file, name);
 142:     if (child.exists())
 143:     {
 144:       throw new ContentCreationException("File already exists.");
 145:     }
 146:     if (child.mkdir() == false)
 147:     {
 148:       throw new ContentCreationException("Unable to create");
 149:     }
 150:     return new FileContentLocation(this, child);
 151:   }
 152: 
 153:   public boolean exists(final String name)
 154:   {
 155:     final File file = getBackend();
 156:     final File child = new File (file, name);
 157:     return (child.exists());
 158:   }
 159: }