annotate src/de/mpiwg/itgroup/nimanager/cone/ConeEmailMatcher.java @ 13:dacf1b7b3ad5 default tip

libs added
author dwinter
date Mon, 17 Sep 2012 10:46:36 +0200
parents 0fe0d5b39243
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
dwinter
parents:
diff changeset
1 package de.mpiwg.itgroup.nimanager.cone;
dwinter
parents:
diff changeset
2
dwinter
parents:
diff changeset
3 import java.io.BufferedReader;
dwinter
parents:
diff changeset
4 import java.io.IOException;
dwinter
parents:
diff changeset
5 import java.io.InputStream;
dwinter
parents:
diff changeset
6 import java.io.InputStreamReader;
dwinter
parents:
diff changeset
7 import java.io.UnsupportedEncodingException;
dwinter
parents:
diff changeset
8 import java.text.Normalizer;
dwinter
parents:
diff changeset
9 import java.util.HashMap;
dwinter
parents:
diff changeset
10 import java.util.Hashtable;
dwinter
parents:
diff changeset
11 import java.util.Map;
dwinter
parents:
diff changeset
12
dwinter
parents:
diff changeset
13 import javax.naming.NamingEnumeration;
dwinter
parents:
diff changeset
14 import javax.naming.NamingException;
dwinter
parents:
diff changeset
15 import javax.naming.directory.Attribute;
dwinter
parents:
diff changeset
16 import javax.naming.directory.Attributes;
dwinter
parents:
diff changeset
17 import javax.naming.directory.BasicAttributes;
dwinter
parents:
diff changeset
18 import javax.naming.directory.DirContext;
dwinter
parents:
diff changeset
19 import javax.naming.directory.InitialDirContext;
dwinter
parents:
diff changeset
20 import javax.naming.directory.SearchControls;
dwinter
parents:
diff changeset
21 import javax.naming.directory.SearchResult;
dwinter
parents:
diff changeset
22
dwinter
parents:
diff changeset
23
dwinter
parents:
diff changeset
24
dwinter
parents:
diff changeset
25 import org.apache.http.HttpEntity;
dwinter
parents:
diff changeset
26 import org.apache.http.HttpResponse;
dwinter
parents:
diff changeset
27 import org.apache.http.client.ClientProtocolException;
dwinter
parents:
diff changeset
28 import org.apache.http.client.methods.HttpGet;
dwinter
parents:
diff changeset
29 import org.apache.http.client.methods.HttpPost;
dwinter
parents:
diff changeset
30 import org.apache.http.entity.BasicHttpEntity;
dwinter
parents:
diff changeset
31 import org.apache.http.impl.client.DefaultHttpClient;
dwinter
parents:
diff changeset
32 import org.apache.http.message.BasicHeader;
dwinter
parents:
diff changeset
33 import org.json.JSONArray;
dwinter
parents:
diff changeset
34 import org.json.JSONException;
dwinter
parents:
diff changeset
35 import org.json.JSONObject;
dwinter
parents:
diff changeset
36 import org.json.JSONTokener;
dwinter
parents:
diff changeset
37 import org.restlet.resource.Get;
dwinter
parents:
diff changeset
38
dwinter
parents:
diff changeset
39 public class ConeEmailMatcher {
dwinter
parents:
diff changeset
40
dwinter
parents:
diff changeset
41 public Map<String,String> name2mail = new HashMap<String,String>();
dwinter
parents:
diff changeset
42 public Map<String,String> mail2name = new HashMap<String,String>();
dwinter
parents:
diff changeset
43 public Map<String,String> cone2name = new HashMap<String,String>();
dwinter
parents:
diff changeset
44 public Map<String,String> name2Cone = new HashMap<String,String>();
dwinter
parents:
diff changeset
45 public Map<String,String> mail2cone = new HashMap<String,String>();
dwinter
parents:
diff changeset
46
dwinter
parents:
diff changeset
47 public static String CONEURL="http://pubman.mpiwg-berlin.mpg.de/cone/persons/all?format=json";
dwinter
parents:
diff changeset
48
dwinter
parents:
diff changeset
49 /**
dwinter
parents:
diff changeset
50 * Hole den vollen Benutzernamen aus dem LDAP
dwinter
parents:
diff changeset
51 * @return
dwinter
parents:
diff changeset
52 */
dwinter
parents:
diff changeset
53 public void getUserNamesFromLdap() {
dwinter
parents:
diff changeset
54
dwinter
parents:
diff changeset
55 Hashtable<String,String> env = new Hashtable<String,String>();
dwinter
parents:
diff changeset
56 String sp = "com.sun.jndi.ldap.LdapCtxFactory";
dwinter
parents:
diff changeset
57 env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, sp);
dwinter
parents:
diff changeset
58
dwinter
parents:
diff changeset
59 String ldapUrl = "ldap://ldapreplik.mpiwg-berlin.mpg.de/dc=mpiwg-berlin,dc=mpg,dc=de";//TODO should go into config file
dwinter
parents:
diff changeset
60 env.put(javax.naming.Context.PROVIDER_URL, ldapUrl);
dwinter
parents:
diff changeset
61
dwinter
parents:
diff changeset
62 DirContext dctx;
dwinter
parents:
diff changeset
63 try {
dwinter
parents:
diff changeset
64 dctx = new InitialDirContext(env);
dwinter
parents:
diff changeset
65 } catch (NamingException e1) {
dwinter
parents:
diff changeset
66 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
67 e1.printStackTrace();
dwinter
parents:
diff changeset
68 return;
dwinter
parents:
diff changeset
69 }
dwinter
parents:
diff changeset
70
dwinter
parents:
diff changeset
71 String base = "ou=People";
dwinter
parents:
diff changeset
72
dwinter
parents:
diff changeset
73 SearchControls sc = new SearchControls();
dwinter
parents:
diff changeset
74 String[] attributeFilter = { "cn", "mail" };
dwinter
parents:
diff changeset
75 sc.setReturningAttributes(attributeFilter);
dwinter
parents:
diff changeset
76 sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
dwinter
parents:
diff changeset
77
dwinter
parents:
diff changeset
78 //String filter = "(uid="+creator+")";
dwinter
parents:
diff changeset
79 String filter=null;
dwinter
parents:
diff changeset
80
dwinter
parents:
diff changeset
81 try {
dwinter
parents:
diff changeset
82 Attributes attrs2 = new BasicAttributes();
dwinter
parents:
diff changeset
83 attrs2.put("mail", null);
dwinter
parents:
diff changeset
84 NamingEnumeration<SearchResult> results = dctx.search(base, attrs2);
dwinter
parents:
diff changeset
85
dwinter
parents:
diff changeset
86 while (results.hasMore()) {
dwinter
parents:
diff changeset
87 SearchResult sr = (SearchResult) results.next();
dwinter
parents:
diff changeset
88 javax.naming.directory.Attributes attrs = sr.getAttributes();
dwinter
parents:
diff changeset
89
dwinter
parents:
diff changeset
90 Attribute sn = attrs.get("sn");
dwinter
parents:
diff changeset
91 Attribute givenName = attrs.get("givenName");
dwinter
parents:
diff changeset
92 Attribute mail = attrs.get("mail");
dwinter
parents:
diff changeset
93
dwinter
parents:
diff changeset
94 //retString+=String.format("%s; %s; %s\n", sn,givenName,mail);
dwinter
parents:
diff changeset
95
dwinter
parents:
diff changeset
96 mail2name.put(mail.get().toString(), sn.get().toString()+", "+givenName.get().toString());
dwinter
parents:
diff changeset
97 String name = sn.get().toString()+", "+givenName.get().toString();
dwinter
parents:
diff changeset
98 name2mail.put(name,mail.get().toString());
dwinter
parents:
diff changeset
99 }
dwinter
parents:
diff changeset
100 } catch (NamingException e) {
dwinter
parents:
diff changeset
101 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
102 e.printStackTrace();
dwinter
parents:
diff changeset
103 }
dwinter
parents:
diff changeset
104
dwinter
parents:
diff changeset
105 try {
dwinter
parents:
diff changeset
106 dctx.close();
dwinter
parents:
diff changeset
107 } catch (NamingException e) {
dwinter
parents:
diff changeset
108 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
109 e.printStackTrace();
dwinter
parents:
diff changeset
110 }
dwinter
parents:
diff changeset
111 return;
dwinter
parents:
diff changeset
112 }
dwinter
parents:
diff changeset
113
dwinter
parents:
diff changeset
114 public void getUserNamesFromCone(){
dwinter
parents:
diff changeset
115 HttpGet httpget = new HttpGet(CONEURL);
dwinter
parents:
diff changeset
116 DefaultHttpClient httpclient = new DefaultHttpClient();
dwinter
parents:
diff changeset
117
dwinter
parents:
diff changeset
118 BasicHttpEntity entity= new BasicHttpEntity();
dwinter
parents:
diff changeset
119
dwinter
parents:
diff changeset
120 httpget.setHeader(new BasicHeader("Content-Type","application/json"));
dwinter
parents:
diff changeset
121
dwinter
parents:
diff changeset
122 HttpResponse response;
dwinter
parents:
diff changeset
123 try {
dwinter
parents:
diff changeset
124 response = httpclient.execute(httpget);
dwinter
parents:
diff changeset
125 } catch (ClientProtocolException e) {
dwinter
parents:
diff changeset
126 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
127 e.printStackTrace();
dwinter
parents:
diff changeset
128 return;
dwinter
parents:
diff changeset
129 } catch (IOException e) {
dwinter
parents:
diff changeset
130 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
131 e.printStackTrace();
dwinter
parents:
diff changeset
132 return;
dwinter
parents:
diff changeset
133 }
dwinter
parents:
diff changeset
134 HttpEntity resEntity = response.getEntity();
dwinter
parents:
diff changeset
135
dwinter
parents:
diff changeset
136 try {
dwinter
parents:
diff changeset
137
dwinter
parents:
diff changeset
138
dwinter
parents:
diff changeset
139 JSONArray ja = new JSONArray(convertStreamToString(resEntity.getContent()));
dwinter
parents:
diff changeset
140
dwinter
parents:
diff changeset
141 for (int i=0; i<ja.length();i++){
dwinter
parents:
diff changeset
142 JSONObject jo = ja.getJSONObject(i);
dwinter
parents:
diff changeset
143 cone2name.put((String)jo.get("id"), (String)jo.get("value"));
dwinter
parents:
diff changeset
144 name2Cone.put(asciiName((String)jo.get("value")), (String)jo.get("id"));
dwinter
parents:
diff changeset
145 }
dwinter
parents:
diff changeset
146 } catch (IllegalStateException e) {
dwinter
parents:
diff changeset
147 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
148 e.printStackTrace();
dwinter
parents:
diff changeset
149 } catch (JSONException e) {
dwinter
parents:
diff changeset
150 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
151 e.printStackTrace();
dwinter
parents:
diff changeset
152 } catch (IOException e) {
dwinter
parents:
diff changeset
153 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
154 e.printStackTrace();
dwinter
parents:
diff changeset
155 }
dwinter
parents:
diff changeset
156
dwinter
parents:
diff changeset
157 }
dwinter
parents:
diff changeset
158
dwinter
parents:
diff changeset
159 void createMail2Cone() {
dwinter
parents:
diff changeset
160 for(String key: mail2name.keySet()){
dwinter
parents:
diff changeset
161 String coneID = name2Cone.get(mail2name.get(key));
dwinter
parents:
diff changeset
162 if (coneID==null){
dwinter
parents:
diff changeset
163 String name=mail2name.get(key);
dwinter
parents:
diff changeset
164 String newName=name2Cone.get(name);
dwinter
parents:
diff changeset
165 coneID = name2Cone.get(newName);
dwinter
parents:
diff changeset
166 }
dwinter
parents:
diff changeset
167 mail2cone.put(key,coneID);
dwinter
parents:
diff changeset
168 }
dwinter
parents:
diff changeset
169 }
dwinter
parents:
diff changeset
170
dwinter
parents:
diff changeset
171 private String asciiName(String string) {
dwinter
parents:
diff changeset
172 HashMap<Character,String> uml = new HashMap<Character, String>();
dwinter
parents:
diff changeset
173 uml.put('ä', "ae");
dwinter
parents:
diff changeset
174 uml.put('ö', "oe");
dwinter
parents:
diff changeset
175 uml.put('ü', "ue");
dwinter
parents:
diff changeset
176 uml.put('ß', "ss");
dwinter
parents:
diff changeset
177 uml.put('Ä', "Ae");
dwinter
parents:
diff changeset
178 uml.put('Ö', "Oe");
dwinter
parents:
diff changeset
179 uml.put('Ü', "Ue");
dwinter
parents:
diff changeset
180 String newString="";
dwinter
parents:
diff changeset
181 for(Character x: string.toCharArray()){
dwinter
parents:
diff changeset
182 String repl;
dwinter
parents:
diff changeset
183 if(uml.containsKey(x)){
dwinter
parents:
diff changeset
184 repl=uml.get(x);
dwinter
parents:
diff changeset
185 } else {
dwinter
parents:
diff changeset
186 repl=String.valueOf(x);
dwinter
parents:
diff changeset
187 }
dwinter
parents:
diff changeset
188 newString=newString+repl;
dwinter
parents:
diff changeset
189 }
dwinter
parents:
diff changeset
190 string=newString;
dwinter
parents:
diff changeset
191
dwinter
parents:
diff changeset
192
dwinter
parents:
diff changeset
193 string = Normalizer.normalize(string, Normalizer.Form.NFD);
dwinter
parents:
diff changeset
194 string=string.replaceAll("[^\\p{ASCII}]", "");
dwinter
parents:
diff changeset
195
dwinter
parents:
diff changeset
196 return string;
dwinter
parents:
diff changeset
197 }
dwinter
parents:
diff changeset
198
dwinter
parents:
diff changeset
199
dwinter
parents:
diff changeset
200
dwinter
parents:
diff changeset
201 public static String convertStreamToString(InputStream is) {
dwinter
parents:
diff changeset
202
dwinter
parents:
diff changeset
203 BufferedReader reader;
dwinter
parents:
diff changeset
204 try {
dwinter
parents:
diff changeset
205 reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
dwinter
parents:
diff changeset
206 } catch (UnsupportedEncodingException e1) {
dwinter
parents:
diff changeset
207 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
208 e1.printStackTrace();
dwinter
parents:
diff changeset
209 return null;
dwinter
parents:
diff changeset
210 }
dwinter
parents:
diff changeset
211 StringBuilder sb = new StringBuilder();
dwinter
parents:
diff changeset
212
dwinter
parents:
diff changeset
213 String line = null;
dwinter
parents:
diff changeset
214 try {
dwinter
parents:
diff changeset
215 while ((line = reader.readLine()) != null) {
dwinter
parents:
diff changeset
216 sb.append(line + "\n");
dwinter
parents:
diff changeset
217 }
dwinter
parents:
diff changeset
218 } catch (IOException e) {
dwinter
parents:
diff changeset
219 e.printStackTrace();
dwinter
parents:
diff changeset
220 } finally {
dwinter
parents:
diff changeset
221 try {
dwinter
parents:
diff changeset
222 is.close();
dwinter
parents:
diff changeset
223 } catch (IOException e) {
dwinter
parents:
diff changeset
224 e.printStackTrace();
dwinter
parents:
diff changeset
225 }
dwinter
parents:
diff changeset
226 }
dwinter
parents:
diff changeset
227
dwinter
parents:
diff changeset
228 return sb.toString();
dwinter
parents:
diff changeset
229 }
dwinter
parents:
diff changeset
230
dwinter
parents:
diff changeset
231 public static void main(String args[]){
dwinter
parents:
diff changeset
232 ConeEmailMatcher cm = new ConeEmailMatcher();
dwinter
parents:
diff changeset
233 cm.getUserNamesFromLdap();
dwinter
parents:
diff changeset
234 //System.out.println(cm.mail2name);
dwinter
parents:
diff changeset
235 cm.getUserNamesFromCone();
dwinter
parents:
diff changeset
236 //System.out.println(cm.name2Cone);
dwinter
parents:
diff changeset
237 cm.createMail2Cone();
dwinter
parents:
diff changeset
238
dwinter
parents:
diff changeset
239 for(String key: cm.mail2cone.keySet()){
dwinter
parents:
diff changeset
240 System.out.println(key+","+cm.mail2cone.get(key)+"\n");
dwinter
parents:
diff changeset
241 }
dwinter
parents:
diff changeset
242
dwinter
parents:
diff changeset
243 System.out.println(cm.mail2cone.get("renn@mpiwg-berlin.mpg.de"));
dwinter
parents:
diff changeset
244 }
dwinter
parents:
diff changeset
245
dwinter
parents:
diff changeset
246
dwinter
parents:
diff changeset
247 }