001    package org.apache.maven.model.building;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *   http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    /**
023     * Caches auxiliary data used during model building like already processed raw/effective models. The data in the cache
024     * is meant for exclusive consumption by the model builder and is opaque to the cache implementation. The cache key is
025     * formed by a combination of group id, artifact id, version and tag. The first three components generally refer to the
026     * identify of a model. The tag allows for further classification of the associated data on the sole discretion of the
027     * model builder.
028     * 
029     * @author Benjamin Bentmann
030     */
031    public interface ModelCache
032    {
033    
034        /**
035         * Puts the specified data into the cache.
036         * 
037         * @param groupId The group id of the cache record, must not be {@code null}.
038         * @param artifactId The artifact id of the cache record, must not be {@code null}.
039         * @param version The version of the cache record, must not be {@code null}.
040         * @param tag The tag of the cache record, must not be {@code null}.
041         * @param data The data to store in the cache, must not be {@code null}.
042         */
043        void put( String groupId, String artifactId, String version, String tag, Object data );
044    
045        /**
046         * Gets the specified data from the cache.
047         * 
048         * @param groupId The group id of the cache record, must not be {@code null}.
049         * @param artifactId The artifact id of the cache record, must not be {@code null}.
050         * @param version The version of the cache record, must not be {@code null}.
051         * @param tag The tag of the cache record, must not be {@code null}.
052         * @return The requested data or {@code null} if none was present in the cache.
053         */
054        Object get( String groupId, String artifactId, String version, String tag );
055    
056    }