001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 package org.apache.xbean.recipe; 019 020 import java.util.SortedMap; 021 import java.util.TreeMap; 022 023 public class DefaultRepository implements Repository { 024 /** 025 * The unmarshaled object instances by name. 026 */ 027 private final SortedMap<String, Object> instances = new TreeMap<String, Object>(); 028 029 /** 030 * Does this repository contain a object with the specified name. 031 * 032 * @param name the unique name of the object instance 033 * @return true if this repository contain a object with the specified name 034 */ 035 public boolean contains(String name) { 036 return instances.containsKey(name); 037 } 038 039 /** 040 * Gets the object or recipe with the specified name from this repository. 041 * 042 * @param name the unique name of the object instance 043 * @return the object instance, a recipe to build the object or null 044 */ 045 public Object get(String name) { 046 return instances.get(name); 047 } 048 049 /** 050 * Add an object instance to this repository. 051 * 052 * @param name the unique name of the instance 053 * @param instance the instance 054 * @throws ConstructionException if another object instance is already registered with the name 055 */ 056 public void add(String name, Object instance) { 057 if (instances.containsKey(name) && !(instances.get(name) instanceof Recipe)) { 058 throw new ConstructionException("Name " + name + " is already registered to instance " + instance); 059 } 060 instances.put(name, instance); 061 } 062 }