KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > jetspeed > om > registry > base > BaseClientRegistry


1 /*
2  * Copyright 2000-2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.jetspeed.om.registry.base;
18
19 import org.apache.jetspeed.om.registry.ClientEntry;
20 import org.apache.jetspeed.om.registry.ClientRegistry;
21 import org.apache.jetspeed.om.registry.RegistryEntry;
22 import org.apache.jetspeed.om.registry.InvalidEntryException;
23 import org.apache.jetspeed.om.registry.RegistryException;
24 import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
25 import org.apache.jetspeed.services.logging.JetspeedLogger;
26 import org.apache.jetspeed.services.Registry;
27 import java.util.Enumeration JavaDoc;
28
29 // regexp stuff
30
import org.apache.regexp.RE;
31
32 /**
33  * Simple implementation of the ClientRegistry interface.
34  * <p>Extends BaseRegistry implementation to override object creation
35  * method and ensure Registry object is synchronized with its
36  * persistence backend by delegating actual addition/deletion of objects
37  * to the registry service.</p>
38  * <p>To avoid loops, a RegistryService implementation using this class
39  * nees to call the addLocalEntry/removeLocalEntry methods to modify
40  * the in memory state of this Registry</p>
41  *
42  * @author <a HREF="shesmer@raleigh.ibm.com">Stephan Hesmer</a>
43  * @author <a HREF="mailto:raphael@apache.org">Raphaël Luta</a>
44  * @version $Id: BaseClientRegistry.java,v 1.5 2004/02/23 03:08:26 jford Exp $
45  */

46 public class BaseClientRegistry extends BaseOrderedRegistry implements ClientRegistry
47 {
48     
49     /**
50      * Static initialization of the logger for this class
51      */

52     private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(BaseClientRegistry.class.getName());
53     
54     /**
55     @see Registry#setEntry
56     */

57     public void setEntry( RegistryEntry entry ) throws InvalidEntryException
58     {
59         // Delegate to the RegistryService to ensure correct handling of
60
// persistence if using file fragments
61

62         try
63         {
64             Registry.addEntry(Registry.CLIENT, entry);
65         }
66         catch (RegistryException e)
67         {
68             logger.error("Exception", e);
69         }
70     }
71
72     /**
73     @see Registry#addEntry
74     */

75     public void addEntry( RegistryEntry entry ) throws InvalidEntryException
76     {
77         // Delegate to the RegistryService to ensure correct handling of
78
// persistence if using file fragments
79

80         try
81         {
82             Registry.addEntry(Registry.CLIENT, entry);
83         }
84         catch (RegistryException e)
85         {
86             logger.error("Exception", e);
87         }
88     }
89
90     /**
91     @see Registry#removeEntry
92     */

93     public void removeEntry( String JavaDoc name )
94     {
95         // Delegate to the RegistryService to ensure correct handling of
96
// persistence if using file fragments
97

98         Registry.removeEntry(Registry.CLIENT, name);
99     }
100
101     /**
102     @see Registry#removeEntry
103     */

104     public void removeEntry( RegistryEntry entry )
105     {
106         // Delegate to the RegistryService to ensure correct handling of
107
// persistence if using file fragments
108

109         if (entry != null)
110         {
111             Registry.removeEntry(Registry.CLIENT, entry.getName());
112         }
113     }
114
115     /**
116      * Returns the client which matches the given useragent string.
117      *
118      * @param useragent the useragent to match
119      * @return the found client or null if the user-agent does not match any
120      * defined client
121      */

122     public ClientEntry findEntry(String JavaDoc useragent)
123     {
124         ClientEntry clientEntry = null;
125         Enumeration JavaDoc clients = getEntries();
126
127         if ( logger.isDebugEnabled() )
128         {
129             logger.debug( "ClientRegistry: Looking for client with useragent :" + useragent );
130         }
131
132         if (clients != null)
133         {
134             while (clients.hasMoreElements())
135             {
136                 ClientEntry client = (ClientEntry)clients.nextElement();
137                 if (client.getUseragentpattern() != null)
138                 {
139                     try
140                     {
141                         RE r = new RE(client.getUseragentpattern());
142                         r.setMatchFlags(RE.MATCH_CASEINDEPENDENT);
143
144                         if (r.match(useragent))
145                         {
146
147                             if ( logger.isDebugEnabled() )
148                             {
149                                 logger.debug( "ClientRegistry: " + useragent + " matches " + client.getUseragentpattern() );
150                             }
151
152                             return client;
153                         }
154                         else
155                         {
156                             if ( logger.isDebugEnabled() )
157                             {
158                                 logger.debug( "ClientRegistry: " + useragent + " does not match " + client.getUseragentpattern() );
159                             }
160                         }
161                     }
162                     catch (org.apache.regexp.RESyntaxException e)
163                     {
164                         String JavaDoc message = "ClientRegistryService: UserAgentPattern not valid : " + client.getUseragentpattern() + " : " + e.getMessage();
165                         logger.error( message, e );
166                     }
167                 }
168             }
169         }
170
171         return clientEntry;
172     }
173
174     /**
175      * Creates a new RegistryEntry instance compatible with the current
176      * Registry instance implementation
177      *
178      * @return the newly created RegistryEntry
179      */

180     public RegistryEntry createEntry()
181     {
182         return new BaseClientEntry();
183     }
184 }
185
Popular Tags