package eu.stratosphere.util.dag; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; class BoxConnectorProvider implements ConnectorProvider { private final Map<List<BaseDirection>, String> connectorStrings = new HashMap<List<BaseDirection>, String>(); private final Comparator<Enum<?>> EnumComparator = new Comparator<Enum<?>>() { @Override public int compare(final Enum<?> o1, final Enum<?> o2) { return o1.ordinal() - o2.ordinal(); } }; public BoxConnectorProvider() { this.put(new ArrayList<BaseDirection>(), ""); this.put(Arrays.asList(BaseDirection.TOP, BaseDirection.DOWN), "\u2502"); this.put(Arrays.asList(BaseDirection.TOP, BaseDirection.RIGHT), "\u2514"); this.put(Arrays.asList(BaseDirection.TOP, BaseDirection.LEFT), "\u2518"); this.put(Arrays.asList(BaseDirection.RIGHT, BaseDirection.DOWN), "\u250C"); this.put(Arrays.asList(BaseDirection.LEFT, BaseDirection.DOWN), "\u2510"); this.put(Arrays.asList(BaseDirection.LEFT, BaseDirection.RIGHT), "\u2500"); this.put(Arrays.asList(BaseDirection.TOP, BaseDirection.TOP, BaseDirection.LEFT, BaseDirection.DOWN), "\u2526"); this.put(Arrays.asList(BaseDirection.TOP, BaseDirection.TOP, BaseDirection.RIGHT, BaseDirection.DOWN), "\u251E"); this.put(Arrays.asList(BaseDirection.TOP, BaseDirection.RIGHT, BaseDirection.DOWN, BaseDirection.DOWN), "\u251F"); this.put(Arrays.asList(BaseDirection.TOP, BaseDirection.LEFT, BaseDirection.DOWN, BaseDirection.DOWN), "\u2527"); } @Override public String getConnectorString(final Route... connectors) { final List<BaseDirection> directionList = new ArrayList<BaseDirection>(); for (final Route connector : connectors) { directionList.add(connector.getFrom()); directionList.add(connector.getTo()); } Collections.sort(directionList, this.EnumComparator); return this.connectorStrings.get(directionList); } private void put(final List<BaseDirection> list, final String string) { Collections.sort(list, this.EnumComparator); this.connectorStrings.put(list, string); }; }