/* * 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.wicket.security.hive; import java.util.HashMap; import java.util.Map; import org.apache.wicket.security.hive.config.HiveFactory; /** * HiveMind maintains the collection of {@link Hive}s. There can only be one * HiveMind in each virtual machine. As the HiveMind is supposed to be created * and configured early during the lifetime of an application none of its * methods are synchronized. * * @author marrink */ public class HiveMind { // TODO JAAS check for rights on all methods private static final HiveMind INSTANCE = new HiveMind(); private Map<Object, Hive> hiveCollection; /** * Private constructor for this simple class. */ private HiveMind() { hiveCollection = new HashMap<Object, Hive>(); } /** * Returns the Hive stored with the key. * * @param queen * the key * @return the Hive or null if no Hive is registered with that key */ public static Hive getHive(Object queen) { return INSTANCE.hiveCollection.get(queen); } /** * Registers a new Hive for anybody knowing the right key to be retrieved. * It is not possible to overwrite a registration without first * unregistering the previous Hive. * * @param queen * the key to store the Hive with. * @param factory * the factory that will produce the Hive. * @throws IllegalArgumentException * if the factory is null * @throws IllegalArgumentException * if an attempt is made to overwrite the registration. * @throws RuntimeException * if the factory does not produce a Hive. * @see #unregisterHive(Object) */ public static void registerHive(Object queen, HiveFactory factory) { if (factory == null) throw new IllegalArgumentException("Cannot register Hive without a factory."); synchronized (INSTANCE.hiveCollection) { if (INSTANCE.hiveCollection.containsKey(queen)) throw new IllegalArgumentException( "Another Hive is already registered with the following key: " + queen); Hive hive = factory.createHive(); if (hive == null) throw new RuntimeException("Factory did not produce a Hive."); INSTANCE.hiveCollection.put(queen, hive); } } /** * Removes the registration of a single Hive. * * @param queen * the key the Hive is registered with * @return the registered Hive or null if none was registered with the key. */ public static Hive unregisterHive(Object queen) { return INSTANCE.hiveCollection.remove(queen); } }