KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > exoplatform > container > client > http > ClientTypeMap


1 /**
2  * Jul 8, 2004, 3:47:17 PM
3  * @author: F. MORON
4  * @email: francois.moron@laposte.net
5  *
6  * */

7 package org.exoplatform.container.client.http;
8
9 import java.util.ArrayList JavaDoc;
10 import java.util.List JavaDoc;
11 import java.util.regex.PatternSyntaxException JavaDoc;
12 import org.dom4j.Document;
13 import org.dom4j.Node;
14 import org.dom4j.io.SAXReader;
15
16 public class ClientTypeMap {
17   private ArrayList JavaDoc clientList_;
18   private static ClientTypeMap singleton_;
19   
20   private void loadClientsInfos() {
21     try {
22       ClassLoader JavaDoc cl = Thread.currentThread().getContextClassLoader() ;
23       java.net.URL JavaDoc url = cl.getResource("conf/portal/clients-type.xml") ;
24       SAXReader reader = new SAXReader();
25       Document document = reader.read(url.openStream());
26       List JavaDoc list = document.selectNodes("//clients-type/client-type");
27       HttpClientType clientInfo;
28       for(int i = 0; i < list.size(); i++) {
29         Node node = (Node) list.get(i) ;
30         String JavaDoc name = node.selectSingleNode("name").getText() ;
31         String JavaDoc userAgentPattern = node.selectSingleNode("userAgentPattern").getText() ;
32         String JavaDoc preferredMimeType = node.selectSingleNode("preferredMimeType").getText() ;
33         String JavaDoc renderer = node.selectSingleNode("type").getText() ;
34         if (renderer.length() > 0)
35           clientInfo = new HttpClientType(name, userAgentPattern, preferredMimeType, renderer);
36         else clientInfo = new HttpClientType(name, userAgentPattern, preferredMimeType);
37         addClientInfo(clientInfo);
38       }
39     } catch (Exception JavaDoc ex) {
40       ex.printStackTrace() ;
41     }
42   }
43   
44   public ClientTypeMap() {
45     clientList_ = new ArrayList JavaDoc() ;
46     loadClientsInfos();
47   }
48   
49   protected void addClientInfo(HttpClientType clientInfo) {
50     clientList_.add(clientInfo);
51   }
52   
53   /*
54    * @return ClientInfo according to userAgent parameter and first
55    * ClientInfo (ie5) if not found or if userAgent is null
56    *
57    */

58   public HttpClientType findClient(String JavaDoc userAgent) {
59     if (userAgent == null) return (HttpClientType) clientList_.get(0);
60     if (userAgent.equals("")) return (HttpClientType) clientList_.get(0);
61     HttpClientType client;
62     for (int i = 0; i < clientList_.size(); i++) {
63       client = (HttpClientType) clientList_.get(i);
64       String JavaDoc userAgentPattern = client.getUserAgentPattern();
65       if (userAgentPattern != null) {
66         try {
67           if (userAgent.matches(userAgentPattern)) return client;
68         } catch (PatternSyntaxException JavaDoc e) {
69           e.printStackTrace() ;
70           return (HttpClientType) clientList_.get(0);
71         }
72       }
73     }
74     
75     return (HttpClientType) clientList_.get(0);
76   }
77   
78   public static ClientTypeMap getInstance() {
79     if (singleton_ == null) {
80       synchronized (ClientTypeMap.class) {
81         singleton_ = new ClientTypeMap();
82       }
83     }
84     return singleton_;
85   }
86 }
87
Popular Tags