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 }