diff --git a/dict-ws/README.md b/dict-ws/README.md
index 518e2ed5ccd1f2b9d32e85937f28dc1f0f83bc7f..5d008590ca65a2c0a8326f305ee957271e990706 100644
--- a/dict-ws/README.md
+++ b/dict-ws/README.md
@@ -2,6 +2,8 @@
 
 This OSGi project shows how an unmodular (monolithic, one-bundle) OSGi project is transformed into a modular, flexible one, in two steps. All three variants implements a simple web service for searching one or more dictionaries. Logically, all variants consist of a domain part, the dictionary- and search-related classes (among others, a **Dict** interface and its implementations) and the web service (a **Servlet**). Technically, the variants differ in how these parts are distributed among bundles and utilize the component mechanism.
 
+In addition to the dict project, there is an (unrelated) example of how to use an EMF model developed using Eclipse PDE in an OSGi bundle (project) managed by Bnd(tools). The case is a REST API serving an EMF model instance, see [below](#emf-rest-in-osgi).   
+
 ## Setup
 
 The root project and folder was created using the BndTools' Bnd OSGi Workspace wizard, and each bundle with the Bnd OSGi Project wizard. Which bundle template to use depends on the specific bundle, there are api, component and servlet bundles in this project.
diff --git a/dict-ws/cnf/build.bnd b/dict-ws/cnf/build.bnd
index 69ecd326425928af506dbc7cb0b0ce106eef29c0..756129ce48aafdbc3fb03b298d2104113f037895 100644
--- a/dict-ws/cnf/build.bnd
+++ b/dict-ws/cnf/build.bnd
@@ -58,18 +58,6 @@
 		pretty = true; \
 		local = ${build}/release
 
--plugin.EMF: aQute.bnd.repository.p2.provider.P2Repository; \
-    name = "EMF 2.19 Release"; \
-    url = "http://download.eclipse.org/modeling/emf/emf/builds/release/2.19"
-
--plugin.Acceleo: aQute.bnd.repository.p2.provider.P2Repository; \
-    name = "Acceleo Updates 3.7 Release"; \
-    url = "https://download.eclipse.org/acceleo/updates/releases/3.7"
-
--plugin.Ra: aQute.bnd.repository.p2.provider.P2Repository; \
-    name = "Local Ra repository"; \
-    url = "file:${build}/../../tdt4250.ra.repository"
-
 -releaserepo: Release
 -baselinerepo: Release
 
diff --git a/dict-ws/cnf/local/index.xml b/dict-ws/cnf/local/index.xml
index 32a4a095c05678a5dfdad39ebda74dbf5c0a3bdb..b0e92af69684bf412c0b74b8213e88a85d5113c7 100644
--- a/dict-ws/cnf/local/index.xml
+++ b/dict-ws/cnf/local/index.xml
@@ -1,2 +1,2 @@
 <?xml version='1.0' encoding='UTF-8'?>
-<repository xmlns="http://www.osgi.org/xmlns/repository/v1.0.0" name="Local" increment="1568286905496"/>
+<repository xmlns="http://www.osgi.org/xmlns/repository/v1.0.0" name="Local" increment="1569449476756"/>
diff --git a/dict-ws/cnf/local/index.xml.sha b/dict-ws/cnf/local/index.xml.sha
index ca0e3d6bbd94ded998ed593c46852478c41f1611..5ac20d78899f7b05691388b2d498cbda87a4b846 100644
--- a/dict-ws/cnf/local/index.xml.sha
+++ b/dict-ws/cnf/local/index.xml.sha
@@ -1 +1 @@
-cedf409ea38a6a13e0a64001bc4efe2bfbd9b1212750671d5aaaea52a658b65a
\ No newline at end of file
+0f4ab43c8259f8770941c97370a69c94057545349c472b60455a3868043d7c19
\ No newline at end of file
diff --git a/dict-ws/cnf/release/index.xml b/dict-ws/cnf/release/index.xml
index 4af80989f34ed6e1e4e03e4fe3a24b0331fda1f3..f8183967563df2ecdd0aff24bcf2f8de4d4a0927 100644
--- a/dict-ws/cnf/release/index.xml
+++ b/dict-ws/cnf/release/index.xml
@@ -1,2 +1,2 @@
 <?xml version='1.0' encoding='UTF-8'?>
-<repository xmlns="http://www.osgi.org/xmlns/repository/v1.0.0" name="Release" increment="1568286905501"/>
+<repository xmlns="http://www.osgi.org/xmlns/repository/v1.0.0" name="Release" increment="1569449476759"/>
diff --git a/dict-ws/cnf/release/index.xml.sha b/dict-ws/cnf/release/index.xml.sha
index 5d4102427a2b82fb0db5c1432ac8039b5de38097..68e315e850547070b2be178bb2599cfb85df1b3d 100644
--- a/dict-ws/cnf/release/index.xml.sha
+++ b/dict-ws/cnf/release/index.xml.sha
@@ -1 +1 @@
-ea524b1f831740b9be82930dd5a0fdb50339e83f978e99477b66f7e840fa4fef
\ No newline at end of file
+5268a56c364964c76e45f65d30b6e34866042e4542a5eae69fe71e863d1dd953
\ No newline at end of file
diff --git a/emf-ws/.gitattributes b/emf-ws/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..b21186bf0bd922af4791eaeb017e1b7264501f29
--- /dev/null
+++ b/emf-ws/.gitattributes
@@ -0,0 +1,75 @@
+# Text files with LF eol
+*.auth crlf=input
+*.awk crlf=input
+*.bnd crlf=input
+*.bndrun crlf=input
+*.c crlf=input ident
+*.conf crlf=input
+*.cpp crlf=input ident
+*.css crlf=input
+*.ddf crlf=input
+*.ee crlf=input
+*.gradle crlf=input
+*.groovy crlf=input
+*.h crlf=input ident
+*.html crlf=input ident
+*.java crlf=input ident
+*.js crlf=input
+*.lib crlf=input
+*.md crlf=input
+*.MF crlf=input
+*.mf crlf=input
+*.perm crlf=input
+*.php crlf=input
+*.pl crlf=input
+*.pom crlf=input
+*.prefs crlf=input
+*.properties crlf=input
+*.py crlf=input
+*.schema crlf=input
+*.SF crlf=input
+*.sh crlf=input
+*.tcl crlf=input
+*.txt crlf=input
+*.xml crlf=input
+*.xsd crlf=input ident
+*.xsl crlf=input
+*.xslt crlf=input
+*.yml crlf=input
+.classpath crlf=input
+.project crlf=input
+gradlew crlf=input
+packageinfo crlf=input
+Makefile crlf=input
+README crlf=input
+LICENSE crlf=input
+
+# No EOL translation
+*.bat -crlf
+
+# Binary. No EOL translation, no diff
+*.ico binary
+*.jpeg binary
+*.jpg binary
+*.png binary
+*.crt binary
+*.pdf binary
+*.dll binary
+*.jar binary
+*.jnilib binary
+*.so binary
+*.zip binary
+*.doc binary
+*.ppt binary
+*.xls binary
+*.odg binary
+*.odp binary
+*.ods binary
+*.odt binary
+*.otg binary
+*.otp binary
+*.ots binary
+*.ott binary
+*.key binary
+*.numbers binary
+*.pages binary
diff --git a/emf-ws/.gitignore b/emf-ws/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..6f9c31eccce0b9b1e9661c01c8ea4bf7a51b47e3
--- /dev/null
+++ b/emf-ws/.gitignore
@@ -0,0 +1,4 @@
+.DS_Store
+.gradle/
+generated/
+.metadata
diff --git a/emf-ws/.gradle-wrapper/gradle-wrapper.jar b/emf-ws/.gradle-wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..457aad0d98108420a977756b7145c93c8910b076
Binary files /dev/null and b/emf-ws/.gradle-wrapper/gradle-wrapper.jar differ
diff --git a/emf-ws/.gradle-wrapper/gradle-wrapper.properties b/emf-ws/.gradle-wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..75b8c7c8c67a003599a36935d1c6a41519fc2207
--- /dev/null
+++ b/emf-ws/.gradle-wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/emf-ws/.travis.yml b/emf-ws/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bd297790de3728e9beff4cc2cb0ad6952d86bc53
--- /dev/null
+++ b/emf-ws/.travis.yml
@@ -0,0 +1,10 @@
+sudo: false
+
+language: java
+
+jdk:
+  - oraclejdk8
+
+install: ./gradlew --version
+
+script: ./gradlew --continue
diff --git a/emf-ws/README.md b/emf-ws/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..72d38c9beda850e4aa0d1f565ece7275429e996a
--- /dev/null
+++ b/emf-ws/README.md
@@ -0,0 +1,84 @@
+# tdt4250.dict project
+
+This OSGi project shows how an unmodular (monolithic, one-bundle) OSGi project is transformed into a modular, flexible one, in two steps. All three variants implements a simple web service for searching one or more dictionaries. Logically, all variants consist of a domain part, the dictionary- and search-related classes (among others, a **Dict** interface and its implementations) and the web service (a **Servlet**). Technically, the variants differ in how these parts are distributed among bundles and utilize the component mechanism.
+
+In addition to the dict project, there is an (unrelated) example of how to use an EMF model developed using Eclipse PDE in an OSGi bundle (project) managed by Bnd(tools). The case is a REST API serving an EMF model instance, see [below](#emf-rest-in-osgi).   
+
+## Setup
+
+The root project and folder was created using the BndTools' Bnd OSGi Workspace wizard, and each bundle with the Bnd OSGi Project wizard. Which bundle template to use depends on the specific bundle, there are api, component and servlet bundles in this project.
+
+To make your own OSGi project with a similar structure, it's best to start with a fresh Eclipse workspace, create a Bnd OSGi Workspace there and the bundles one by one, making sure to "guess" the right template to use. To be able to glance at this example while working on your own, open the example workspace in a *different* Eclipse installation, since it's difficult to open the same Eclipse one different workspaces simultaneously.  
+
+To run the project, you should open the launch.bndrun file in the servlet bundle, make sure it resolves and use **Run OSGi**. You can try various commands in the gogo shell, e.g. **felix:lb** to see which bundles are in which states or **scr:list** to se the active components, and do a dictionary lookup using **http://localhost:8080/dict?q=master** in a browser.
+
+## Variant 1
+
+The first variant consists of the [tdt4250.dict1.servlet](tdt4250.dict1.servlet/README.md) bundle, which was created using the Servlet Component template. It contains both the logic for dictionary search and the **Servlet**, i.e. it is unmodular. It's also inflexible, since the set of dictionaries is hard-coded into the **Servlet** implementation class.
+
+### Packages
+
+- **tdt4250.dict1.core**: The core interfaces and classes that will be used by dictionary users and implementations. There's a **Dict** interface, a **DictSearch** class managing search within a set of **Dict**s and a **DictSearchResult** class for the search result.
+- **tdt4250.dict1.no**: An implementation of the **Dict** interface that loads a Norwegian dictionary from a file, with supporting classes.
+- **tdt4250.dict1.servlet**: The **Servlet** component (i.e. implementation annotated with **@Component**) implementing a web service for searching a set of dictionaries (currently just the Norwegian one). 
+
+## Variant 2
+
+The second variant consists of the [tdt4250.dict2.core](tdt4250.dict2.core/README.md) and [tdt4250.dict2.servlet](tdt4250.dict2.servlet/README.md) bundles. It's somewhat modular, since it's split into at least two bundles. It's also inflexiblie, since the set of dictionaries is still hard-coded into the Servlet implementation class.
+
+### Bundles and packages
+
+* **tdt4250.dict2.core**
+  * **tdt4250.dict2.core**: Same core interfaces and classes of variant 1.
+  * **tdt4250.dict2.no**: Same **Dict** implementation and supporting classes as in variant 1.
+* **tdt4250.dict2.servlet**
+  * **tdt4250.dict2.servlet**: The same **Servlet** component with hard-coded set of dictionaries (currently just the Norwegian one). 
+
+## Variant 3
+
+The third variant consists of the [tdt4250.dict3.api](tdt4250.dict3.api/README.md), [tdt4250.dict3.util](tdt4250.dict3.util/README.md), [tdt4250.dict3.no](tdt4250.dict3.no/README.md), [tdt4250.dict3.servlet](tdt4250.dict3.servlet/README.md) (and [tdt4250.dict3.rest](tdt4250.dict3.rest/README.md) and [tdt4250.dict3.gogo](tdt4250.dict3.gogo/README.md) bundles. It's modular, being split into bundles with minimal dependencies, and flexible, since new bundles can contribute additional dictionaries as components.
+
+### Bundles and packages
+
+* **tdt4250.dict3.api**
+  * **tdt4250.dict3.api**: Same core interfaces and classes of variant 2.
+* **tdt4250.dict3.util**:
+  * **tdt4250.dict3.util**:
+  * **tdt4250.dict3.util.internal**:
+* **tdt4250.dict3.no**: Same **Dict** implementation as in variant 2.
+  * **tdt4250.dict3.no**: Same **Dict** implementation and supporting classes as in variant 1.
+* **tdt4250.dict3.servlet**
+  * **tdt4250.dict3.servlet**: The same **Servlet** implementation, but now depending on (injected) **Dict** services to make it more flexible. 
+* **tdt4250.dict3.gogo**
+  * **tdt4250.dict3.gogo**: Gogo shell commands for managing **Dict** service components. 
+
+## EMF REST in OSGi
+
+This (unrelated) part of this example shows how to serve an EMF instance in a REST API. There's two neat things with this example:
+
+* the REST API servlet is generic, so it can serve any EMF model instance, optionally guided by model annotations
+* the EMF project bundles are built by Eclipse PDE (outside this OSGi project), and used here
+
+### Generic EMF REST servlet
+
+You can think of a REST API as a way of navigating from a set of root objects to some objects of interest and either reading or operating on them. Navigation is done along associations (references in Ecore terminologi) and you can typically filter and select while navigating. The result is typically serialized back as Json.
+
+If you're doing this in pure Java, you can use a combination of reflection and annotations to do this generically. The **tdt4250.emf.*** bundles provide the same for EMF: generic REST API access to any EMF model instance driven by the model:
+
+* **tdt4250.emf.servletsupport**: Service interfaces for various aspects of the the REST API, like navigating along associations, applying a final operation and serializing the result.
+* **tdt4250.emf.servletsupport.impl**: Generic implementation of the service interfaces
+* **tdt4250.emf.servlet.**: The end-point that decodes a request and uses the services. It supports any set of named resources, so the first path segment is the resources to access, and the rest is the REST path and optional query/operation.
+
+### Making EMF model bundles available for OSGi
+
+To test the generic REST support, a resource allocation model (for university staff and courses) is used. This corresponding EMF model project (in general PDE bundle/plugin projects) is outside and in the same folder as the OSGi workspace. The layout is as follows
+
+* **examples** - the git repo folder
+  * **dict-ws** - the OSGi workspace
+    * **cnf** - OSGi workspace configuration project
+    * **tdt4250.emf.*** - bundle project providing REST servlet
+    * **tdt4250.ra.resource - bundle providing a sample EMF resource (instance of ra model) to serve
+  * tdt4250.ra - EMF resource allocation model project
+  * tdt4250.ra.feature - features to publish in p2 repository
+  * tdt4250.ra.repository - p2 repository project
+
diff --git a/emf-ws/build.gradle b/emf-ws/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..23fe81857576dbdb5bfa2662aedc7059a2aac3fe
--- /dev/null
+++ b/emf-ws/build.gradle
@@ -0,0 +1,4 @@
+// Available to customize the build
+wrapper {
+  jarFile = rootProject.file('.gradle-wrapper/gradle-wrapper.jar')
+}
diff --git a/emf-ws/cnf/.gitignore b/emf-ws/cnf/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..0a2101fab9bb59c104be62f2ec454639a57aaf7e
--- /dev/null
+++ b/emf-ws/cnf/.gitignore
@@ -0,0 +1 @@
+/cache/
diff --git a/emf-ws/cnf/.project b/emf-ws/cnf/.project
new file mode 100644
index 0000000000000000000000000000000000000000..1397bbe6205a6f1d4e64391525cdf5fe692854f7
--- /dev/null
+++ b/emf-ws/cnf/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>cnf</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/emf-ws/cnf/build.bnd b/emf-ws/cnf/build.bnd
new file mode 100644
index 0000000000000000000000000000000000000000..69ecd326425928af506dbc7cb0b0ce106eef29c0
--- /dev/null
+++ b/emf-ws/cnf/build.bnd
@@ -0,0 +1,88 @@
+# Configure Repositories
+-plugin.1.R7.API: \
+	aQute.bnd.repository.maven.pom.provider.BndPomRepository; \
+		snapshotUrls=https://oss.sonatype.org/content/repositories/osgi/; \
+		releaseUrls=https://repo.maven.apache.org/maven2/; \
+		revision=org.osgi.enroute:osgi-api:7.0.0; \
+		readOnly=true; \
+		name="OSGi R7 API"
+-plugin.2.Enterprise.API: \
+	aQute.bnd.repository.maven.pom.provider.BndPomRepository; \
+		snapshotUrls=https://oss.sonatype.org/content/repositories/osgi/; \
+		releaseUrls=https://repo.maven.apache.org/maven2/; \
+		revision=org.osgi.enroute:enterprise-api:7.0.0; \
+		readOnly=true; \
+		name="Enterprise Java APIs"
+-plugin.3.R7.Impl: \
+	aQute.bnd.repository.maven.pom.provider.BndPomRepository; \
+		snapshotUrls=https://oss.sonatype.org/content/repositories/osgi/; \
+		releaseUrls=https://repo.maven.apache.org/maven2/; \
+		revision=org.osgi.enroute:impl-index:7.0.0; \
+		readOnly=true; \
+		name="OSGi R7 Reference Implementations"
+-plugin.4.Test: \
+	aQute.bnd.repository.maven.pom.provider.BndPomRepository; \
+		snapshotUrls=https://oss.sonatype.org/content/repositories/osgi/; \
+		releaseUrls=https://repo.maven.apache.org/maven2/; \
+		revision=org.osgi.enroute:test-bundles:7.0.0; \
+		readOnly=true; \
+		name="Testing Bundles"
+-plugin.5.Debug: \
+	aQute.bnd.repository.maven.pom.provider.BndPomRepository; \
+		snapshotUrls=https://oss.sonatype.org/content/repositories/osgi/; \
+		releaseUrls=https://repo.maven.apache.org/maven2/; \
+		revision=org.osgi.enroute:debug-bundles:7.0.0; \
+		readOnly=true; \
+		name="Debug Bundles"
+-plugin.6.Central: \
+	aQute.bnd.repository.maven.provider.MavenBndRepository; \
+		releaseUrl=https://repo.maven.apache.org/maven2/; \
+		index=${.}/central.maven; \
+		readOnly=true; \
+		name="Maven Central"
+-plugin.7.Local: \
+	aQute.bnd.deployer.repository.LocalIndexedRepo; \
+		name = Local; \
+		pretty = true; \
+		local = ${build}/local
+
+-plugin.8.Templates: \
+	aQute.bnd.deployer.repository.LocalIndexedRepo; \
+		name = Templates; \
+		pretty = true; \
+		local = ${build}/templates
+
+-plugin.9.Release: \
+	aQute.bnd.deployer.repository.LocalIndexedRepo; \
+		name = Release; \
+		pretty = true; \
+		local = ${build}/release
+
+-plugin.EMF: aQute.bnd.repository.p2.provider.P2Repository; \
+    name = "EMF 2.19 Release"; \
+    url = "http://download.eclipse.org/modeling/emf/emf/builds/release/2.19"
+
+-plugin.Acceleo: aQute.bnd.repository.p2.provider.P2Repository; \
+    name = "Acceleo Updates 3.7 Release"; \
+    url = "https://download.eclipse.org/acceleo/updates/releases/3.7"
+
+-plugin.Ra: aQute.bnd.repository.p2.provider.P2Repository; \
+    name = "Local Ra repository"; \
+    url = "file:${build}/../../tdt4250.ra.repository"
+
+-releaserepo: Release
+-baselinerepo: Release
+
+# Always use contracts
+-contract: *
+
+# Set Git revision information in the manifests of built bundles
+Git-Descriptor:           ${system-allow-fail;git describe --dirty --always}
+Git-SHA:                  ${system-allow-fail;git rev-list -1 HEAD}
+
+# JUnit
+junit: org.apache.servicemix.bundles.junit; version=4.12
+mockito: org.mockito.mockito-core; version=2.13.0
+mockito-deps: org.objenesis; version=2.6.0,\
+  net.bytebuddy.byte-buddy; version=1.7.9,\
+  net.bytebuddy.byte-buddy-agent; version=1.7.9 
diff --git a/emf-ws/cnf/central.maven b/emf-ws/cnf/central.maven
new file mode 100644
index 0000000000000000000000000000000000000000..18d7d96c3d6264270c2b3593f441bef15a0fb16c
--- /dev/null
+++ b/emf-ws/cnf/central.maven
@@ -0,0 +1,9 @@
+# List repository contents using GAV coordinates
+
+com.fasterxml.jackson.core:jackson-core:2.9.8
+com.fasterxml.jackson.core:jackson-annotations:2.9.8
+com.fasterxml.jackson.core:jackson-databind:2.9.8
+#com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.9.8
+#com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.9.8
+#com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.9.8
+#org.apache.aries.jax.rs:org.apache.aries.jax.rs.jackson:1.0.2
diff --git a/emf-ws/cnf/local/index.xml b/emf-ws/cnf/local/index.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b0e92af69684bf412c0b74b8213e88a85d5113c7
--- /dev/null
+++ b/emf-ws/cnf/local/index.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<repository xmlns="http://www.osgi.org/xmlns/repository/v1.0.0" name="Local" increment="1569449476756"/>
diff --git a/emf-ws/cnf/local/index.xml.sha b/emf-ws/cnf/local/index.xml.sha
new file mode 100644
index 0000000000000000000000000000000000000000..5ac20d78899f7b05691388b2d498cbda87a4b846
--- /dev/null
+++ b/emf-ws/cnf/local/index.xml.sha
@@ -0,0 +1 @@
+0f4ab43c8259f8770941c97370a69c94057545349c472b60455a3868043d7c19
\ No newline at end of file
diff --git a/emf-ws/cnf/release/index.xml b/emf-ws/cnf/release/index.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f8183967563df2ecdd0aff24bcf2f8de4d4a0927
--- /dev/null
+++ b/emf-ws/cnf/release/index.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<repository xmlns="http://www.osgi.org/xmlns/repository/v1.0.0" name="Release" increment="1569449476759"/>
diff --git a/emf-ws/cnf/release/index.xml.sha b/emf-ws/cnf/release/index.xml.sha
new file mode 100644
index 0000000000000000000000000000000000000000..68e315e850547070b2be178bb2599cfb85df1b3d
--- /dev/null
+++ b/emf-ws/cnf/release/index.xml.sha
@@ -0,0 +1 @@
+5268a56c364964c76e45f65d30b6e34866042e4542a5eae69fe71e863d1dd953
\ No newline at end of file
diff --git a/emf-ws/cnf/templates/index.xml b/emf-ws/cnf/templates/index.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fa850a551647945a71fb5e95a09478e7c949437f
--- /dev/null
+++ b/emf-ws/cnf/templates/index.xml
@@ -0,0 +1,96 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<repository xmlns="http://www.osgi.org/xmlns/repository/v1.0.0" name="Templates" increment="1567521105177">
+  <resource>
+    <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="org.bndtools.templates.osgi"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" value="7.0.0.201810191116" type="Version"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="bundle-version" value="7.0.0.201810191116" type="Version"/>
+      <attribute name="osgi.wiring.bundle" value="org.bndtools.templates.osgi"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="bundle-version" value="7.0.0.201810191116" type="Version"/>
+      <attribute name="osgi.wiring.host" value="org.bndtools.templates.osgi"/>
+    </capability>
+    <capability namespace="org.bndtools.template">
+      <attribute name="help" value="comp-help.xml"/>
+      <attribute name="name" value="Component Development"/>
+      <attribute name="icon" value="data:image/gif;base64,R0lGODlhEAAQAPYAAElJSU5OTlFRUVNTU1hYWFtbW2FhYWJiYmRkZGlpaWtra21tbW5ubm9vb3l5eYCAgIGBgYKCgoODg4WFhYeHh4mJiYyMjI+Pj5ycnJ6enqCgoKGhoaOjo6Wlpaampqenp6ioqKqqqqysrLCwsLGxsbKysrW1tbe3t7m5ubq6ury8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9HR0dLS0tTU1NXV1dbW1tjY2NnZ2dvb29zc3N3d3d7e3uLi4uTk5OXl5efn5+np6e3t7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAE8AIf8LSW1hZ2VNYWdpY2sHZ2FtbWE9MQAsAAAAABAAEAAAB6CAT4KDTy8vhIiEL05MI4mCPjw8hUxGjiIeHoRGTkYvKj4+IyI8TCqKTD5GRqGsPC8OipGfGB6GnxWCry9GPCoRghWGPBURES+pkpqDIp88RgwqqS88joO2Iy8+CR4XHq88GIIXnyoJBAGCzdQvIiIq8B4MhCI+1JKSzvODKkYexp8YMPDgI9agCA0SPInwSmGBAAAeLVQxooBERAUIPAoEADs="/>
+      <attribute name="ranking" value="1001.0" type="Double"/>
+      <attribute name="org.bndtools.template" value="project"/>
+      <attribute name="category" value="OSGi Release 7 Templates (with OSGi enRoute repositories)"/>
+      <attribute name="dir" value="templates/ds"/>
+    </capability>
+    <capability namespace="org.bndtools.template">
+      <attribute name="help" value="api-help.xml"/>
+      <attribute name="name" value="API Project"/>
+      <attribute name="icon" value="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABZVBMVEUAAABLh7sxW5A2ZJkzX5Q2ZZpMi8FQkcdHgrcxW5A5aZ5SlMpfrOJdqN4xW5BbpNpVmtBDe7FfrOJOjsRfrOJfrOJAdaoxW5BfrOJfrOJSlMoxW5A8b6Q8b6RfrOJVmtAxW5A5aZ5Yn9VbpNoxW5BdqN5dqN45aZ5frOJSlMpfrOIxW5BAdapDe7H////A3PjB3fr6/P/C3Pn8/v/3+/6/3Prx9/7u9f3j8P3I4fvD3fq92/nm8P3c6/3g7fzR5PvN4/vL4vvU5/rF3vnz+f3Y6v3V6fza6vnH3/fB2e+my+pqseVsn+Gju9dglNdYj9SDocRXhrY9ZZjr8f3q8/vQ5frB3Pq11fmtz/eix/fi7fXi6vXY5/XA2vTT3+6y0O3N3OyaxuuMwOqBvOp3t+jD1OeGruS6zuKzxt+HuN97pdlvnthqm9eMrtVxndKVr85aj8tXlMhTjcFShrltkLhfgq1PdKOdhMrdAAAALnRSTlMA/NqKaxQQB/v69vHw7evq5eTj2s/MysnGu7u2s6uopKOekoSEbV1XS0U2NCge2PG++QAAAOpJREFUGNMVzNNiA1EUheETtKlt2z0eT0ZJG7O2bT5/9vx367tYCKG1kZvbQqGjb2BwdGolAbB4jaH0bibI5juXAOavsG7vaKpkWJ51A8zl2fZW0tF1HRfZE8D0hep7bgAo3nM9AGM5h/CU4Xt74rN9FaD/1LUshdKUwb6aERTRspayb4bwHUIiIjkhhFLTT7cgaPOHKYRwzs3guDeEjZqgIFQxk5dDsJsm3+yjwwOLG572MAGw3FZ7fnktlyuVoluaBYhVMSSkqt5nPmIA8d/S4935iSaFY1fj4cfCzPhwtKu1Xv//i64j1ABv2TB0qN71PQAAAABJRU5ErkJggg=="/>
+      <attribute name="ranking" value="1000.0" type="Double"/>
+      <attribute name="org.bndtools.template" value="project"/>
+      <attribute name="category" value="OSGi Release 7 Templates (with OSGi enRoute repositories)"/>
+      <attribute name="dir" value="templates/api"/>
+    </capability>
+    <capability namespace="org.bndtools.template">
+      <attribute name="help" value="integration-test-help.xml"/>
+      <attribute name="name" value="Integration Testing"/>
+      <attribute name="icon" value="data:image/gif;base64,R0lGODlhEAAQAMQAAOCwsuG6u9hCT9lLV9pfattqc9x0fNx+hd2IjiGETzmPYSyKV1Gbc12hfGqnhXatjo65oJu/qafFsrPKu7/QxOLExP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABYALAAAAAAQABAAAAVMoCWOZGmeaHpGTMs8qsgkUyzTtjVPRV8hBYRpZxEILYQT0ShKihqQW42JFEUSCtEiIaI6LQsGBZKAIQUWwIEEYTgko4BhcAjk7vhTCAA7"/>
+      <attribute name="ranking" value="999.0" type="Double"/>
+      <attribute name="org.bndtools.template" value="project"/>
+      <attribute name="category" value="OSGi Release 7 Templates (with OSGi enRoute repositories)"/>
+      <attribute name="dir" value="templates/integration-test"/>
+    </capability>
+    <capability namespace="org.bndtools.template">
+      <attribute name="help" value="servlet-help.xml"/>
+      <attribute name="name" value="Servlet Component"/>
+      <attribute name="icon" value="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADYUlEQVR4nGWTW2hbBQCGv3PJOT1JeslJejeu6Q1bW1ulY5vZppg6n5RhH9SBA4dziChT5nxpEUEG7kkUcQ6kE5lUkY2+iA/rQFRscU666TrtNemaNGma2CTN5STnHB/mYOr/9D98/A8f/AL/Scf+95tcnu4XfLockpyFdmwbM6MuJZOlqXx6eXxh5vX1u3nhTmnuPybUdx482dC59fbBJx/Tvop/wVrqAnWagWWq1OaHaIs8Xfh5OvpOOjp1Ojp/xgaQAJr6jgo7+kbG3bumT8z7LjnWrBUcagsuxUutsoAsmWy5dlIVfMYR3KENr80rbZKsT2bTv9we6Np36qS684cTG57LPLtnnO/+OIeMie5uJ7a1jFt/C8n7HCt5iZju4UC7Nhi+Iec3bl34UWoPvtfY1O+4WOz80qE7bWLpGAVjDkmssL/nTbz6U5jOAUqmRJUZwcj/iRJow5/MBLO57k/l6vr+w4V7J52687YO2/4efx3EMhbFfAS3a4Bi2aZoCZSMErNzb2DEVfTAgFPTBg+LvjolFJPmsGwbgGIFmpwjjIYmCHgHcEugieCS4K/4Z9zjqSdfVohr1/DWKSHZ7ZQD+wKHuLZ+njp1kBpF5/nB18iaMooADgFkATSxQq4QQRayeDwH8GnNaB41IFoVy95730sEO0aJb8d5sGU3hlUGbCzAssEGoqtnaa1ewF+bx21dZDH6EYZVtMVYPL+kCSYN9Y/zyiPn+HZhktFLIc7OHCdnZClYULLARPzHEWgOAV2pIbNhLkke/0jj/T2+Jza0KkRRYTkxgc+1BUKU2VvTQBVltRvbOcBm0c96VsAjr2Cv9ZP6yXtG0qo752XT83LrQ81qvCwhWSap3DSqLKBKKdIlHdsdJFWSyMpdyKJMJnGZ6pnhbGJx8YgYmT2V/PVqbMy+ukqlsE2N51GyRTAtm0Shi9rGF0mXIGdC0bQRSwa+SIjErDQWDp9OSgAb4a9nNlN7m4danUMRYwq7fIWk0UNzx8ckKjXkKhalfI5eJc/ucJkbE4VPrl8/OvavMwH07vr81ZZe6125L1yz5+EjLBRUKjY0KqCsbrH0zVzmtyvR0Zs3j334vzfeib/zuNdd/cAh1SEPNzY427Fs1mO5pVLRmNrO/X5+dfWDzbv5vwErUW66xLs5NQAAAABJRU5ErkJggg=="/>
+      <attribute name="ranking" value="998.0" type="Double"/>
+      <attribute name="org.bndtools.template" value="project"/>
+      <attribute name="category" value="OSGi Release 7 Templates (with OSGi enRoute repositories)"/>
+      <attribute name="dir" value="templates/servlet"/>
+    </capability>
+    <capability namespace="org.bndtools.template">
+      <attribute name="help" value="jax-rs-help.xml"/>
+      <attribute name="name" value="JAX-RS Resource Component"/>
+      <attribute name="icon" value="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAeFBMVEUAAAC+uQEAAAANDQAAAAAAAADs6ADl4gDj3wC4tQHZ1gDIxQfAvQCzsACbmgayrQKWlACOjAB9ewNWVAU7OgHm4wDf3QC4twOopgCgngCCgABkYgBtawBYVwAAAADU+3n/+wD49ADOygDl4AD8+ADu6gDf2wDRzQDVgRdOAAAAH3RSTlMAwQ0cCAT89/Hf38K1q6CcdF1NNCr36aiPgmpoQSwUn3NPfwAAAHhJREFUGNNlz2kPgjAYA+CKB6LiibcC4/z//5A2kHcQ+mXps6TZgGwSdjDH83Ktk7WHhdu9RR7y3D1eCcmAqban24qgAYEojAkaiHqo9xcBrwvVzeEawEMZfVPAoGwbF8b/ETgNBAPYAAzuzx+rgR4EePgkrAaz73cWXBDb6aht4AAAAABJRU5ErkJggg=="/>
+      <attribute name="ranking" value="997.0" type="Double"/>
+      <attribute name="org.bndtools.template" value="project"/>
+      <attribute name="category" value="OSGi Release 7 Templates (with OSGi enRoute repositories)"/>
+      <attribute name="dir" value="templates/jax-rs"/>
+    </capability>
+    <capability namespace="org.bndtools.template">
+      <attribute name="help" value="jpa-dao-help.xml"/>
+      <attribute name="name" value="JPA Data Access Component"/>
+      <attribute name="icon" value="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC"/>
+      <attribute name="ranking" value="996.0" type="Double"/>
+      <attribute name="org.bndtools.template" value="project"/>
+      <attribute name="category" value="OSGi Release 7 Templates (with OSGi enRoute repositories)"/>
+      <attribute name="dir" value="templates/jpa-dao"/>
+    </capability>
+    <capability namespace="org.bndtools.template">
+      <attribute name="help" value="app-help.xml"/>
+      <attribute name="name" value="Application Project"/>
+      <attribute name="icon" value="data:image/gif;base64,R0lGODlhEAAQANUAAACPKmGAqW6KsHeSsnmVuICXs4GYsYScu4ylxJipuaGzy6i81rCKIbjBwbqXJr3M2L7O48TQ38bX6czb7c64b9Df8NHf7tLg7NPh8tfh59vm893o9d7k7eLn3uLr9uvx9+3y+O7r2PL1+PPt1Pf4+fvdg/vhkPzno/ztufzyz/754v797/7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkKAC0ALAAAAAAQABAAAAaBwJZwSCwWKY6k0kExthwrVQp1MpUcTgpjy2U0jRyCRsQSaQgcYwTh+YhIgI8HESkqFh4QiQUAeBYKRQcQeW99ABAHRQITG20ghwACRQEYGI4ekQCLEpYaGpqbQwcPFZYYmnYNHRkXFpGBRBEJKSMjIYcJdUURAwUGBn0Du05DokRBADs="/>
+      <attribute name="ranking" value="1000.0" type="Double"/>
+      <attribute name="org.bndtools.template" value="project"/>
+      <attribute name="category" value="OSGi Release 7 Templates (with OSGi enRoute repositories)"/>
+      <attribute name="dir" value="templates/app"/>
+    </capability>
+    <capability namespace="org.bndtools.template">
+      <attribute name="help" value="templates/launch/felix-gogo.xml"/>
+      <attribute name="name" value="Felix 4+"/>
+      <attribute name="icon" value="data:image/gif;base64,R0lGODlhEAAQAOYAAAAAAP///+EdiTcIsd/AXIyltvCtwoUNb8VoTy4FVW07zOh0lH9/f4oHstbg4tvQmSItMbYDjuc5YMWfuD8FgXYO2OIMY8WkUuheZNyCucnJyWUGrfXt1oYemFkDaemWoaysrOtVgiMGeFYGks0CfMkferAdktxBd+fdraAFo0wKwffZ5e7Fxfzu8e64rt7Vg7oHdOglXuZodUQGbYIMw+AZdc+6VNeauePq6uWJltkCbpIEmfPc1nQGqGwJzeuhqygGa+RBa+hHevf5+UcKiuAyaMcEiOQdaukUXd0XYiMFUbwLiJ8HmH2GieLRjHgIx+ywudgMbvfi4rQHlr8Di1AGl+qDlokKq/76+/r18eNAdqQEnI2rs9MDed8EbGcHs+iXp/Lx2Pnv7ScETvfe5uYLZNsFcKQFoNni47sIiv37+MoFh74EiP79/Pv7+/Pf1v34+sADiP////fa5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAAHQALAAAAAAQABAAAAeRgA8vKC10hoeIhk4XNic/YomJYQQIB2lFH1mRh29BMB47SzEsm4YGJQ0UVUZIOXClNyZUIzNTZVpSm3JWUWcbCUw6GDybbWAWbD1jV2YSHKVQSRFfSjRrMmqlC14pKkAVAi6lWEIkTwNEXSGldGRHcT4iHRM47HM1WwoQXGjsdCsZCjQB4c/QEAduGBREpIFOIAA7"/>
+      <attribute name="ranking" value="1001.0" type="Double"/>
+      <attribute name="org.bndtools.template" value="bndrun"/>
+      <attribute name="category" value="OSGi Release 7 Templates (with OSGi enRoute repositories)"/>
+      <attribute name="dir" value="templates/launch/felix-gogo"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="size" value="25577" type="Long"/>
+      <attribute name="url" value="org.bndtools.templates.osgi/org.bndtools.templates.osgi-7.0.0.jar"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+      <attribute name="osgi.content" value="274A856A7D66B1B56D976F1619B5DE2253635305EC8D1BA271389F8AB5623495"/>
+    </capability>
+  </resource>
+</repository>
diff --git a/emf-ws/cnf/templates/index.xml.sha b/emf-ws/cnf/templates/index.xml.sha
new file mode 100644
index 0000000000000000000000000000000000000000..57ac5486c6fd4101679803f10f0c72a8e214409a
--- /dev/null
+++ b/emf-ws/cnf/templates/index.xml.sha
@@ -0,0 +1 @@
+908735368c6088de40477c5e8f80d3ebeeb0c818857491f7f764a78c518da49c
\ No newline at end of file
diff --git a/emf-ws/gradle.properties b/emf-ws/gradle.properties
new file mode 100644
index 0000000000000000000000000000000000000000..06a321293ef3f8d547f1c04833980ccdd73318c9
--- /dev/null
+++ b/emf-ws/gradle.properties
@@ -0,0 +1,3 @@
+bnd_version=4.2.0-SNAPSHOT
+
+bnd_repourl=https://oss.sonatype.org/content/repositories/snapshots
diff --git a/emf-ws/gradlew b/emf-ws/gradlew
new file mode 100644
index 0000000000000000000000000000000000000000..72c3264f862ed406ccef99c7d951f9a5b8025cd9
--- /dev/null
+++ b/emf-ws/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/.gradle-wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/emf-ws/gradlew.bat b/emf-ws/gradlew.bat
new file mode 100644
index 0000000000000000000000000000000000000000..9ffb62785ec7a6a2908f4f403f8dff599db84d25
--- /dev/null
+++ b/emf-ws/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\.gradle-wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/emf-ws/settings.gradle b/emf-ws/settings.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..a2a7c66c211c18622c168e36271dea16b415d3ed
--- /dev/null
+++ b/emf-ws/settings.gradle
@@ -0,0 +1,14 @@
+buildscript {
+	repositories {
+		maven {
+			url uri(bnd_repourl)
+		}
+		mavenCentral()
+	}
+	dependencies { classpath "biz.aQute.bnd:biz.aQute.bnd.gradle:${bnd_version}" }
+	/* Add bnd gradle plugin to buildscript classpath of rootProject */
+	def bndPlugin = files(configurations.classpath.files)
+	gradle.rootProject { buildscript { dependencies { classpath bndPlugin } } }
+}
+
+apply plugin: 'biz.aQute.bnd.workspace'
diff --git a/dict-ws/tdt4250.emf.servlet/.classpath b/emf-ws/tdt4250.emf.servlet/.classpath
similarity index 100%
rename from dict-ws/tdt4250.emf.servlet/.classpath
rename to emf-ws/tdt4250.emf.servlet/.classpath
diff --git a/dict-ws/tdt4250.emf.servlet/.project b/emf-ws/tdt4250.emf.servlet/.project
similarity index 100%
rename from dict-ws/tdt4250.emf.servlet/.project
rename to emf-ws/tdt4250.emf.servlet/.project
diff --git a/dict-ws/tdt4250.emf.servlet/bnd.bnd b/emf-ws/tdt4250.emf.servlet/bnd.bnd
similarity index 100%
rename from dict-ws/tdt4250.emf.servlet/bnd.bnd
rename to emf-ws/tdt4250.emf.servlet/bnd.bnd
diff --git a/dict-ws/tdt4250.emf.servlet/launch.bndrun b/emf-ws/tdt4250.emf.servlet/launch.bndrun
similarity index 100%
rename from dict-ws/tdt4250.emf.servlet/launch.bndrun
rename to emf-ws/tdt4250.emf.servlet/launch.bndrun
diff --git a/dict-ws/tdt4250.emf.servlet/src/tdt4250/ra/servlet/ResourceServlet.java b/emf-ws/tdt4250.emf.servlet/src/tdt4250/ra/servlet/ResourceServlet.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servlet/src/tdt4250/ra/servlet/ResourceServlet.java
rename to emf-ws/tdt4250.emf.servlet/src/tdt4250/ra/servlet/ResourceServlet.java
diff --git a/dict-ws/tdt4250.emf.servlet/test/tdt4250/ra/servlet/ignore.md b/emf-ws/tdt4250.emf.servlet/test/tdt4250/ra/servlet/ignore.md
similarity index 100%
rename from dict-ws/tdt4250.emf.servlet/test/tdt4250/ra/servlet/ignore.md
rename to emf-ws/tdt4250.emf.servlet/test/tdt4250/ra/servlet/ignore.md
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/.classpath b/emf-ws/tdt4250.emf.servletsupport.impl/.classpath
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/.classpath
rename to emf-ws/tdt4250.emf.servletsupport.impl/.classpath
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/.project b/emf-ws/tdt4250.emf.servletsupport.impl/.project
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/.project
rename to emf-ws/tdt4250.emf.servletsupport.impl/.project
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/bnd.bnd b/emf-ws/tdt4250.emf.servletsupport.impl/bnd.bnd
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/bnd.bnd
rename to emf-ws/tdt4250.emf.servletsupport.impl/bnd.bnd
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/launch.bndrun b/emf-ws/tdt4250.emf.servletsupport.impl/launch.bndrun
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/launch.bndrun
rename to emf-ws/tdt4250.emf.servletsupport.impl/launch.bndrun
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/AnnotationUtil.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/AnnotationUtil.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/AnnotationUtil.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/AnnotationUtil.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonEAttributeSerializer.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonEAttributeSerializer.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonEAttributeSerializer.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonEAttributeSerializer.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonEObjectSerializer.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonEObjectSerializer.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonEObjectSerializer.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonEObjectSerializer.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonSerializer.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonSerializer.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonSerializer.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/JsonSerializer.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/NameReferenceResolver.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/NameReferenceResolver.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/NameReferenceResolver.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/NameReferenceResolver.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/RequestHandler.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/RequestHandler.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/RequestHandler.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/RequestHandler.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/RequestSupport.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/RequestSupport.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/RequestSupport.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/RequestSupport.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/ResourceProvider.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/ResourceProvider.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/ResourceProvider.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/ResourceProvider.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/package-info.java b/emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/package-info.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/package-info.java
rename to emf-ws/tdt4250.emf.servletsupport.impl/src/tdt4250/servletsupport/impl/package-info.java
diff --git a/dict-ws/tdt4250.emf.servletsupport.impl/test/tdt4250/servletsupport/impl/ignore.md b/emf-ws/tdt4250.emf.servletsupport.impl/test/tdt4250/servletsupport/impl/ignore.md
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport.impl/test/tdt4250/servletsupport/impl/ignore.md
rename to emf-ws/tdt4250.emf.servletsupport.impl/test/tdt4250/servletsupport/impl/ignore.md
diff --git a/dict-ws/tdt4250.emf.servletsupport/.classpath b/emf-ws/tdt4250.emf.servletsupport/.classpath
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/.classpath
rename to emf-ws/tdt4250.emf.servletsupport/.classpath
diff --git a/dict-ws/tdt4250.emf.servletsupport/.project b/emf-ws/tdt4250.emf.servletsupport/.project
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/.project
rename to emf-ws/tdt4250.emf.servletsupport/.project
diff --git a/dict-ws/tdt4250.emf.servletsupport/bnd.bnd b/emf-ws/tdt4250.emf.servletsupport/bnd.bnd
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/bnd.bnd
rename to emf-ws/tdt4250.emf.servletsupport/bnd.bnd
diff --git a/dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IPostHandler.java b/emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IPostHandler.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IPostHandler.java
rename to emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IPostHandler.java
diff --git a/dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IReferenceResolver.java b/emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IReferenceResolver.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IReferenceResolver.java
rename to emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IReferenceResolver.java
diff --git a/dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IRequestPathResolver.java b/emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IRequestPathResolver.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IRequestPathResolver.java
rename to emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IRequestPathResolver.java
diff --git a/dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IRequestQueryExecutor.java b/emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IRequestQueryExecutor.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IRequestQueryExecutor.java
rename to emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IRequestQueryExecutor.java
diff --git a/dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IResourceProvider.java b/emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IResourceProvider.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IResourceProvider.java
rename to emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IResourceProvider.java
diff --git a/dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IResponseSerializer.java b/emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IResponseSerializer.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IResponseSerializer.java
rename to emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/IResponseSerializer.java
diff --git a/dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/package-info.java b/emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/package-info.java
similarity index 100%
rename from dict-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/package-info.java
rename to emf-ws/tdt4250.emf.servletsupport/src/tdt4250/servletsupport/package-info.java
diff --git a/emf-ws/tdt4250.ra.resource/.classpath b/emf-ws/tdt4250.ra.resource/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..3ebd512b99a9612a147089ef7571efa04b68e391
--- /dev/null
+++ b/emf-ws/tdt4250.ra.resource/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="aQute.bnd.classpath.container"/>
+	<classpathentry kind="src" output="bin" path="src"/>
+	<classpathentry kind="src" output="bin_test" path="test">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/emf-ws/tdt4250.ra.resource/.project b/emf-ws/tdt4250.ra.resource/.project
new file mode 100644
index 0000000000000000000000000000000000000000..9a8cd792d666b6eea45308be4b9b53db720830cf
--- /dev/null
+++ b/emf-ws/tdt4250.ra.resource/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>tdt4250.ra.resource</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>bndtools.core.bndbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>bndtools.core.bndnature</nature>
+	</natures>
+</projectDescription>
diff --git a/emf-ws/tdt4250.ra.resource/bnd.bnd b/emf-ws/tdt4250.ra.resource/bnd.bnd
new file mode 100644
index 0000000000000000000000000000000000000000..4cc24cbc02f3428b65a36d7cbaaeaa4c17a0ddbd
--- /dev/null
+++ b/emf-ws/tdt4250.ra.resource/bnd.bnd
@@ -0,0 +1,20 @@
+-buildpath: \
+	osgi.annotation;version=7.0.0,\
+	osgi.core;version=7.0.0,\
+	osgi.cmpn;version=7.0.0,\
+	tdt4250.ra,\
+	tdt4250.emf.servletsupport;version=latest,\
+	org.eclipse.emf.common,\
+	org.eclipse.emf.ecore,\
+	org.eclipse.emf.ecore.xmi,\
+	tdt4250.emf.servletsupport.impl;version=latest
+
+-testpath: \
+	${junit},\
+	${mockito},\
+	${mockito-deps}
+
+javac.source: 1.8
+javac.target: 1.8
+
+Bundle-Version: 0.0.0.${tstamp}
\ No newline at end of file
diff --git a/emf-ws/tdt4250.ra.resource/launch.bndrun b/emf-ws/tdt4250.ra.resource/launch.bndrun
new file mode 100644
index 0000000000000000000000000000000000000000..58af94735fb58ec6bacc610bb48868088520b26b
--- /dev/null
+++ b/emf-ws/tdt4250.ra.resource/launch.bndrun
@@ -0,0 +1,18 @@
+-runfw: org.eclipse.osgi;version=3.13
+-runprovidedcapabilities: ${native_capability}
+
+-resolve.effective: active
+
+-runproperties: \
+	org.osgi.service.http.port=8080,\
+	osgi.console=,\
+	osgi.console.enable.builtin=false
+
+-runbundles:\
+	org.apache.felix.gogo.runtime,\
+	org.apache.felix.gogo.shell,\
+	org.apache.felix.gogo.command
+
+-runrequires:\
+	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'
diff --git a/emf-ws/tdt4250.ra.resource/src/tdt4250/ra/resource/SampleResource.java b/emf-ws/tdt4250.ra.resource/src/tdt4250/ra/resource/SampleResource.java
new file mode 100644
index 0000000000000000000000000000000000000000..f03276fbe327e81ec8dc4889b4511c06090f23d9
--- /dev/null
+++ b/emf-ws/tdt4250.ra.resource/src/tdt4250/ra/resource/SampleResource.java
@@ -0,0 +1,31 @@
+package tdt4250.ra.resource;
+
+import java.net.URL;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+
+import tdt4250.ra.RaPackage;
+import tdt4250.ra.util.RaResourceFactoryImpl;
+import tdt4250.servletsupport.IResourceProvider;
+import tdt4250.servletsupport.impl.ResourceProvider;
+
+@Component
+public class SampleResource extends ResourceProvider implements IResourceProvider {
+
+	@Activate
+	public void activate(BundleContext bc) {
+		URL resource = bc.getBundle().getResource("/tdt4250/ra/resource/sample.ra");
+		setUri(URI.createURI(resource.toString()));
+	}
+
+	@Override
+	protected void configureResourceSet(ResourceSet resourceSet) {
+		super.configureResourceSet(resourceSet);
+		resourceSet.getPackageRegistry().put(RaPackage.eNS_URI, RaPackage.eINSTANCE);
+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ra", new RaResourceFactoryImpl());
+	}
+}
diff --git a/emf-ws/tdt4250.ra.resource/src/tdt4250/ra/resource/sample.ra b/emf-ws/tdt4250.ra.resource/src/tdt4250/ra/resource/sample.ra
new file mode 100644
index 0000000000000000000000000000000000000000..b1dd27d1151e871bd3908e38be6d4b4692fbc897
--- /dev/null
+++ b/emf-ws/tdt4250.ra.resource/src/tdt4250/ra/resource/sample.ra
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ra:Department
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ra="platform:/plugin/tdt4250.ra/model/ra.ecore"
+    xsi:schemaLocation="platform:/plugin/tdt4250.ra/model/ra.ecore ra.ecore"
+    name="Dept. of CS"
+    shortName="IDI">
+  <resourceAllocations
+      factor="0.5">
+    <person
+        href="idi.xmi#//@staff.0"/>
+  </resourceAllocations>
+  <resourceAllocations
+      factor="1.0">
+    <person
+        href="idi.xmi#//@staff.0"/>
+  </resourceAllocations>
+</ra:Department>
diff --git a/emf-ws/tdt4250.ra.resource/test/tdt4250/ra/resource/ignore.md b/emf-ws/tdt4250.ra.resource/test/tdt4250/ra/resource/ignore.md
new file mode 100644
index 0000000000000000000000000000000000000000..feef779626117f42fc12b00ff3e75b5a2cc158fe
--- /dev/null
+++ b/emf-ws/tdt4250.ra.resource/test/tdt4250/ra/resource/ignore.md
@@ -0,0 +1 @@
+# To make sure the folder exists in git