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