View Javadoc

1   /*
2    * Copyright (c) 2007, James Leigh All rights reserved.
3    * 
4    * Redistribution and use in source and binary forms, with or without
5    * modification, are permitted provided that the following conditions are met:
6    * 
7    * - Redistributions of source code must retain the above copyright notice, this
8    *   list of conditions and the following disclaimer.
9    * - Redistributions in binary form must reproduce the above copyright notice,
10   *   this list of conditions and the following disclaimer in the documentation
11   *   and/or other materials provided with the distribution. 
12   * - Neither the name of the openrdf.org nor the names of its contributors may
13   *   be used to endorse or promote products derived from this software without
14   *   specific prior written permission.
15   * 
16   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24   * 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   */
29  package org.openrdf.elmo;
30  
31  import java.util.Iterator;
32  
33  import javax.xml.namespace.QName;
34  
35  /**
36   * Manages the life-cycle of the RDF resource in side the Elmo JavaBean.
37   * 
38   * @author James Leigh
39   * 
40   */
41  public interface ResourceManager<Resource> {
42  	/**
43  	 * Creates a new resource by URI, localeName, or encoded blankNode.
44  	 * 
45  	 * @param qname
46  	 * @return A Resource for this name.
47  	 */
48  	public abstract Resource createResource(QName qname);
49  
50  	/**
51  	 * Reverses createResource.
52  	 * 
53  	 * @param resource
54  	 * @return String name of the resource.
55  	 * @see #createResource(QName)
56  	 */
57  	public abstract QName createQName(Resource resource);
58  
59  	/**
60  	 * Determine what concepts and behaviours this resource represents.
61  	 * 
62  	 * @param resource
63  	 * @return Array of roles for this resource.
64  	 */
65  	public abstract Class<?>[] getRoles(Resource resource);
66  
67  	/**
68  	 * If this concept is new to this resource merge them and return the
69  	 * combined set of concepts and behaviours this resource now represents,
70  	 * otherwise return the existing roles.
71  	 * 
72  	 * @param resource
73  	 * @param concept
74  	 * @return Array of roles for this resource.
75  	 */
76  	public abstract Class<?>[] mergeRole(Resource resource, Class<?> concept);
77  
78  	/**
79  	 * Removes a given role from the resource and returns the new role set for
80  	 * this resource.
81  	 * 
82  	 * @param resource
83  	 * @param concept
84  	 * @return Array of roles for this resource, without the given concept
85  	 */
86  	public abstract Class<?>[] removeRole(Resource resource, Class<?> concept);
87  
88  	/**
89  	 * Change all references of <code>before</code> to <code>after</code>.
90  	 * 
91  	 * @param before
92  	 * @param after
93  	 */
94  	public abstract void renameResource(Resource before, Resource after);
95  
96  	/**
97  	 * Remove this resource from the repository.
98  	 * 
99  	 * @param resource
100 	 */
101 	public abstract void removeResource(Resource resource);
102 
103 	/**
104 	 * Creates a query that will return all resource that implement this
105 	 * concept.
106 	 * 
107 	 * @param concept
108 	 * @return collection of resources.
109 	 */
110 	public abstract Iterator<Resource> createRoleQuery(Class<?> concept);
111 
112 }