From 13d05bc8458758ee39cb829098241e89616717ee Mon Sep 17 00:00:00 2001 From: Ashlee Young Date: Wed, 9 Sep 2015 22:15:21 -0700 Subject: ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60 Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd --- .../onosproject/app/ApplicationAdminService.java | 70 ++++++++++++ .../onosproject/app/ApplicationDescription.java | 89 +++++++++++++++ .../java/org/onosproject/app/ApplicationEvent.java | 75 +++++++++++++ .../org/onosproject/app/ApplicationException.java | 49 ++++++++ .../org/onosproject/app/ApplicationListener.java | 24 ++++ .../org/onosproject/app/ApplicationService.java | 70 ++++++++++++ .../java/org/onosproject/app/ApplicationState.java | 33 ++++++ .../java/org/onosproject/app/ApplicationStore.java | 108 ++++++++++++++++++ .../onosproject/app/ApplicationStoreDelegate.java | 24 ++++ .../app/DefaultApplicationDescription.java | 125 +++++++++++++++++++++ .../java/org/onosproject/app/package-info.java | 20 ++++ 11 files changed, 687 insertions(+) create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationAdminService.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationEvent.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationException.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationListener.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationService.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationState.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationStore.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationStoreDelegate.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java create mode 100644 framework/src/onos/core/api/src/main/java/org/onosproject/app/package-info.java (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/app') diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationAdminService.java new file mode 100644 index 00000000..3713e218 --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationAdminService.java @@ -0,0 +1,70 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +import org.onosproject.core.Application; +import org.onosproject.core.ApplicationId; +import org.onosproject.security.Permission; + +import java.io.InputStream; +import java.util.Set; + +/** + * Service for managing network control applications. + */ +public interface ApplicationAdminService extends ApplicationService { + + /** + * Installs the application contained in the specified application archive + * input stream. This can be either a ZIP stream containing a compressed + * application archive or a plain XML stream containing just the + * {@code app.xml} application descriptor file. + * + * @param appDescStream application descriptor input stream + * @return installed application descriptor + * @throws org.onosproject.app.ApplicationException if unable to read the app archive stream + */ + Application install(InputStream appDescStream); + + /** + * Uninstalls the specified application. + * + * @param appId application identifier + */ + void uninstall(ApplicationId appId); + + /** + * Activates the specified application. + * + * @param appId application identifier + */ + void activate(ApplicationId appId); + + /** + * Deactivates the specified application. + * + * @param appId application identifier + */ + void deactivate(ApplicationId appId); + + /** + * Updates the permissions granted to the applications. + * + * @param appId application identifier + * @param permissions set of granted permissions + */ + void setPermissions(ApplicationId appId, Set permissions); +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java new file mode 100644 index 00000000..2561280b --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java @@ -0,0 +1,89 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +import org.onosproject.core.ApplicationRole; +import org.onosproject.core.Version; +import org.onosproject.security.Permission; + +import java.net.URI; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +/** + * Description of a network control/management application. + */ +public interface ApplicationDescription { + + /** + * Returns the application name id. + * + * @return application identifier + */ + String name(); + + /** + * Returns the application version. + * + * @return application version + */ + Version version(); + + /** + * Returns description of the application. + * + * @return application description text + */ + String description(); + + /** + * Returns the name of the application origin, group or company. + * + * @return application origin + */ + String origin(); + + /** + * Returns the role of the application. + * + * @return application role + */ + ApplicationRole role(); + + /** + * Returns the permissions requested by the application. + * + * @return requested permissions + */ + Set permissions(); + + /** + * Returns the feature repository URI. Null value signifies that the + * application did not provide its own features repository. + * + * @return optional feature repo URL + */ + Optional featuresRepo(); + + /** + * Returns the list of features comprising the application. At least one + * feature must be given. + * + * @return application features + */ + List features(); +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationEvent.java new file mode 100644 index 00000000..5bf1323d --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationEvent.java @@ -0,0 +1,75 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +import org.onosproject.core.Application; +import org.onosproject.event.AbstractEvent; + +/** + * Describes application lifecycle event. + */ +public class ApplicationEvent extends AbstractEvent { + + public enum Type { + /** + * Signifies that an application has been installed. + */ + APP_INSTALLED, + + /** + * Signifies that an application has been activated. + */ + APP_ACTIVATED, + + /** + * Signifies that an application has been deactivated. + */ + APP_DEACTIVATED, + + /** + * Signifies that an application has been uninstalled. + */ + APP_UNINSTALLED, + + /** + * Signifies that application granted permissions have changed. + */ + APP_PERMISSIONS_CHANGED + } + + /** + * Creates an event of a given type and for the specified app and the + * current time. + * + * @param type app event type + * @param app event app subject + */ + public ApplicationEvent(Type type, Application app) { + super(type, app); + } + + /** + * Creates an event of a given type and for the specified app and time. + * + * @param type app event type + * @param app event app subject + * @param time occurrence time + */ + public ApplicationEvent(Type type, Application app, long time) { + super(type, app, time); + } + +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationException.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationException.java new file mode 100644 index 00000000..2888c70b --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationException.java @@ -0,0 +1,49 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +/** + * Represents class of errors related to application management. + */ +public class ApplicationException extends RuntimeException { + + private static final long serialVersionUID = -2287403908433720122L; + + /** + * Constructs an exception with no message and no underlying cause. + */ + public ApplicationException() { + } + + /** + * Constructs an exception with the specified message. + * + * @param message the message describing the specific nature of the error + */ + public ApplicationException(String message) { + super(message); + } + + /** + * Constructs an exception with the specified message and the underlying cause. + * + * @param message the message describing the specific nature of the error + * @param cause the underlying cause of this error + */ + public ApplicationException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationListener.java new file mode 100644 index 00000000..7a680572 --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationListener.java @@ -0,0 +1,24 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +import org.onosproject.event.EventListener; + +/** + * Entity capable of receiving application related events. + */ +public interface ApplicationListener extends EventListener { +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationService.java new file mode 100644 index 00000000..73dcc86c --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationService.java @@ -0,0 +1,70 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +import org.onosproject.core.Application; +import org.onosproject.core.ApplicationId; +import org.onosproject.event.ListenerService; +import org.onosproject.security.Permission; + +import java.util.Set; + +/** + * Service for inspecting inventory of network control applications. + */ +public interface ApplicationService + extends ListenerService { + + /** + * Returns the set of all installed applications. + * + * @return set of installed apps + */ + Set getApplications(); + + /** + * Returns the registered id of the application with the given name. + * + * @param name application name + * @return registered application id + */ + ApplicationId getId(String name); + + /** + * Returns the application with the supplied application identifier. + * + * @param appId application identifier + * @return application descriptor + */ + Application getApplication(ApplicationId appId); + + /** + * Return the application state. + * + * @param appId application identifier + * @return application state + */ + ApplicationState getState(ApplicationId appId); + + /** + * Returns the permissions currently granted to the applications. + * + * @param appId application identifier + * @return set of granted permissions + */ + Set getPermissions(ApplicationId appId); + +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationState.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationState.java new file mode 100644 index 00000000..c480a0c7 --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationState.java @@ -0,0 +1,33 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +/** + * Representation of an application state. + */ +public enum ApplicationState { + + /** + * Indicates that application has been installed, but is not running. + */ + INSTALLED, + + /** + * Indicates that application is active. + */ + ACTIVE + +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationStore.java new file mode 100644 index 00000000..b3cdc43e --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationStore.java @@ -0,0 +1,108 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +import org.onosproject.core.Application; +import org.onosproject.core.ApplicationId; +import org.onosproject.security.Permission; +import org.onosproject.store.Store; + +import java.io.InputStream; +import java.util.Set; + +/** + * Service for managing network control applications. + */ +public interface ApplicationStore extends Store { + + /** + * Returns the set of all installed applications. + * + * @return set of installed apps + */ + Set getApplications(); + + /** + * Returns the registered id of the application with the given name. + * + * @param name application name + * @return registered application id + */ + ApplicationId getId(String name); + + /** + * Returns the application with the supplied application identifier. + * + * @param appId application identifier + * @return application descriptor + */ + Application getApplication(ApplicationId appId); + + /** + * Returns the current application state. + * + * @param appId application identifier + * @return application state + */ + ApplicationState getState(ApplicationId appId); + + /** + * Creates the application from the specified application descriptor + * input stream. + * + * @param appDescStream application archive input stream + * @return application descriptor + */ + Application create(InputStream appDescStream); + + /** + * Removes the specified application. + * + * @param appId application identifier + */ + void remove(ApplicationId appId); + + /** + * Mark the application as actived. + * + * @param appId application identifier + */ + void activate(ApplicationId appId); + + /** + * Mark the application as deactivated. + * + * @param appId application identifier + */ + void deactivate(ApplicationId appId); + + /** + * Returns the permissions granted to the applications. + * + * @param appId application identifier + * @return set of granted permissions + */ + Set getPermissions(ApplicationId appId); + + /** + * Updates the permissions granted to the applications. + * + * @param appId application identifier + * @param permissions set of granted permissions + */ + void setPermissions(ApplicationId appId, Set permissions); + +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationStoreDelegate.java new file mode 100644 index 00000000..f339e685 --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/ApplicationStoreDelegate.java @@ -0,0 +1,24 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +import org.onosproject.store.StoreDelegate; + +/** + * Application store delegate abstraction. + */ +public interface ApplicationStoreDelegate extends StoreDelegate { +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java new file mode 100644 index 00000000..710d0f9c --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java @@ -0,0 +1,125 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ +package org.onosproject.app; + +import org.onosproject.core.ApplicationRole; +import org.onosproject.core.Version; +import org.onosproject.security.Permission; + +import java.net.URI; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import static com.google.common.base.MoreObjects.toStringHelper; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Default implementation of network control/management application descriptor. + */ +public class DefaultApplicationDescription implements ApplicationDescription { + + private final String name; + private final Version version; + private final String description; + private final String origin; + private final ApplicationRole role; + private final Set permissions; + private final Optional featuresRepo; + private final List features; + + /** + * Creates a new application descriptor using the supplied data. + * + * @param name application name + * @param version application version + * @param description application description + * @param origin origin company + * @param role application role + * @param permissions requested permissions + * @param featuresRepo optional features repo URI + * @param features application features + */ + public DefaultApplicationDescription(String name, Version version, + String description, String origin, + ApplicationRole role, Set permissions, + URI featuresRepo, List features) { + this.name = checkNotNull(name, "Name cannot be null"); + this.version = checkNotNull(version, "Version cannot be null"); + this.description = checkNotNull(description, "Description cannot be null"); + this.origin = checkNotNull(origin, "Origin cannot be null"); + this.role = checkNotNull(role, "Role cannot be null"); + this.permissions = checkNotNull(permissions, "Permissions cannot be null"); + this.featuresRepo = Optional.ofNullable(featuresRepo); + this.features = checkNotNull(features, "Features cannot be null"); + checkArgument(!features.isEmpty(), "There must be at least one feature"); + } + + @Override + public String name() { + return name; + } + + @Override + public Version version() { + return version; + } + + @Override + public String description() { + return description; + } + + @Override + public String origin() { + return origin; + } + + @Override + public ApplicationRole role() { + return role; + } + + @Override + public Set permissions() { + return permissions; + } + + @Override + public Optional featuresRepo() { + return featuresRepo; + } + + @Override + public List features() { + return features; + } + + @Override + public String toString() { + return toStringHelper(this) + .add("name", name) + .add("version", version) + .add("description", description) + .add("origin", origin) + .add("role", role) + .add("permissions", permissions) + .add("featuresRepo", featuresRepo) + .add("features", features) + .toString(); + } +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/app/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/app/package-info.java new file mode 100644 index 00000000..f8e5465d --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/app/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * 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. + */ + +/** + * Set of abstractions for managing network control applications. + */ +package org.onosproject.app; \ No newline at end of file -- cgit 1.2.3-korg