package com.baselet.gwt.client.element;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.baselet.control.config.SharedConfig;
import com.baselet.element.interfaces.Diagram;
import com.baselet.element.interfaces.GridElement;
import com.baselet.element.relation.Relation;
import com.baselet.element.sticking.Stickable;
import com.baselet.element.sticking.StickableMap;
import com.baselet.element.sticking.Stickables;
import com.baselet.element.sticking.StickingPolygon;
import com.baselet.gui.AutocompletionText;
public class DiagramGwt implements Diagram {
private static final Comparator<GridElement> LAYER_COMPARATOR_ASCENDING = new Comparator<GridElement>() {
@Override
public int compare(GridElement o1, GridElement o2) {
return o1.getLayer().compareTo(o2.getLayer());
}
};
private static final Comparator<GridElement> LAYER_COMPARATOR_DESCENDING = new Comparator<GridElement>() {
@Override
public int compare(GridElement o1, GridElement o2) {
return o2.getLayer().compareTo(o1.getLayer());
}
};
private String helpText;
private final List<GridElement> gridElements;
public DiagramGwt(List<GridElement> gridElements) {
this(null, gridElements);
}
public DiagramGwt(String helpText, List<GridElement> gridElements) {
super();
this.helpText = helpText;
this.gridElements = gridElements;
}
@Override
public List<GridElement> getGridElements() {
return gridElements;
}
@Override
public List<Stickable> getStickables() {
List<Stickable> returnList = new ArrayList<Stickable>();
for (GridElement ge : gridElements) {
if (ge instanceof Relation) {
returnList.add((Relation) ge);
}
}
return returnList;
}
@Override
public StickableMap getStickables(GridElement draggedElement) {
return getStickables(draggedElement, Collections.<GridElement> emptyList());
}
@Override
public StickableMap getStickables(GridElement draggedElement, Collection<GridElement> excludeList) {
if (!SharedConfig.getInstance().isStickingEnabled()) {
return StickableMap.EMPTY_MAP;
}
List<Stickable> stickables = getStickables();
stickables.removeAll(excludeList);
StickingPolygon stickingBorder = draggedElement.generateStickingBorder();
StickableMap stickingStickables = Stickables.getStickingPointsWhichAreConnectedToStickingPolygon(stickingBorder, stickables);
return stickingStickables;
}
@Override
public List<GridElement> getGridElementsByLayerLowestToHighest() {
return getGridElementsByLayer(true);
}
@Override
public List<GridElement> getGridElementsByLayer(boolean ascending) {
ArrayList<GridElement> list = new ArrayList<GridElement>(gridElements);
if (ascending) {
Collections.sort(list, LAYER_COMPARATOR_ASCENDING);
}
else {
Collections.sort(list, LAYER_COMPARATOR_DESCENDING);
}
return list;
}
@Override
public void setPanelAttributes(String panelAttributes) {
helpText = panelAttributes;
}
@Override
public String getPanelAttributes() {
return helpText;
}
@Override
public List<AutocompletionText> getAutocompletionList() {
return Collections.<AutocompletionText> emptyList();
}
}