public Zimlet createZimlet(String name, Map zimletAttrs) throws ServiceException {
public Zimlet createZimlet(String name, Map<String, Object> zimletAttrs) throws ServiceException {
    public Zimlet createZimlet(String name, Map zimletAttrs) throws ServiceException {    	name = name.toLowerCase().trim();    	    	HashMap attrManagerContext = new HashMap();    	AttributeManager.getInstance().preModify(zimletAttrs, null, attrManagerContext, true, true);    	    	DirContext ctxt = null;    	try {    		ctxt = LdapUtil.getDirContext();    		    		Attributes attrs = new BasicAttributes(true);    		String hasKeyword = LdapUtil.LDAP_FALSE;    		if (zimletAttrs.containsKey(A_zimbraZimletKeyword)) {    			hasKeyword = LdapUtil.LDAP_TRUE;    		}    		LdapUtil.mapToAttrs(zimletAttrs, attrs);    		LdapUtil.addAttr(attrs, A_objectClass, "zimbraZimletEntry");    		LdapUtil.addAttr(attrs, A_zimbraZimletEnabled, LdapUtil.LDAP_FALSE);    		LdapUtil.addAttr(attrs, A_zimbraZimletIndexingEnabled, hasKeyword);    		    		String dn = zimletNameToDN(name);    		createSubcontext(ctxt, dn, attrs, "createZimlet");    		    		Zimlet zimlet = lookupZimlet(name, ctxt);    		AttributeManager.getInstance().postModify(zimletAttrs, zimlet, attrManagerContext, true);    		return zimlet;    	} catch (NameAlreadyBoundException nabe) {    		throw ServiceException.FAILURE("zimlet already exists: "+name, nabe);    	} catch (ServiceException se) {    		throw se;    	} finally {    		LdapUtil.closeContext(ctxt);    	}    }