Search in sources :

Example 11 with EphemeralStore

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

the class AttributeMigration method endMigration.

@VisibleForTesting
public void endMigration() throws ServiceException {
    EphemeralStore store = callback.getStore();
    if (store != null) {
        getMigrationFlag(store).unset();
        migrationHelper.flushCache();
    }
    ZimbraLog.ephemeral.info("migration of attributes %s to ephemeral storage completed", Joiner.on(", ").join(attrsToMigrate));
}
Also used : LdapEphemeralStore(com.zimbra.cs.ephemeral.LdapEphemeralStore) FallbackEphemeralStore(com.zimbra.cs.ephemeral.FallbackEphemeralStore) EphemeralStore(com.zimbra.cs.ephemeral.EphemeralStore) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 12 with EphemeralStore

use of com.zimbra.cs.ephemeral.EphemeralStore 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)

Example 13 with EphemeralStore

use of com.zimbra.cs.ephemeral.EphemeralStore 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 14 with EphemeralStore

use of com.zimbra.cs.ephemeral.EphemeralStore 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 15 with EphemeralStore

use of com.zimbra.cs.ephemeral.EphemeralStore 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)

Aggregations

EphemeralStore (com.zimbra.cs.ephemeral.EphemeralStore)15 LdapEphemeralStore (com.zimbra.cs.ephemeral.LdapEphemeralStore)11 EphemeralLocation (com.zimbra.cs.ephemeral.EphemeralLocation)9 LdapEntryLocation (com.zimbra.cs.ephemeral.LdapEntryLocation)9 EphemeralKey (com.zimbra.cs.ephemeral.EphemeralKey)5 EphemeralResult (com.zimbra.cs.ephemeral.EphemeralResult)3 EntrySource (com.zimbra.cs.ephemeral.migrate.AttributeMigration.EntrySource)3 MigrationCallback (com.zimbra.cs.ephemeral.migrate.AttributeMigration.MigrationCallback)3 Test (org.junit.Test)3 ServiceException (com.zimbra.common.service.ServiceException)2 Factory (com.zimbra.cs.ephemeral.EphemeralStore.Factory)2 FallbackEphemeralStore (com.zimbra.cs.ephemeral.FallbackEphemeralStore)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 ToZJSONObject (com.zimbra.client.ToZJSONObject)1 ZJSONObject (com.zimbra.client.ZJSONObject)1 Level (com.zimbra.common.util.Log.Level)1 AttributeInfo (com.zimbra.cs.account.AttributeInfo)1 Server (com.zimbra.cs.account.Server)1