package com.baselet.element.relation.facet; import java.util.HashMap; import java.util.Map; import com.baselet.control.basics.geom.Point; import com.baselet.diagram.draw.helper.StyleException; import com.baselet.element.facet.FirstRunKeyValueFacet; import com.baselet.element.facet.PropertiesParserState; import com.baselet.element.relation.helper.LineDescriptionEnum; public class LineDescriptionPositionFacet extends FirstRunKeyValueFacet { private static final int MAX_DISP = 200; public static final String POS = "pos"; public static final LineDescriptionPositionFacet INSTANCE_MESSAGE_START = new LineDescriptionPositionFacet(LineDescriptionEnum.MESSAGE_START); public static final LineDescriptionPositionFacet INSTANCE_MESSAGE_END = new LineDescriptionPositionFacet(LineDescriptionEnum.MESSAGE_END); public static final LineDescriptionPositionFacet INSTANCE_ROLE_START = new LineDescriptionPositionFacet(LineDescriptionEnum.ROLE_START); public static final LineDescriptionPositionFacet INSTANCE_ROLE_END = new LineDescriptionPositionFacet(LineDescriptionEnum.ROLE_END); private final LineDescriptionEnum lineDesc; public LineDescriptionPositionFacet(LineDescriptionEnum lineDesc) { super(); this.lineDesc = lineDesc; } @Override public KeyValue getKeyValue() { return new KeyValue(lineDesc.getKey() + POS, false, "-5,7", "comma separated integers as displacement of " + lineDesc + " text (first=horizontal, second=vertical)"); } @Override public void handleValue(String value, PropertiesParserState state) { try { Map<String, Point> displacements = state.getOrInitFacetResponse(LineDescriptionPositionFacet.class, new HashMap<String, Point>()); String[] split = value.split(","); int x = Integer.parseInt(split[0]); int y = Integer.parseInt(split[1]); if (Math.abs(x) > MAX_DISP || Math.abs(y) > MAX_DISP) { throw new StyleException("max allowed positive or negative displacement value is " + MAX_DISP); } displacements.put(lineDesc.getKey(), new Point(x, y)); } catch (Exception e) { if (e instanceof StyleException) { throw (StyleException) e; } throw new StyleException("value must be <integer>,<integer>"); } } }