View Javadoc

1   // 
2   // Copyright (c) 2003, 2004, 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.datatype;
29  
30  /***
31   * Common base class for DatatypeSet implementations.
32   * 
33   * @author <a href="mailto:dgajda@caltha.pl">Damian Gajda</a>
34   * @version $Id: AbstractDatatypeSet.java,v 1.2 2004/12/27 04:43:22 rafal Exp $
35   */
36  public abstract class AbstractDatatypeSet implements DatatypeSet
37  {
38  	/*** Name of this datatype set. */ 
39  	protected String name;
40  	
41  	/*** Parent of this datatype set. */ 
42  	protected DatatypeSet parent;
43  
44  	/***
45  	 * Creates a datatype set with a given name.
46  	 * 
47  	 * @param name name of the set.
48  	 */
49      public AbstractDatatypeSet(String name)
50      {
51      	this.name = name;
52      }
53  
54  	// DatatypeSet API ----------------------------------------------------------------------------
55  
56      /***
57       * {@inheritDoc}
58       */
59      public String getName()
60      {
61          return name;
62      }
63  
64  	/***
65  	 * {@inheritDoc}
66  	 */
67  	public Datatype getDatatype(String name)
68  	{
69  		Datatype datatype = this.getDatatypeInternal(name);
70  		if(datatype == null && parent != null)
71  		{
72  			return parent.getDatatype(name); 
73  		}
74  		return datatype;
75  	}
76  
77  	// NonPublic API -----------------------------------------------------------------------------
78  
79  	DatatypeSet getParent()
80  	{
81  		return parent;
82  	}
83  
84      void setParent(DatatypeSet parent)
85      {
86  		this.parent = parent;
87      }
88  
89  	// Override API ------------------------------------------------------------------------------
90  
91  	/***
92  	 * Internal method for getting datatypes left for implmentation by subclasses.
93  	 * @param name name of the datatype
94  	 * @return found datatype or <code>null</code>.
95  	 */
96  	protected abstract Datatype getDatatypeInternal(String name);
97  }