annotate src/de/mpiwg/itgroup/nimanager/cone/ConeEmailMatcher.java @ 8:5dba58db2f55

cone
author dwinter
date Mon, 02 Jan 2012 18:13:35 +0100
parents
children 0fe0d5b39243
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 * @param creator
dwinter
parents:
diff changeset
52 * @return
dwinter
parents:
diff changeset
53 */
dwinter
parents:
diff changeset
54 public void getUserNamesFromLdap() {
dwinter
parents:
diff changeset
55
dwinter
parents:
diff changeset
56 Hashtable<String,String> env = new Hashtable<String,String>();
dwinter
parents:
diff changeset
57 String sp = "com.sun.jndi.ldap.LdapCtxFactory";
dwinter
parents:
diff changeset
58 env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, sp);
dwinter
parents:
diff changeset
59
dwinter
parents:
diff changeset
60 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
61 env.put(javax.naming.Context.PROVIDER_URL, ldapUrl);
dwinter
parents:
diff changeset
62
dwinter
parents:
diff changeset
63 DirContext dctx;
dwinter
parents:
diff changeset
64 try {
dwinter
parents:
diff changeset
65 dctx = new InitialDirContext(env);
dwinter
parents:
diff changeset
66 } catch (NamingException e1) {
dwinter
parents:
diff changeset
67 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
68 e1.printStackTrace();
dwinter
parents:
diff changeset
69 return;
dwinter
parents:
diff changeset
70 }
dwinter
parents:
diff changeset
71
dwinter
parents:
diff changeset
72 String base = "ou=People";
dwinter
parents:
diff changeset
73
dwinter
parents:
diff changeset
74 SearchControls sc = new SearchControls();
dwinter
parents:
diff changeset
75 String[] attributeFilter = { "cn", "mail" };
dwinter
parents:
diff changeset
76 sc.setReturningAttributes(attributeFilter);
dwinter
parents:
diff changeset
77 sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
dwinter
parents:
diff changeset
78
dwinter
parents:
diff changeset
79 //String filter = "(uid="+creator+")";
dwinter
parents:
diff changeset
80 String filter=null;
dwinter
parents:
diff changeset
81
dwinter
parents:
diff changeset
82 try {
dwinter
parents:
diff changeset
83 Attributes attrs2 = new BasicAttributes();
dwinter
parents:
diff changeset
84 attrs2.put("mail", null);
dwinter
parents:
diff changeset
85 NamingEnumeration<SearchResult> results = dctx.search(base, attrs2);
dwinter
parents:
diff changeset
86
dwinter
parents:
diff changeset
87 while (results.hasMore()) {
dwinter
parents:
diff changeset
88 SearchResult sr = (SearchResult) results.next();
dwinter
parents:
diff changeset
89 javax.naming.directory.Attributes attrs = sr.getAttributes();
dwinter
parents:
diff changeset
90
dwinter
parents:
diff changeset
91 Attribute sn = attrs.get("sn");
dwinter
parents:
diff changeset
92 Attribute givenName = attrs.get("givenName");
dwinter
parents:
diff changeset
93 Attribute mail = attrs.get("mail");
dwinter
parents:
diff changeset
94
dwinter
parents:
diff changeset
95 //retString+=String.format("%s; %s; %s\n", sn,givenName,mail);
dwinter
parents:
diff changeset
96
dwinter
parents:
diff changeset
97 mail2name.put(mail.get().toString(), sn.get().toString()+", "+givenName.get().toString());
dwinter
parents:
diff changeset
98 String name = sn.get().toString()+", "+givenName.get().toString();
dwinter
parents:
diff changeset
99 name2mail.put(name,mail.get().toString());
dwinter
parents:
diff changeset
100 }
dwinter
parents:
diff changeset
101 } catch (NamingException e) {
dwinter
parents:
diff changeset
102 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
103 e.printStackTrace();
dwinter
parents:
diff changeset
104 }
dwinter
parents:
diff changeset
105
dwinter
parents:
diff changeset
106 try {
dwinter
parents:
diff changeset
107 dctx.close();
dwinter
parents:
diff changeset
108 } catch (NamingException e) {
dwinter
parents:
diff changeset
109 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
110 e.printStackTrace();
dwinter
parents:
diff changeset
111 }
dwinter
parents:
diff changeset
112 return;
dwinter
parents:
diff changeset
113 }
dwinter
parents:
diff changeset
114
dwinter
parents:
diff changeset
115 public void getUserNamesFromCone(){
dwinter
parents:
diff changeset
116 HttpGet httpget = new HttpGet(CONEURL);
dwinter
parents:
diff changeset
117 DefaultHttpClient httpclient = new DefaultHttpClient();
dwinter
parents:
diff changeset
118
dwinter
parents:
diff changeset
119 BasicHttpEntity entity= new BasicHttpEntity();
dwinter
parents:
diff changeset
120
dwinter
parents:
diff changeset
121 httpget.setHeader(new BasicHeader("Content-Type","application/json"));
dwinter
parents:
diff changeset
122
dwinter
parents:
diff changeset
123 HttpResponse response;
dwinter
parents:
diff changeset
124 try {
dwinter
parents:
diff changeset
125 response = httpclient.execute(httpget);
dwinter
parents:
diff changeset
126 } catch (ClientProtocolException e) {
dwinter
parents:
diff changeset
127 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
128 e.printStackTrace();
dwinter
parents:
diff changeset
129 return;
dwinter
parents:
diff changeset
130 } catch (IOException e) {
dwinter
parents:
diff changeset
131 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
132 e.printStackTrace();
dwinter
parents:
diff changeset
133 return;
dwinter
parents:
diff changeset
134 }
dwinter
parents:
diff changeset
135 HttpEntity resEntity = response.getEntity();
dwinter
parents:
diff changeset
136
dwinter
parents:
diff changeset
137 try {
dwinter
parents:
diff changeset
138
dwinter
parents:
diff changeset
139
dwinter
parents:
diff changeset
140 JSONArray ja = new JSONArray(convertStreamToString(resEntity.getContent()));
dwinter
parents:
diff changeset
141
dwinter
parents:
diff changeset
142 for (int i=0; i<ja.length();i++){
dwinter
parents:
diff changeset
143 JSONObject jo = ja.getJSONObject(i);
dwinter
parents:
diff changeset
144 cone2name.put((String)jo.get("id"), (String)jo.get("value"));
dwinter
parents:
diff changeset
145 name2Cone.put(asciiName((String)jo.get("value")), (String)jo.get("id"));
dwinter
parents:
diff changeset
146 }
dwinter
parents:
diff changeset
147 } catch (IllegalStateException e) {
dwinter
parents:
diff changeset
148 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
149 e.printStackTrace();
dwinter
parents:
diff changeset
150 } catch (JSONException e) {
dwinter
parents:
diff changeset
151 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
152 e.printStackTrace();
dwinter
parents:
diff changeset
153 } catch (IOException e) {
dwinter
parents:
diff changeset
154 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
155 e.printStackTrace();
dwinter
parents:
diff changeset
156 }
dwinter
parents:
diff changeset
157
dwinter
parents:
diff changeset
158 }
dwinter
parents:
diff changeset
159
dwinter
parents:
diff changeset
160 void createMail2Cone() {
dwinter
parents:
diff changeset
161 for(String key: mail2name.keySet()){
dwinter
parents:
diff changeset
162 String coneID = name2Cone.get(mail2name.get(key));
dwinter
parents:
diff changeset
163 if (coneID==null){
dwinter
parents:
diff changeset
164 String name=mail2name.get(key);
dwinter
parents:
diff changeset
165 String newName=name2Cone.get(name);
dwinter
parents:
diff changeset
166 coneID = name2Cone.get(newName);
dwinter
parents:
diff changeset
167 }
dwinter
parents:
diff changeset
168 mail2cone.put(key,coneID);
dwinter
parents:
diff changeset
169 }
dwinter
parents:
diff changeset
170 }
dwinter
parents:
diff changeset
171
dwinter
parents:
diff changeset
172 private String asciiName(String string) {
dwinter
parents:
diff changeset
173 HashMap<Character,String> uml = new HashMap<Character, String>();
dwinter
parents:
diff changeset
174 uml.put('ä', "ae");
dwinter
parents:
diff changeset
175 uml.put('ö', "oe");
dwinter
parents:
diff changeset
176 uml.put('ü', "ue");
dwinter
parents:
diff changeset
177 uml.put('ß', "ss");
dwinter
parents:
diff changeset
178 uml.put('Ä', "Ae");
dwinter
parents:
diff changeset
179 uml.put('Ö', "Oe");
dwinter
parents:
diff changeset
180 uml.put('Ü', "Ue");
dwinter
parents:
diff changeset
181 String newString="";
dwinter
parents:
diff changeset
182 for(Character x: string.toCharArray()){
dwinter
parents:
diff changeset
183 String repl;
dwinter
parents:
diff changeset
184 if(uml.containsKey(x)){
dwinter
parents:
diff changeset
185 repl=uml.get(x);
dwinter
parents:
diff changeset
186 } else {
dwinter
parents:
diff changeset
187 repl=String.valueOf(x);
dwinter
parents:
diff changeset
188 }
dwinter
parents:
diff changeset
189 newString=newString+repl;
dwinter
parents:
diff changeset
190 }
dwinter
parents:
diff changeset
191 string=newString;
dwinter
parents:
diff changeset
192
dwinter
parents:
diff changeset
193
dwinter
parents:
diff changeset
194 string = Normalizer.normalize(string, Normalizer.Form.NFD);
dwinter
parents:
diff changeset
195 string=string.replaceAll("[^\\p{ASCII}]", "");
dwinter
parents:
diff changeset
196
dwinter
parents:
diff changeset
197 return string;
dwinter
parents:
diff changeset
198 }
dwinter
parents:
diff changeset
199
dwinter
parents:
diff changeset
200
dwinter
parents:
diff changeset
201
dwinter
parents:
diff changeset
202 public static String convertStreamToString(InputStream is) {
dwinter
parents:
diff changeset
203
dwinter
parents:
diff changeset
204 BufferedReader reader;
dwinter
parents:
diff changeset
205 try {
dwinter
parents:
diff changeset
206 reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
dwinter
parents:
diff changeset
207 } catch (UnsupportedEncodingException e1) {
dwinter
parents:
diff changeset
208 // TODO Auto-generated catch block
dwinter
parents:
diff changeset
209 e1.printStackTrace();
dwinter
parents:
diff changeset
210 return null;
dwinter
parents:
diff changeset
211 }
dwinter
parents:
diff changeset
212 StringBuilder sb = new StringBuilder();
dwinter
parents:
diff changeset
213
dwinter
parents:
diff changeset
214 String line = null;
dwinter
parents:
diff changeset
215 try {
dwinter
parents:
diff changeset
216 while ((line = reader.readLine()) != null) {
dwinter
parents:
diff changeset
217 sb.append(line + "\n");
dwinter
parents:
diff changeset
218 }
dwinter
parents:
diff changeset
219 } catch (IOException e) {
dwinter
parents:
diff changeset
220 e.printStackTrace();
dwinter
parents:
diff changeset
221 } finally {
dwinter
parents:
diff changeset
222 try {
dwinter
parents:
diff changeset
223 is.close();
dwinter
parents:
diff changeset
224 } catch (IOException e) {
dwinter
parents:
diff changeset
225 e.printStackTrace();
dwinter
parents:
diff changeset
226 }
dwinter
parents:
diff changeset
227 }
dwinter
parents:
diff changeset
228
dwinter
parents:
diff changeset
229 return sb.toString();
dwinter
parents:
diff changeset
230 }
dwinter
parents:
diff changeset
231
dwinter
parents:
diff changeset
232 public static void main(String args[]){
dwinter
parents:
diff changeset
233 ConeEmailMatcher cm = new ConeEmailMatcher();
dwinter
parents:
diff changeset
234 cm.getUserNamesFromLdap();
dwinter
parents:
diff changeset
235 //System.out.println(cm.mail2name);
dwinter
parents:
diff changeset
236 cm.getUserNamesFromCone();
dwinter
parents:
diff changeset
237 //System.out.println(cm.name2Cone);
dwinter
parents:
diff changeset
238 cm.createMail2Cone();
dwinter
parents:
diff changeset
239
dwinter
parents:
diff changeset
240 for(String key: cm.mail2cone.keySet()){
dwinter
parents:
diff changeset
241 System.out.println(key+","+cm.mail2cone.get(key)+"\n");
dwinter
parents:
diff changeset
242 }
dwinter
parents:
diff changeset
243
dwinter
parents:
diff changeset
244 System.out.println(cm.mail2cone.get("renn@mpiwg-berlin.mpg.de"));
dwinter
parents:
diff changeset
245 }
dwinter
parents:
diff changeset
246
dwinter
parents:
diff changeset
247
dwinter
parents:
diff changeset
248 }