diff --git a/hsarback/src/de/hsadmin/remote/EMailRemote.java b/hsarback/src/de/hsadmin/remote/EMailRemote.java new file mode 100644 index 0000000..667b7ce --- /dev/null +++ b/hsarback/src/de/hsadmin/remote/EMailRemote.java @@ -0,0 +1,121 @@ +package de.hsadmin.remote; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; + +import de.hsadmin.core.model.AbstractEntity; +import de.hsadmin.core.model.Transaction; +import de.hsadmin.mods.dom.Domain; +import de.hsadmin.mods.email.EMailAddress; + +public class EMailRemote extends AbstractRemote { + + @Override + protected void entity2map(Transaction tx, AbstractEntity entity, Map map) { + EMailAddress adr = (EMailAddress) entity; + long id = adr.getId(); + String domain = adr.getDomain().getName(); + String admin = adr.getDomain().getUser().getName(); + String pac = adr.getDomain().getUser().getPac().getName(); + String target = adr.getTarget(); + String localpart = adr.getLocalpart(); + String subdomain = adr.getSubdomain(); + map.put("id", Long.toString(id)); + if (assertNotNull(domain)) map.put("domain", domain); + if (assertNotNull(admin)) map.put("admin", admin); + if (assertNotNull(pac)) map.put("pac", pac); + if (assertNotNull(target)) { + StringTokenizer tokenizer = new StringTokenizer(target, ","); + List tokenList = new ArrayList(); + while (tokenizer.hasMoreTokens()) { + tokenList.add(tokenizer.nextToken().trim()); + } + map.put("target", tokenList); + } + final StringBuffer name = new StringBuffer(); + if (assertNotNull(localpart)) name.append(localpart); + name.append("@"); + if (assertNotNull(subdomain)) name.append(subdomain + ":"); + if (assertNotNull(domain)) name.append(domain); + map.put("name", name.toString()); + } + + @Override + protected void map2entity(Transaction tx, Map map, AbstractEntity entity) { + EMailAddress adr = (EMailAddress) entity; + String name = (String) map.get("name"); + String[] addressParts = name.split("@"); + String localpart = addressParts[0]; + String fulldomain = addressParts[1]; + String domain = null; + String subdomain = null; + if (fulldomain.contains(":")) { + String[] fulldomainParts = fulldomain.split("\\:"); + domain = fulldomainParts[1]; + subdomain = fulldomainParts[0]; + } else { + domain = fulldomain; + } + if (assertNotNull(localpart)) { + adr.setLocalpart(localpart); + } + if (assertNotNull(subdomain)) { + adr.setSubdomain(subdomain); + } + Object l = map.get("target"); + if (l != null && l instanceof Object[]) { + final StringBuffer tBuff = new StringBuffer(); + final Object[] targetObjArray = (Object[]) l; + for (int idx=0; idx 0) { + tBuff.append(','); + } + tBuff.append((String) targetObjArray[idx]); + } + } + adr.setTarget(tBuff.toString()); + } else if ((l != null && l instanceof Map)) { + final StringBuffer tBuff = new StringBuffer(); + final Map targetObjMap = (Map) l; + for (Object targetObj : targetObjMap.values()) { + if (targetObj instanceof String) { + if (tBuff.length() > 0) { + tBuff.append(','); + } + tBuff.append((String) targetObj); + } + } + adr.setTarget(tBuff.toString()); + } else { + if (l != null && l instanceof String) { + adr.setTarget((String) l); + } + } + if (assertNotNull(domain)) { + Domain dom = new Domain(); + dom.setName(domain); + adr.setDomain(dom); + } + } + + @Override + protected Class getEntityClass() { + return EMailAddress.class; + } + + @Override + protected void regularizeKeys(Map whereParams) { + replaceKey(whereParams, "domain", "domain.name"); + replaceKey(whereParams, "pac", "domain.user.pac.name"); + replaceKey(whereParams, "admin", "domain.user.name"); + } + + @Override + protected String getOrderBy() { + return "ORDER BY obj.domain.name ASC, obj.subdomain ASC, obj.localpart ASC"; + } + +} diff --git a/hsarback/src/org/apache/xmlrpc/webserver/XmlRpcServlet.properties b/hsarback/src/org/apache/xmlrpc/webserver/XmlRpcServlet.properties index d233600..93fa53f 100644 --- a/hsarback/src/org/apache/xmlrpc/webserver/XmlRpcServlet.properties +++ b/hsarback/src/org/apache/xmlrpc/webserver/XmlRpcServlet.properties @@ -3,6 +3,7 @@ user=de.hsadmin.remote.UnixUserRemote domain=de.hsadmin.remote.DomainRemote emailalias=de.hsadmin.remote.EMailAliasRemote emailaddress=de.hsadmin.remote.EMailAddressRemote +email=de.hsadmin.remote.EMailRemote q=de.hsadmin.remote.QueueTaskRemote role=de.hsadmin.remote.RoleRemote mysqluser=de.hsadmin.remote.MysqlUserRemote