package com.baselet.gui.command;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.baselet.control.HandlerElementMap;
import com.baselet.diagram.DiagramHandler;
import com.baselet.element.interfaces.GridElement;
public class ChangeElementSetting extends Command {
private String key;
private Map<GridElement, String> elementValueMap;
private Map<GridElement, String> oldValue;
public ChangeElementSetting(String key, String value, Collection<GridElement> element) {
this(key, createSingleValueMap(value, element));
}
public ChangeElementSetting(String key, Map<GridElement, String> elementValueMap) {
this.key = key;
this.elementValueMap = elementValueMap;
}
@Override
public void execute(DiagramHandler handler) {
super.execute(handler);
oldValue = new HashMap<GridElement, String>();
for (Entry<GridElement, String> entry : elementValueMap.entrySet()) {
GridElement e = entry.getKey();
oldValue.put(e, e.getSetting(key));
e.setProperty(key, entry.getValue());
if (handler.getDrawPanel().getSelector().isSelected(e)) {
HandlerElementMap.getHandlerForElement(e).getDrawPanel().getSelector().updateSelectorInformation(); // update the property panel to display changed attributes
}
}
handler.getDrawPanel().repaint();
}
@Override
public void undo(DiagramHandler handler) {
super.undo(handler);
for (Entry<GridElement, String> entry : oldValue.entrySet()) {
entry.getKey().setProperty(key, entry.getValue());
}
handler.getDrawPanel().repaint();
}
private static Map<GridElement, String> createSingleValueMap(String value, Collection<GridElement> elements) {
Map<GridElement, String> singleValueMap = new HashMap<GridElement, String>(1);
for (GridElement e : elements) {
singleValueMap.put(e, value);
}
return singleValueMap;
}
}