package com.kreative.paint.material.shape; import java.awt.geom.Point2D; import java.util.Map; public class ParameterBindings implements Bindings { private final Map<String,Parameter> parameters; private final Map<String,Point2D> currentValues; public ParameterBindings( Map<String,Parameter> parameters, Map<String,Point2D> currentValues ) { this.parameters = parameters; this.currentValues = currentValues; } @Override public double get(String key) { if (key == null) return Double.NaN; int i = key.indexOf('.'); if (i < 0) return Double.NaN; String paramName = key.substring(0, i); Parameter param = parameters.get(paramName); if (param == null) return Double.NaN; String valueName = key.substring(i + 1); return param.getValue(currentValues, valueName); } @Override public void set(String key, double value) { if (key == null) return; int i = key.indexOf('.'); if (i < 0) return; String paramName = key.substring(0, i); Parameter param = parameters.get(paramName); if (param == null) return; Point2D p = param.getLocation(currentValues); String valueName = key.substring(i + 1); if (valueName.equalsIgnoreCase("x")) { param.setLocation(currentValues, value, p.getY()); } else if (valueName.equalsIgnoreCase("y")) { param.setLocation(currentValues, p.getX(), value); } } @Override public void remove(String key) { if (key == null) return; int i = key.indexOf('.'); if (i < 0) return; String paramName = key.substring(0, i); Parameter param = parameters.get(paramName); if (param == null) return; Point2D d = param.getDefaultLocation(); Point2D p = param.getLocation(currentValues); String valueName = key.substring(i + 1); if (valueName.equalsIgnoreCase("x")) { param.setLocation(currentValues, d.getX(), p.getY()); } else if (valueName.equalsIgnoreCase("y")) { param.setLocation(currentValues, p.getX(), d.getY()); } } }