developer house keeping 13/10113/1
authorThomas Kee <xsited@yahoo.com>
Wed, 20 Aug 2014 21:30:55 +0000 (14:30 -0700)
committerThomas Kee <xsited@yahoo.com>
Wed, 20 Aug 2014 21:46:13 +0000 (14:46 -0700)
Change-Id: Ib9d8cb18f196d17cc115ed162164fc874ecc5d53
Signed-off-by: Thomas Kee <xsited@yahoo.com>
19 files changed:
git/README [new file with mode: 0644]
git/commit-msg [new file with mode: 0755]
git/config [new file with mode: 0644]
packetcable-consumer/pom.xml [new file with mode: 0644]
packetcable-consumer/src/main/yang/README.md [new file with mode: 0644]
packetcable-it/pom.xml [new file with mode: 0644]
packetcable-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java [new file with mode: 0644]
packetcable-it/src/test/resources/controller.xml [new file with mode: 0644]
packetcable-it/src/test/resources/logback.xml [new file with mode: 0644]
packetcable-model/pom.xml
packetcable-model/src/main/yang/README.md [new file with mode: 0644]
packetcable-model/src/main/yang/packetcable-service.yang
packetcable-model/src/main/yang/packetcable.yang.old [new file with mode: 0644]
packetcable-provider/pom.xml [new file with mode: 0644]
packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModule.java [new file with mode: 0644]
packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModuleFactory.java [new file with mode: 0644]
packetcable-provider/src/main/java/org/opendaylight/controller/packetcable/provider/OpendaylightPacketcableProvider.java [new file with mode: 0644]
packetcable-provider/src/main/yang/packetcable-provider-impl.yang [new file with mode: 0644]
pom.xml

diff --git a/git/README b/git/README
new file mode 100644 (file)
index 0000000..086784e
--- /dev/null
@@ -0,0 +1,5 @@
+gitdir=$(git rev-parse --git-dir); scp -p -P 29418 xsited@git.opendaylight.org:hooks/commit-msg ${gitdir}/hooks/
+git add .
+git commit --signoff -m "comment"
+git push origin HEAD:refs/for/master
+
diff --git a/git/commit-msg b/git/commit-msg
new file mode 100755 (executable)
index 0000000..73dbc75
--- /dev/null
@@ -0,0 +1,181 @@
+#!/bin/sh
+# From Gerrit Code Review 2.8.1
+#
+# Part of Gerrit Code Review (http://code.google.com/p/gerrit/)
+#
+# Copyright (C) 2009 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+unset GREP_OPTIONS
+
+CHANGE_ID_AFTER="Bug|Issue"
+MSG="$1"
+
+# Check for, and add if missing, a unique Change-Id
+#
+add_ChangeId() {
+       clean_message=`sed -e '
+               /^diff --git a\/.*/{
+                       s///
+                       q
+               }
+               /^Signed-off-by:/d
+               /^#/d
+       ' "$MSG" | git stripspace`
+       if test -z "$clean_message"
+       then
+               return
+       fi
+
+       if test "false" = "`git config --bool --get gerrit.createChangeId`"
+       then
+               return
+       fi
+
+       # Does Change-Id: already exist? if so, exit (no change).
+       if grep -i '^Change-Id:' "$MSG" >/dev/null
+       then
+               return
+       fi
+
+       id=`_gen_ChangeId`
+       T="$MSG.tmp.$$"
+       AWK=awk
+       if [ -x /usr/xpg4/bin/awk ]; then
+               # Solaris AWK is just too broken
+               AWK=/usr/xpg4/bin/awk
+       fi
+
+       # How this works:
+       # - parse the commit message as (textLine+ blankLine*)*
+       # - assume textLine+ to be a footer until proven otherwise
+       # - exception: the first block is not footer (as it is the title)
+       # - read textLine+ into a variable
+       # - then count blankLines
+       # - once the next textLine appears, print textLine+ blankLine* as these
+       #   aren't footer
+       # - in END, the last textLine+ block is available for footer parsing
+       $AWK '
+       BEGIN {
+               # while we start with the assumption that textLine+
+               # is a footer, the first block is not.
+               isFooter = 0
+               footerComment = 0
+               blankLines = 0
+       }
+
+       # Skip lines starting with "#" without any spaces before it.
+       /^#/ { next }
+
+       # Skip the line starting with the diff command and everything after it,
+       # up to the end of the file, assuming it is only patch data.
+       # If more than one line before the diff was empty, strip all but one.
+       /^diff --git a/ {
+               blankLines = 0
+               while (getline) { }
+               next
+       }
+
+       # Count blank lines outside footer comments
+       /^$/ && (footerComment == 0) {
+               blankLines++
+               next
+       }
+
+       # Catch footer comment
+       /^\[[a-zA-Z0-9-]+:/ && (isFooter == 1) {
+               footerComment = 1
+       }
+
+       /]$/ && (footerComment == 1) {
+               footerComment = 2
+       }
+
+       # We have a non-blank line after blank lines. Handle this.
+       (blankLines > 0) {
+               print lines
+               for (i = 0; i < blankLines; i++) {
+                       print ""
+               }
+
+               lines = ""
+               blankLines = 0
+               isFooter = 1
+               footerComment = 0
+       }
+
+       # Detect that the current block is not the footer
+       (footerComment == 0) && (!/^\[?[a-zA-Z0-9-]+:/ || /^[a-zA-Z0-9-]+:\/\//) {
+               isFooter = 0
+       }
+
+       {
+               # We need this information about the current last comment line
+               if (footerComment == 2) {
+                       footerComment = 0
+               }
+               if (lines != "") {
+                       lines = lines "\n";
+               }
+               lines = lines $0
+       }
+
+       # Footer handling:
+       # If the last block is considered a footer, splice in the Change-Id at the
+       # right place.
+       # Look for the right place to inject Change-Id by considering
+       # CHANGE_ID_AFTER. Keys listed in it (case insensitive) come first,
+       # then Change-Id, then everything else (eg. Signed-off-by:).
+       #
+       # Otherwise just print the last block, a new line and the Change-Id as a
+       # block of its own.
+       END {
+               unprinted = 1
+               if (isFooter == 0) {
+                       print lines "\n"
+                       lines = ""
+               }
+               changeIdAfter = "^(" tolower("'"$CHANGE_ID_AFTER"'") "):"
+               numlines = split(lines, footer, "\n")
+               for (line = 1; line <= numlines; line++) {
+                       if (unprinted && match(tolower(footer[line]), changeIdAfter) != 1) {
+                               unprinted = 0
+                               print "Change-Id: I'"$id"'"
+                       }
+                       print footer[line]
+               }
+               if (unprinted) {
+                       print "Change-Id: I'"$id"'"
+               }
+       }' "$MSG" > "$T" && mv "$T" "$MSG" || rm -f "$T"
+}
+_gen_ChangeIdInput() {
+       echo "tree `git write-tree`"
+       if parent=`git rev-parse "HEAD^0" 2>/dev/null`
+       then
+               echo "parent $parent"
+       fi
+       echo "author `git var GIT_AUTHOR_IDENT`"
+       echo "committer `git var GIT_COMMITTER_IDENT`"
+       echo
+       printf '%s' "$clean_message"
+}
+_gen_ChangeId() {
+       _gen_ChangeIdInput |
+       git hash-object -t commit --stdin
+}
+
+
+add_ChangeId
diff --git a/git/config b/git/config
new file mode 100644 (file)
index 0000000..593511a
--- /dev/null
@@ -0,0 +1,23 @@
+[core]
+       repositoryformatversion = 0
+       filemode = true
+       logallrefupdates = true
+       precomposeunicode = true
+[remote "origin"]
+       url = ssh://xsited@git.opendaylight.org:29418/packetcable.git
+       fetch = +refs/heads/*:refs/remotes/origin/*
+       fetch = +refs/notes/*:refs/notes/*
+       push = HEAD:refs/for/master
+[branch "master"]
+       remote = origin
+       merge = refs/heads/master
+[gerrit]
+       createchangeid = true
+[remote "github"]
+       url = https://github.com/xsited/packetcable.git
+       fetch = +refs/heads/*:refs/remotes/origin/*
+[remote "odl"]
+       url = ssh://xsited@git.opendaylight.org:29418/packetcable.git
+       fetch = +refs/heads/*:refs/remotes/odl-origin/*
+       push = HEAD:refs/for/master
+
diff --git a/packetcable-consumer/pom.xml b/packetcable-consumer/pom.xml
new file mode 100644 (file)
index 0000000..c1da112
--- /dev/null
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.opendaylight.controller.packetcable</groupId>
+    <artifactId>packetcable-plugin</artifactId>
+    <version>1.1-SNAPSHOT</version>
+  </parent>
+  <artifactId>packetcable-consumer</artifactId>
+  <packaging>bundle</packaging>
+
+  <properties>
+    <sal-binding-api.version>1.1-SNAPSHOT</sal-binding-api.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>packetcable-model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>config-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-common-util</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-config</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.opendaylight.yangtools</groupId>
+        <artifactId>yang-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>config</id>
+            <goals>
+              <goal>generate-sources</goal>
+            </goals>
+            <configuration>
+              <codeGenerators>
+                <generator>
+                  <codeGeneratorClass>org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator</codeGeneratorClass>
+                  <outputBaseDir>${jmxGeneratorPath}</outputBaseDir>
+                  <additionalConfiguration>
+                    <namespaceToPackage1>urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang</namespaceToPackage1>
+                  </additionalConfiguration>
+                </generator>
+                <generator>
+                  <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
+                  <outputBaseDir>${salGeneratorPath}</outputBaseDir>
+                </generator>
+              </codeGenerators>
+              <inspectDependencies>true</inspectDependencies>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+  <scm>
+    <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+    <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+    <tag>HEAD</tag>
+    <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+  </scm>
+</project>
diff --git a/packetcable-consumer/src/main/yang/README.md b/packetcable-consumer/src/main/yang/README.md
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packetcable-it/pom.xml b/packetcable-it/pom.xml
new file mode 100644 (file)
index 0000000..1d0ae93
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.opendaylight.controller.packetcable</groupId>
+    <artifactId>packetcable-plugin</artifactId>
+    <version>1.1-SNAPSHOT</version>
+  </parent>
+  <artifactId>packetcable-it</artifactId>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-it</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller.samples</groupId>
+      <artifactId>sample-toaster</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller.samples</groupId>
+      <artifactId>sample-toaster-consumer</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.opendaylight.controller.samples</groupId>
+      <artifactId>sample-toaster-provider</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.openexi</groupId>
+      <artifactId>nagasena</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.openexi</groupId>
+      <artifactId>nagasena-rta</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-junit4</artifactId>
+      <version>${exam.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>equinoxSDK381</groupId>
+      <artifactId>org.eclipse.osgi</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-container-native</artifactId>
+      <version>${exam.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-link-mvn</artifactId>
+      <version>${exam.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.ops4j.pax.exam</groupId>
+        <artifactId>maven-paxexam-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-config</id>
+            <goals>
+              <goal>generate-depends-file</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <scm>
+    <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+    <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+    <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+  </scm>
+</project>
diff --git a/packetcable-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java b/packetcable-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java
new file mode 100644 (file)
index 0000000..30f1762
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.sample.toaster.it;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.opendaylight.controller.sample.kitchen.api.EggsType;
+import org.opendaylight.controller.sample.kitchen.api.KitchenService;
+import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.HashBrown;
+import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.WhiteBread;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.options.DefaultCompositeOption;
+import org.ops4j.pax.exam.util.Filter;
+import org.ops4j.pax.exam.util.PathUtils;
+
+import javax.inject.Inject;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import java.lang.management.ManagementFactory;
+
+import static org.junit.Assert.assertEquals;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.baseModelBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.bindingAwareSalBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.configMinumumBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.flowCapableModelBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.junitAndMockitoBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.mdSalCoreBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemPackages;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+
+@RunWith(PaxExam.class)
+public class ToasterTest {
+
+    @Inject
+    @Filter(timeout=60*1000)
+    KitchenService kitchenService;
+
+    @Configuration
+    public Option[] config() {
+        return options(systemProperty("osgi.console").value("2401"), mavenBundle("org.slf4j", "slf4j-api")
+                .versionAsInProject(), //
+                          mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), //
+
+                                systemProperty("logback.configurationFile").value(
+                        "file:" + PathUtils.getBaseDir()
+                                + "/src/test/resources/logback.xml"),
+                mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), //
+                mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), //
+                systemProperty("osgi.bundles.defaultStartLevel").value("4"),
+                systemPackages("sun.nio.ch"),
+
+                toasterBundles(),
+                mdSalCoreBundles(),
+
+                bindingAwareSalBundles(),
+                configMinumumBundles(),
+                // BASE Models
+                baseModelBundles(),
+                flowCapableModelBundles(),
+
+                // Set fail if unresolved bundle present
+                systemProperty("pax.exam.osgi.unresolved.fail").value("true"),
+                junitAndMockitoBundles());
+    }
+
+    private Option toasterBundles() {
+        return new DefaultCompositeOption(
+                mavenBundle("org.opendaylight.controller.samples", "sample-toaster-provider").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.samples", "sample-toaster-consumer").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.samples", "sample-toaster").versionAsInProject(),
+                mavenBundle("org.openexi", "nagasena").versionAsInProject(),
+                mavenBundle("org.openexi", "nagasena-rta").versionAsInProject()
+        );
+    }
+
+    @Test
+    public void testToaster() throws Exception {
+
+        MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
+        ObjectName providerOn = new ObjectName("org.opendaylight.controller:instanceName=toaster-provider-impl,type=RuntimeBean,moduleFactoryName=toaster-provider-impl");
+
+        long toastsMade = (long) platformMBeanServer.getAttribute(providerOn, "ToastsMade");
+        assertEquals(0, toastsMade);
+
+        boolean success = true;
+
+        // Make toasts using OSGi service
+        success &= kitchenService.makeBreakfast( EggsType.SCRAMBLED, HashBrown.class, 4).get().isSuccessful();
+        success &= kitchenService.makeBreakfast( EggsType.POACHED, WhiteBread.class, 8 ).get().isSuccessful();
+
+        Assert.assertTrue("Not all breakfasts succeeded", success);
+
+        // Verify toasts made count on provider via JMX/config-subsystem
+        toastsMade = (long) platformMBeanServer.getAttribute(providerOn, "ToastsMade");
+        assertEquals(2, toastsMade);
+    }
+
+}
diff --git a/packetcable-it/src/test/resources/controller.xml b/packetcable-it/src/test/resources/controller.xml
new file mode 100644 (file)
index 0000000..4cce64d
--- /dev/null
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+
+<persisted-snapshots>
+    <snapshots>
+        <snapshot>
+            <configuration>
+                <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+                    <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:schema-service-singleton</type>
+                            <name>yang-schema-service</name>
+                        </module>
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:runtime-generated-mapping</type>
+                            <name>runtime-mapping-singleton</name>
+                        </module>
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-notification-broker</type>
+                            <name>binding-notification-broker</name>
+                        </module>
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-broker-impl</type>
+                            <name>binding-broker-impl</name>
+                            <notification-service xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                                <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-notification-service</type>
+                                <name>binding-notification-broker</name>
+                            </notification-service>
+                            <data-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                                <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
+                                <name>binding-data-broker</name>
+                            </data-broker>
+                        </module>
+
+                        <!--
+                             Tree-based in-memory data store. This is the data store which is currently
+                             recommended for single-node deployments.
+                        -->
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-inmemory-data-broker</type>
+                            <name>inmemory-data-broker</name>
+                            <schema-service>
+                                <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
+                                <name>yang-schema-service</name>
+                            </schema-service>
+                        </module>
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-broker-impl</type>
+                            <name>inmemory-dom-broker</name>
+                            <async-data-broker>
+                                <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-async-data-broker</type>
+                                <name>inmemory-data-broker</name>
+                            </async-data-broker>
+                        </module>
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-data-compatible-broker</type>
+                            <name>inmemory-binding-data-broker</name>
+                            <dom-async-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                                <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
+                                <name>dom-broker</name>
+                            </dom-async-broker>
+                            <binding-mapping-service xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                                <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding:binding-dom-mapping-service</type>
+                                <name>runtime-mapping-singleton</name>
+                            </binding-mapping-service>
+                        </module>
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-forwarded-data-broker</type>
+                            <name>binding-async-data-broker</name>
+                            <binding-forwarded-data-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                                <dom-async-broker>
+                                    <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
+                                    <name>dom-broker</name>
+                                </dom-async-broker>
+                                <binding-mapping-service>
+                                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding:binding-dom-mapping-service</type>
+                                    <name>runtime-mapping-singleton</name>
+                                </binding-mapping-service>
+                            </binding-forwarded-data-broker>
+                        </module>
+
+                        <!-- Toaster Congiguration -->
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider:impl">
+                                prefix:toaster-provider-impl
+                            </type>
+                            <name>toaster-provider-impl</name>
+
+                            <rpc-registry>
+                                <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                                <name>binding-rpc-broker</name>
+                            </rpc-registry>
+
+                            <data-broker>
+                              <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+                              <name>binding-data-broker</name>
+                            </data-broker>
+
+                            <notification-service>
+                                <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
+                                    binding:binding-notification-service
+                                </type>
+                                <name>binding-notification-broker</name>
+                            </notification-service>
+                        </module>
+
+                        <!-- Kitchen Service -->
+                        <module>
+                            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:kitchen-service:impl">
+                                prefix:kitchen-service-impl
+                            </type>
+                            <name>kitchen-service-impl</name>
+
+                            <rpc-registry>
+                                <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                                <name>binding-rpc-broker</name>
+                            </rpc-registry>
+
+                            <notification-service>
+                                <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
+                                    binding:binding-notification-service
+                                </type>
+                                <name>binding-notification-broker</name>
+                            </notification-service>
+                        </module>
+                    </modules>
+                    <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+                        <service>
+                            <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
+                            <instance>
+                                <name>yang-schema-service</name>
+                                <provider>/modules/module[type='schema-service-singleton'][name='yang-schema-service']</provider>
+                            </instance>
+                        </service>
+                        <service>
+                            <type xmlns:binding-impl="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding-impl:binding-dom-mapping-service</type>
+                            <instance>
+                                <name>runtime-mapping-singleton</name>
+                                <provider>/modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton']</provider>
+                            </instance>
+                        </service>
+                        <service>
+                            <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-notification-service</type>
+                            <instance>
+                                <name>binding-notification-broker</name>
+                                <provider>/modules/module[type='binding-notification-broker'][name='binding-notification-broker']</provider>
+                            </instance>
+                        </service>
+                        <service>
+                            <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
+                            <instance>
+                                <name>binding-osgi-broker</name>
+                                <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
+                            </instance>
+                        </service>
+                        <service>
+                            <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                            <instance>
+                                <name>binding-rpc-broker</name>
+                                <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
+                            </instance>
+                        </service>
+
+                        <service>
+                            <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
+                            <instance>
+                                <name>dom-broker</name>
+                                <provider>/modules/module[type='dom-broker-impl'][name='inmemory-dom-broker']</provider>
+                            </instance>
+                        </service>
+
+                        <service>
+                            <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
+                            <instance>
+                                <name>binding-data-broker</name>
+                                <provider>/modules/module[type='binding-data-compatible-broker'][name='inmemory-binding-data-broker']</provider>
+                            </instance>
+                        </service>
+
+                        <service>
+                            <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+                            <instance>
+                                <name>binding-data-broker</name>
+                                <provider>/modules/module[type='binding-forwarded-data-broker'][name='binding-async-data-broker']</provider>
+                            </instance>
+                        </service>
+
+                        <service>
+                            <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-async-data-broker</type>
+                            <instance>
+                                <name>inmemory-data-broker</name>
+                                <provider>/modules/module[type='dom-inmemory-data-broker'][name='inmemory-data-broker']</provider>
+                            </instance>
+                        </service>
+
+                        <!-- Toaster samples -->
+                        <service>
+                          <type xmlns:kitchen="urn:opendaylight:params:xml:ns:yang:controller:config:kitchen-service:impl">
+                            kitchen:kitchen-service
+                          </type>
+                          <instance>
+                            <name>kitchen-service</name>
+                            <provider>/modules/module[type='kitchen-service-impl'][name='kitchen-service-impl']</provider>
+                          </instance>
+                        </service>
+                    </services>
+                </data>
+            </configuration>
+            <required-capabilities>
+                <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
+                <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom?module=opendaylight-md-sal-dom&amp;revision=2013-10-28</capability>
+                <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?module=opendaylight-sal-binding-broker-impl&amp;revision=2013-10-28</capability>
+                <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl?module=opendaylight-sal-dom-broker-impl&amp;revision=2013-10-28</capability>
+                <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:common?module=opendaylight-md-sal-common&amp;revision=2013-10-28</capability>
+
+                <!-- Toaster capabilities -->
+                <capability>http://netconfcentral.org/ns/toaster?module=toaster&amp;revision=2009-11-20</capability>
+                <capability>urn:opendaylight:params:xml:ns:yang:controller:config:kitchen-service:impl?module=kitchen-service-impl&amp;revision=2014-01-31</capability>
+                <capability>urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider:impl?module=toaster-provider-impl&amp;revision=2014-01-31</capability>
+
+            </required-capabilities>
+        </snapshot>
+    </snapshots>
+</persisted-snapshots>
diff --git a/packetcable-it/src/test/resources/logback.xml b/packetcable-it/src/test/resources/logback.xml
new file mode 100644 (file)
index 0000000..d76c2d3
--- /dev/null
@@ -0,0 +1,18 @@
+<configuration scan="true">
+
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+      </pattern>
+    </encoder>
+  </appender>
+
+
+  <logger name="org.opendaylight.yangtools.yang.parser" level="ERROR"/>
+
+  <logger name="org.opendaylight.controller.sample.toaster.provider" level="DEBUG"/>
+
+  <root level="error">
+    <appender-ref ref="STDOUT" />
+  </root>
+</configuration>
index bb9a4e2738ed2e3dca345589c7d876414a3189e4..60e9d46c6998f510a97055b7ff6c6971b4a6927a 100644 (file)
@@ -3,36 +3,44 @@
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
-               <groupId>org.opendaylight.packetcable</groupId>
-               <artifactId>packetcable-parent</artifactId>
-               <version>1.0.0-SNAPSHOT</version>
-    </parent>
+               <groupId>org.opendaylight.controller.packetcable</groupId>
+               <artifactId>packetcable-plugin</artifactId>
+               <version>1.1-SNAPSHOT</version>
+       </parent>
        <artifactId>packetcable-model</artifactId>
        <packaging>bundle</packaging>
-       <scm>
-               <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
-               <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
-               <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
-               <tag>HEAD</tag>
-       </scm>
+       <dependencies>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools.model</groupId>
+                       <artifactId>ietf-inet-types</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools.model</groupId>
+                       <artifactId>ietf-yang-types</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools</groupId>
+                       <artifactId>yang-binding</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools</groupId>
+                       <artifactId>yang-common</artifactId>
+               </dependency>
+       </dependencies>
 
        <build>
                <plugins>
-                       <plugin>
-                               <groupId>org.apache.felix</groupId>
-                               <artifactId>maven-bundle-plugin</artifactId>
-                               <version>${bundle.plugin.version}</version>
-                               <extensions>true</extensions>
-                               <configuration>
-                                       <instructions>
-                                               <Bundle-Name>org.opendaylight.packetcable.packetcable-model</Bundle-Name>
-                                       </instructions>
-                               </configuration>
-                       </plugin>
                        <plugin>
                                <groupId>org.opendaylight.yangtools</groupId>
                                <artifactId>yang-maven-plugin</artifactId>
-                               <version>${yangtools.version}</version>
+                               <dependencies>
+                                       <dependency>
+                                               <groupId>org.opendaylight.yangtools</groupId>
+                                               <artifactId>maven-sal-api-gen-plugin</artifactId>
+                                               <version>${yangtools.version}</version>
+                                               <type>jar</type>
+                                       </dependency>
+                               </dependencies>
                                <executions>
                                        <execution>
                                                <goals>
                                                </configuration>
                                        </execution>
                                </executions>
-                               <dependencies>
-                                       <dependency>
-                                               <groupId>org.opendaylight.yangtools</groupId>
-                                               <artifactId>maven-sal-api-gen-plugin</artifactId>
-                                               <version>${yangtools.version}</version>
-                                               <type>jar</type>
-                                       </dependency>
-                               </dependencies>
                        </plugin>
                </plugins>
-               <pluginManagement>
-                       <plugins>
-                               <!--This plugin's configuration is used to store Eclipse m2e settings 
-                                       only. It has no influence on the Maven build itself. -->
-                               <plugin>
-                                       <groupId>org.eclipse.m2e</groupId>
-                                       <artifactId>lifecycle-mapping</artifactId>
-                                       <version>1.0.0</version>
-                                       <configuration>
-                                               <lifecycleMappingMetadata>
-                                                       <pluginExecutions>
-                                                               <pluginExecution>
-                                                                       <pluginExecutionFilter>
-                                                                               <groupId>org.opendaylight.yangtools</groupId>
-                                                                               <artifactId>yang-maven-plugin</artifactId>
-                                                                               <versionRange>[0.5,)</versionRange>
-                                                                               <goals>
-                                                                                       <goal>generate-sources</goal>
-                                                                               </goals>
-                                                                       </pluginExecutionFilter>
-                                                                       <action>
-                                                                               <ignore />
-                                                                       </action>
-                                                               </pluginExecution>
-                                                       </pluginExecutions>
-                                               </lifecycleMappingMetadata>
-                                       </configuration>
-                               </plugin>
-                       </plugins>
-               </pluginManagement>
        </build>
-       <dependencies>
-               <dependency>
-                       <groupId>org.opendaylight.yangtools</groupId>
-                       <artifactId>yang-binding</artifactId>
-                       <version>${yangtools.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.yangtools</groupId>
-                       <artifactId>yang-common</artifactId>
-                       <version>${yangtools.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.yangtools.model</groupId>
-                       <artifactId>ietf-inet-types</artifactId>
-                       <version>${ietf-inet-types.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.yangtools.model</groupId>
-                       <artifactId>ietf-yang-types</artifactId>
-                       <version>${ietf-yang-types.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.controller.model</groupId>
-                       <artifactId>model-flow-base</artifactId>
-                       <version>${controller.model.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.controller.model</groupId>
-                       <artifactId>model-flow-management</artifactId>
-                       <version>${controller.model.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.controller.model</groupId>
-                       <artifactId>model-flow-service</artifactId>
-                       <version>${controller.model.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.controller.model</groupId>
-                       <artifactId>model-flow-statistics</artifactId>
-                       <version>${controller.model.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.controller.model</groupId>
-                       <artifactId>model-inventory</artifactId>
-                       <version>${controller.model.version}</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.opendaylight.controller</groupId>
-                       <artifactId>sal-binding-api</artifactId>
-                       <version>${controller.model.version}</version>
-               </dependency>
-       </dependencies>
-       <groupId>org.opendaylight.packetcable</groupId>
+       <scm>
+               <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+               <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+               <tag>HEAD</tag>
+               <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+       </scm>
 </project>
diff --git a/packetcable-model/src/main/yang/README.md b/packetcable-model/src/main/yang/README.md
new file mode 100644 (file)
index 0000000..e69de29
index e40a1052743afd9d13f09fdf9e9aa1ff92483e30..b4b4afc32c3dcbbf62138a80ecdc02ebf6450310 100644 (file)
@@ -1,4 +1,4 @@
-module packetcable-service {
+module packetcable-service{
     namespace "urn:opendaylight:packetcable:service";
     prefix pcmm;
 
@@ -299,7 +299,7 @@ module packetcable-service {
         }
     } 
 
-    grouping update-tp-defaults-unsolicited-grant-service-with-actvity-detection {
+    grouping update-tp-defaults-unsolicited-grant-service-with-activity-detection {
         // uses "tp:tp-context-ref";
         
         container original-tp {
@@ -310,7 +310,7 @@ module packetcable-service {
        }
     }
 
-    rpc traffic-profile-get-defaults-unsolicited-grant-service-with-actvity-detection {
+    rpc traffic-profile-get-defaults-unsolicited-grant-service-with-activity-detection {
 
         input {
             uses tr:transaction-metadata;
@@ -319,18 +319,18 @@ module packetcable-service {
             }
         }
         output {
-            uses update-tp-defaults-unsolicited-grant-service-with-actvity-detection;
+            uses update-tp-defaults-unsolicited-grant-service-with-activity-detection;
             uses tr:transaction-aware;
         }
     } 
 
-    rpc traffic-profile-update-defaults-unsolicited-grant-service-with-actvity-detection {
+    rpc traffic-profile-update-defaults-unsolicited-grant-service-with-activity-detection {
         input {
             uses tr:transaction-metadata;
             leaf tp-ref {
                 type tp:tp-reference;
             }
-            uses update-tp-defaults-unsolicited-grant-service-with-actvity-detection;
+            uses update-tp-defaults-unsolicited-grant-service-with-activity-detection;
         }
         output {
             uses tr:transaction-aware;
diff --git a/packetcable-model/src/main/yang/packetcable.yang.old b/packetcable-model/src/main/yang/packetcable.yang.old
new file mode 100644 (file)
index 0000000..5dcdbeb
--- /dev/null
@@ -0,0 +1,86 @@
+  module packetcable {
+
+   namespace "urn:opendaylight:node:packetcable";
+   prefix packetcable;
+
+
+    import ietf-yang-types     { prefix yang; }
+    import ietf-inet-types     { prefix inet; }
+    import packetcable-cmts {prefix cmts; }
+
+
+    organization "Packetcabel ODL";
+
+    contact
+      "Thomas Kee <xsited@yahoo.com>";
+
+    description
+      "Packetcable plugin for the PCMM driver";
+
+    revision "2014-07-23" {
+      description
+        "Packetcable module.";
+    }
+
+       typdef pcmm-configuration 
+       {
+        leaf ip-address {
+            type inet:ip-address;
+            mandatory true;
+            description "The IP address of the controller to connect to.";
+        }
+        leaf port {
+            type inet:port-number;
+            default 3918;
+            description "The port number at the controller to connect to.";
+        }
+     }//typdef pcmm-configuration
+        
+    rpc init-connection 
+    {
+             description
+               "Request connection with the CMTS";
+             input 
+             {
+                       leaf connectionConf 
+                       {
+                         type  pcmm-configuration ;
+                         description
+                           "cmts configuration";
+                       }
+               }
+      } // rpc init-connection
+
+    rpc disconnect {
+            input 
+                     {
+                               leaf connectionConf 
+                               {
+                                 type  pcmm-configuration ;
+                                 description
+                                   "cmts configuration";
+                               }
+                       }
+             description
+               "Disconnect from CMTS.
+                  A 'resource-denied' error will be returned 
+                  if the packetcable service is disabled.";
+    }  // rpc disconnect
+
+  
+    notification connectedToCMTS {
+      description
+        "Indicates that the toaster has run of out bread.";
+    }  // notification connectedToCMTS
+    
+    notification desconnectedFromCMTS {
+      description
+        "Indicates that the toaster has run of out bread.";
+      leaf connectionConf {
+        type  pcmm-configuration ;
+                description "cmts configuration";
+      }
+    }  // notification desconnectedFromCMTS
+    
+  }  // module packetcable
diff --git a/packetcable-provider/pom.xml b/packetcable-provider/pom.xml
new file mode 100644 (file)
index 0000000..ec0931e
--- /dev/null
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.opendaylight.controller.packetcable</groupId>
+               <artifactId>packetcable-plugin</artifactId>
+               <version>1.1-SNAPSHOT</version>
+       </parent>
+       <artifactId>packetcable-provider</artifactId>
+       <packaging>bundle</packaging>
+
+       <properties>
+               <sal-binding-api.version>1.1-SNAPSHOT</sal-binding-api.version>
+       </properties>
+
+       <dependencies>
+               <dependency>
+                       <groupId>${project.groupId}</groupId>
+                       <artifactId>packetcable-model</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools.model</groupId>
+                       <artifactId>ietf-inet-types</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools.model</groupId>
+                       <artifactId>ietf-yang-types</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.controller</groupId>
+                       <artifactId>config-api</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.controller</groupId>
+                       <artifactId>sal-binding-api</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.controller</groupId>
+                       <artifactId>sal-binding-config</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.controller</groupId>
+                       <artifactId>sal-common-util</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.core</artifactId>
+               </dependency>
+       </dependencies>
+
+       <build>
+               <plugins>
+                       <plugin>
+                               <artifactId>maven-checkstyle-plugin</artifactId>
+                               <configuration>
+                                 <skip>true</skip>
+                               </configuration>
+                       </plugin>
+
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <configuration>
+                                       <instructions>
+                                               <Export-Package>org.opendaylight.controller.config.yang.toaster_provider,</Export-Package>
+                                               <Import-Package>*</Import-Package>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.opendaylight.yangtools</groupId>
+                               <artifactId>yang-maven-plugin</artifactId>
+                               <executions>
+                                       <execution>
+                                               <id>config</id>
+                                               <goals>
+                                                       <goal>generate-sources</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <codeGenerators>
+                                                               <generator>
+                                                                       <codeGeneratorClass>org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator</codeGeneratorClass>
+                                                                       <outputBaseDir>${jmxGeneratorPath}</outputBaseDir>
+                                                                       <additionalConfiguration>
+                                                                               <namespaceToPackage1>urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang</namespaceToPackage1>
+                                                                       </additionalConfiguration>
+                                                               </generator>
+                                                               <generator>
+                                                                       <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
+                                                                       <outputBaseDir>${salGeneratorPath}</outputBaseDir>
+                                                               </generator>
+                                                       </codeGenerators>
+                                                       <inspectDependencies>true</inspectDependencies>
+                                               </configuration>
+                                       </execution>
+                               </executions>
+                       </plugin>
+               </plugins>
+       </build>
+       <scm>
+               <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+               <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+               <tag>HEAD</tag>
+               <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+       </scm>
+</project>
diff --git a/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModule.java b/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModule.java
new file mode 100644 (file)
index 0000000..ab0c880
--- /dev/null
@@ -0,0 +1,66 @@
+package org.opendaylight.controller.config.yang.config.packetcable_provider.impl;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddressBuilder;
+
+public class PacketcableProviderModule
+               extends
+               org.opendaylight.controller.config.yang.config.packetcable_provider.impl.AbstractPacketcableProviderModule {
+       public PacketcableProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+               super(identifier, dependencyResolver);
+       }
+
+       public PacketcableProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.packetcable_provider.impl.PacketcableProviderModule oldModule, java.lang.AutoCloseable oldInstance) {
+               super(identifier, dependencyResolver, oldModule, oldInstance);
+       }
+
+       @Override
+       public void customValidation() {
+               // add custom validation form module attributes here.
+       }
+//
+       @Override
+       public java.lang.AutoCloseable createInstance() {
+//             final OpendaylightPacketcableProvider opendaylightPcmmProvider = new OpendaylightPacketcableProvider();
+//
+//             // Register to md-sal
+//             opendaylightPcmmProvider.setNotificationProvider(getNotificationServiceDependency());
+//
+//             DataBroker dataBrokerService = getDataBrokerDependency();
+//             opendaylightPcmmProvider.setDataProvider(dataBrokerService);
+// 
+//             final ListenerRegistration<DataChangeListener> dataChangeListenerRegistration = dataBrokerService.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, OpendaylightPacketcableProvider.TOASTER_IID, opendaylightPcmmProvider, DataChangeScope.SUBTREE);
+//
+//             final BindingAwareBroker.RpcRegistration<ToasterService> rpcRegistration = getRpcRegistryDependency().addRpcImplementation(ToasterService.class, opendaylightPcmmProvider);
+//
+//             // Register runtimeBean for toaster statistics via JMX
+//             final PacketcableProviderRuntimeRegistration runtimeReg = getRootRuntimeBeanRegistratorWrapper().register(opendaylightPcmmProvider);
+//
+//             // Wrap PCMM driver as AutoCloseable and close registrations to md-sal at
+//             // close()
+//             final class AutoCloseablePcmmProvider implements AutoCloseable {
+//
+//                     @Override
+//                     public void close() throws Exception {
+//                             dataChangeListenerRegistration.close();
+//                             rpcRegistration.close();
+//                             runtimeReg.close();
+//                             opendaylightPcmmProvider.close();
+//                     
+//                             log.info("Toaster provider (instance {}) torn down.", this);
+//                     }
+//             }
+//
+//             AutoCloseable ret = new AutoCloseablePcmmProvider();
+//             log.info("Toaster provider (instance {}) initialized.", ret);
+//             return ret;
+               return null;
+       }
+
+}
diff --git a/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModuleFactory.java b/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModuleFactory.java
new file mode 100644 (file)
index 0000000..c196c60
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+* Generated file
+*
+* Generated from: yang module name: packetcable-provider-impl yang module local name: packetcable-provider-impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Thu Jul 24 00:40:30 CEST 2014
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.controller.config.yang.config.packetcable_provider.impl;
+public class PacketcableProviderModuleFactory extends org.opendaylight.controller.config.yang.config.packetcable_provider.impl.AbstractPacketcableProviderModuleFactory {
+
+}
diff --git a/packetcable-provider/src/main/java/org/opendaylight/controller/packetcable/provider/OpendaylightPacketcableProvider.java b/packetcable-provider/src/main/java/org/opendaylight/controller/packetcable/provider/OpendaylightPacketcableProvider.java
new file mode 100644 (file)
index 0000000..85d0d2e
--- /dev/null
@@ -0,0 +1,290 @@
+package org.opendaylight.controller.packetcable.provider;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.opendaylight.controller.config.yang.config.packetcable_provider.impl.PacketcableProviderRuntimeMXBean;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.node.cmts.rev140120.CmtsInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAddInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAddOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAddOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAdded;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAddedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemoveInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemoveOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemoveOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemoved;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemovedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdateInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdateOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdateOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdated;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdatedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.PacketcableServiceService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsBestEffortInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsBestEffortOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsDownstreamServiceInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsDownstreamServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsFlowspecInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsFlowspecOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsNonRealTimePollingServiceInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsNonRealTimePollingServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsRealTimePollingServiceInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsRealTimePollingServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsUnsolicitedGrantServiceInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsUnsolicitedGrantServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetectionInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetectionOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsBestEffortInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsBestEffortOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsDownstreamServiceInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsDownstreamServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsFlowspecInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsFlowspecOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsNonRealTimePollingServiceInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsNonRealTimePollingServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsRealTimePollingServiceInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsRealTimePollingServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsUnsolicitedGrantServiceInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsUnsolicitedGrantServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetectionInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetectionOutput;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+
+@SuppressWarnings("unused")
+public class OpendaylightPacketcableProvider implements
+               PacketcableServiceService, PacketcableProviderRuntimeMXBean,
+               DataChangeListener, AutoCloseable {
+
+       private static final Logger logger = LoggerFactory.getLogger(OpendaylightPacketcableProvider.class);
+       private NotificationProviderService notificationProvider;
+       private DataBroker dataProvider;
+
+       private final ExecutorService executor;
+
+       // The following holds the Future for the current make toast task.
+       // This is used to cancel the current toast.
+       private final AtomicReference<Future<?>> currentConnectionsTasks = new AtomicReference<>();
+
+       private List<InstanceIdentifier<CmtsInstance>> cmtsInstances;
+
+       public OpendaylightPacketcableProvider() {
+               executor = Executors.newCachedThreadPool();
+               cmtsInstances = Lists.newArrayList();
+
+       }
+
+       public void setNotificationProvider(final NotificationProviderService salService) {
+               this.notificationProvider = salService;
+       }
+
+       public void setDataProvider(final DataBroker salDataProvider) {
+               this.dataProvider = salDataProvider;
+       }
+
+       /**
+        * Implemented from the AutoCloseable interface.
+        */
+       @Override
+       public void close() throws ExecutionException, InterruptedException {
+               executor.shutdown();
+               if (dataProvider != null) {
+                       for (Iterator<InstanceIdentifier<CmtsInstance>> iter = cmtsInstances.iterator(); iter.hasNext();) {
+                               WriteTransaction tx = dataProvider.newWriteOnlyTransaction();
+                               tx.delete(LogicalDatastoreType.OPERATIONAL, iter.next());
+                               Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
+                                       @Override
+                                       public void onSuccess(final Void result) {
+                                               logger.debug("Delete commit result: " + result);
+                                       }
+
+                                       @Override
+                                       public void onFailure(final Throwable t) {
+                                               logger.error("Delete operation failed", t);
+                                       }
+                               });
+                       }
+               }
+       }
+
+       // private CmtsInstance buildCmtsConnection(final String host) {
+       // InetAddress address = InetAddress.getByName(host);
+       // IpAddress ipAddress =
+       // IpAddressBuilder.getDefaultInstance(address.getHostAddress());
+       // PcmmConfigurationBuilder pcmmConfigurationBuilder = new
+       // PcmmConfigurationBuilder().setIpAddress(ipAddress);
+       // org.opendaylight.yang.gen.v1.urn.opendaylight.node.cmts.rev140120.cmts.instance.ConfigurationPointsBuilder
+       // configurationPointsBuilder = new
+       // org.opendaylight.yang.gen.v1.urn.opendaylight.node.cmts.rev140120.cmts.instance.ConfigurationPointsBuilder().build();
+       // return new CmtsAddedBuilder().setConfigurationPoints().build();
+       // }
+
+       /**
+        * Implemented from the DataChangeListener interface.
+        */
+       @Override
+       public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
+               DataObject dataObject = change.getUpdatedSubtree();
+               logger.debug("OpendaylightPacketcableProvider.onDataChanged() :" + dataObject);
+       }
+
+       @Override
+       public Boolean getConnectionState() {
+               return null;
+       }
+
+       @Override
+       public void closeCmtsConnection() {
+               for (Iterator<InstanceIdentifier<CmtsInstance>> iter = cmtsInstances.iterator(); iter.hasNext();) {
+
+                       // notificationProvider.publish(paramNotification)
+                       // iter.next().getId()
+               }
+       }
+
+       @Override
+       public Future<RpcResult<CmtsAddOutput>> cmtsAdd(CmtsAddInput input) {
+               //TODO how to get this transaction id ???
+               TransactionId transactionId = null;
+               if (transactionId != null) {
+                       CmtsAdded cmtsAdded = new CmtsAddedBuilder().setCmtsRef(input.getCmtsRef()).setId(input.getId()).setConfigurationPoints(input.getConfigurationPoints()).setTransactionUri(input.getTransactionUri()).setTransactionId(transactionId).setNode(input.getNode()).setManagedCableModemSubscribers(input.getManagedCableModemSubscribers()).build();
+                       notificationProvider.publish(cmtsAdded);
+                       CmtsAddOutput output = new CmtsAddOutputBuilder().setTransactionId(transactionId).build();
+                       return Futures.immediateFuture(RpcResultBuilder.success(output).build());
+               } else {
+                       return Futures.immediateFuture(RpcResultBuilder.<CmtsAddOutput> failed().build());
+               }
+       }
+
+       @Override
+       public Future<RpcResult<CmtsRemoveOutput>> cmtsRemove(CmtsRemoveInput input) {
+               TransactionId transactionId = null;
+               if (transactionId != null) {
+                       CmtsRemoved cmtsRemoved = new CmtsRemovedBuilder().setCmtsRef(input.getCmtsRef()).setId(input.getId()).setConfigurationPoints(input.getConfigurationPoints()).setTransactionUri(input.getTransactionUri()).setTransactionId(transactionId).setNode(input.getNode()).setManagedCableModemSubscribers(input.getManagedCableModemSubscribers()).build();
+                       notificationProvider.publish(cmtsRemoved);
+                       CmtsRemoveOutput output = new CmtsRemoveOutputBuilder().setTransactionId(transactionId).build();
+                       return Futures.immediateFuture(RpcResultBuilder.success(output).build());
+               } else {
+                       return Futures.immediateFuture(RpcResultBuilder.<CmtsRemoveOutput> failed().build());
+               }
+       }
+
+       @Override
+       public Future<RpcResult<CmtsUpdateOutput>> cmtsUpdate(CmtsUpdateInput input) {
+               TransactionId transactionId = null;
+               if (transactionId != null) {
+                       CmtsUpdated cmtsUpdated = new CmtsUpdatedBuilder().setCmtsRef(input.getCmtsRef()).setId(input.getOriginalCmts().getId()).setConfigurationPoints(input.getOriginalCmts().getConfigurationPoints()).setTransactionUri(input.getTransactionUri()).setTransactionId(transactionId).setNode(input.getNode()).setManagedCableModemSubscribers(input.getOriginalCmts().getManagedCableModemSubscribers()).build();
+                       notificationProvider.publish(cmtsUpdated);
+                       CmtsUpdateOutput output = new CmtsUpdateOutputBuilder().setTransactionId(transactionId).build();
+                       return Futures.immediateFuture(RpcResultBuilder.success(output).build());
+               } else {
+                       return Futures.immediateFuture(RpcResultBuilder.<CmtsUpdateOutput> failed().build());
+               }
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileGetDefaultsBestEffortOutput>> trafficProfileGetDefaultsBestEffort(TrafficProfileGetDefaultsBestEffortInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileGetDefaultsDownstreamServiceOutput>> trafficProfileGetDefaultsDownstreamService(TrafficProfileGetDefaultsDownstreamServiceInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileGetDefaultsFlowspecOutput>> trafficProfileGetDefaultsFlowspec(TrafficProfileGetDefaultsFlowspecInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileGetDefaultsNonRealTimePollingServiceOutput>> trafficProfileGetDefaultsNonRealTimePollingService(TrafficProfileGetDefaultsNonRealTimePollingServiceInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileGetDefaultsRealTimePollingServiceOutput>> trafficProfileGetDefaultsRealTimePollingService(TrafficProfileGetDefaultsRealTimePollingServiceInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileGetDefaultsUnsolicitedGrantServiceOutput>> trafficProfileGetDefaultsUnsolicitedGrantService(TrafficProfileGetDefaultsUnsolicitedGrantServiceInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetectionOutput>> trafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetection(TrafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetectionInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileUpdateDefaultsBestEffortOutput>> trafficProfileUpdateDefaultsBestEffort(TrafficProfileUpdateDefaultsBestEffortInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileUpdateDefaultsDownstreamServiceOutput>> trafficProfileUpdateDefaultsDownstreamService(TrafficProfileUpdateDefaultsDownstreamServiceInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileUpdateDefaultsFlowspecOutput>> trafficProfileUpdateDefaultsFlowspec(TrafficProfileUpdateDefaultsFlowspecInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileUpdateDefaultsNonRealTimePollingServiceOutput>> trafficProfileUpdateDefaultsNonRealTimePollingService(TrafficProfileUpdateDefaultsNonRealTimePollingServiceInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileUpdateDefaultsRealTimePollingServiceOutput>> trafficProfileUpdateDefaultsRealTimePollingService(TrafficProfileUpdateDefaultsRealTimePollingServiceInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileUpdateDefaultsUnsolicitedGrantServiceOutput>> trafficProfileUpdateDefaultsUnsolicitedGrantService(TrafficProfileUpdateDefaultsUnsolicitedGrantServiceInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Future<RpcResult<TrafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetectionOutput>> trafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetection(TrafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetectionInput input) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+}
diff --git a/packetcable-provider/src/main/yang/packetcable-provider-impl.yang b/packetcable-provider/src/main/yang/packetcable-provider-impl.yang
new file mode 100644 (file)
index 0000000..83e6a28
--- /dev/null
@@ -0,0 +1,89 @@
+module packetcable-provider-impl {
+
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:controller:config:packetcable-provider:impl";
+    prefix "packetcable-provider-impl";
+
+    import config { prefix config; revision-date 2013-04-05; }
+    import rpc-context { prefix rpcx; revision-date 2013-06-17; }
+    import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
+    import ietf-inet-types {prefix inet;revision-date 2010-09-24;}
+
+    description
+        "This module contains the base YANG definitions for
+        packetcable-provider impl implementation.";
+
+    revision "2014-01-31" {
+        description
+            "Initial revision.";
+    }
+
+    // This is the definition of the service implementation as a module identity.
+    identity packetcable-provider-impl {
+            base config:module-type;
+            
+            // Specifies the prefix for generated java classes.
+            config:java-name-prefix PacketcableProvider;
+    }
+
+    // Augments the 'configuration' choice node under modules/module.
+    augment "/config:modules/config:module/config:configuration" {
+        case packetcable-provider-impl {
+            when "/config:modules/config:module/config:type = 'packetcable-provider-impl'";
+
+            container rpc-registry {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity mdsal:binding-rpc-registry;
+                    }
+                }
+            }
+
+            container notification-service {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity mdsal:binding-notification-service;
+                    }
+                }
+            }
+
+            container data-broker {
+                uses config:service-ref {
+                    refine type {
+                        mandatory false;
+                        config:required-identity mdsal:binding-async-data-broker;
+                    }
+                }
+            }
+        }
+    }
+
+    augment "/config:modules/config:module/config:state" {
+        case packetcable-provider-impl {
+            when "/config:modules/config:module/config:type = 'packetcable-provider-impl'";
+            
+            leaf connection-state {
+                type boolean;
+            }
+            
+            rpcx:rpc-context-instance "close-cmts-connection-rpc";
+        }
+    }
+
+    identity close-cmts-connection-rpc;
+
+    rpc close-cmts-connection  {
+        description
+          "JMX call to close the cmts connection.";
+          
+        input {
+            uses rpcx:rpc-context-ref {
+                refine context-instance {
+                    rpcx:rpc-context-instance close-cmts-connection-rpc;
+                }
+            }
+        }
+    }
+}
diff --git a/pom.xml b/pom.xml
index e9a651361094acba35687891a9112046166985b6..74bfbeb6961c70d1fa4e4bd9ff71a241e2204fb3 100644 (file)
--- a/pom.xml
+++ b/pom.xml
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-       <groupId>org.opendaylight.controller</groupId>
-       <artifactId>commons.opendaylight</artifactId>
-       <version>1.4.2-SNAPSHOT</version>
-  </parent>
-  <packaging>pom</packaging>
-  <groupId>org.opendaylight.packetcable</groupId>
-  <artifactId>packetcable-parent</artifactId>
-  <version>1.0.0-SNAPSHOT</version>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.opendaylight.controller</groupId>
+               <artifactId>sal-parent</artifactId>
+               <version>1.1-SNAPSHOT</version>
+       </parent>
 
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <nexusproxy>http://nexus.opendaylight.org/content</nexusproxy>
-    <yangtools.version>0.6.2-SNAPSHOT</yangtools.version>
-    <bundle.plugin.version>2.3.7</bundle.plugin.version>
-    <sitedeploy>dav:http://nexus.opendaylight.org/content/sites/site</sitedeploy>
-    <java.version.source>1.7</java.version.source>
-    <java.version.target>1.7</java.version.target>
-    <maven.compile.plugin.version>2.5.1</maven.compile.plugin.version>
-    <mdsal.version>1.1-SNAPSHOT</mdsal.version>
-    <equinox.osgi.version>3.8.1.v20120830-144521</equinox.osgi.version>
-    <ietf-inet-types.version>2010.09.24.4-SNAPSHOT</ietf-inet-types.version>
-    <ietf-yang-types.version>2010.09.24.4-SNAPSHOT</ietf-yang-types.version>
-    <spring.version>3.1.3.RELEASE</spring.version>
-    <jackson.version>1.9.10</jackson.version>
-    <jmxGeneratorPath>src/main/yang-gen-config</jmxGeneratorPath>
-    <salGeneratorPath>src/main/yang-gen-sal</salGeneratorPath>
-    <config.version>0.2.5-SNAPSHOT</config.version>
-    <controller.model.version>1.1-SNAPSHOT</controller.model.version>
-  </properties>
+       <groupId>org.opendaylight.controller.packetcable</groupId>
+       <artifactId>packetcable-plugin</artifactId>
+       <packaging>pom</packaging>
 
-  <scm>
-      <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
-      <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
-      <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
-      <tag>HEAD</tag>
-  </scm>
-
-    <pluginRepositories>
-    <!-- OpenDayLight Repo Mirror -->
-    <pluginRepository>
-      <id>opendaylight-mirror</id>
-      <name>opendaylight-mirror</name>
-      <url>${nexusproxy}/groups/public/</url>
-      <snapshots>
-          <enabled>false</enabled>
-      </snapshots>
-      <releases>
-          <enabled>true</enabled>
-          <updatePolicy>never</updatePolicy>
-      </releases>
-    </pluginRepository>
-    <!-- OpenDayLight Snapshot artifact -->
-    <pluginRepository>
-      <id>opendaylight-snapshot</id>
-      <name>opendaylight-snapshot</name>
-      <url>${nexusproxy}/repositories/opendaylight.snapshot/</url>
-      <snapshots>
-          <enabled>true</enabled>
-      </snapshots>
-      <releases>
-          <enabled>false</enabled>
-      </releases>
-    </pluginRepository>
-  </pluginRepositories>
-
-  <repositories>
-    <!-- OpenDayLight Repo Mirror -->
-    <repository>
-      <id>opendaylight-mirror</id>
-      <name>opendaylight-mirror</name>
-      <url>${nexusproxy}/groups/public/</url>
-      <snapshots>
-          <enabled>false</enabled>
-      </snapshots>
-      <releases>
-          <enabled>true</enabled>
-          <updatePolicy>never</updatePolicy>
-      </releases>
-    </repository>
-    <!-- OpenDayLight Snapshot artifact -->
-    <repository>
-      <id>opendaylight-snapshot</id>
-      <name>opendaylight-snapshot</name>
-      <url>${nexusproxy}/repositories/opendaylight.snapshot/</url>
-      <snapshots>
-          <enabled>true</enabled>
-      </snapshots>
-      <releases>
-          <enabled>false</enabled>
-      </releases>
-    </repository>
-  </repositories>
-
-  <distributionManagement>
-    <!-- OpenDayLight Released artifact -->
-    <repository>
-      <id>opendaylight-release</id>
-      <url>${nexusproxy}/repositories/opendaylight.release/</url>
-    </repository>
-    <!-- OpenDayLight Snapshot artifact -->
-    <snapshotRepository>
-      <id>opendaylight-snapshot</id>
-      <url>${nexusproxy}/repositories/opendaylight.snapshot/</url>
-    </snapshotRepository>
-    <!-- Site deployment -->
-    <site>
-      <id>website</id>
-      <url>${sitedeploy}</url>
-    </site>
-  </distributionManagement>
-
-  <build>
-
-    <pluginManagement>
-      <plugins>
-      <plugin>
+       <modules>
+               <module>packetcable-model</module>
+               <module>packetcable-consumer</module>
+               <module>packetcable-provider</module>
+       </modules>
+       <scm>
+               <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+               <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+               <tag>HEAD</tag>
+               <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+       </scm>
+       <dependencies>
+               <dependency>
+                       <groupId>org.opendaylight.controller.model</groupId>
+                       <artifactId>model-flow-base</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.controller.model</groupId>
+                       <artifactId>model-flow-service</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools.model</groupId>
+                       <artifactId>ietf-inet-types</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools.model</groupId>
+                       <artifactId>ietf-yang-types</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.controller.model</groupId>
+                       <artifactId>model-inventory</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.opendaylight.yangtools.model</groupId>
+                       <artifactId>opendaylight-l2-types</artifactId>
+               </dependency>
+       </dependencies>
+       <build>
+       <plugins>
+        <plugin>
         <artifactId>maven-checkstyle-plugin</artifactId>
         <configuration>
           <skip>true</skip>
         </configuration>
-      </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>${maven.compile.plugin.version}</version>
-          <configuration>
-            <source>${java.version.source}</source>
-            <target>${java.version.target}</target>
-          </configuration>
-        </plugin>
-        <!--  tells eclipse to import these folders into the package explorer as "source" folders
-              which allows eclipse to resolve the classes correctly during an eclipse build -->
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>build-helper-maven-plugin</artifactId>
-          <version>1.8</version>
-          <executions>
-            <execution>
-              <id>add-source</id>
-              <goals>
-                <goal>add-source</goal>
-              </goals>
-              <phase>generate-sources</phase>
-              <configuration>
-                <sources>
-                  <source>src/main/yang</source>
-                  <source>${jmxGeneratorPath}</source>
-                  <source>${salGeneratorPath}</source>
-                </sources>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-        <!--  cleans up auto generated code  -->
-        <plugin>
-          <artifactId>maven-clean-plugin</artifactId>
-          <configuration>
-            <filesets>
-              <fileset>
-                <directory>${jmxGeneratorPath}</directory>
-                <includes>
-                  <include>**</include>
-                </includes>
-              </fileset>
-              <fileset>
-                <directory>${salGeneratorPath}</directory>
-                <includes>
-                  <include>**</include>
-                </includes>
-              </fileset>
-            </filesets>
-          </configuration>
         </plugin>
+        </plugins>
+        </build>
 
-        <!-- Ignore/Execute plugin execution -->
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>properties-maven-plugin</artifactId>
-                    <versionRange>[0.0,)</versionRange>
-                    <goals>
-                      <goal>set-system-properties</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.codehaus.enunciate</groupId>
-                    <artifactId>maven-enunciate-plugin</artifactId>
-                    <versionRange>[0.0,)</versionRange>
-                    <goals>
-                      <goal>docs</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.jacoco</groupId>
-                    <artifactId>jacoco-maven-plugin</artifactId>
-                    <versionRange>[0.0,)</versionRange>
-                    <goals>
-                      <goal>prepare-agent</goal>
-                      <goal>pre-test</goal>
-                      <goal>post-test</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.ops4j.pax.exam</groupId>
-                    <artifactId>maven-paxexam-plugin</artifactId>
-                    <versionRange>[1.2.4,)</versionRange>
-                    <goals>
-                      <goal>generate-depends-file</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <execute>
-                      <runOnIncremental>false</runOnIncremental>
-                    </execute>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-checkstyle-plugin</artifactId>
-                    <versionRange>[2.0,)</versionRange>
-                    <goals>
-                      <goal>check</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.opendaylight.yangtools</groupId>
-                    <artifactId>yang-maven-plugin</artifactId>
-                    <versionRange>[0.5,)</versionRange>
-                    <goals>
-                      <goal>generate-sources</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <execute/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.codehaus.groovy.maven</groupId>
-                    <artifactId>gmaven-plugin</artifactId>
-                    <versionRange>1.0</versionRange>
-                    <goals>
-                      <goal>execute</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore/>
-                  </action>
-                </pluginExecution>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-enforcer-plugin</artifactId>
-                    <versionRange>${enforcer.version}</versionRange>
-                    <goals>
-                      <goal>enforce</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore/>
-                  </action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </build>
-  <modules>
-    <module>protocol_plugins.packetcable</module>
-    <module>packetcable-model</module>
-  </modules>
-</project>
 
+<!--   <profiles> -->
+<!--           <profile> -->
+<!--                   <id>integrationtests</id> -->
+<!--                   <activation> -->
+<!--                           <activeByDefault>false</activeByDefault> -->
+<!--                   </activation> -->
+<!--                   <modules> -->
+<!--                           <module>packetcable-it</module> -->
+<!--                   </modules> -->
+<!--           </profile> -->
+<!--   </profiles> -->
+</project>