package org.codehaus.plexus.context;
import java.util.Map;
/*
* Copyright 2001-2006 Codehaus Foundation.
*
* Licensed 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.
*/
/**
* Context is a Map of arbitrary data associated with the container.
*/
public interface Context
{
/**
* Returns true if this context contains a value for the specified key.
*
* @param key the key to search
* @return true if the key was found; false otherwise
*/
boolean contains( Object key );
/**
* Returns the value of the key. If the key can't be found it will throw a exception.
*
* @param key the key of the value to look up.
* @return returns the value associated with the key
* @throws ContextException if the key doesn't exist
*/
Object get( Object key )
throws ContextException;
/**
* Utility method to retrieve containerContext data.
* The returned Map is an unmodifiable view.
* @return the containerContext data
* @since 1.0-alpha-18
*/
Map<Object, Object> getContextData();
/**
* Adds the item to the containerContext.
*
* @param key the key of the item
* @param value the item
* @throws IllegalStateException if this context is read-only
*/
public void put( Object key, Object value )
throws IllegalStateException;
// todo [dain] this isn't needed anymore since containers are no longer nestable
/**
* Hides the item in the containerContext.
* After remove(key) has been called, a get(key)
* will always fail, even if the parent containerContext
* has such a mapping.
*
* @param key the items key
* @throws IllegalStateException if this context is read-only
*/
void hide( Object key )
throws IllegalStateException;
/**
* Make the containerContext read-only.
* Any attempt to write to the containerContext via put()
* will result in an IllegalStateException.
*/
void makeReadOnly();
}