1 /* 2 * Copyright 1999-2004 The Apache Software Foundation 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 12 * implied. 13 * 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.avalon.cornerstone.services.store; 19 20 import org.apache.avalon.framework.service.ServiceException; 21 import org.apache.avalon.framework.service.ServiceSelector; 22 23 /** 24 * Allows selection from a number of configured Repositories. 25 * Selection criterion is passed in as a <tt>Configuration</tt> 26 * object. 27 * 28 * @see Repository 29 * @see ObjectRepository 30 * @see StreamRepository 31 * @author <a HREF="mailto:fede@apache.org">Federico Barbieri</a> 32 */ 33 public interface Store 34 extends ServiceSelector 35 { 36 String ROLE = Store.class.getName(); 37 38 /** 39 * Selects a Repository configured for the given <tt>policy</tt>. 40 * The <tt>policy</tt> must be an instance of 41 * {@link org.apache.avalon.framework.configuration.Configuration}. 42 * The following attributes are used by the Store and thus are mandatory 43 * in the <tt>policy</tt> parameter: 44 * <pre> 45 * <repository destinationURL="[URL of this repository]" 46 * type="[repository type e.g. OBJECT, STREAM or MAIL]" 47 * model="[repository model e.g. PERSISTENT, CACHE]"> 48 * [additional configuration] 49 * </repository> 50 * </pre> 51 * <p> 52 * The <tt>policy</tt> is used both to select the appropriate 53 * Repository and to configure it. 54 * </p> 55 * 56 * @param policy a {@link org.apache.avalon.framework.configuration.Configuration} object identifying the sought Repository 57 * @return requested {@link Repository} 58 * @throws ServiceException if no repository matches <tt>policy</tt> 59 */ 60 Object select( Object policy ) 61 throws ServiceException; 62 } 63