1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.om.registry.base;
18
19 import java.io.ByteArrayInputStream;
20 import java.io.ByteArrayOutputStream;
21 import java.io.ObjectInputStream;
22 import java.io.ObjectOutputStream;
23
24 import org.apache.jetspeed.om.registry.RegistryEntry;
25 import org.apache.jetspeed.om.registry.InvalidEntryException;
26 import org.apache.jetspeed.om.registry.RegistryException;
27 import org.apache.jetspeed.om.registry.SecurityEntry;
28 import org.apache.jetspeed.services.Registry;
29 import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
30 import org.apache.jetspeed.services.logging.JetspeedLogger;
31
32 /***
33 * Extends BaseRegistry implementation to override object creation
34 * method and ensure Registry object is synchronized with its
35 * persistence backend by delegating actual addition/deletion of objects
36 * to the registry service.
37 * <p>To avoid loops, a RegistryService implementation using this class
38 * nees to call the addLocalEntry/removeLocalEntry methods to modify
39 * the in memory state of this Registry</p>
40 *
41 * @author <a href="mailto:raphael@apache.org">Raphaël Luta</a>
42 * @version $Id: BaseSecurityRegistry.java,v 1.6 2004/02/23 03:08:26 jford Exp $
43 */
44 public class BaseSecurityRegistry extends BaseRegistry
45 {
46
47 /***
48 * Static initialization of the logger for this class
49 */
50 private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(BaseSecurityRegistry.class.getName());
51
52 /***
53 @see Registry#setEntry
54 */
55 public void setEntry( RegistryEntry entry ) throws InvalidEntryException
56 {
57
58
59
60 try
61 {
62 Registry.addEntry(Registry.SECURITY, entry);
63 }
64 catch (RegistryException e)
65 {
66 logger.error("Exception", e);
67 }
68 }
69
70 /***
71 @see Registry#addEntry
72 */
73 public void addEntry( RegistryEntry entry ) throws InvalidEntryException
74 {
75
76
77
78 try
79 {
80 Registry.addEntry(Registry.SECURITY, entry);
81 }
82 catch (RegistryException e)
83 {
84 logger.error("Exception", e);
85 }
86 }
87
88 /***
89 @see Registry#removeEntry
90 */
91 public void removeEntry( String name )
92 {
93
94
95
96 Registry.removeEntry(Registry.SECURITY, name);
97 }
98
99 /***
100 @see Registry#removeEntry
101 */
102 public void removeEntry( RegistryEntry entry )
103 {
104
105
106
107 if (entry != null)
108 {
109 Registry.removeEntry(Registry.SECURITY, entry.getName());
110 }
111 }
112
113 /***
114 * Creates a new RegistryEntry instance compatible with the current
115 * Registry instance implementation
116 *
117 * @return the newly created RegistryEntry
118 */
119 public RegistryEntry createEntry()
120 {
121 return new BaseSecurityEntry();
122 }
123
124 /***
125 * returns a security entry from the registry based on the name provided
126 * @param String name Name of security entry we want.
127 * @return SecurityEntry SecurityEntry matching the <code>name</code>
128 * argument or null if no such entry exists.
129 */
130 public SecurityEntry getSecurityEntry(String name)
131 {
132 try
133 {
134 return (SecurityEntry) this.getEntry(name);
135 }
136 catch (InvalidEntryException e)
137 {
138 logger.error("Exception", e);
139 }
140
141 return null;
142 }
143
144 /***
145 * @return SecurityEntry a new SecurityEntry instance
146 */
147 public SecurityEntry createSecurityEntry()
148 {
149 return (SecurityEntry) this.createEntry();
150 }
151
152 /***
153 * Makes an exact copy of the named role, but changing the nmae attribute
154 * to the value of <code>newName</code>
155 * @param String original Name of the entry we want to clone
156 * @param String newName Name to give the cloned entry
157 * @return SecurityEntry The cloned entry.
158 */
159 public SecurityEntry cloneSecurityEntry(String original, String newName)
160 {
161 SecurityEntry baseEntry = getSecurityEntry(original);
162 if (baseEntry != null)
163 {
164 SecurityEntry newEntry = cloneEntry(baseEntry);
165 newEntry.setName(newName);
166 return newEntry;
167 }
168
169 return null;
170 }
171
172
173 /***
174 * Makes an indentical copy of the SecurityEntry provided using
175 * serialize/de-serialize logic to make a clean reference
176 * @param SecurityEntry secEntry the entry to clone
177 * @return SecurityEntry the cloned entry.
178 */
179 private static SecurityEntry cloneEntry(SecurityEntry secEntry)
180 {
181 SecurityEntry clonedEntry = null;
182 try
183 {
184 ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(100);
185 ObjectOutputStream objectoutputstream = new ObjectOutputStream(bytearrayoutputstream);
186 objectoutputstream.writeObject(secEntry);
187 byte abyte0[] = bytearrayoutputstream.toByteArray();
188 objectoutputstream.close();
189 ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(abyte0);
190 ObjectInputStream objectinputstream = new ObjectInputStream(bytearrayinputstream);
191 clonedEntry = (SecurityEntry) objectinputstream.readObject();
192 objectinputstream.close();
193 }
194 catch (Exception exception)
195 {
196
197 }
198 return clonedEntry;
199 }
200 }