/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jackrabbit.spi; /** * <code>ItemInfoCache</code> instances are responsible for caching * {@link ItemInfo}s along with an opaque generation counter. Implementations * are free on the particular caching policy. That is, how long (if at all) item * infos are cached. * * An <code>ItemInfoCache</code> is supplied per session from the {@link RepositoryService}. It is used * to cache <code>ItemInfo</code>s read from the <code>RepositoryService</code>. * * @see RepositoryService#getItemInfos(SessionInfo, ItemId) */ public interface ItemInfoCache { /** * This class represents a cache entry. * @param <T> Either a {@link NodeInfo} or a {@link PropertyInfo}. */ class Entry<T extends ItemInfo> { /** * The {@link ItemInfo} */ public final T info; /** * The generation */ public final long generation; /** * Create a new cache entry containing <code>info</code> with a given <code>generation</code>. * @param info * @param generation */ public Entry(T info, long generation) { this.info = info; this.generation = generation; } @Override public int hashCode() { return info.hashCode() + (int) generation; } @Override public boolean equals(Object that) { if (that == null) { return false; } if (that == this) { return true; } if (that instanceof ItemInfoCache.Entry) { ItemInfoCache.Entry other = (ItemInfoCache.Entry) that; return generation == other.generation && info.equals(other.info); } return false; } } /** * Retrieve a cache entry for the given <code>nodeId</code> or <code>null</code> * if no such entry is in the cache. * * @param nodeId id of the entry to lookup. * @return a <code>Entry<NodeInfo></code> instance or <code>null</code> * if not found. */ ItemInfoCache.Entry<NodeInfo> getNodeInfo(NodeId nodeId); /** * Retrieve a cache entry for the given <code>propertyId</code> or <code>null</code> * if no such entry is in the cache. * * @param propertyId id of the entry to lookup. * @return a <code>Entry<PropertyInfo></code> instance or * <code>null</code> if not found. */ ItemInfoCache.Entry<PropertyInfo> getPropertyInfo(PropertyId propertyId); /** * Create a {@link Entry} for <code>info</code> and <code>generation</code> and put it into * the cache. * @param info * @param generation */ void put(ItemInfo info, long generation); /** * Clear the cache and dispose all entries. */ void dispose(); }