package com.opendoorlogistics.studio.components.map;
import java.util.ArrayList;
import java.util.logging.Logger;
import com.opendoorlogistics.api.standardcomponents.map.MapPlugin;
import com.opendoorlogistics.core.api.impl.ODLApiImpl;
import com.opendoorlogistics.core.utils.strings.StandardisedStringTreeMap;
import com.opendoorlogistics.studio.components.map.plugins.CreatePointPlugin;
import com.opendoorlogistics.studio.components.map.plugins.FillPlugin;
import com.opendoorlogistics.studio.components.map.plugins.LegendPlugin;
import com.opendoorlogistics.studio.components.map.plugins.MovePointPlugin;
import com.opendoorlogistics.studio.components.map.plugins.PanMapPlugin;
import com.opendoorlogistics.studio.components.map.plugins.RenderCheckboxesPlugin;
import com.opendoorlogistics.studio.components.map.plugins.ViewSyncer;
import com.opendoorlogistics.studio.components.map.plugins.selection.SelectPlugin;
import com.opendoorlogistics.studio.components.map.plugins.snapshot.SnapshotPlugin;
public class GlobalMapPluginManager {
private static final StandardisedStringTreeMap<MapPlugin> GLOBAL = new StandardisedStringTreeMap<MapPlugin>(false);
private static final Logger logger = Logger.getLogger(GlobalMapPluginManager.class.getName());
static{
// add standard ones
register(new PanMapPlugin());
register(new LegendPlugin());
register(new SelectPlugin());
register(new FillPlugin());
register(new RenderCheckboxesPlugin());
register(new SnapshotPlugin());
register(new CreatePointPlugin());
register(new MovePointPlugin());
register(new ViewSyncer());
// register plugins from plugins directory
for(MapPlugin plugin :new ODLApiImpl().loadPlugins(MapPlugin.class)){
register(plugin);
}
}
public static synchronized void register(MapPlugin plugin){
if(!GLOBAL.containsKey(plugin.getId())){
GLOBAL.put(plugin.getId(), plugin);
logger.info("Registered map plugin " + plugin.getId());
}
else{
logger.severe("Failed to register map plugin " + plugin.getId() + "; id is already registered");
}
// if(GLOBAL.register(component)){
// logger.info("Registered component " + component.getId());
// //System.out.println("Registered component " + component.getId());
// }else{
// logger.severe("Failed to register component " + component.getId() + "; id is already registered");
// //System.out.println("Failed to register component " + component.getId() + "; id is already registered");
// }
}
public static synchronized Iterable<MapPlugin> getPlugins(){
// return a copy
return new ArrayList<MapPlugin>(GLOBAL.values());
}
//
// public static ODLComponentProvider getProvider(){
// return GLOBAL;
// }
//
}