All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.schlichtherle.truezip.key.SafeKeyManager Maven / Gradle / Ivy

Go to download

The file system driver family for ZIP and related archive file types. Add the JAR artifact of this module to the run time class path to make its file system drivers available for service location in the client API modules.

There is a newer version: 7.7.10
Show newest version
/*
 * Copyright (C) 2005-2013 Schlichtherle IT Services.
 * All rights reserved. Use is subject to license terms.
 */
package de.schlichtherle.truezip.key;

import javax.annotation.Nullable;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.concurrent.ThreadSafe;

/**
 * Uses a map to hold the safe key providers managed by this instance.
 *
 * @author  Christian Schlichtherle
 */
@ThreadSafe
public abstract class SafeKeyManager, P extends SafeKeyProvider>
implements KeyManager {

    private final Map providers = new HashMap();

    /**
     * Constructs a new safe key manager.
     *
     * @since TrueZIP 7.2
     */
    protected SafeKeyManager() {
    }

    /**
     * Returns a new key provider.
     * 
     * @return A new key provider.
     * @since  TrueZIP 7.2
     */
    protected abstract P newKeyProvider();

    @Override
    public synchronized P getKeyProvider(final URI resource) {
        if (null == resource)
            throw new NullPointerException();
        P provider = providers.get(resource);
        if (null == provider) {
            provider = newKeyProvider();
            providers.put(resource, provider);
        }
        return provider;
    }

    /**
     * Returns the key provider which is mapped for the given {@code resource}
     * or {@code null} if no key provider is mapped.
     * 

* TODO: Make this part of the interface {@link KeyManager} in the next * major version. * * @param resource the nullable URI of the protected resource. * @return The key provider mapped for the protected resource. */ public synchronized @Nullable P getMappedKeyProvider(URI resource) { if (null == resource) throw new NullPointerException(); return providers.get(resource); } @Override public synchronized P moveKeyProvider(final URI oldResource, final URI newResource) { if (null == newResource) throw new NullPointerException(); if (oldResource.equals(newResource)) throw new IllegalArgumentException(); final P provider = providers.remove(oldResource); if (null != provider) return providers.put(newResource, provider); else return providers.remove(newResource); } /** * {@inheritDoc} *

* The returned key provider is invalidated and will behave as if prompting * for the secret key had been disabled or cancelled by the user. */ @Override public synchronized P removeKeyProvider(final URI resource) { if (null == resource) throw new NullPointerException(); final P provider = providers.remove(resource); if (null != provider) provider.setKey(null); return provider; } @Override public int getPriority() { return 0; } /** * Returns a string representation of this object for debugging and logging * purposes. */ @Override public String toString() { return String.format("%s[priority=%d]", getClass().getName(), getPriority()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy