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