# HG changeset patch # User dwinter # Date 1325524415 -3600 # Node ID 5dba58db2f55f7de46210de729c3e181b8bb257d # Parent e0aca5ffc4df3bf8633102f959025fcf7d25e01e cone diff -r e0aca5ffc4df -r 5dba58db2f55 .classpath --- a/.classpath Mon Jan 02 12:43:49 2012 +0100 +++ b/.classpath Mon Jan 02 18:13:35 2012 +0100 @@ -20,6 +20,10 @@ + + + + diff -r e0aca5ffc4df -r 5dba58db2f55 src/de/mpiwg/itgroup/nimanager/cone/ConeEmailMatcher.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpiwg/itgroup/nimanager/cone/ConeEmailMatcher.java Mon Jan 02 18:13:35 2012 +0100 @@ -0,0 +1,248 @@ +package de.mpiwg.itgroup.nimanager.cone; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.text.Normalizer; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import javax.naming.directory.BasicAttributes; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import javax.naming.directory.SearchControls; +import javax.naming.directory.SearchResult; + + + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.BasicHttpEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicHeader; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.json.JSONTokener; +import org.restlet.resource.Get; + +public class ConeEmailMatcher { + + public Map name2mail = new HashMap(); + public Map mail2name = new HashMap(); + public Map cone2name = new HashMap(); + public Map name2Cone = new HashMap(); + public Map mail2cone = new HashMap(); + + public static String CONEURL="http://pubman.mpiwg-berlin.mpg.de/cone/persons/all?format=json"; + + /** + * Hole den vollen Benutzernamen aus dem LDAP + * @param creator + * @return + */ + public void getUserNamesFromLdap() { + + Hashtable env = new Hashtable(); + String sp = "com.sun.jndi.ldap.LdapCtxFactory"; + env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, sp); + + String ldapUrl = "ldap://ldapreplik.mpiwg-berlin.mpg.de/dc=mpiwg-berlin,dc=mpg,dc=de";//TODO should go into config file + env.put(javax.naming.Context.PROVIDER_URL, ldapUrl); + + DirContext dctx; + try { + dctx = new InitialDirContext(env); + } catch (NamingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + return; + } + + String base = "ou=People"; + + SearchControls sc = new SearchControls(); + String[] attributeFilter = { "cn", "mail" }; + sc.setReturningAttributes(attributeFilter); + sc.setSearchScope(SearchControls.SUBTREE_SCOPE); + + //String filter = "(uid="+creator+")"; + String filter=null; + + try { + Attributes attrs2 = new BasicAttributes(); + attrs2.put("mail", null); + NamingEnumeration results = dctx.search(base, attrs2); + + while (results.hasMore()) { + SearchResult sr = (SearchResult) results.next(); + javax.naming.directory.Attributes attrs = sr.getAttributes(); + + Attribute sn = attrs.get("sn"); + Attribute givenName = attrs.get("givenName"); + Attribute mail = attrs.get("mail"); + + //retString+=String.format("%s; %s; %s\n", sn,givenName,mail); + + mail2name.put(mail.get().toString(), sn.get().toString()+", "+givenName.get().toString()); + String name = sn.get().toString()+", "+givenName.get().toString(); + name2mail.put(name,mail.get().toString()); + } + } catch (NamingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + dctx.close(); + } catch (NamingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return; + } + + public void getUserNamesFromCone(){ + HttpGet httpget = new HttpGet(CONEURL); + DefaultHttpClient httpclient = new DefaultHttpClient(); + + BasicHttpEntity entity= new BasicHttpEntity(); + + httpget.setHeader(new BasicHeader("Content-Type","application/json")); + + HttpResponse response; + try { + response = httpclient.execute(httpget); + } catch (ClientProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return; + } + HttpEntity resEntity = response.getEntity(); + + try { + + + JSONArray ja = new JSONArray(convertStreamToString(resEntity.getContent())); + + for (int i=0; i uml = new HashMap(); + uml.put('ä', "ae"); + uml.put('ö', "oe"); + uml.put('ü', "ue"); + uml.put('ß', "ss"); + uml.put('Ä', "Ae"); + uml.put('Ö', "Oe"); + uml.put('Ü', "Ue"); + String newString=""; + for(Character x: string.toCharArray()){ + String repl; + if(uml.containsKey(x)){ + repl=uml.get(x); + } else { + repl=String.valueOf(x); + } + newString=newString+repl; + } + string=newString; + + + string = Normalizer.normalize(string, Normalizer.Form.NFD); + string=string.replaceAll("[^\\p{ASCII}]", ""); + + return string; + } + + + + public static String convertStreamToString(InputStream is) { + + BufferedReader reader; + try { + reader = new BufferedReader(new InputStreamReader(is,"utf-8")); + } catch (UnsupportedEncodingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + return null; + } + StringBuilder sb = new StringBuilder(); + + String line = null; + try { + while ((line = reader.readLine()) != null) { + sb.append(line + "\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return sb.toString(); + } + + public static void main(String args[]){ + ConeEmailMatcher cm = new ConeEmailMatcher(); + cm.getUserNamesFromLdap(); + //System.out.println(cm.mail2name); + cm.getUserNamesFromCone(); + //System.out.println(cm.name2Cone); + cm.createMail2Cone(); + + for(String key: cm.mail2cone.keySet()){ + System.out.println(key+","+cm.mail2cone.get(key)+"\n"); + } + + System.out.println(cm.mail2cone.get("renn@mpiwg-berlin.mpg.de")); + } + + +} diff -r e0aca5ffc4df -r 5dba58db2f55 src/de/mpiwg/itgroup/nimanager/cone/Mail2ConeService.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpiwg/itgroup/nimanager/cone/Mail2ConeService.java Mon Jan 02 18:13:35 2012 +0100 @@ -0,0 +1,40 @@ +package de.mpiwg.itgroup.nimanager.cone; + +import org.apache.log4j.Logger; +import org.restlet.data.Status; +import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; +import org.restlet.resource.Get; +import org.restlet.resource.ServerResource; + +public class Mail2ConeService extends ServerResource{ + + private ConeEmailMatcher cm; + private Logger rl = Logger.getRootLogger(); + + public Mail2ConeService(){ + cm = new ConeEmailMatcher(); + cm.getUserNamesFromLdap(); + cm.getUserNamesFromCone(); + cm.createMail2Cone(); + + } + + @Get + public Representation getMethod(Representation entity){ + String mail = (String)getRequest().getAttributes().get("personId"); + + if (!mail.contains("@")){ + mail=mail+"@mpiwg-berlin.mpg.de"; + } + + + if (cm.mail2cone.containsKey(mail)){ + String retString=cm.mail2cone.get(mail); + return new StringRepresentation(retString); + } else { + setStatus(Status.CLIENT_ERROR_NOT_FOUND); + return null; + } + } +}