Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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