/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.gwt.client.action.toolbar;
import java.util.HashMap;
import java.util.Map;
import org.geomajas.annotation.Api;
import org.geomajas.gwt.client.action.ToolCreator;
import org.geomajas.gwt.client.action.ToolbarBaseAction;
import org.geomajas.gwt.client.widget.MapWidget;
/**
* Registry for mapping between tool id's and toolbar actions.
*
* @author Joachim Van der Auwera
* @since 1.6.0
*/
@Api(allMethods = true)
public final class ToolbarRegistry {
private static final Map<String, ToolCreator> REGISTRY;
static {
REGISTRY = new HashMap<String, ToolCreator>();
// Please keep registrations in alphabetical order
REGISTRY.put(ToolId.BUTTON_GROUP, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ButtonGroup();
}
});
REGISTRY.put(ToolId.DROP_DOWN_BUTTON, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new DropDownButtonAction();
}
});
REGISTRY.put(ToolId.TOOL_EDIT, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new EditingModalAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_FEATURE_INFO, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new FeatureInfoModalAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_MEASURE_DISTANCE_MODE, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new MeasureModalAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_PAN_MODE, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new PanModalAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_PAN_TO_SELECTION, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new PanToSelectionAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_SELECTION_MODE, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new SelectionModalAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_DESELECT_ALL, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new DeselectAllAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_IN, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomInAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_IN_MODE, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomInModalAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_NEXT, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomNextAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_OUT, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomOutAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_OUT_MODE, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomOutModalAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_PREVIOUS, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomPreviousAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_TO_RECTANGLE, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomToRectangleAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_TO_RECTANGLE_MODE, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomToRectangleModalAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_ZOOM_TO_SELECTION, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ZoomToSelectionAction(mapWidget);
}
});
REGISTRY.put(ToolId.TOOL_SCALE_SELECT, new ToolCreator() {
public ToolbarBaseAction createTool(MapWidget mapWidget) {
return new ScaleSelectAction(mapWidget);
}
});
}
private ToolbarRegistry() {
// utility class, hide constructor
}
/**
* Add another key to the registry. This will overwrite the previous value.
*
* @param key
* key for the toolbar actions
* @param toolCreator
* toolbar action creator
*/
public static void put(String key, ToolCreator toolCreator) {
if (null != key && null != toolCreator) {
REGISTRY.put(key, toolCreator);
}
}
/**
* Get the toolbar action which matches the given key.
*
* @param key
* key for toolbar action
* @param mapWidget
* map which will contain this tool
* @return toolbar action or null when key not found
*/
public static ToolbarBaseAction getToolbarAction(String key, MapWidget mapWidget) {
ToolCreator toolCreator = REGISTRY.get(key);
if (null == toolCreator) {
return null;
}
return toolCreator.createTool(mapWidget);
}
}