001: /*
002: * Copyright 2004-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.apache.lucene.store.jdbc.handler;
018:
019: import java.io.IOException;
020: import java.util.List;
021:
022: import org.apache.lucene.store.IndexInput;
023: import org.apache.lucene.store.IndexOutput;
024: import org.apache.lucene.store.jdbc.JdbcDirectory;
025:
026: /**
027: * A file entry handler acts as a delegate to the {@link JdbcDirectory} for all "file" level
028: * operations. Allows the {@link JdbcDirectory} to be abstracted from any specific implementation
029: * details regarding a file entry, and have several different file entries for different files or
030: * files groups.
031: *
032: * @author kimchy
033: * @see org.apache.lucene.store.jdbc.JdbcDirectorySettings#registerFileEntrySettings(String, org.apache.lucene.store.jdbc.JdbcFileEntrySettings)
034: */
035: public interface FileEntryHandler {
036:
037: /**
038: * Called after the entry is created (during the {@link JdbcDirectory} initialization process.
039: */
040: void configure(JdbcDirectory jdbcDirectory);
041:
042: /**
043: * Checks if the file exists for the given file name.
044: *
045: * @param name The name of the file
046: * @return <code>true</code> of the file exists, <code>false</code> if it does not.
047: * @throws IOException
048: */
049: boolean fileExists(final String name) throws IOException;
050:
051: /**
052: * Returns the last modified date of the file.
053: *
054: * @param name The name of the file
055: * @return The last modified date in millis.
056: * @throws IOException
057: */
058: long fileModified(final String name) throws IOException;
059:
060: /**
061: * Updates the last modified date of the file to the current time.
062: *
063: * @param name The name of the file
064: * @throws IOException
065: */
066: void touchFile(final String name) throws IOException;
067:
068: /**
069: * Deletes the given file name.
070: *
071: * @param name The name of the file to delete
072: * @throws IOException
073: */
074: void deleteFile(final String name) throws IOException;
075:
076: /**
077: * Deletes a list of files. It must be verified by the caller that
078: * all files correlate to this file entry handler.
079: *
080: * @param names The list of file names to delete
081: * @return List of files that were not deleted (or <code>null</code> if all were deleted)
082: * @throws IOException
083: */
084: List deleteFiles(List names) throws IOException;
085:
086: /**
087: * Renames the file entry from "from" to "to". The from entry is
088: * the one that maps to the actual file entry handler.
089: *
090: * @param from The name to rename from
091: * @param to The name to rename to
092: * @throws IOException
093: */
094: void renameFile(final String from, final String to)
095: throws IOException;
096:
097: /**
098: * Returns the length of the file (in bytes).
099: *
100: * @param name The name of the file
101: * @return The length of the file (in bytes)
102: * @throws IOException
103: */
104: long fileLength(final String name) throws IOException;
105:
106: /**
107: * Opens an <code>IndexInput</code> in order to read the file contents.
108: *
109: * @param name The name of the file
110: * @return An <code>IndexInput</code> in order to read the file contents.
111: * @throws IOException
112: */
113: IndexInput openInput(String name) throws IOException;
114:
115: /**
116: * Creates an <code>IndexOutput</code> in order to write the file contents.
117: *
118: * @param name The name of the file
119: * @return An <code>IndexOutput</code> to write the file contents
120: * @throws IOException
121: */
122: IndexOutput createOutput(String name) throws IOException;
123:
124: /**
125: * Closes the file entry handler.
126: *
127: * @throws IOException
128: */
129: void close() throws IOException;
130: }
|