Search in sources :

Example 6 with EphemeralLocation

use of com.zimbra.cs.ephemeral.EphemeralLocation in project zm-mailbox by Zimbra.

the class LdapProvisioning method modifyEphemeralAttrs.

private void modifyEphemeralAttrs(Entry entry, Map<String, Object> attrs, Map<String, AttributeInfo> ephemeralAttrMap) throws ServiceException {
    EphemeralLocation location = new LdapEntryLocation(entry);
    EphemeralStore store = EphemeralStore.getFactory().getStore();
    for (Map.Entry<String, Object> e : attrs.entrySet()) {
        String key = e.getKey();
        Object value = e.getValue();
        boolean doAdd = key.charAt(0) == '+';
        boolean doRemove = key.charAt(0) == '-';
        if (doAdd || doRemove) {
            key = key.substring(1);
            if (attrs.containsKey(key))
                throw ServiceException.INVALID_REQUEST("can't mix +attrName/-attrName with attrName", null);
        }
        AttributeInfo ai = ephemeralAttrMap.get(key.toLowerCase());
        AttributeConverter converter = null;
        if (ai == null) {
            continue;
        }
        if (ai.isDynamic()) {
            converter = AttributeMigration.getConverter(key);
            if (converter == null) {
                ZimbraLog.ephemeral.warn("Dynamic ephemeral attribute %s has no registered AttributeConverter, so cannot be modified with modifyAttrs", key);
                continue;
            }
        }
        if (value instanceof Collection) {
            Collection values = (Collection) value;
            if (values.size() == 0) {
                ZimbraLog.ephemeral.warn("Ephemeral attribute %s doesn't support deletion by key; only deletion by key+value is supported", key);
                continue;
            } else {
                for (Object v : values) {
                    if (v == null) {
                        continue;
                    }
                    String s = v.toString();
                    handleEphemeralAttrChange(store, key, s, location, ai, converter, doAdd, doRemove);
                }
            }
        } else if (value instanceof Map) {
            throw ServiceException.FAILURE("Map is not a supported value type", null);
        } else if (value != null) {
            String s = value.toString();
            handleEphemeralAttrChange(store, key, s, location, ai, converter, doAdd, doRemove);
        } else {
            ZimbraLog.ephemeral.warn("Ephemeral attribute %s doesn't support deletion by key; only deletion by key+value is supported", key);
        }
    }
}
Also used : LdapEntryLocation(com.zimbra.cs.ephemeral.LdapEntryLocation) AttributeInfo(com.zimbra.cs.account.AttributeInfo) AttributeConverter(com.zimbra.cs.ephemeral.migrate.AttributeConverter) EphemeralLocation(com.zimbra.cs.ephemeral.EphemeralLocation) Collection(java.util.Collection) Map(java.util.Map) TreeMap(java.util.TreeMap) HashMap(java.util.HashMap) EphemeralStore(com.zimbra.cs.ephemeral.EphemeralStore) LdapEphemeralStore(com.zimbra.cs.ephemeral.LdapEphemeralStore)

Example 7 with EphemeralLocation

use of com.zimbra.cs.ephemeral.EphemeralLocation in project zm-mailbox by Zimbra.

the class Entry method hasEphemeralAttr.

public boolean hasEphemeralAttr(String key, String dynamicComponent) throws ServiceException {
    EphemeralLocation location = new LdapEntryLocation(this);
    EphemeralStore store = EphemeralStore.getFactory().getStore();
    return store.has(new EphemeralKey(key, dynamicComponent), location);
}
Also used : LdapEntryLocation(com.zimbra.cs.ephemeral.LdapEntryLocation) EphemeralLocation(com.zimbra.cs.ephemeral.EphemeralLocation) LdapEphemeralStore(com.zimbra.cs.ephemeral.LdapEphemeralStore) EphemeralStore(com.zimbra.cs.ephemeral.EphemeralStore) EphemeralKey(com.zimbra.cs.ephemeral.EphemeralKey)

Example 8 with EphemeralLocation

use of com.zimbra.cs.ephemeral.EphemeralLocation in project zm-mailbox by Zimbra.

the class Entry method getEphemeralAttr.

public EphemeralResult getEphemeralAttr(String key, String dynamicComponent) throws ServiceException {
    EphemeralLocation location = new LdapEntryLocation(this);
    EphemeralStore store = EphemeralStore.getFactory().getStore();
    EphemeralKey ephemeralKey = new EphemeralKey(key, dynamicComponent);
    EphemeralResult result = store.get(ephemeralKey, location);
    return result == null ? EphemeralResult.emptyResult(ephemeralKey) : result;
}
Also used : LdapEntryLocation(com.zimbra.cs.ephemeral.LdapEntryLocation) EphemeralLocation(com.zimbra.cs.ephemeral.EphemeralLocation) LdapEphemeralStore(com.zimbra.cs.ephemeral.LdapEphemeralStore) EphemeralStore(com.zimbra.cs.ephemeral.EphemeralStore) EphemeralKey(com.zimbra.cs.ephemeral.EphemeralKey) EphemeralResult(com.zimbra.cs.ephemeral.EphemeralResult)

Example 9 with EphemeralLocation

use of com.zimbra.cs.ephemeral.EphemeralLocation in project zm-mailbox by Zimbra.

the class Entry method deleteEphemeralAttr.

public void deleteEphemeralAttr(String key, String dynamicComponent, String value) throws ServiceException {
    EphemeralLocation location = new LdapEntryLocation(this);
    EphemeralStore store = EphemeralStore.getFactory().getStore();
    store.delete(new EphemeralKey(key, dynamicComponent), value, location);
}
Also used : LdapEntryLocation(com.zimbra.cs.ephemeral.LdapEntryLocation) EphemeralLocation(com.zimbra.cs.ephemeral.EphemeralLocation) LdapEphemeralStore(com.zimbra.cs.ephemeral.LdapEphemeralStore) EphemeralStore(com.zimbra.cs.ephemeral.EphemeralStore) EphemeralKey(com.zimbra.cs.ephemeral.EphemeralKey)

Aggregations

EphemeralLocation (com.zimbra.cs.ephemeral.EphemeralLocation)9 EphemeralStore (com.zimbra.cs.ephemeral.EphemeralStore)9 LdapEntryLocation (com.zimbra.cs.ephemeral.LdapEntryLocation)9 LdapEphemeralStore (com.zimbra.cs.ephemeral.LdapEphemeralStore)9 EphemeralKey (com.zimbra.cs.ephemeral.EphemeralKey)5 EphemeralResult (com.zimbra.cs.ephemeral.EphemeralResult)2 AttributeInfo (com.zimbra.cs.account.AttributeInfo)1 FallbackEphemeralStore (com.zimbra.cs.ephemeral.FallbackEphemeralStore)1 InMemoryEphemeralStore (com.zimbra.cs.ephemeral.InMemoryEphemeralStore)1 AttributeConverter (com.zimbra.cs.ephemeral.migrate.AttributeConverter)1 EntrySource (com.zimbra.cs.ephemeral.migrate.AttributeMigration.EntrySource)1 MigrationCallback (com.zimbra.cs.ephemeral.migrate.AttributeMigration.MigrationCallback)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1 Test (org.junit.Test)1