...
Note |
---|
Note that Plastic has not been ported yet past Java 8 |
Building From Code
Pulling The Code
For read-only access, you can do this
...
Code Block |
---|
git clone ssh://{username}@git.opendaylight.org:29418/plastic.git |
...
Building
Once you have the prerequisites and have cloned the repo, you can issue a build at the
top level of your local copy of the repo
...
You should see log output that shows a successful translation from "abcd" to "ABCD".
If you have errors building...
You might hit an error about "Failure to find com.beust:klaxon:jar". This jar comes from Spring IO at https://repo.spring.io/plugins-release/com/beust/klaxon/ and this repo is not normally mirrored in most repositories, but ODL does mirror this and you can add the following to your ~/settings.xml
Code Block |
---|
<repository>
<id>opendaylight-public</id>
<name>opendaylight-public</name>
<url>https://nexus.opendaylight.org/content/repositories/public</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository> |
Running the tests
Most of the testing is done using unit tests that are written using Spock (a highly recommended
alternative to JUnit). These tests are run as part of every single build and a failure of
a unit test breaks the build.
Using a Plastic distribution
Plastic is 100% independent of ODL code/dependencies and can be used stand-alone. Plastic is available several places including Maven Central and you can insert the dependency in your POM like the below example.
Code Block |
---|
<dependency>
<groupId>org.opendaylight.plastic</groupId>
<artifactId>odl-plastic</artifactId>
<version>2.1.7</version>
</dependency> |
Once you have the depedency, create an arbitrarily named folder, lets call it my-plastic, with the following required structure. Note that the directories can be empty but they are required.
...
Code Block |
---|
my-plastic/
lib/
morphers/
schemas/
classifiers/ |
To use the Plastic logic, you can create a new SearchPath("/opt/myapp/my-plastic") instance, passing the file system location to that root directory, and pass that to a new instance of CartorapherWorker. This worker's lifetime should be that of your application. Just call worker.translate(...) for each translation.
Code Block |
---|
class MyApp {
// throws if this path does not have the required sub-directory structure above
SearchPath root = new SearchPath("/opt/myapp/my-plastic");
CartographerWorker worker = new CartographerWorker(root);
// the schemas directory should have these somewhere:
// my-input-schema-1.0.json
// my-output-schema-1.0.json
VersionedSchema inschema = new VersionedSchema("my-input-schema", "1.0", "json")
VersionedSchema outschema = new VersionedSchema("my-output-schema", "1.0", "json")
void handleIncomingPayload(String payload) {
...
String result = worker.translate(inschema, outschema, payload);
...
}
}
|
Out-of-the-box tutorial examples
There is a set of tutorials in the target/runner directory. You can find them as *.RST files. You
can install rst2pdf and convert them to PDF if you'd like.
From the target/runner directory, you can execute any of the tutorial examples
using a command like
Code Block |
---|
./plastic_runner <name>.properties |