1 7 package org.exoplatform.container.client.http; 8 9 import java.util.ArrayList ; 10 import java.util.List ; 11 import java.util.regex.PatternSyntaxException ; 12 import org.dom4j.Document; 13 import org.dom4j.Node; 14 import org.dom4j.io.SAXReader; 15 16 public class ClientTypeMap { 17 private ArrayList clientList_; 18 private static ClientTypeMap singleton_; 19 20 private void loadClientsInfos() { 21 try { 22 ClassLoader cl = Thread.currentThread().getContextClassLoader() ; 23 java.net.URL url = cl.getResource("conf/portal/clients-type.xml") ; 24 SAXReader reader = new SAXReader(); 25 Document document = reader.read(url.openStream()); 26 List 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 name = node.selectSingleNode("name").getText() ; 31 String userAgentPattern = node.selectSingleNode("userAgentPattern").getText() ; 32 String preferredMimeType = node.selectSingleNode("preferredMimeType").getText() ; 33 String 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 ex) { 40 ex.printStackTrace() ; 41 } 42 } 43 44 public ClientTypeMap() { 45 clientList_ = new ArrayList () ; 46 loadClientsInfos(); 47 } 48 49 protected void addClientInfo(HttpClientType clientInfo) { 50 clientList_.add(clientInfo); 51 } 52 53 58 public HttpClientType findClient(String 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 userAgentPattern = client.getUserAgentPattern(); 65 if (userAgentPattern != null) { 66 try { 67 if (userAgent.matches(userAgentPattern)) return client; 68 } catch (PatternSyntaxException 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 |