001 /** 002 * =========================================================== 003 * LibRepository : a free Java content repository access layer 004 * =========================================================== 005 * 006 * Project Info: http://jfreereport.pentaho.org/librepository/ 007 * 008 * (C) Copyright 2006, by Pentaho Corporation and Contributors. 009 * 010 * This library is free software; you can redistribute it and/or modify it under the terms 011 * of the GNU Lesser General Public License as published by the Free Software Foundation; 012 * either version 2.1 of the License, or (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 015 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 016 * See the GNU Lesser General Public License for more details. 017 * 018 * You should have received a copy of the GNU Lesser General Public License along with this 019 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, 020 * Boston, MA 02111-1307, USA. 021 * 022 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 023 * in the United States and other countries.] 024 * 025 * ------------ 026 * FileContentLocation.java 027 * ------------ 028 * (C) Copyright 2006, by Pentaho Corporation. 029 */ 030 031 package org.jfree.repository.file; 032 033 import java.io.File; 034 import java.io.IOException; 035 036 import org.jfree.io.IOUtils; 037 import org.jfree.repository.ContentCreationException; 038 import org.jfree.repository.ContentEntity; 039 import org.jfree.repository.ContentIOException; 040 import org.jfree.repository.ContentItem; 041 import org.jfree.repository.ContentLocation; 042 import org.jfree.repository.Repository; 043 044 /** 045 * Creation-Date: 13.11.2006, 12:01:11 046 * 047 * @author Thomas Morgner 048 */ 049 public class FileContentLocation extends FileContentEntity implements ContentLocation 050 { 051 public FileContentLocation(final ContentLocation parent, final File backend) 052 { 053 super(parent, backend); 054 } 055 056 public FileContentLocation(final Repository repository, final File backend) 057 { 058 super(repository, backend); 059 } 060 061 public ContentEntity[] listContents() throws ContentIOException 062 { 063 final File file = getBackend(); 064 final File[] files = file.listFiles(); 065 final ContentEntity[] entities = new ContentEntity[files.length]; 066 for (int i = 0; i < files.length; i++) 067 { 068 final File child = files[i]; 069 if (child.isDirectory()) 070 { 071 entities[i] = new FileContentLocation(this, child); 072 } 073 else if (child.isFile()) 074 { 075 entities[i] = new FileContentLocation(this, child); 076 } 077 } 078 return entities; 079 } 080 081 public ContentEntity getEntry(final String name) throws ContentIOException 082 { 083 final File file = getBackend(); 084 final File child = new File (file, name); 085 if (child.exists() == false) 086 { 087 throw new ContentIOException("Not found."); 088 } 089 try 090 { 091 if (IOUtils.getInstance().isSubDirectory(file, child)) 092 { 093 throw new ContentIOException("Not sub-directory"); 094 } 095 } 096 catch (IOException e) 097 { 098 throw new ContentIOException("IO Error."); 099 } 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 }