diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationEnumsProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationEnumsProtoTranslator.java new file mode 100644 index 0000000000..d82f93ebf5 --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationEnumsProtoTranslator.java @@ -0,0 +1,120 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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.incubator.protobuf.models.core; + +import org.onosproject.app.ApplicationState; +import org.onosproject.core.ApplicationRole; +import org.onosproject.grpc.app.models.ApplicationEnumsProto.ApplicationRoleProto; +import org.onosproject.grpc.app.models.ApplicationEnumsProto.ApplicationStateProto; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Optional; + +/** + * gRPC ApplicationEnumsProto message to equivalent ONOS Application Enums conversion related utilities. + */ +public final class ApplicationEnumsProtoTranslator { + + private static final Logger log = LoggerFactory.getLogger(ApplicationEnumsProtoTranslator.class); + + /** + * Translates {@link ApplicationRole} to gRPC ApplicationRole. + * + * @param role {@link ApplicationRole} + * @return gRPC message + */ + public static ApplicationRoleProto translate(ApplicationRole role) { + + switch (role) { + case USER: + return ApplicationRoleProto.USER; + case ADMIN: + return ApplicationRoleProto.ADMIN; + case UNSPECIFIED: + return ApplicationRoleProto.UNSPECIFIED; + + default: + log.warn("Unexpected application role: {}", role); + return ApplicationRoleProto.UNSPECIFIED; + } + } + + /** + * Translates gRPC ApplicationRole to {@link ApplicationRole}. + * + * @param roleProto gRPC message + * @return {@link ApplicationRole} + */ + public static Optional translate(ApplicationRoleProto roleProto) { + + switch (roleProto) { + case USER: + return Optional.of(ApplicationRole.USER); + case ADMIN: + return Optional.of(ApplicationRole.ADMIN); + case UNSPECIFIED: + return Optional.of(ApplicationRole.UNSPECIFIED); + + default: + log.warn("Unexpected application role proto: {}", roleProto); + return Optional.empty(); + } + } + + /** + * Translate {@link ApplicationState} to gRPC ApplicationState. + * + * @param state {@link ApplicationState} + * @return gRPC message + */ + public static ApplicationStateProto translate(ApplicationState state) { + + switch (state) { + case ACTIVE: + return ApplicationStateProto.ACTIVE; + case INSTALLED: + return ApplicationStateProto.INSTALLED; + + default: + log.warn("Unexpected application state: {}", state); + return ApplicationStateProto.INSTALLED; + } + } + + /** + * Translate gRPC ApplicationState to {@link ApplicationState}. + * + * @param stateProto gRPC message + * @return {@link ApplicationState} + */ + public static Optional translate(ApplicationStateProto stateProto) { + + switch (stateProto) { + case ACTIVE: + return Optional.of(ApplicationState.ACTIVE); + case INSTALLED: + return Optional.of(ApplicationState.INSTALLED); + + default: + log.warn("Unexpected application state proto: {}", stateProto); + return Optional.empty(); + } + } + + // Utility class not intended for instantiation. + private ApplicationEnumsProtoTranslator() {} +} diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationIdProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationIdProtoTranslator.java new file mode 100644 index 0000000000..e74ad7f301 --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationIdProtoTranslator.java @@ -0,0 +1,60 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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.incubator.protobuf.models.core; + +import org.onosproject.core.ApplicationId; +import org.onosproject.core.DefaultApplicationId; +import org.onosproject.grpc.core.models.ApplicationIdProtoOuterClass.ApplicationIdProto; + +import static org.onosproject.grpc.core.models.ApplicationIdProtoOuterClass.ApplicationIdProto.getDefaultInstance; + +/** + * gRPC ApplicationIdProto message to equivalent ONOS ApplicationId conversion related utilities. + */ +public final class ApplicationIdProtoTranslator { + + /** + * Translates gRPC ApplicationId to {@link ApplicationId}. + * + * @param applicationId gRPC message + * @return {@link ApplicationId} + */ + public static ApplicationId translate(ApplicationIdProto applicationId) { + + return new DefaultApplicationId(applicationId.getId(), applicationId.getName()); + } + + /** + * Translates {@link ApplicationId} to gRPC ApplicationId message. + * + * @param applicationId {@link ApplicationId} + * @return gRPC ApplicationId message + */ + public static ApplicationIdProto translate(ApplicationId applicationId) { + + if (applicationId != null) { + return ApplicationIdProto.newBuilder() + .setId(applicationId.id()) + .setName(applicationId.name()) + .build(); + } + + return getDefaultInstance(); + } + + // utility class not intended for instantiation. + private ApplicationIdProtoTranslator() {} +} diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java new file mode 100644 index 0000000000..a4b2ca6401 --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/ApplicationProtoTranslator.java @@ -0,0 +1,84 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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.incubator.protobuf.models.core; + +import com.google.common.collect.Sets; +import org.onosproject.core.Application; +import org.onosproject.core.ApplicationRole; +import org.onosproject.core.DefaultApplication; +import org.onosproject.grpc.core.models.ApplicationProtoOuterClass.ApplicationProto; +import org.onosproject.incubator.protobuf.models.security.PermissionProtoTranslator; +import org.onosproject.security.Permission; + +import java.util.Optional; +import java.util.Set; + +import static org.onosproject.grpc.core.models.ApplicationProtoOuterClass.ApplicationProto.getDefaultInstance; + +/** + * gRPC ApplicationProto message to equivalent ONOS Application conversion related utilities. + */ +public final class ApplicationProtoTranslator { + + /** + * Translates gRPC Application to {@link Application}. + * + * @param app gRPC message + * @return {@link Application} + */ + public static Application translate(ApplicationProto app) { + + Set permissions = Sets.newHashSet(); + + app.getPermissionsList().forEach(p -> + permissions.add(PermissionProtoTranslator.translate(p))); + + return new DefaultApplication(ApplicationIdProtoTranslator.translate(app.getAppId()), + VersionProtoTranslator.translate(app.getVersion()), app.getTitle(), + app.getDescription(), app.getOrigin(), app.getCategory(), app.getUrl(), + app.getReadme(), app.toByteArray(), + (ApplicationRole) ApplicationEnumsProtoTranslator.translate(app.getRole()).get(), + permissions, Optional.empty(), app.getFeaturesList(), app.getRequiredAppsList()); + } + + /** + * Translates {@link Application} to gRPC Application message. + * + * @param application {@link Application} + * @return gRPC message + */ + public static ApplicationProto translate(Application application) { + + if (application != null) { + return ApplicationProto.newBuilder() + .setAppId(ApplicationIdProtoTranslator.translate(application.id())) + .setCategory(application.category()) + .setDescription(application.description()) + .setOrigin(application.origin()) + .setReadme(application.readme()) + .setTitle(application.title()) + .setUrl(application.url()) + .setVersion(VersionProtoTranslator.translate(application.version())) + .setRole(ApplicationEnumsProtoTranslator.translate(application.role())) + .build(); + } + + return getDefaultInstance(); + } + + // Utility class not intended for instantiation. + private ApplicationProtoTranslator() {} +} diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/VersionProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/VersionProtoTranslator.java new file mode 100644 index 0000000000..6e0c24355d --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/VersionProtoTranslator.java @@ -0,0 +1,62 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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.incubator.protobuf.models.core; + +import org.onosproject.core.Version; +import org.onosproject.grpc.core.models.VersionProtoOuterClass.VersionProto; + +import static org.onosproject.grpc.core.models.VersionProtoOuterClass.VersionProto.getDefaultInstance; + +/** + * gRPC Version message to equivalent ONOS Version conversion related utilities. + */ +public final class VersionProtoTranslator { + + /** + * Translates {@link Version} to gRPC version message. + * + * @param version {@link Version} + * @return gRPC message + */ + public static VersionProto translate(Version version) { + + if (version != null) { + return VersionProto.newBuilder() + .setMajor(version.major()) + .setMinor(version.minor()) + .setPatch(version.patch()) + .setBuild(version.build()) + .build(); + } + + return getDefaultInstance(); + } + + /** + * Translates gRPC version message to {@link Version}. + * + * @param version gRPC message + * @return {@link Version} + */ + public static Version translate(VersionProto version) { + + return Version.version(version.getMajor(), version.getMinor(), + version.getPatch(), version.getBuild()); + } + + // Utility class not intended for instantiation. + private VersionProtoTranslator() {} +} diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/package-info.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/package-info.java new file mode 100644 index 0000000000..c1de17fd0b --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/core/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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. + */ +/** + * Utilities to handle ProtoBuf version of ONOS core models. + */ +package org.onosproject.incubator.protobuf.models.core; \ No newline at end of file diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/security/PermissionProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/security/PermissionProtoTranslator.java new file mode 100644 index 0000000000..d3cdc7d1c2 --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/security/PermissionProtoTranslator.java @@ -0,0 +1,61 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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.incubator.protobuf.models.security; + +import org.onosproject.grpc.security.models.PermissionProtoOuterClass.PermissionProto; +import org.onosproject.security.Permission; + +import static org.onosproject.grpc.security.models.PermissionProtoOuterClass.PermissionProto.getDefaultInstance; + +/** + * gRPC Permission message to equivalent ONOS Permission conversion related utilities. + */ +public final class PermissionProtoTranslator { + + /** + * Translate {@link Permission} to gRPC permission message. + * + * @param permission {@link Permission} + * @return gRPC message + */ + public static PermissionProto translate(Permission permission) { + + if (permission != null) { + return PermissionProto.newBuilder() + .setActions(permission.getActions()) + .setClassname(permission.getClassName()) + .setName(permission.getName()) + .build(); + } + + return getDefaultInstance(); + } + + /** + * Translate gRPC permission message to {@link Permission}. + * + * @param permission gRPC message + * @return {@link Permission} + */ + public static Permission translate(PermissionProto permission) { + + return new Permission(permission.getClassname(), + permission.getName(), permission.getActions()); + } + + // Utility class not intended for instantiation. + private PermissionProtoTranslator() {} +} diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/security/package-info.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/security/package-info.java new file mode 100644 index 0000000000..5ee50f4aca --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/security/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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. + */ +/** + * Utilities to handle ProtoBuf version of ONOS security models. + */ +package org.onosproject.incubator.protobuf.models.security; \ No newline at end of file diff --git a/incubator/protobuf/models/src/main/proto/core/ApplicationProto.proto b/incubator/protobuf/models/src/main/proto/core/ApplicationProto.proto index e91ea234f4..2618124eee 100644 --- a/incubator/protobuf/models/src/main/proto/core/ApplicationProto.proto +++ b/incubator/protobuf/models/src/main/proto/core/ApplicationProto.proto @@ -6,11 +6,12 @@ package core; import "core/ApplicationIdProto.proto"; import "app/ApplicationEnumsProto.proto"; import "security/PermissionProto.proto"; +import "core/VersionProto.proto"; // Corresponds to org.onosproject.core.Application. message ApplicationProto { core.ApplicationIdProto app_id = 1; - string version = 2; + core.VersionProto version = 2; string title = 3; string description = 4; string category = 5; diff --git a/incubator/protobuf/models/src/main/proto/core/VersionProto.proto b/incubator/protobuf/models/src/main/proto/core/VersionProto.proto new file mode 100644 index 0000000000..f25699ba5d --- /dev/null +++ b/incubator/protobuf/models/src/main/proto/core/VersionProto.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +option java_package = "org.onosproject.grpc.core.models"; + +package core; + +// Corresponds to org.onosproject.core. +message VersionProto { + int32 major = 1; + int32 minor = 2; + string patch = 3; + string build = 4; +} diff --git a/incubator/protobuf/services/nb/src/main/java/org/onosproject/grpc/nb/app/GrpcNbApplicationService.java b/incubator/protobuf/services/nb/src/main/java/org/onosproject/grpc/nb/app/GrpcNbApplicationService.java new file mode 100644 index 0000000000..4bc5a31956 --- /dev/null +++ b/incubator/protobuf/services/nb/src/main/java/org/onosproject/grpc/nb/app/GrpcNbApplicationService.java @@ -0,0 +1,126 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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.grpc.nb.app; + +import com.google.common.annotations.Beta; +import io.grpc.stub.StreamObserver; +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferenceCardinality; +import org.onosproject.app.ApplicationService; +import org.onosproject.app.ApplicationState; +import org.onosproject.core.Application; +import org.onosproject.core.ApplicationId; +import org.onosproject.grpc.nb.app.ApplicationServiceGrpc.ApplicationServiceImplBase; +import org.onosproject.grpc.nb.app.ApplicationServiceNb.getApplicationReply; +import org.onosproject.grpc.nb.app.ApplicationServiceNb.getApplicationsReply; +import org.onosproject.grpc.nb.app.ApplicationServiceNb.getIdReply; +import org.onosproject.grpc.nb.app.ApplicationServiceNb.getPermissionsReply; +import org.onosproject.grpc.nb.app.ApplicationServiceNb.getStateReply; +import org.onosproject.incubator.protobuf.models.core.ApplicationEnumsProtoTranslator; +import org.onosproject.incubator.protobuf.models.core.ApplicationIdProtoTranslator; +import org.onosproject.incubator.protobuf.models.core.ApplicationProtoTranslator; +import org.onosproject.incubator.protobuf.models.security.PermissionProtoTranslator; + +/** + * A server that provides access to the methods exposed by {@link ApplicationService}. + */ + +@Beta +@Component(immediate = true) +public class GrpcNbApplicationService { + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + protected ApplicationService applicationService; + + @Activate + public void activate() { + //TODO this should contact the registry service and register an instance + // of this service. + } + + @Deactivate + public void deactivate() { + } + + private class ApplicationServiceNbServerInternal extends ApplicationServiceImplBase { + + public ApplicationServiceNbServerInternal() { + super(); + } + + @Override + public void getApplications(ApplicationServiceNb.getApplicationsRequest request, + StreamObserver responseObserver) { + getApplicationsReply.Builder replyBuilder = getApplicationsReply.newBuilder(); + + applicationService.getApplications().forEach(a -> + replyBuilder.addApplication(ApplicationProtoTranslator.translate(a))); + responseObserver.onNext(replyBuilder.build()); + responseObserver.onCompleted(); + } + + @Override + public void getId(ApplicationServiceNb.getIdRequest request, + StreamObserver responseObserver) { + ApplicationId appId = applicationService.getId(request.getName()); + + responseObserver.onNext(getIdReply.newBuilder() + .setApplicationId(ApplicationIdProtoTranslator.translate(appId)).build()); + responseObserver.onCompleted(); + } + + @Override + public void getApplication(ApplicationServiceNb.getApplicationRequest request, + StreamObserver responseObserver) { + + Application application = applicationService.getApplication( + ApplicationIdProtoTranslator.translate(request.getApplicationId())); + + responseObserver.onNext(getApplicationReply.newBuilder() + .setApplication(ApplicationProtoTranslator + .translate(application)).build()); + responseObserver.onCompleted(); + } + + @Override + public void getState(ApplicationServiceNb.getStateRequest request, + StreamObserver responseObserver) { + ApplicationState state = applicationService.getState( + ApplicationIdProtoTranslator.translate(request.getApplicationId())); + + responseObserver.onNext(getStateReply + .newBuilder().setState(ApplicationEnumsProtoTranslator + .translate(state)).build()); + responseObserver.onCompleted(); + } + + @Override + public void getPermissions(ApplicationServiceNb.getPermissionsRequest request, + StreamObserver responseObserver) { + getPermissionsReply.Builder replyBuilder = getPermissionsReply.newBuilder(); + + applicationService.getPermissions(ApplicationIdProtoTranslator + .translate(request.getApplicationId())) + .forEach(p -> replyBuilder.addPermission( + PermissionProtoTranslator.translate(p))); + responseObserver.onNext(replyBuilder.build()); + responseObserver.onCompleted(); + } + } +} diff --git a/incubator/protobuf/services/nb/src/main/java/org/onosproject/grpc/nb/app/package-info.java b/incubator/protobuf/services/nb/src/main/java/org/onosproject/grpc/nb/app/package-info.java new file mode 100644 index 0000000000..b5cd38713f --- /dev/null +++ b/incubator/protobuf/services/nb/src/main/java/org/onosproject/grpc/nb/app/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * 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. + */ +/** + * gRPC server implementations for northbound services. + */ +package org.onosproject.grpc.nb.app; \ No newline at end of file diff --git a/incubator/protobuf/services/nb/src/main/proto/app/ApplicationServiceNb.proto b/incubator/protobuf/services/nb/src/main/proto/app/ApplicationServiceNb.proto new file mode 100644 index 0000000000..2b4515a496 --- /dev/null +++ b/incubator/protobuf/services/nb/src/main/proto/app/ApplicationServiceNb.proto @@ -0,0 +1,56 @@ +syntax="proto3"; +option java_package = "org.onosproject.grpc.nb.app"; + +package nb.app; + +import "core/ApplicationProto.proto"; +import "core/ApplicationIdProto.proto"; +import "app/ApplicationEnumsProto.proto"; +import "security/PermissionProto.proto"; + +message getApplicationsRequest { +} + +message getApplicationsReply { + repeated .core.ApplicationProto application = 1; +} + +message getIdRequest { + string name = 1; +} + +message getIdReply { + .core.ApplicationIdProto application_id = 1; +} + +message getApplicationRequest { + .core.ApplicationIdProto application_id = 1; +} + +message getApplicationReply { + .core.ApplicationProto application = 1; +} + +message getStateRequest { + .core.ApplicationIdProto application_id = 1; +} + +message getStateReply { + .app.ApplicationStateProto state = 1; +} + +message getPermissionsRequest { + .core.ApplicationIdProto application_id = 1; +} + +message getPermissionsReply { + repeated .security.PermissionProto permission = 1; +} + +service ApplicationService { + rpc getApplications(getApplicationsRequest) returns (getApplicationsReply) {} + rpc getId(getIdRequest) returns (getIdReply) {} + rpc getApplication(getApplicationRequest) returns (getApplicationReply) {} + rpc getState(getStateRequest) returns (getStateReply) {} + rpc getPermissions(getPermissionsRequest) returns (getPermissionsReply) {} +} \ No newline at end of file