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 &apos;/&apos;. 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=&lt;expected launch name&gt;, type=&lt;run|debug|profile&gt;"
+            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=&lt;topic to subscribe to&gt;, &lt;nameOfDataElement&gt;=&lt;RegEx to be matched on the data element&gt;"
+            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);
+	}
+}