001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.commons.vfs2;
018
019/**
020 * The fileCache interface. Implementations of this interface are expected to be thread safe.
021 */
022public interface FilesCache {
023    /**
024     * Adds a FileObject to the cache.
025     *
026     * @param file the file
027     */
028    void putFile(final FileObject file);
029
030    /**
031     * Adds a FileObject to the cache if it isn't already present.
032     *
033     * @param file the file
034     * @return true if the file was stored, false otherwise.
035     */
036    boolean putFileIfAbsent(final FileObject file);
037
038    /**
039     * Retrieves a FileObject from the cache by name.
040     *
041     * @param filesystem The FileSystem.
042     * @param name the name
043     * @return the file object or null if file is not cached
044     */
045    FileObject getFile(final FileSystem filesystem, final FileName name);
046
047    /**
048     * Purges the entries corresponding to the FileSystem.
049     *
050     * @param fileSystem The FileSystem.
051     */
052    void clear(final FileSystem fileSystem);
053
054    /**
055     * Purges the whole cache.
056     */
057    void close();
058
059    /**
060     * Removes a file from cache.
061     *
062     * @param filesystem filesystem
063     * @param name filename
064     */
065    void removeFile(final FileSystem filesystem, final FileName name);
066
067    /**
068     * If the cache uses timestamps it could use this method to handle updates of them.
069     *
070     * @param file filename
071     */
072    // public void touchFile(final FileObject file);
073}