/** * Insert the given {@code Provider} at the specified {@code position}. The positions define the * preference order in which providers are searched for requested algorithms. * * @param provider the provider to insert. * @param position the position (starting from 1). * @return the actual position or {@code -1} if the given {@code provider} was already in the * list. The actual position may be different from the desired position. */ public static synchronized int insertProviderAt(Provider provider, int position) { // check that provider is not already // installed, else return -1; if (position <1) or (position > max // position) position = max position + 1; insert provider, shift up // one position for next providers; Note: The position is 1-based if (getProvider(provider.getName()) != null) { return -1; } int result = Services.insertProviderAt(provider, position); renumProviders(); return result; }
/** * Removes the {@code Provider} with the specified name form the collection of providers. If the * the {@code Provider} with the specified name is removed, all provider at a greater position are * shifted down one position. * * <p>Returns silently if {@code name} is {@code null} or no provider with the specified name is * installed. * * @param name the name of the provider to remove. */ public static synchronized void removeProvider(String name) { // It is not clear from spec.: // 1. if name is null, should we checkSecurityAccess or not? // throw SecurityException or not? // 2. as 1 but provider is not installed // 3. behavior if name is empty string? Provider p; if ((name == null) || (name.length() == 0)) { return; } p = getProvider(name); if (p == null) { return; } Services.removeProvider(p.getProviderNumber()); renumProviders(); p.setProviderNumber(-1); }
// Access to Security.renumProviders() public void renumProviders() { Security.renumProviders(); }