Add the ability to retrieve names of plugin implementations.

This commit is contained in:
Danila Fedorin 2017-09-01 17:14:11 -07:00
parent cbceee4abc
commit 7a296e4e8b
1 changed files with 22 additions and 16 deletions

View File

@ -49,10 +49,13 @@ public class PluginManager {
*/ */
private Set<Documentation> registeredDocumentation; private Set<Documentation> registeredDocumentation;
/** /**
* The list of number implementations that have been * The list of number implementation names.
* found by their implementation class.
*/ */
private Map<Class<? extends NumberInterface>, NumberImplementation> cachedInterfaceImplementations; private Map<Class<? extends NumberInterface>, String> interfaceImplementationNames;
/**
* The list of number implementations.
*/
private Map<Class<? extends NumberInterface>, NumberImplementation> interfaceImplementations;
/** /**
* The pi values for each implementation class that have already been computer. * The pi values for each implementation class that have already been computer.
*/ */
@ -82,7 +85,8 @@ public class PluginManager {
registeredTreeValueOperators = new HashMap<>(); registeredTreeValueOperators = new HashMap<>();
registeredNumberImplementations = new HashMap<>(); registeredNumberImplementations = new HashMap<>();
registeredDocumentation = new HashSet<>(); registeredDocumentation = new HashSet<>();
cachedInterfaceImplementations = new HashMap<>(); interfaceImplementations = new HashMap<>();
interfaceImplementationNames = new HashMap<>();
cachedPi = new HashMap<>(); cachedPi = new HashMap<>();
listeners = new HashSet<>(); listeners = new HashSet<>();
} }
@ -135,6 +139,8 @@ public class PluginManager {
*/ */
public void registerNumberImplementation(String name, NumberImplementation implementation) { public void registerNumberImplementation(String name, NumberImplementation implementation) {
registeredNumberImplementations.put(name, implementation); registeredNumberImplementations.put(name, implementation);
interfaceImplementationNames.put(implementation.getImplementation(), name);
interfaceImplementations.put(implementation.getImplementation(), implementation);
} }
/** /**
@ -226,17 +232,17 @@ public class PluginManager {
* @return the implementation. * @return the implementation.
*/ */
public NumberImplementation interfaceImplementationFor(Class<? extends NumberInterface> name) { public NumberImplementation interfaceImplementationFor(Class<? extends NumberInterface> name) {
if (cachedInterfaceImplementations.containsKey(name)) return cachedInterfaceImplementations.get(name); return interfaceImplementations.get(name);
NumberImplementation toReturn = null; }
for (String key : registeredNumberImplementations.keySet()) {
NumberImplementation implementation = registeredNumberImplementations.get(key); /**
if (implementation.getImplementation() == name) { * Gets the number implementation name for the given implementation class.
toReturn = implementation; *
break; * @param name the class for which to find the implementation name.
} * @return the implementation name.
} */
cachedInterfaceImplementations.put(name, toReturn); public String interfaceImplementationNameFor(Class<? extends NumberInterface> name){
return toReturn; return interfaceImplementationNames.get(name);
} }
/** /**
@ -329,7 +335,7 @@ public class PluginManager {
registeredTreeValueOperators.clear(); registeredTreeValueOperators.clear();
registeredNumberImplementations.clear(); registeredNumberImplementations.clear();
registeredDocumentation.clear(); registeredDocumentation.clear();
cachedInterfaceImplementations.clear(); interfaceImplementations.clear();
cachedPi.clear(); cachedPi.clear();
listeners.forEach(e -> e.onUnload(this)); listeners.forEach(e -> e.onUnload(this));
} }