Bug 565945: add dependencies: broker, debugger, launch, resources
Change-Id: Iebf61143c40d00ff3824a899e8280c3d8d08f2a3
diff --git a/developers/Skills Developer Assets/images/dependency_brokerevent.svg b/developers/Skills Developer Assets/images/dependency_brokerevent.svg
new file mode 100644
index 0000000..ba1a709
--- /dev/null
+++ b/developers/Skills Developer Assets/images/dependency_brokerevent.svg
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ sodipodi:docname="dependency_brokerevent.svg"
+ inkscape:export-filename="/home/christian/workspaces/ease_neon/org.eclipse.ease.core/plugins/org.eclipse.ease.ui.scripts/icons/eobj16/expression_and.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ y2="1045.0846"
+ x2="30.568611"
+ y1="1045.0846"
+ x1="23.18507"
+ gradientTransform="matrix(0.53055485,0,0,0.9346781,-12.238741,65.044558)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6339"
+ xlink:href="#linearGradient5240-4-8-7"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5240-4-8-7"
+ inkscape:collect="always">
+ <stop
+ id="stop5243-0-2-4"
+ offset="0"
+ style="stop-color:#879cc0;stop-opacity:1;" />
+ <stop
+ id="stop5245-9-4-0"
+ offset="1"
+ style="stop-color:#677da9;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ y2="1045.0846"
+ x2="30.568611"
+ y1="1045.0846"
+ x1="23.18507"
+ gradientTransform="matrix(0.53055485,0,0,0.9346781,-12.238741,69.044558)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4318"
+ xlink:href="#linearGradient5240-4-8-7"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="1045.0846"
+ x2="30.568611"
+ y1="1045.0846"
+ x1="23.18507"
+ gradientTransform="matrix(0.53055485,0,0,0.9346781,-12.238741,61.044538)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4284"
+ xlink:href="#linearGradient5240-4-8-7"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="-1.8909024"
+ inkscape:cy="3.6765408"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4168" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="display:inline;fill:none;stroke:#f2d57c;stroke-width:1.05015528px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3.7480979,1039.5307 -2.81009827,4.8507 2.76014117,4.7643"
+ id="path6702-4-8-8-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;stroke:#9e7400;stroke-width:1.09723449px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3.5266151,1039.3392 -2.93607656,5.068 2.88387966,4.978"
+ id="path6702-1-1-1"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="6.2976694"
+ y="1040.0983"
+ id="text3346"><tspan
+ sodipodi:role="line"
+ id="tspan3348"
+ x="6.2976694"
+ y="1040.0983"
+ style="font-size:15px;line-height:1.25"> </tspan></text>
+ <path
+ style="display:inline;fill:none;stroke:#f2d57c;stroke-width:1.05015528px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.251902,1039.5307 2.810099,4.8507 -2.760141,4.7643"
+ id="path6702-4-8-8-5-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;stroke:#9e7400;stroke-width:1.09723449px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.473385,1039.3392 2.936077,5.068 -2.88388,4.978"
+ id="path6702-1-1-1-0"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g925"
+ transform="matrix(0.75384766,0,0,0.75384766,11.031398,258.94506)">
+ <rect
+ y="1041.3622"
+ x="-5"
+ height="1"
+ width="1"
+ id="rect4942"
+ style="display:inline;fill:none;stroke:none" />
+ <rect
+ y="1043.3622"
+ x="-5.0000005"
+ height="1"
+ width="1"
+ id="rect4942-1"
+ style="display:inline;fill:none;stroke:none;stroke-width:0.93467808" />
+ <rect
+ y="1043.3622"
+ x="-3.0000002"
+ height="1"
+ width="1"
+ id="rect4942-1-7"
+ style="display:inline;fill:none;stroke:none;stroke-width:0.93467808" />
+ <rect
+ transform="scale(-1,1)"
+ y="1037.3623"
+ x="-4.0085533e-06"
+ height="1"
+ width="3.9795892"
+ id="rect4942-1-7-4-0-9-4-4-5"
+ style="display:inline;fill:url(#linearGradient4284);fill-opacity:1;stroke:none;stroke-width:0.93467808" />
+ <rect
+ transform="scale(-1,1)"
+ y="1045.3622"
+ x="-4.0085533e-06"
+ height="1"
+ width="3.9795892"
+ id="rect4942-1-7-4-0-9-4-4-5-1"
+ style="display:inline;fill:url(#linearGradient4318);fill-opacity:1;stroke:none;stroke-width:0.93467808" />
+ <rect
+ transform="scale(-1,1)"
+ y="1041.3622"
+ x="-4.0085533e-06"
+ height="1"
+ width="3.9795892"
+ id="rect4942-1-7-4-0-9-4-4-5-9"
+ style="display:inline;fill:url(#linearGradient6339);fill-opacity:1;stroke:none;stroke-width:0.93467808" />
+ <g
+ inkscape:label="Layer 1"
+ id="layer1-4"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="matrix(0.29299801,0,0,0.29299801,-8.8668113,731.58099)">
+ <g
+ transform="matrix(0.27903303,0,0,0.27903303,-100.53208,912.07901)"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:12.23149967;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g11331-3-1-1">
+ <g
+ id="g13408-8"
+ style="fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:12.23149967;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,16.12959,8.0140628)"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g6124-3">
+ <g
+ transform="scale(-1,1)"
+ style="font-style:normal;font-weight:normal;font-size:13.58917427px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="text6430" />
+ <g
+ transform="scale(-1,1)"
+ style="font-style:normal;font-weight:normal;font-size:13.58917427px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g6438">
+ <circle
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:10.347188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path10796-2-6-2"
+ transform="matrix(0.32984735,0,0,0.32984735,-136.12701,882.92787)"
+ cx="388.125"
+ cy="468.23718"
+ r="10.625" />
+ </g>
+ </g>
+ </g>
+ <g
+ inkscape:label="Layer 1"
+ id="layer1-4-3"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="matrix(0.29299801,0,0,0.29299801,-8.8668113,735.58098)">
+ <g
+ transform="matrix(0.27903303,0,0,0.27903303,-100.53208,912.07901)"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:12.23149967;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g11331-3-1-1-2">
+ <g
+ id="g13408-8-5"
+ style="fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:12.23149967;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,16.12959,8.0140628)"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g6124-3-3">
+ <g
+ transform="scale(-1,1)"
+ style="font-style:normal;font-weight:normal;font-size:13.58917427px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="text6430-8" />
+ <g
+ transform="scale(-1,1)"
+ style="font-style:normal;font-weight:normal;font-size:13.58917427px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g6438-3">
+ <circle
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:10.347188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path10796-2-6-2-2"
+ transform="matrix(0.32984735,0,0,0.32984735,-136.12701,882.92787)"
+ cx="388.125"
+ cy="468.23718"
+ r="10.625" />
+ </g>
+ </g>
+ </g>
+ <g
+ inkscape:label="Layer 1"
+ id="layer1-4-3-7"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="matrix(0.29299801,0,0,0.29299801,-8.8668113,739.58097)">
+ <g
+ transform="matrix(0.27903303,0,0,0.27903303,-100.53208,912.07901)"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:12.23149967;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g11331-3-1-1-2-0">
+ <g
+ id="g13408-8-5-6"
+ style="fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:12.23149967;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,16.12959,8.0140628)"
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g6124-3-3-8">
+ <g
+ transform="scale(-1,1)"
+ style="font-style:normal;font-weight:normal;font-size:13.58917427px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="text6430-8-0" />
+ <g
+ transform="scale(-1,1)"
+ style="font-style:normal;font-weight:normal;font-size:13.58917427px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:3.41299248;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g6438-3-1">
+ <circle
+ style="display:inline;fill:#7cb87d;fill-opacity:1;stroke:#379860;stroke-width:10.347188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path10796-2-6-2-2-1"
+ transform="matrix(0.32984735,0,0,0.32984735,-136.12701,882.92787)"
+ cx="388.125"
+ cy="468.23718"
+ r="10.625" />
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/developers/Skills Developer Assets/images/dependency_debugevent.svg b/developers/Skills Developer Assets/images/dependency_debugevent.svg
new file mode 100644
index 0000000..ee4b525
--- /dev/null
+++ b/developers/Skills Developer Assets/images/dependency_debugevent.svg
@@ -0,0 +1,404 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ sodipodi:docname="dependency_debugevent.svg"
+ inkscape:export-filename="/home/christian/workspaces/ease_neon/org.eclipse.ease.core/plugins/org.eclipse.ease.ui.scripts/icons/eobj16/expression_and.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ y2="381.80399"
+ x2="432.86548"
+ y1="378.7988"
+ x1="420.52402"
+ gradientTransform="matrix(0.27903303,0,0,0.27903304,-104.76098,-96.354723)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3993"
+ xlink:href="#linearGradient4472"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4472"
+ inkscape:collect="always">
+ <stop
+ id="stop4474"
+ offset="0"
+ style="stop-color:#2d493b;stop-opacity:1;" />
+ <stop
+ id="stop4476"
+ offset="1"
+ style="stop-color:#31564a;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4472"
+ id="linearGradient12878-2-7-1-2"
+ x1="413.01102"
+ y1="366.6012"
+ x2="429.94864"
+ y2="364.92181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.27903303,0,0,0.27903304,-104.76098,-96.354723)" />
+ <linearGradient
+ gradientTransform="matrix(0.27903303,0,0,0.24756874,-178.60364,-39.53384)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient4472"
+ id="linearGradient12876-4-0-6-7"
+ x1="674.84711"
+ y1="180.63965"
+ x2="675.20258"
+ y2="166.79221"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4472"
+ id="linearGradient12868-4-7-0-8"
+ x1="396.0101"
+ y1="359.4902"
+ x2="396.21149"
+ y2="350.94641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.27903303,0,0,0.27903304,-104.60473,-96.339099)" />
+ <linearGradient
+ gradientTransform="matrix(0,0.27903302,0.24756874,0,-39.521247,-178.59954)"
+ y2="166.79221"
+ x2="675.20258"
+ y1="180.63965"
+ x1="674.84711"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3813-8"
+ xlink:href="#linearGradient4472"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="364.92181"
+ x2="429.94864"
+ y1="366.6012"
+ x1="413.01102"
+ gradientTransform="matrix(0,0.27903302,0.27903303,0,-96.353305,-104.6999)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3847-1"
+ xlink:href="#linearGradient4472"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="381.80399"
+ x2="432.86548"
+ y1="378.7988"
+ x1="420.52402"
+ gradientTransform="matrix(0,0.27903302,0.27903303,0,-96.392939,-104.7384)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3881-0"
+ xlink:href="#linearGradient12862-1-8-7-96-9"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12862-1-8-7-96-9">
+ <stop
+ style="stop-color:#203932;stop-opacity:1"
+ offset="0"
+ id="stop12864-3-6-2-86-2" />
+ <stop
+ style="stop-color:#31564a;stop-opacity:1"
+ offset="1"
+ id="stop12866-4-9-5-8-9" />
+ </linearGradient>
+ <linearGradient
+ y2="350.94641"
+ x2="396.21149"
+ y1="359.4902"
+ x1="396.0101"
+ gradientTransform="matrix(0,-0.27903302,0.27903303,0,-96.327735,115.6161)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3915-6"
+ xlink:href="#linearGradient4472"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12717-5-0-4-3"
+ id="radialGradient4194"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.2797889,0,-120.61151)"
+ cx="433.5452"
+ cy="420.74988"
+ fx="433.5452"
+ fy="420.74988"
+ r="12.952347" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12717-5-0-4-3">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop12719-6-3-0-0" />
+ <stop
+ style="stop-color:#8ebc7b;stop-opacity:1"
+ offset="1"
+ id="stop12721-9-4-5-0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4246"
+ id="linearGradient4196"
+ gradientUnits="userSpaceOnUse"
+ x1="427.53012"
+ y1="432.76639"
+ x2="425.4519"
+ y2="415.1088" />
+ <linearGradient
+ id="linearGradient4246"
+ inkscape:collect="always">
+ <stop
+ id="stop4248"
+ offset="0"
+ style="stop-color:#2d493b;stop-opacity:1;" />
+ <stop
+ id="stop4250"
+ offset="1"
+ style="stop-color:#2d707c;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12717-5-0-4-3"
+ id="radialGradient4192"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2231981,-0.08344257,0.10167677,1.4904962,-139.87254,-174.00694)"
+ cx="433.36789"
+ cy="424.34106"
+ fx="433.36789"
+ fy="424.34106"
+ r="12.027534" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4258"
+ id="linearGradient4086"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.27903303,0,0,0.24756874,-178.8909,996.82836)"
+ x1="684.11578"
+ y1="204.12044"
+ x2="666.19678"
+ y2="183.92403" />
+ <linearGradient
+ id="linearGradient4258"
+ inkscape:collect="always">
+ <stop
+ id="stop4260"
+ offset="0"
+ style="stop-color:#387a31;stop-opacity:1" />
+ <stop
+ id="stop4262"
+ offset="1"
+ style="stop-color:#397b3b;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4252"
+ id="linearGradient4190"
+ gradientUnits="userSpaceOnUse"
+ x1="427.92853"
+ y1="447.02145"
+ x2="440.35345"
+ y2="417.26108" />
+ <linearGradient
+ id="linearGradient4252"
+ inkscape:collect="always">
+ <stop
+ id="stop4254"
+ offset="0"
+ style="stop-color:#0d5269;stop-opacity:1" />
+ <stop
+ id="stop4256"
+ offset="1"
+ style="stop-color:#2d707c;stop-opacity:1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="-1.8909024"
+ inkscape:cy="3.6765408"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1043"
+ inkscape:window-x="1920"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4168" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="display:inline;fill:none;stroke:#f2d57c;stroke-width:1.05015528px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3.7480979,1039.5307 -2.81009827,4.8507 2.76014117,4.7643"
+ id="path6702-4-8-8-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;stroke:#9e7400;stroke-width:1.09723449px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3.5266151,1039.3392 -2.93607656,5.068 2.88387966,4.978"
+ id="path6702-1-1-1"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="6.2976694"
+ y="1040.0983"
+ id="text3346"><tspan
+ sodipodi:role="line"
+ id="tspan3348"
+ x="6.2976694"
+ y="1040.0983"
+ style="font-size:15px;line-height:1.25"> </tspan></text>
+ <path
+ style="display:inline;fill:none;stroke:#f2d57c;stroke-width:1.05015528px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.251902,1039.5307 2.810099,4.8507 -2.760141,4.7643"
+ id="path6702-4-8-8-5-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;stroke:#9e7400;stroke-width:1.09723449px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.473385,1039.3392 2.936077,5.068 -2.88388,4.978"
+ id="path6702-1-1-1-0"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="matrix(0.54007337,0,0,0.54007337,3.3371922,479.98473)"
+ style="display:inline"
+ id="g965">
+ <path
+ transform="translate(0,1036.3622)"
+ sodipodi:nodetypes="ccc"
+ style="display:inline;fill:none;stroke:url(#linearGradient3993);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 12.82579,9.4971188 h 1.661134 l 1.422561,1.4112212"
+ id="path12694-8"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(0,1036.3622)"
+ sodipodi:nodetypes="ccccc"
+ style="display:inline;fill:none;stroke:url(#linearGradient12878-2-7-1-2);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10,6.9999994 1.508233,-1.4917651 0.983535,-2.4e-6 0.977902,0.9889529 h 1.541382"
+ id="path12696-5"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(0,1036.3622)"
+ sodipodi:nodetypes="cccc"
+ style="display:inline;fill:none;stroke:url(#linearGradient12876-4-0-6-7);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 8.497184,5.9999999 V 4.5303304 L 9.4993144,3.4748656 V 2.0051169"
+ id="path12698-4"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(0,1036.3622)"
+ sodipodi:nodetypes="cc"
+ style="display:inline;fill:none;stroke:url(#linearGradient12868-4-7-0-8);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 5.516768,6.0186776 5.4903436,0.99696"
+ id="path12700-8"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(0,1036.3622)"
+ sodipodi:nodetypes="cccc"
+ style="display:inline;fill:none;stroke:url(#linearGradient3813-8);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 6.0125902,8.501281 H 4.5429204 L 3.4874556,9.5034095 H 2.0177078"
+ id="path12698-4-3"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(0,1036.3622)"
+ sodipodi:nodetypes="ccccc"
+ style="display:inline;fill:none;stroke:url(#linearGradient3847-1);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7.0014107,10.06109 -1.4917664,1.508234 -2.8e-6,0.983533 0.9889544,0.977904 v 1.541381"
+ id="path12696-5-5"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(0,1036.3622)"
+ sodipodi:nodetypes="ccc"
+ style="display:inline;fill:none;stroke:url(#linearGradient3881-0);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9.4588992,12.848383 v 1.661134 l 1.4112208,1.422562"
+ id="path12694-8-2"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(0,1036.3622)"
+ sodipodi:nodetypes="cc"
+ style="display:inline;fill:none;stroke:url(#linearGradient3915-6);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 6.0300382,5.4946057 1.0083225,5.5210287"
+ id="path12700-8-0"
+ inkscape:connector-curvature="0" />
+ <ellipse
+ ry="14.937631"
+ rx="11.313708"
+ cy="431.08047"
+ cx="433.45645"
+ transform="matrix(0.0982715,-0.0982715,0.0982715,0.0982715,-78.62319,1042.923)"
+ id="path12648-2-2"
+ style="display:inline;fill:url(#radialGradient4194);fill-opacity:1;stroke:url(#linearGradient4196);stroke-width:7.19544077;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <ellipse
+ ry="14.937631"
+ rx="11.313708"
+ cy="431.08047"
+ cx="433.45645"
+ transform="matrix(0.19686609,-0.19686609,0.1968661,0.1968661,-161.15278,1045.6329)"
+ id="path12648-9"
+ style="display:inline;fill:url(#radialGradient4192);fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12686-5"
+ d="m 5.88715,1042.2397 5.808198,5.8082"
+ style="display:inline;fill:none;stroke:url(#linearGradient4086);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <ellipse
+ ry="14.937631"
+ rx="11.313708"
+ cy="431.08047"
+ cx="433.45645"
+ transform="matrix(0.18984474,-0.18571766,0.18984475,0.18571767,-155.10466,1045.8163)"
+ id="path12648-1-6"
+ style="display:inline;fill:none;stroke:url(#linearGradient4190);stroke-width:3.76581597;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:open="true"
+ sodipodi:end="4.931597"
+ sodipodi:start="4.5270744"
+ transform="matrix(0.18984474,-0.18571766,0.18984475,0.18571767,-155.10466,1045.8163)"
+ d="m 431.37184,416.3986 a 11.313708,14.937631 0 0 1 4.54485,0.1017"
+ sodipodi:ry="14.937631"
+ sodipodi:rx="11.313708"
+ sodipodi:cy="431.08047"
+ sodipodi:cx="433.45645"
+ id="path12648-1-6-2"
+ style="display:inline;fill:#2e6a22;fill-opacity:1;stroke:#2e6a22;stroke-width:3.76581597;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ </g>
+ </g>
+</svg>
diff --git a/developers/Skills Developer Assets/images/dependency_launch.svg b/developers/Skills Developer Assets/images/dependency_launch.svg
new file mode 100644
index 0000000..06d803e
--- /dev/null
+++ b/developers/Skills Developer Assets/images/dependency_launch.svg
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ sodipodi:docname="dependency_launch.svg"
+ inkscape:export-filename="/home/christian/workspaces/ease_neon/org.eclipse.ease.core/plugins/org.eclipse.ease.ui.scripts/icons/eobj16/expression_and.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10798-1-9-3-7-1-15-1-7-6-1"
+ id="linearGradient8163-2"
+ gradientUnits="userSpaceOnUse"
+ x1="388.63736"
+ y1="478.18777"
+ x2="388.63736"
+ y2="457.95499" />
+ <linearGradient
+ id="linearGradient10798-1-9-3-7-1-15-1-7-6-1">
+ <stop
+ style="stop-color:#4f9e55;stop-opacity:1"
+ offset="0"
+ id="stop10800-5-2-1-8-2-8-1-7-3-7" />
+ <stop
+ id="stop10806-6-8-5-3-2-95-0-5-4-8"
+ offset="0.5"
+ style="stop-color:#3c8d49;stop-opacity:1;" />
+ <stop
+ style="stop-color:#a4e173;stop-opacity:1;"
+ offset="1"
+ id="stop10802-1-5-3-0-2-0-9-8-4-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="-1.8909024"
+ inkscape:cy="3.6765408"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1043"
+ inkscape:window-x="1920"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4168" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="display:inline;fill:none;stroke:#f2d57c;stroke-width:1.05015528px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3.7480979,1039.5307 -2.81009827,4.8507 2.76014117,4.7643"
+ id="path6702-4-8-8-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;stroke:#9e7400;stroke-width:1.09723449px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3.5266151,1039.3392 -2.93607656,5.068 2.88387966,4.978"
+ id="path6702-1-1-1"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="6.2976694"
+ y="1040.0983"
+ id="text3346"><tspan
+ sodipodi:role="line"
+ id="tspan3348"
+ x="6.2976694"
+ y="1040.0983"
+ style="font-size:15px;line-height:1.25"> </tspan></text>
+ <path
+ style="display:inline;fill:none;stroke:#f2d57c;stroke-width:1.05015528px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.251902,1039.5307 2.810099,4.8507 -2.760141,4.7643"
+ id="path6702-4-8-8-5-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;stroke:#9e7400;stroke-width:1.09723449px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.473385,1039.3392 2.936077,5.068 -2.88388,4.978"
+ id="path6702-1-1-1-0"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="matrix(0.47590719,0,0,0.47590719,0.21803875,541.17984)"
+ style="display:inline"
+ id="g822">
+ <circle
+ r="10.625"
+ cy="468.23718"
+ cx="388.125"
+ transform="matrix(0.62300696,0,0,0.62300696,-225.45273,765.59692)"
+ id="path10796-2-6-0"
+ style="display:inline;fill:url(#linearGradient8163-2);fill-opacity:1;stroke:#14733c;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none"
+ d="m 14.039346,1052.2494 6.0625,5.1875 -6,5.0625 z"
+ id="path8117"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+</svg>
diff --git a/developers/Skills Developer Assets/images/dependency_resource.svg b/developers/Skills Developer Assets/images/dependency_resource.svg
new file mode 100644
index 0000000..0e64582
--- /dev/null
+++ b/developers/Skills Developer Assets/images/dependency_resource.svg
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ sodipodi:docname="dependency_resource.svg"
+ inkscape:export-filename="/home/christian/workspaces/ease_neon/org.eclipse.ease.core/plugins/org.eclipse.ease.ui.scripts/icons/eobj16/expression_and.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient13717-3-9"
+ id="linearGradient13818-7-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.61871845,-4.4034358)"
+ x1="531.09253"
+ y1="366.78851"
+ x2="531.09253"
+ y2="372.91846" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient13717-3-9">
+ <stop
+ style="stop-color:#c48a4e;stop-opacity:1;"
+ offset="0"
+ id="stop13719-9-6" />
+ <stop
+ style="stop-color:#b85f1b;stop-opacity:1"
+ offset="1"
+ id="stop13721-8-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient13739-8-2"
+ id="linearGradient13820-2-2"
+ gradientUnits="userSpaceOnUse"
+ x1="538.00562"
+ y1="396.2229"
+ x2="538.00562"
+ y2="374.21222"
+ gradientTransform="translate(0,-3.4718112)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient13739-8-2">
+ <stop
+ style="stop-color:#ffca57;stop-opacity:1"
+ offset="0"
+ id="stop13741-3-4" />
+ <stop
+ style="stop-color:#fffec5;stop-opacity:1"
+ offset="1"
+ id="stop13743-3-6" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient13733-1-0"
+ id="linearGradient13822-2-6"
+ gradientUnits="userSpaceOnUse"
+ x1="548.45923"
+ y1="398.98798"
+ x2="548.45923"
+ y2="373.7739"
+ gradientTransform="translate(0,-3.4718112)" />
+ <linearGradient
+ id="linearGradient13733-1-0"
+ inkscape:collect="always">
+ <stop
+ id="stop13735-7-6"
+ offset="0"
+ style="stop-color:#73451c;stop-opacity:1" />
+ <stop
+ id="stop13737-8-8"
+ offset="1"
+ style="stop-color:#ba772f;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient13799-7-9"
+ id="linearGradient13824-1-1"
+ gradientUnits="userSpaceOnUse"
+ x1="523.00781"
+ y1="373.2294"
+ x2="543.91406"
+ y2="373.2294"
+ gradientTransform="matrix(0.9148607,0,0,1,44.695973,-3.1358295)" />
+ <linearGradient
+ id="linearGradient13799-7-9">
+ <stop
+ style="stop-color:#b9772f;stop-opacity:1"
+ offset="0"
+ id="stop13801-4-8" />
+ <stop
+ id="stop13809-4-5"
+ offset="0.15381166"
+ style="stop-color:#f2dc91;stop-opacity:1" />
+ <stop
+ id="stop13807-7-9"
+ offset="0.5"
+ style="stop-color:#fbdc8b;stop-opacity:1" />
+ <stop
+ style="stop-color:#e6bd7a;stop-opacity:1"
+ offset="0.75"
+ id="stop13811-8-3" />
+ <stop
+ style="stop-color:#ba772f;stop-opacity:1"
+ offset="1"
+ id="stop13803-6-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="-1.8909024"
+ inkscape:cy="3.6765408"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1043"
+ inkscape:window-x="1920"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4168" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="display:inline;fill:none;stroke:#f2d57c;stroke-width:1.05015528px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3.7480979,1039.5307 -2.81009827,4.8507 2.76014117,4.7643"
+ id="path6702-4-8-8-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;stroke:#9e7400;stroke-width:1.09723449px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3.5266151,1039.3392 -2.93607656,5.068 2.88387966,4.978"
+ id="path6702-1-1-1"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="6.2976694"
+ y="1040.0983"
+ id="text3346"><tspan
+ sodipodi:role="line"
+ id="tspan3348"
+ x="6.2976694"
+ y="1040.0983"
+ style="font-size:15px;line-height:1.25"> </tspan></text>
+ <path
+ style="display:inline;fill:none;stroke:#f2d57c;stroke-width:1.05015528px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.251902,1039.5307 2.810099,4.8507 -2.760141,4.7643"
+ id="path6702-4-8-8-5-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;stroke:#9e7400;stroke-width:1.09723449px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.473385,1039.3392 2.936077,5.068 -2.88388,4.978"
+ id="path6702-1-1-1-0"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="matrix(0.20390281,0,0,0.20390281,-93.821586,967.09817)"
+ style="display:inline"
+ id="g862">
+ <g
+ id="g13813"
+ transform="translate(-40)">
+ <rect
+ ry="2.625"
+ rx="2.625"
+ y="362.64615"
+ x="524.49121"
+ height="16.625"
+ width="15"
+ id="rect13693-3"
+ style="display:inline;fill:#fdf7eb;fill-opacity:1;stroke:url(#linearGradient13818-7-4);stroke-width:3.58380508;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="2.625"
+ rx="2.625"
+ y="370.09302"
+ x="521.38116"
+ height="25.112394"
+ width="35.964333"
+ id="rect13693"
+ style="fill:url(#linearGradient13820-2-2);fill-opacity:1;stroke:url(#linearGradient13822-2-6);stroke-width:3.58380508;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path13797"
+ d="m 523.00373,370.09356 h 18.38298"
+ style="fill:none;stroke:url(#linearGradient13824-1-1);stroke-width:3.42785048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/plugins/org.eclipse.skills.dependencies/META-INF/MANIFEST.MF b/plugins/org.eclipse.skills.dependencies/META-INF/MANIFEST.MF
index 3e2887e..b92030d 100644
--- a/plugins/org.eclipse.skills.dependencies/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.skills.dependencies/META-INF/MANIFEST.MF
@@ -12,4 +12,8 @@
org.eclipse.skills,
org.eclipse.osgi,
org.eclipse.equinox.common,
- org.eclipse.core.runtime
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.debug.ui,
+ org.eclipse.e4.core.services,
+ org.eclipse.osgi.services
diff --git a/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_brokerevent.png b/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_brokerevent.png
new file mode 100644
index 0000000..5295a4c
--- /dev/null
+++ b/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_brokerevent.png
Binary files differ
diff --git a/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_debugevent.png b/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_debugevent.png
new file mode 100644
index 0000000..5593c80
--- /dev/null
+++ b/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_debugevent.png
Binary files differ
diff --git a/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_launch.png b/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_launch.png
new file mode 100644
index 0000000..0fb6439
--- /dev/null
+++ b/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_launch.png
Binary files differ
diff --git a/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_resource.png b/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_resource.png
new file mode 100644
index 0000000..bf88b12
--- /dev/null
+++ b/plugins/org.eclipse.skills.dependencies/icons/full/obj16/dependency_resource.png
Binary files differ
diff --git a/plugins/org.eclipse.skills.dependencies/plugin.xml b/plugins/org.eclipse.skills.dependencies/plugin.xml
index 36bcf7e..a824efe 100644
--- a/plugins/org.eclipse.skills.dependencies/plugin.xml
+++ b/plugins/org.eclipse.skills.dependencies/plugin.xml
@@ -31,6 +31,34 @@
image="icons/full/obj16/dependency_console.png"
name="Console text">
</definition>
+ <definition
+ class="org.eclipse.skills.dependencies.ResourceExistsDependency"
+ description="Verifies that a resource in the workspace exists. Always provide an absolute path starting with a '/'. Accepts * and ** wildcards. "
+ id="org.eclipse.skills.resourceExistsDependency"
+ image="icons/full/obj16/dependency_resource.png"
+ name="Resource">
+ </definition>
+ <definition
+ class="org.eclipse.skills.dependencies.LaunchDependency"
+ description="Waits for a launch to be executed. Parameters use property file format. Accepted parameters are: name=<expected launch name>, type=<run|debug|profile>"
+ id="org.eclipse.skills.launchDependency"
+ image="icons/full/obj16/dependency_launch.png"
+ name="Launch">
+ </definition>
+ <definition
+ class="org.eclipse.skills.dependencies.DebugEventDependency"
+ description="Wait for a debug event. Parameter is one of: suspend,resume,stepInto,stepOver,stepReturn,stepEnd,evaluation,breakpoint,create,terminate,change"
+ id="org.eclipse.skills.debugEventDependency"
+ image="icons/full/obj16/dependency_debugevent.png"
+ name="Debug Event">
+ </definition>
+ <definition
+ class="org.eclipse.skills.dependencies.BrokerEventDependency"
+ description="Wait for a broker event. accepted parameters are: topic=<topic to subscribe to>, <nameOfDataElement>=<RegEx to be matched on the data element>"
+ id="org.eclipse.skills.brokerEventDependencies"
+ image="icons/full/obj16/dependency_brokerevent.png"
+ name="Broker Event">
+ </definition>
</extension>
</plugin>
diff --git a/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/BrokerEventDependency.java b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/BrokerEventDependency.java
new file mode 100644
index 0000000..15bbbce
--- /dev/null
+++ b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/BrokerEventDependency.java
@@ -0,0 +1,49 @@
+package org.eclipse.skills.dependencies;
+
+import java.util.Map.Entry;
+import java.util.regex.Pattern;
+
+import org.eclipse.e4.core.services.events.IEventBroker;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventHandler;
+
+public class BrokerEventDependency extends AbstractCustomDependency implements EventHandler {
+
+ public String getTopic() {
+ return getProperty("topic", "*");
+ }
+
+ @Override
+ public void activate() {
+ final IEventBroker eventBroker = PlatformUI.getWorkbench().getService(IEventBroker.class);
+ eventBroker.subscribe(getTopic(), this);
+ }
+
+ @Override
+ public void deactivate() {
+ final IEventBroker eventBroker = PlatformUI.getWorkbench().getService(IEventBroker.class);
+ eventBroker.unsubscribe(this);
+ }
+
+ @Override
+ public String toString() {
+ return "Event on \"" + getTopic() + "\" detected";
+ }
+
+ @Override
+ public void handleEvent(Event event) {
+ boolean matches = true;
+
+ for (final Entry<Object, Object> entry : getProperties().entrySet()) {
+ if ("topic".equals(entry.getKey()))
+ continue;
+
+ final String eventData = String.valueOf(event.getProperty(String.valueOf(entry.getKey())));
+ matches &= Pattern.matches(String.valueOf(entry.getValue()), eventData);
+ }
+
+ if (matches)
+ setFulfilled(true);
+ }
+}
diff --git a/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ConsolePatternDependency.java b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ConsolePatternDependency.java
index eb6739e..3ad0e40 100644
--- a/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ConsolePatternDependency.java
+++ b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ConsolePatternDependency.java
@@ -13,9 +13,6 @@
private String fOutputPattern;
- public ConsolePatternDependency() {
- }
-
@Override
public void setAttributes(String attributes) {
fOutputPattern = attributes;
diff --git a/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/DebugEventDependency.java b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/DebugEventDependency.java
new file mode 100644
index 0000000..c3e8f15
--- /dev/null
+++ b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/DebugEventDependency.java
@@ -0,0 +1,93 @@
+package org.eclipse.skills.dependencies;
+
+import org.eclipse.debug.core.DebugEvent;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.IDebugEventSetListener;
+import org.eclipse.skills.model.IDependencyWithAttributes;
+import org.eclipse.skills.model.impl.MDependency;
+
+public class DebugEventDependency extends MDependency implements IDependencyWithAttributes, IDebugEventSetListener {
+
+ private static String toString(DebugEvent event) {
+ switch (event.getKind()) {
+ case DebugEvent.RESUME: {
+
+ switch (event.getDetail()) {
+ case DebugEvent.STEP_INTO:
+ return "resume,stepInto";
+ case DebugEvent.STEP_OVER:
+ return "resume,stepOver";
+ case DebugEvent.STEP_RETURN:
+ return "resume,stepReturn";
+ case DebugEvent.STEP_END:
+ return "resume,stepEnd";
+ case DebugEvent.EVALUATION:
+ return "resume,evaluation";
+
+ default:
+ return "resume";
+ }
+ }
+ case DebugEvent.SUSPEND: {
+ switch (event.getDetail()) {
+ case DebugEvent.STEP_END:
+ return "suspend,stepEnd";
+
+ case DebugEvent.BREAKPOINT:
+ return "suspend,breakpoint";
+ case DebugEvent.EVALUATION:
+ return "suspend,evaluation";
+
+ default:
+ return "suspend";
+ }
+ }
+
+ case DebugEvent.CREATE:
+ return "create";
+
+ case DebugEvent.TERMINATE:
+ return "terminate";
+
+ case DebugEvent.CHANGE:
+ return "change";
+
+ default:
+ return "<unknown>";
+ }
+ }
+
+ private String fEventType;
+
+ @Override
+ public void setAttributes(String attributes) {
+ fEventType = attributes;
+ }
+
+ public String getEventType() {
+ return fEventType;
+ }
+
+ @Override
+ public void activate() {
+ DebugPlugin.getDefault().addDebugEventListener(this);
+ }
+
+ @Override
+ public void deactivate() {
+ DebugPlugin.getDefault().removeDebugEventListener(this);
+ }
+
+ @Override
+ public String toString() {
+ return "Debug event \"" + getEventType() + "\" detected";
+ }
+
+ @Override
+ public void handleDebugEvents(DebugEvent[] events) {
+ for (final DebugEvent event : events) {
+ if (toString(event).contains(getEventType()))
+ setFulfilled(true);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/LaunchDependency.java b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/LaunchDependency.java
new file mode 100644
index 0000000..c9af696
--- /dev/null
+++ b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/LaunchDependency.java
@@ -0,0 +1,60 @@
+package org.eclipse.skills.dependencies;
+
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.ILaunchesListener2;
+
+public class LaunchDependency extends AbstractCustomDependency implements ILaunchesListener2 {
+
+ public String getLaunchMode() {
+ return getProperty("mode", "*");
+ }
+
+ public String getLaunchName() {
+ return getProperty("name", "*");
+ }
+
+ @Override
+ public void activate() {
+ final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
+ launchManager.addLaunchListener(this);
+ }
+
+ @Override
+ public void deactivate() {
+ final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
+ launchManager.removeLaunchListener(this);
+ }
+
+ @Override
+ public String toString() {
+ return "Launch \"" + getLaunchName() + "\" (mode " + getLaunchMode() + ") finished";
+ }
+
+ @Override
+ public void launchesRemoved(ILaunch[] launches) {
+ // nothing to do
+ }
+
+ @Override
+ public void launchesAdded(ILaunch[] launches) {
+ // nothing to do
+ }
+
+ @Override
+ public void launchesChanged(ILaunch[] launches) {
+ // nothing to do
+ }
+
+ @Override
+ public void launchesTerminated(ILaunch[] launches) {
+ for (final ILaunch launch : launches) {
+ final boolean modeStatus = matchesWithWildcard(getLaunchMode(), launch.getLaunchMode());
+ final boolean nameStatus = matchesWithWildcard(getLaunchName(), launch.getLaunchConfiguration().getName());
+
+ if (nameStatus || modeStatus)
+ setFulfilled(true);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ResourceExistsDependency.java b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ResourceExistsDependency.java
new file mode 100644
index 0000000..617a32b
--- /dev/null
+++ b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ResourceExistsDependency.java
@@ -0,0 +1,165 @@
+package org.eclipse.skills.dependencies;
+
+import java.util.regex.Pattern;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.skills.Activator;
+import org.eclipse.skills.Logger;
+import org.eclipse.skills.model.IDependencyWithAttributes;
+import org.eclipse.skills.model.impl.MDependency;
+
+public class ResourceExistsDependency extends MDependency implements IDependencyWithAttributes, IResourceChangeListener {
+
+ private IPath fResourcePath;
+
+ public ResourceExistsDependency() {
+ }
+
+ @Override
+ public void setAttributes(String attributes) {
+ fResourcePath = (attributes.contains("*")) ? new WildcardPath(attributes) : new Path(attributes);
+ }
+
+ public IPath getResourcePath() {
+ return fResourcePath;
+ }
+
+ public IContainer getRootContainerToMonitor() {
+ final Path rootPath = new Path("/");
+ for (final String segment : getResourcePath().segments()) {
+ if (segment.contains("*"))
+ break;
+
+ rootPath.append(segment);
+ }
+
+ if (rootPath.segmentCount() > 1)
+ rootPath.removeLastSegments(1);
+
+ return ResourcesPlugin.getWorkspace().getRoot().getFolder(rootPath);
+ }
+
+ @Override
+ public void activate() {
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
+
+ final ResourceValidator validator = new ResourceValidator();
+ try {
+ getRootContainerToMonitor().accept(validator);
+ setFulfilled(validator.isResourceFound());
+
+ } catch (final CoreException e) {
+ Logger.error(Activator.PLUGIN_ID, "Could not visit resource", e);
+
+ setFulfilled(false);
+ }
+ }
+
+ @Override
+ public void deactivate() {
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+ }
+
+ @Override
+ public String toString() {
+ return "Workspace contains \"" + getResourcePath() + "\"";
+ }
+
+ @Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ final ResourceValidator validator = new ResourceValidator();
+ try {
+ event.getDelta().accept(validator);
+ setFulfilled(validator.isResourceFound());
+
+ } catch (final CoreException e) {
+ setFulfilled(false);
+ }
+ }
+
+ private class ResourceValidator implements IResourceVisitor, IResourceDeltaVisitor {
+
+ private boolean fResourceFound = false;
+
+ @Override
+ public boolean visit(IResource resource) throws CoreException {
+ if (getResourcePath().equals(resource.getFullPath()))
+ fResourceFound = true;
+
+ return true;
+ }
+
+ public boolean isResourceFound() {
+ return fResourceFound;
+ }
+
+ @Override
+ public boolean visit(IResourceDelta delta) throws CoreException {
+ if (getResourcePath().equals(delta.getFullPath()))
+ fResourceFound = true;
+
+ return true;
+ }
+ }
+
+ public static class WildcardPath extends Path {
+
+ public static boolean matches(IPath expectedPath, IPath actualPath) {
+ if (actualPath.segmentCount() >= expectedPath.segmentCount()) {
+ if (expectedPath.toPortableString().contains("**")) {
+ for (int index = 0; index < expectedPath.segmentCount(); index++) {
+ if (expectedPath.segment(index).equals("**")) {
+ // try to greedily consume actualPath
+ for (int removeFromTarget = actualPath.segmentCount() - 1; removeFromTarget >= 0; removeFromTarget--) {
+ if (matches(expectedPath.removeFirstSegments(1), actualPath.removeFirstSegments(removeFromTarget)))
+ return true;
+ }
+
+ return false;
+ }
+
+ if (!Pattern.matches(expectedPath.segment(index).replaceAll("*", ".*"), actualPath.segment(index)))
+ return false;
+ }
+
+ } else if (expectedPath.toPortableString().contains("*")) {
+ return Pattern.matches(expectedPath.toPortableString().replaceAll("*", "[~/]*"), actualPath.toPortableString());
+
+ } else
+ return expectedPath.equals(actualPath);
+ }
+
+ return false;
+ }
+
+ public WildcardPath(String device, String path) {
+ super(device, path);
+ }
+
+ public WildcardPath(String fullPath) {
+ super(fullPath);
+ }
+
+ public boolean matches(IPath target) {
+ return matches(this, target);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof IPath)
+ return matches((IPath) obj);
+
+ return super.equals(obj);
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ViewDependency.java b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ViewDependency.java
index 7f2bf56..ff650e7 100644
--- a/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ViewDependency.java
+++ b/plugins/org.eclipse.skills.dependencies/src/org/eclipse/skills/dependencies/ViewDependency.java
@@ -16,7 +16,9 @@
import org.eclipse.skills.model.impl.MDependency;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PlatformUI;
public class ViewDependency extends MDependency implements IDependencyWithAttributes, IPartListener {
@@ -25,6 +27,13 @@
final RunnableWithResult<String> runnable = new RunnableWithResult<String>() {
@Override
public String runWithTry() throws Throwable {
+
+ final IWorkbenchPartReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePartReference();
+ if (reference instanceof IViewReference) {
+ final String secondaryId = ((IViewReference) reference).getSecondaryId();
+ return (secondaryId == null) ? reference.getId() : reference.getId() + ":" + secondaryId;
+ }
+
return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePartReference().getId();
}
};
diff --git a/plugins/org.eclipse.skills/src/org/eclipse/skills/dependencies/AbstractCustomDependency.java b/plugins/org.eclipse.skills/src/org/eclipse/skills/dependencies/AbstractCustomDependency.java
new file mode 100644
index 0000000..b1d8d67
--- /dev/null
+++ b/plugins/org.eclipse.skills/src/org/eclipse/skills/dependencies/AbstractCustomDependency.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2020 christian and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * christian - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.skills.dependencies;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.Properties;
+import java.util.regex.Pattern;
+
+import org.eclipse.skills.Activator;
+import org.eclipse.skills.Logger;
+import org.eclipse.skills.model.IDependencyWithAttributes;
+import org.eclipse.skills.model.impl.MDependency;
+
+public abstract class AbstractCustomDependency extends MDependency implements IDependencyWithAttributes {
+
+ private Properties fProperties;
+
+ @Override
+ public void setAttributes(String attributes) {
+ fProperties = new Properties();
+ try {
+ fProperties.load(new ByteArrayInputStream(attributes.getBytes()));
+ } catch (final IOException e) {
+ Logger.error(Activator.PLUGIN_ID, "Could not load dependency properties: " + attributes);
+ }
+ }
+
+ protected String getProperty(String name) {
+ final Object value = fProperties.get(name);
+ return (value != null) ? value.toString() : null;
+ }
+
+ protected String getProperty(String name, String defaultValue) {
+ final String value = getProperty(name);
+ return (value != null) ? value : defaultValue;
+ }
+
+ protected Properties getProperties() {
+ return fProperties;
+ }
+
+ protected boolean matchesWithWildcard(String property, String actualValue) {
+ if (property == null)
+ return true;
+
+ return Pattern.matches(property.replaceAll("\\*", ".*"), actualValue);
+ }
+}