package com.baselet.gui.command;
import java.awt.Color;
import java.awt.Point;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.baselet.control.basics.Converter;
import com.baselet.control.basics.geom.Rectangle;
import com.baselet.diagram.DiagramHandler;
import com.baselet.diagram.DrawPanel;
import com.baselet.diagram.SelectorOld;
import com.baselet.element.interfaces.GridElement;
public class Search extends Command {
static Color _failed = new Color(227, 127, 127);
static Color _success = new Color(148, 172, 251);
private String regex;
private Pattern pattern;
public Search(String regex) {
this.regex = ".*(" + regex.toLowerCase() + ").*";
}
@Override
public void execute(DiagramHandler handler) {
super.execute(handler);
SelectorOld s = handler.getDrawPanel().getSelector();
s.deselectAll();
DrawPanel d = handler.getDrawPanel();
pattern = Pattern.compile(regex);
Matcher m;
for (GridElement e : d.getGridElements()) {
m = pattern.matcher(e.getPanelAttributes().toLowerCase());
if (m.find()) {
s.select(e);
}
}
if (s.getSelectedElements().size() == 0) {
return;
}
Rectangle panelview = Converter.convert(d.getVisibleRect());
Point p = null;
for (GridElement e : s.getSelectedElements()) {
if (panelview.contains(e.getRectangle())) {
p = new Point(0, 0);
break;
}
else if (p == null) {
p = new Point(e.getRectangle().x - panelview.x - 10, e.getRectangle().y - panelview.y - 10);
}
}
if (p != null) {
d.changeViewPosition(p.x, p.y);
}
}
@Override
public void undo(DiagramHandler handler) {
super.undo(handler);
handler.getDrawPanel().getSelector().deselectAll();
}
}