-/*******************************************************************************\r
- * Copyright (c) 2012 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.modeling.template2d.ui.diagram.adapter;\r
-\r
-\r
-import java.awt.BasicStroke;\r
-import java.awt.Color;\r
-import java.awt.geom.Line2D;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.annotations.Optional;\r
-import org.simantics.databoard.util.Bean;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.diagram.G2DUtils;\r
-import org.simantics.diagram.function.All;\r
-import org.simantics.diagram.profile.StyleBase;\r
-import org.simantics.diagram.stubs.G2DResource;\r
-import org.simantics.g2d.scenegraph.SceneGraphConstants;\r
-import org.simantics.modeling.template2d.ontology.Template2dResource;\r
-import org.simantics.scenegraph.g2d.G2DParentNode;\r
-import org.simantics.scenegraph.g2d.G2DSceneGraph;\r
-import org.simantics.scenegraph.g2d.nodes.ShapeNode;\r
-import org.simantics.scenegraph.g2d.nodes.spatial.RTreeNode;\r
-import org.simantics.scenegraph.profile.DataNodeMap;\r
-import org.simantics.scenegraph.profile.EvaluationContext;\r
-import org.simantics.scenegraph.profile.common.ProfileVariables;\r
-import org.simantics.utils.page.PageOrientation;\r
-\r
-public class DrawingBorderStyle extends StyleBase<DrawingBorderStyle.StyleInfo> {\r
- private static final String BORDER_NODE = "template>border";\r
- \r
- private static int TOP_INDEX = 0;\r
- private static int RIGHT_INDEX = 1;\r
- private static int BOTTOM_INDEX = 2;\r
- private static int LEFT_INDEX = 3;\r
-\r
- private static int HEIGHT_INDEX = 1;\r
- private static int WIDTH_INDEX = 0;\r
-\r
- public static class StyleInfo extends Bean {\r
- @Optional\r
- public float[] pageSize = null;\r
- @Optional\r
- public float[] margin = null;\r
- @Optional\r
- public float[] borderSize = null;\r
- @Optional\r
- public float[] padding = null;\r
- @Optional\r
- public PageOrientation orientation=null;\r
- @Optional\r
- public float rgba[] = null;\r
- @Optional\r
- public Resource template = null;\r
- };\r
-\r
-\r
- @Override\r
- public StyleInfo calculateStyle(ReadGraph graph, Resource runtimeDiagram,\r
- Resource entry, Resource groupItem, Variable activeComposite)\r
- throws DatabaseException {\r
-// DiagramResource DIA = DiagramResource.getInstance(graph);\r
-// ModelingResources MOD = ModelingResources.getInstance(graph);\r
-// StructuralResource2 STR = StructuralResource2.getInstance(graph);\r
- Template2dResource TEMPLATE2D = Template2dResource.getInstance(graph);\r
-\r
-// Layer0 L0 = Layer0.getInstance(graph);\r
- G2DResource G2D = G2DResource.getInstance(graph);\r
- \r
- StyleInfo info = new StyleInfo();\r
- info.template = All.getTemplate(graph, runtimeDiagram);\r
- \r
- //info.init();\r
- \r
- if (info.template == null)\r
- return null;\r
- \r
- info.margin = graph.getPossibleRelatedValue(info.template, TEMPLATE2D.HasMargin, Bindings.FLOAT_ARRAY);\r
- if (info.margin == null)\r
- return null;\r
- \r
- info.padding = graph.getPossibleRelatedValue(info.template, TEMPLATE2D.HasPadding, Bindings.FLOAT_ARRAY);\r
-\r
- Resource orientation = graph.getPossibleObject(info.template, TEMPLATE2D.HasPageOrientation);\r
- info.orientation = PageOrientation.Portrait;\r
- if (orientation != null && orientation.equals(TEMPLATE2D.PageOrientation_Landscape))\r
- info.orientation = PageOrientation.Landscape;\r
- \r
- Resource page = graph.getPossibleObject(info.template, TEMPLATE2D.HasPage);\r
- if (page == null)\r
- return null;\r
- \r
- Resource border = graph.getPossibleObject(info.template, TEMPLATE2D.HasBorder);\r
- if (border == null)\r
- return null;\r
-\r
- info.pageSize = graph.getPossibleRelatedValue(page, TEMPLATE2D.HasSize, Bindings.FLOAT_ARRAY);\r
- if (info.pageSize == null)\r
- return null;\r
- \r
- Resource rColor = graph.getPossibleObject(border, G2D.HasColor);\r
- Color color = null; \r
- if (rColor != null)\r
- color = (Color) G2DUtils.getObject(graph, rColor);\r
- if (color == null)\r
- color = new Color(0, 0, 0);\r
- \r
- info.rgba = new float[4];\r
- color.getRGBComponents(info.rgba);\r
- \r
- info.borderSize = graph.getPossibleRelatedValue(border, TEMPLATE2D.HasSize, Bindings.FLOAT_ARRAY);\r
- if (info.borderSize == null)\r
- return null;\r
- \r
- return info;\r
- }\r
- \r
- @Override\r
- public void applyStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item, StyleInfo info) {\r
- //super.applyStyleForItem(evaluationContext, map, item, value);\r
-// final INode node = map.getNode(item);\r
-// if (node == null) {\r
-// evaluationContext.update();\r
-// // TODO: continue or return?\r
-// return;\r
-// }\r
- if (info == null)\r
- return;\r
- \r
- float[] pageSize = info.pageSize;\r
- float[] margin = extract(info.margin);\r
- float[] borderSize = extract(info.borderSize);\r
- //float[] padding = extract(info.padding);\r
- \r
- if(pageSize == null || pageSize.length != 2 || margin == null || borderSize == null)\r
- return;\r
- \r
- if (info.orientation == PageOrientation.Portrait && pageSize[WIDTH_INDEX] > pageSize[HEIGHT_INDEX]){\r
- float tmp = pageSize[HEIGHT_INDEX];\r
- pageSize[HEIGHT_INDEX] = pageSize[WIDTH_INDEX];\r
- pageSize[WIDTH_INDEX] = tmp;\r
- }\r
- if (info.orientation == PageOrientation.Landscape && pageSize[WIDTH_INDEX] < pageSize[HEIGHT_INDEX]){\r
- float tmp = pageSize[HEIGHT_INDEX];\r
- pageSize[HEIGHT_INDEX] = pageSize[WIDTH_INDEX];\r
- pageSize[WIDTH_INDEX] = tmp;\r
- }\r
-\r
- Line2D[] borders = new Line2D[4];\r
- borders[TOP_INDEX] = new Line2D.Float(margin[LEFT_INDEX], margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX], margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f));\r
- borders[BOTTOM_INDEX] = new Line2D.Float(margin[LEFT_INDEX], pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX], pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f));\r
- borders[LEFT_INDEX] = new Line2D.Float(margin[LEFT_INDEX]+(borderSize[LEFT_INDEX]/2.0f), margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), margin[LEFT_INDEX]+(borderSize[LEFT_INDEX]/2.0f), pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f));\r
- borders[RIGHT_INDEX] = new Line2D.Float(pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX]-(borderSize[RIGHT_INDEX]/2.0f), margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX]-(borderSize[RIGHT_INDEX]/2.0f), pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f));\r
- \r
-\r
- G2DSceneGraph sg = evaluationContext.getSceneGraph();\r
- if (sg == null)\r
- return;\r
- //NodeUtil.printSceneGraph(sg);\r
- G2DParentNode nav = (G2DParentNode) sg.getNode(SceneGraphConstants.NAVIGATION_NODE_NAME);\r
- //NodeUtil.lookup(sg, SceneGraphConstants.NAVIGATION_NODE_NAME, G2DParentNode.class);\r
- if (nav == null)\r
- return;\r
-\r
- cleanupStyleForItem(evaluationContext, map, item);\r
-\r
- RTreeNode pageTemplate = ProfileVariables.claimChild(evaluationContext.getSceneGraph(),\r
- SceneGraphConstants.NAVIGATION_NODE_NAME, BORDER_NODE, RTreeNode.class, //SingleElementNode.class,\r
- evaluationContext);\r
- if (pageTemplate == null)\r
- return;\r
-\r
- pageTemplate.setZIndex(1);\r
- // pageTemplate.setVisible(true);\r
-\r
-// Path2D path = new Path2D.Float();\r
-// \r
-// path.append(line, false);\r
- \r
-// BasicStroke[] strokes = new BasicStroke[4];\r
- //GeneralPath p = new GeneralPath();\r
- \r
- for (int i=0;i<4;i++){\r
-// if (i==1 || i == 3)\r
-// continue;\r
- Line2D line = borders[i];\r
- //Rectangle2D rect = new Rectangle2D.Float(0,0,100,100);\r
- if (borderSize[i] < 0)\r
- continue;\r
- BasicStroke stroke = new BasicStroke(borderSize[i], BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);\r
- ShapeNode shape = pageTemplate.addNode("border_" + i, ShapeNode.class); // SingleElementNode\r
- shape.setShape(line);\r
- shape.setScaleStroke(false);\r
- shape.setStroke(stroke);\r
- shape.setFill(false);\r
- shape.setColor(new Color(info.rgba[0], info.rgba[1], info.rgba[2], info.rgba[3]));\r
- if (i == TOP_INDEX || i == BOTTOM_INDEX)\r
- shape.setZIndex(10);\r
-\r
-// System.err.println(borderSize[i]);\r
-// System.err.print(borders[i].getX1());\r
-// System.err.print("," + borders[i].getY1());\r
-// System.err.print("," + borders[i].getX2());\r
-// System.err.println("," + borders[i].getY2());\r
-// if (i == 2){\r
-// BasicStroke stroke2 = new BasicStroke(0.1f);\r
-// ShapeNode shape2 = pageTemplate.addNode("border_" + 4, ShapeNode.class); // SingleElementNode\r
-// shape2.setShape(line);\r
-// shape2.setScaleStroke(true);\r
-// shape2.setStroke(stroke2);\r
-// shape2.setFill(false);\r
-// shape2.setZIndex(10);\r
-// shape2.setColor(new Color(0, 0, 0));\r
-// }\r
- }\r
- \r
-// if (DebugPolicy.DEBUG_PROFILE_STYLE_APPLICATION)\r
-// System.out.println(StyleBase.this + ": applying style for item " + item + " and element " + node + " with result " + value);\r
- }\r
-\r
- protected void cleanupStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item) {\r
- ProfileVariables.denyChild(evaluationContext.getSceneGraph(), SceneGraphConstants.NAVIGATION_NODE_NAME,\r
- BORDER_NODE);\r
- // System.err.println("template/border removed");\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- return "Border style";\r
- }\r
-\r
- private float[] extract(float[] settings){\r
- float[] ret = new float[]{0.0f,0.0f,0.0f,0.0f};\r
- if (settings == null || settings.length == 0 || settings.length > 4){\r
- return null;\r
- }\r
- if (settings.length == 1){\r
- ret[TOP_INDEX] = settings[0];\r
- ret[BOTTOM_INDEX] = settings[0];\r
- ret[LEFT_INDEX] = settings[0];\r
- ret[RIGHT_INDEX] = settings[0];\r
- }\r
- if (settings.length == 2){\r
- ret[TOP_INDEX] = settings[0];\r
- ret[BOTTOM_INDEX] = settings[0];\r
- ret[LEFT_INDEX] = settings[1];\r
- ret[RIGHT_INDEX] = settings[1];\r
- }\r
- if (settings.length == 3){\r
- ret[TOP_INDEX] = settings[0];\r
- ret[BOTTOM_INDEX] = settings[2];\r
- ret[LEFT_INDEX] = settings[1];\r
- ret[RIGHT_INDEX] = settings[1];\r
- }\r
- if (settings.length == 4){\r
- ret[TOP_INDEX] = settings[0];\r
- ret[RIGHT_INDEX] = settings[1];\r
- ret[BOTTOM_INDEX] = settings[2];\r
- ret[LEFT_INDEX] = settings[3];\r
- }\r
- return ret;\r
- }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2012 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.modeling.template2d.ui.diagram.adapter;
+
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.geom.Line2D;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.annotations.Optional;
+import org.simantics.databoard.util.Bean;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.diagram.G2DUtils;
+import org.simantics.diagram.function.All;
+import org.simantics.diagram.profile.StyleBase;
+import org.simantics.diagram.stubs.G2DResource;
+import org.simantics.g2d.scenegraph.SceneGraphConstants;
+import org.simantics.modeling.template2d.ontology.Template2dResource;
+import org.simantics.scenegraph.g2d.G2DParentNode;
+import org.simantics.scenegraph.g2d.G2DSceneGraph;
+import org.simantics.scenegraph.g2d.nodes.ShapeNode;
+import org.simantics.scenegraph.g2d.nodes.spatial.RTreeNode;
+import org.simantics.scenegraph.profile.DataNodeMap;
+import org.simantics.scenegraph.profile.EvaluationContext;
+import org.simantics.scenegraph.profile.common.ProfileVariables;
+import org.simantics.utils.page.PageOrientation;
+
+public class DrawingBorderStyle extends StyleBase<DrawingBorderStyle.StyleInfo> {
+ private static final String BORDER_NODE = "template>border";
+
+ private static int TOP_INDEX = 0;
+ private static int RIGHT_INDEX = 1;
+ private static int BOTTOM_INDEX = 2;
+ private static int LEFT_INDEX = 3;
+
+ private static int HEIGHT_INDEX = 1;
+ private static int WIDTH_INDEX = 0;
+
+ public static class StyleInfo extends Bean {
+ @Optional
+ public float[] pageSize = null;
+ @Optional
+ public float[] margin = null;
+ @Optional
+ public float[] borderSize = null;
+ @Optional
+ public float[] padding = null;
+ @Optional
+ public PageOrientation orientation=null;
+ @Optional
+ public float rgba[] = null;
+ @Optional
+ public Resource template = null;
+ };
+
+
+ @Override
+ public StyleInfo calculateStyle(ReadGraph graph, Resource runtimeDiagram,
+ Resource entry, Resource groupItem, Variable activeComposite)
+ throws DatabaseException {
+// DiagramResource DIA = DiagramResource.getInstance(graph);
+// ModelingResources MOD = ModelingResources.getInstance(graph);
+// StructuralResource2 STR = StructuralResource2.getInstance(graph);
+ Template2dResource TEMPLATE2D = Template2dResource.getInstance(graph);
+
+// Layer0 L0 = Layer0.getInstance(graph);
+ G2DResource G2D = G2DResource.getInstance(graph);
+
+ StyleInfo info = new StyleInfo();
+ info.template = All.getTemplate(graph, runtimeDiagram);
+
+ //info.init();
+
+ if (info.template == null)
+ return null;
+
+ info.margin = graph.getPossibleRelatedValue(info.template, TEMPLATE2D.HasMargin, Bindings.FLOAT_ARRAY);
+ if (info.margin == null)
+ return null;
+
+ info.padding = graph.getPossibleRelatedValue(info.template, TEMPLATE2D.HasPadding, Bindings.FLOAT_ARRAY);
+
+ Resource orientation = graph.getPossibleObject(info.template, TEMPLATE2D.HasPageOrientation);
+ info.orientation = PageOrientation.Portrait;
+ if (orientation != null && orientation.equals(TEMPLATE2D.PageOrientation_Landscape))
+ info.orientation = PageOrientation.Landscape;
+
+ Resource page = graph.getPossibleObject(info.template, TEMPLATE2D.HasPage);
+ if (page == null)
+ return null;
+
+ Resource border = graph.getPossibleObject(info.template, TEMPLATE2D.HasBorder);
+ if (border == null)
+ return null;
+
+ info.pageSize = graph.getPossibleRelatedValue(page, TEMPLATE2D.HasSize, Bindings.FLOAT_ARRAY);
+ if (info.pageSize == null)
+ return null;
+
+ Resource rColor = graph.getPossibleObject(border, G2D.HasColor);
+ Color color = null;
+ if (rColor != null)
+ color = (Color) G2DUtils.getObject(graph, rColor);
+ if (color == null)
+ color = new Color(0, 0, 0);
+
+ info.rgba = new float[4];
+ color.getRGBComponents(info.rgba);
+
+ info.borderSize = graph.getPossibleRelatedValue(border, TEMPLATE2D.HasSize, Bindings.FLOAT_ARRAY);
+ if (info.borderSize == null)
+ return null;
+
+ return info;
+ }
+
+ @Override
+ public void applyStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item, StyleInfo info) {
+ //super.applyStyleForItem(evaluationContext, map, item, value);
+// final INode node = map.getNode(item);
+// if (node == null) {
+// evaluationContext.update();
+// // TODO: continue or return?
+// return;
+// }
+ if (info == null)
+ return;
+
+ float[] pageSize = info.pageSize;
+ float[] margin = extract(info.margin);
+ float[] borderSize = extract(info.borderSize);
+ //float[] padding = extract(info.padding);
+
+ if(pageSize == null || pageSize.length != 2 || margin == null || borderSize == null)
+ return;
+
+ if (info.orientation == PageOrientation.Portrait && pageSize[WIDTH_INDEX] > pageSize[HEIGHT_INDEX]){
+ float tmp = pageSize[HEIGHT_INDEX];
+ pageSize[HEIGHT_INDEX] = pageSize[WIDTH_INDEX];
+ pageSize[WIDTH_INDEX] = tmp;
+ }
+ if (info.orientation == PageOrientation.Landscape && pageSize[WIDTH_INDEX] < pageSize[HEIGHT_INDEX]){
+ float tmp = pageSize[HEIGHT_INDEX];
+ pageSize[HEIGHT_INDEX] = pageSize[WIDTH_INDEX];
+ pageSize[WIDTH_INDEX] = tmp;
+ }
+
+ Line2D[] borders = new Line2D[4];
+ borders[TOP_INDEX] = new Line2D.Float(margin[LEFT_INDEX], margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX], margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f));
+ borders[BOTTOM_INDEX] = new Line2D.Float(margin[LEFT_INDEX], pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX], pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f));
+ borders[LEFT_INDEX] = new Line2D.Float(margin[LEFT_INDEX]+(borderSize[LEFT_INDEX]/2.0f), margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), margin[LEFT_INDEX]+(borderSize[LEFT_INDEX]/2.0f), pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f));
+ borders[RIGHT_INDEX] = new Line2D.Float(pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX]-(borderSize[RIGHT_INDEX]/2.0f), margin[TOP_INDEX]+(borderSize[TOP_INDEX]/2.0f), pageSize[WIDTH_INDEX]-margin[RIGHT_INDEX]-(borderSize[RIGHT_INDEX]/2.0f), pageSize[HEIGHT_INDEX]-margin[BOTTOM_INDEX]-(borderSize[BOTTOM_INDEX]/2.0f));
+
+
+ G2DSceneGraph sg = evaluationContext.getSceneGraph();
+ if (sg == null)
+ return;
+ //NodeUtil.printSceneGraph(sg);
+ G2DParentNode nav = (G2DParentNode) sg.getNode(SceneGraphConstants.NAVIGATION_NODE_NAME);
+ //NodeUtil.lookup(sg, SceneGraphConstants.NAVIGATION_NODE_NAME, G2DParentNode.class);
+ if (nav == null)
+ return;
+
+ cleanupStyleForItem(evaluationContext, map, item);
+
+ RTreeNode pageTemplate = ProfileVariables.claimChild(evaluationContext.getSceneGraph(),
+ SceneGraphConstants.NAVIGATION_NODE_NAME, BORDER_NODE, RTreeNode.class, //SingleElementNode.class,
+ evaluationContext);
+ if (pageTemplate == null)
+ return;
+
+ pageTemplate.setZIndex(1);
+ // pageTemplate.setVisible(true);
+
+// Path2D path = new Path2D.Float();
+//
+// path.append(line, false);
+
+// BasicStroke[] strokes = new BasicStroke[4];
+ //GeneralPath p = new GeneralPath();
+
+ for (int i=0;i<4;i++){
+// if (i==1 || i == 3)
+// continue;
+ Line2D line = borders[i];
+ //Rectangle2D rect = new Rectangle2D.Float(0,0,100,100);
+ if (borderSize[i] < 0)
+ continue;
+ BasicStroke stroke = new BasicStroke(borderSize[i], BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
+ ShapeNode shape = pageTemplate.addNode("border_" + i, ShapeNode.class); // SingleElementNode
+ shape.setShape(line);
+ shape.setScaleStroke(false);
+ shape.setStroke(stroke);
+ shape.setFill(false);
+ shape.setColor(new Color(info.rgba[0], info.rgba[1], info.rgba[2], info.rgba[3]));
+ if (i == TOP_INDEX || i == BOTTOM_INDEX)
+ shape.setZIndex(10);
+
+// System.err.println(borderSize[i]);
+// System.err.print(borders[i].getX1());
+// System.err.print("," + borders[i].getY1());
+// System.err.print("," + borders[i].getX2());
+// System.err.println("," + borders[i].getY2());
+// if (i == 2){
+// BasicStroke stroke2 = new BasicStroke(0.1f);
+// ShapeNode shape2 = pageTemplate.addNode("border_" + 4, ShapeNode.class); // SingleElementNode
+// shape2.setShape(line);
+// shape2.setScaleStroke(true);
+// shape2.setStroke(stroke2);
+// shape2.setFill(false);
+// shape2.setZIndex(10);
+// shape2.setColor(new Color(0, 0, 0));
+// }
+ }
+
+// if (DebugPolicy.DEBUG_PROFILE_STYLE_APPLICATION)
+// System.out.println(StyleBase.this + ": applying style for item " + item + " and element " + node + " with result " + value);
+ }
+
+ protected void cleanupStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item) {
+ ProfileVariables.denyChild(evaluationContext.getSceneGraph(), SceneGraphConstants.NAVIGATION_NODE_NAME,
+ BORDER_NODE);
+ // System.err.println("template/border removed");
+ }
+
+ @Override
+ public String toString() {
+ return "Border style";
+ }
+
+ private float[] extract(float[] settings){
+ float[] ret = new float[]{0.0f,0.0f,0.0f,0.0f};
+ if (settings == null || settings.length == 0 || settings.length > 4){
+ return null;
+ }
+ if (settings.length == 1){
+ ret[TOP_INDEX] = settings[0];
+ ret[BOTTOM_INDEX] = settings[0];
+ ret[LEFT_INDEX] = settings[0];
+ ret[RIGHT_INDEX] = settings[0];
+ }
+ if (settings.length == 2){
+ ret[TOP_INDEX] = settings[0];
+ ret[BOTTOM_INDEX] = settings[0];
+ ret[LEFT_INDEX] = settings[1];
+ ret[RIGHT_INDEX] = settings[1];
+ }
+ if (settings.length == 3){
+ ret[TOP_INDEX] = settings[0];
+ ret[BOTTOM_INDEX] = settings[2];
+ ret[LEFT_INDEX] = settings[1];
+ ret[RIGHT_INDEX] = settings[1];
+ }
+ if (settings.length == 4){
+ ret[TOP_INDEX] = settings[0];
+ ret[RIGHT_INDEX] = settings[1];
+ ret[BOTTOM_INDEX] = settings[2];
+ ret[LEFT_INDEX] = settings[3];
+ }
+ return ret;
+ }
+}