Add a registered documentation set.

This commit is contained in:
Danila Fedorin 2017-08-08 11:09:46 -07:00
parent ea5ff08c09
commit 61f40c72aa
1 changed files with 30 additions and 0 deletions

View File

@ -1,6 +1,8 @@
package org.nwapw.abacus.plugin;
import org.nwapw.abacus.Abacus;
import org.nwapw.abacus.function.Documentation;
import org.nwapw.abacus.function.DocumentationType;
import org.nwapw.abacus.function.Function;
import org.nwapw.abacus.function.Operator;
import org.nwapw.abacus.number.NumberInterface;
@ -34,6 +36,10 @@ public class PluginManager {
* The map of number implementations registered by the plugins.
*/
private Map<String, NumberImplementation> registeredNumberImplementations;
/**
* The map of documentation for functions registered by the plugins.
*/
private Set<Documentation> registeredDocumentation;
/**
* The list of number implementations that have been
* found by their implementation class.
@ -65,6 +71,7 @@ public class PluginManager {
registeredFunctions = new HashMap<>();
registeredOperators = new HashMap<>();
registeredNumberImplementations = new HashMap<>();
registeredDocumentation = new HashSet<>();
cachedInterfaceImplementations = new HashMap<>();
cachedPi = new HashMap<>();
listeners = new HashSet<>();
@ -97,6 +104,15 @@ public class PluginManager {
registeredNumberImplementations.put(name, implementation);
}
/**
* Registers the given documentation with the plugin manager,
* making it accessible to the plugin manager etc.
* @param documentation the documentation to register.
*/
public void registerDocumentation(Documentation documentation){
registeredDocumentation.add(documentation);
}
/**
* Gets the function registered under the given name.
* @param name the name of the function.
@ -124,6 +140,19 @@ public class PluginManager {
return registeredNumberImplementations.get(name);
}
/**
* Gets the documentation for the given entity of the given type.
* @param name the name of the entity to search for.
* @param type the type that this entity is, to filter out similarly named documentation.
* @return the documentation object.
*/
public Documentation documentationFor(String name, DocumentationType type){
for(Documentation entry : registeredDocumentation){
if(entry.getCodeName().equals(name) && entry.getType() == type) return entry;
}
return null;
}
/**
* Gets the number implementation for the given implementation class.
*
@ -212,6 +241,7 @@ public class PluginManager {
registeredFunctions.clear();
registeredOperators.clear();
registeredNumberImplementations.clear();
registeredDocumentation.clear();
cachedInterfaceImplementations.clear();
cachedPi.clear();
listeners.forEach(e -> e.onUnload(this));