/* Copyright 2014 Danish Maritime Authority.
*
* 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 net.maritimecloud.serviceregistry.command;
import net.maritimecloud.common.cqrs.contract.CqrsContract;
import net.maritimecloud.common.cqrs.contract.Event;
import net.maritimecloud.common.cqrs.contract.Command;
import net.maritimecloud.common.cqrs.contract.TargetAggregateIdentifier;
import net.maritimecloud.serviceregistry.command.organization.OrganizationId;
import net.maritimecloud.serviceregistry.command.organization.membership.MembershipId;
import net.maritimecloud.serviceregistry.command.serviceinstance.Coverage;
import net.maritimecloud.serviceregistry.command.serviceinstance.ServiceEndpoint;
import net.maritimecloud.serviceregistry.command.serviceinstance.ServiceInstanceId;
import net.maritimecloud.serviceregistry.command.servicespecification.ServiceSpecificationId;
import net.maritimecloud.serviceregistry.command.servicespecification.ServiceType;
/**
* This interface describes the interface to the ServiceRegitry in terms of Commands and Events. Whereas the commands are explicitly being
* the published interface, the description of the events are more like a convenience as they in most cases share the properties of the
* commands.
* <p>
* Events may inherit their properties from corresponding commands, and may extend those properties, as would be needed to make room for
* enrichment.
* <p>
* <p>
* @see CommandEventSourceGenerator
* @author Christoffer Børrild
*/
public interface ServiceRegistryContract extends CqrsContract {
@Command
void createOrganization(OrganizationId organizationId, String primaryAlias, String name, String summary, String url);
@Command
void changeOrganizationNameAndSummary(OrganizationId organizationId, String name, String summary);
@Command
void changeOrganizationWebsiteUrl(OrganizationId organizationId, String url);
@Command
void addOrganizationAlias(OrganizationId organizationId, String alias);
@Command
void removeOrganizationAlias(OrganizationId organizationId, String alias);
@Command
void authorizeMembershipToOrganizationCreator(OrganizationId organizationId, MembershipId membershipId, String username);
@Command
void inviteUserToOrganization(OrganizationId organizationId, MembershipId membershipId, String username);
/**
* @see #userAppliedForMembershipToOrganization(MembershipId, OrganizationId, String)
*/
@Command
void applyForMembershipToOrganization(OrganizationId organizationId, MembershipId membershipId, String username, String applicationMessage);
@Command
void acceptUsersMembershipApplication(MembershipId membershipId);
@Command
void acceptMembershipToOrganization(MembershipId membershipId);
@Command
void removeUserFromOrganization(MembershipId membershipId);
@Command
void prepareServiceSpecification(
OrganizationId ownerId,
@TargetAggregateIdentifier ServiceSpecificationId serviceSpecificationId,
ServiceType serviceType,
String name,
String summary
);
// (commented out since the coverage property needs specialised @JsonSerialize and Deserializer!!!)
// @Command
// void provideServiceInstance(
// OrganizationId providerId,
// @TargetAggregateIdentifier ServiceSpecificationId serviceSpecificationId,
// ServiceSpecificationId specificationId,
// ServiceInstanceId serviceInstanceId,
// String name,
// String summary,
// Coverage coverage);
@Command
void addServiceInstanceAlias(OrganizationId organizationId, ServiceInstanceId serviceInstanceId, String alias);
@Command
void removeServiceInstanceAlias(OrganizationId organizationId, ServiceInstanceId serviceInstanceId, String alias);
@Command
void changeServiceSpecificationNameAndSummary(ServiceSpecificationId serviceSpecificationId, String name, String summary);
@Command
void addServiceInstanceEndpoint(ServiceInstanceId serviceInstanceId, ServiceEndpoint serviceEndpoint);
@Command
void changeServiceInstanceNameAndSummary(ServiceInstanceId serviceInstanceId, String name, String summary);
@Command
void removeServiceInstanceEndpoint(ServiceInstanceId serviceInstanceId, ServiceEndpoint serviceEndpoint);
// ------------------------------------------------------------------------
// EVENTS
// ------------------------------------------------------------------------
@Event
void organizationCreated(OrganizationId organizationId, String primaryAlias, String name, String summary, String url);
@Event
void serviceSpecificationNameAndSummaryChanged(ServiceSpecificationId serviceSpecificationId, String name, String summary);
@Event
void organizationWebsiteUrlChanged(OrganizationId organizationId, String url);
@Event
void organizationNameAndSummaryChanged(OrganizationId organizationId, String name, String summary);
@Event
void organizationAliasAdded(OrganizationId organizationId, String alias);
@Event(extend = "OrganizationAliasAdded")
void organizationPrimaryAliasAdded(OrganizationId organizationId, String alias);
@Event
void organizationAliasRegistrationDenied(OrganizationId organizationId, String alias);
@Event
void organizationAliasRemoved(OrganizationId organizationId, String alias);
@Event
void organizationMembershipAssignedToOwner(MembershipId membershipId, OrganizationId organizationId, String username);
@Event
void userInvitedToOrganization(MembershipId membershipId, OrganizationId organizationId, String username);
@Event
void userAcceptedMembershipToOrganization(MembershipId membershipId, OrganizationId organizationId, String username);
/**
* @see #applyForMembershipToOrganization(OrganizationId, MembershipId, String, String)
*/
@Event
void userAppliedForMembershipToOrganization(MembershipId membershipId, OrganizationId organizationId, String username, String applicationMessage);
@Event
void organizationAcceptedMembershipApplication(MembershipId membershipId, OrganizationId organizationId, String username);
@Event
void userLeftOrganization(MembershipId membershipId, OrganizationId organizationId, String username);
@Event
void organizationRevokedUserMembership(MembershipId membershipId, OrganizationId organizationId, String username);
@Event
void serviceSpecificationCreated(
OrganizationId ownerId,
@TargetAggregateIdentifier ServiceSpecificationId serviceSpecificationId,
ServiceType serviceType,
String name,
String summary
);
@Event
void serviceInstanceAliasAdded(OrganizationId organizationId, ServiceInstanceId serviceInstanceId, String alias);
/**
* this one is emitted only on the first creation of an alias on a target
*/
@Event(extend = "ServiceInstanceAliasAdded")
void serviceInstancePrimaryAliasAdded(OrganizationId organizationId, ServiceInstanceId serviceInstanceId, String alias);
@Event
void serviceInstanceAliasRegistrationDenied(OrganizationId organizationId, ServiceInstanceId serviceInstanceId, String alias);
@Event
void serviceInstanceAliasRemoved(OrganizationId organizationId, String alias);
@Event
void serviceInstanceCreated(
OrganizationId providerId,
ServiceSpecificationId specificationId,
ServiceInstanceId serviceInstanceId,
String name,
String summary,
Coverage coverage,
// enrich with redundant data
ServiceType serviceType);
@Event
void serviceInstanceEndpointAdded(ServiceInstanceId serviceInstanceId, ServiceEndpoint serviceEndpoint);
@Event
void serviceInstanceEndpointRemoved(ServiceInstanceId serviceInstanceId, ServiceEndpoint serviceEndpoint);
@Event
void serviceInstanceNameAndSummaryChanged(ServiceInstanceId serviceInstanceId, String name, String summary);
}