1 //
2 // Copyright (c) 2003, Caltha - Gajda, Krzewski, Mach, Potempski Sp.J.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 // * Neither the name of the Caltha - Gajda, Krzewski, Mach, Potempski Sp.J.
14 // nor the names of its contributors may be used to endorse or promote products
15 // derived from this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
21 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23 // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 // POSSIBILITY OF SUCH DAMAGE.
27 //
28 package org.objectledge.database.persistence;
29
30 import org.objectledge.pico.customization.CustomizingConstructorComponentAdapter;
31 import org.picocontainer.ComponentAdapter;
32 import org.picocontainer.PicoContainer;
33
34 /***
35 * An implementation of the {@link org.objectledge.database.persistence.PersistentFactory}
36 * interface that uses a PicoContainer and
37 * {@link org.objectledge.pico.customization.CustomizingConstructorComponentAdapter}.
38 *
39 * @author <a href="mailto:rafal@caltha.pl">Rafal Krzewski</a>
40 * @version $Id: PicoPersistentFactory.java,v 1.3 2005/07/07 08:30:03 zwierzem Exp $
41 */
42 public class PicoPersistentFactory implements PersistentFactory
43 {
44 private PicoContainer container;
45
46 private Class type;
47
48 /***
49 * Crates an instantiator instance.
50 *
51 * @param container the pico container to resolve dependencies from.
52 * @param type an implmentation of {@link org.objectledge.database.persistence.Persistent} interface.
53 * @throws IllegalArgumentException if the clazz does not implement required interface.
54 */
55 public PicoPersistentFactory(PicoContainer container, Class type)
56 throws IllegalArgumentException
57 {
58 this.container = container;
59 this.type = type;
60 if(!Persistent.class.isAssignableFrom(type))
61 {
62 throw new IllegalArgumentException(type.getName()+
63 " does not implmement Persistent interface");
64 }
65 }
66
67 /***
68 * {@inheritDoc}
69 */
70 public Persistent newInstance() throws Exception
71 {
72 ComponentAdapter adapter = new CustomizingConstructorComponentAdapter(type, type, null);
73 return (Persistent)adapter.getComponentInstance(container);
74 }
75 }