This is an automated email from the ASF dual-hosted git repository. myrle pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/fineract-cn-provisioner.git
commit fc5b4ae718a7918d8cd02e5e9b850d93722ce07a Author: Myrle Krantz <[email protected]> AuthorDate: Thu Sep 21 10:04:50 2017 +0200 Moved some event waiting code to lang so that it can be used in other services. --- .../internal/listener/EventExpectation.java | 87 ---------------------- .../provisioner/internal/listener/EventKey.java | 57 -------------- .../internal/listener/IdentityListener.java | 62 +++------------ .../internal/service/TenantApplicationService.java | 2 +- .../applications/IdentityServiceInitializer.java | 2 +- 5 files changed, 12 insertions(+), 198 deletions(-) diff --git a/service/src/main/java/io/mifos/provisioner/internal/listener/EventExpectation.java b/service/src/main/java/io/mifos/provisioner/internal/listener/EventExpectation.java deleted file mode 100644 index 23d0e99..0000000 --- a/service/src/main/java/io/mifos/provisioner/internal/listener/EventExpectation.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2017 The Mifos Initiative. - * - * 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 io.mifos.provisioner.internal.listener; - -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Condition; -import java.util.concurrent.locks.ReentrantLock; - -/** - * @author Myrle Krantz - */ -public class EventExpectation { - private final EventKey key; - private boolean eventFound = false; - private boolean eventWithdrawn = false; - - private final ReentrantLock lock = new ReentrantLock(); - - private final Condition found = lock.newCondition(); - - EventExpectation(final EventKey key) { - this.key = key; - } - - EventKey getKey() { - return key; - } - - void setEventFound(boolean eventFound) { - lock.lock(); - try { - this.eventFound = eventFound; - found.signal(); - } - finally { - lock.unlock(); - } - } - - void setEventWithdrawn(boolean eventWithdrawn) { - lock.lock(); - try { - this.eventWithdrawn = eventWithdrawn; - found.signal(); - } - finally { - lock.unlock(); - } - } - - public boolean waitForOccurrence(long timeout, TimeUnit timeUnit) throws InterruptedException { - - lock.lock(); - try { - if (eventFound) - return true; - - if (eventWithdrawn) - return false; - - found.await(timeout, timeUnit); - - return (eventFound); - } - finally { - lock.unlock(); - } - } - - @Override - public String toString() { - return key.toString(); - } -} diff --git a/service/src/main/java/io/mifos/provisioner/internal/listener/EventKey.java b/service/src/main/java/io/mifos/provisioner/internal/listener/EventKey.java deleted file mode 100644 index 13f985e..0000000 --- a/service/src/main/java/io/mifos/provisioner/internal/listener/EventKey.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2017 The Mifos Initiative. - * - * 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 io.mifos.provisioner.internal.listener; - -import java.util.Objects; - -/** - * @author Myrle Krantz - */ -class EventKey { - private String tenantIdentifier; - private String eventName; - private Object event; - - EventKey(final String tenantIdentifier, final String eventName, final Object event) { - this.tenantIdentifier = tenantIdentifier; - this.eventName = eventName; - this.event = event; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - EventKey eventKey = (EventKey) o; - return Objects.equals(tenantIdentifier, eventKey.tenantIdentifier) && - Objects.equals(eventName, eventKey.eventName) && - Objects.equals(event, eventKey.event); - } - - @Override - public int hashCode() { - return Objects.hash(tenantIdentifier, eventName, event); - } - - @Override - public String toString() { - return "EventKey{" + - "tenantIdentifier='" + tenantIdentifier + '\'' + - ", eventName='" + eventName + '\'' + - ", event=" + event + - '}'; - } -} diff --git a/service/src/main/java/io/mifos/provisioner/internal/listener/IdentityListener.java b/service/src/main/java/io/mifos/provisioner/internal/listener/IdentityListener.java index fb4d638..e0f988a 100644 --- a/service/src/main/java/io/mifos/provisioner/internal/listener/IdentityListener.java +++ b/service/src/main/java/io/mifos/provisioner/internal/listener/IdentityListener.java @@ -17,7 +17,9 @@ package io.mifos.provisioner.internal.listener; import com.google.gson.Gson; import io.mifos.core.lang.config.TenantHeaderFilter; -import io.mifos.identity.api.v1.events.ApplicationPermissionEvent; +import io.mifos.core.lang.listening.EventExpectation; +import io.mifos.core.lang.listening.EventKey; +import io.mifos.core.lang.listening.TenantedEventListener; import io.mifos.identity.api.v1.events.ApplicationSignatureEvent; import io.mifos.identity.api.v1.events.EventConstants; import org.springframework.beans.factory.annotation.Autowired; @@ -25,10 +27,6 @@ import org.springframework.jms.annotation.JmsListener; import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import static io.mifos.identity.api.v1.events.EventConstants.OPERATION_POST_APPLICATION_PERMISSION; import static io.mifos.identity.api.v1.events.EventConstants.OPERATION_POST_PERMITTABLE_GROUP; import static io.mifos.identity.api.v1.events.EventConstants.OPERATION_PUT_APPLICATION_SIGNATURE; @@ -38,7 +36,7 @@ import static io.mifos.identity.api.v1.events.EventConstants.OPERATION_PUT_APPLI @Component public class IdentityListener { private final Gson gson; - private final Map<EventKey, EventExpectation> eventExpectations = new ConcurrentHashMap<>(); + private final TenantedEventListener eventListener = new TenantedEventListener(); @Autowired public IdentityListener(final Gson gson) { @@ -53,25 +51,7 @@ public class IdentityListener { public void onCreatePermittableGroup( @Header(TenantHeaderFilter.TENANT_HEADER)final String tenantIdentifier, final String payload) throws Exception { - final EventExpectation eventExpectation = eventExpectations.remove(new EventKey(tenantIdentifier, OPERATION_POST_PERMITTABLE_GROUP, payload)); - if (eventExpectation != null) { - eventExpectation.setEventFound(true); - } - } - - @JmsListener( - subscription = EventConstants.DESTINATION, - destination = EventConstants.DESTINATION, - selector = EventConstants.SELECTOR_POST_APPLICATION_PERMISSION - ) - public void onCreateApplicationPermission( - @Header(TenantHeaderFilter.TENANT_HEADER)final String tenantIdentifier, - final String payload) throws Exception { - final ApplicationPermissionEvent event = gson.fromJson(payload, ApplicationPermissionEvent.class); - final EventExpectation eventExpectation = eventExpectations.remove(new EventKey(tenantIdentifier, OPERATION_POST_APPLICATION_PERMISSION, event)); - if (eventExpectation != null) { - eventExpectation.setEventFound(true); - } + eventListener.notify(new EventKey(tenantIdentifier, OPERATION_POST_PERMITTABLE_GROUP, payload)); } @JmsListener( @@ -83,44 +63,22 @@ public class IdentityListener { @Header(TenantHeaderFilter.TENANT_HEADER)final String tenantIdentifier, final String payload) throws Exception { final ApplicationSignatureEvent event = gson.fromJson(payload, ApplicationSignatureEvent.class); - final EventExpectation eventExpectation = eventExpectations.remove(new EventKey(tenantIdentifier, OPERATION_PUT_APPLICATION_SIGNATURE, event)); - if (eventExpectation != null) { - eventExpectation.setEventFound(true); - } + eventListener.notify(new EventKey(tenantIdentifier, OPERATION_PUT_APPLICATION_SIGNATURE, event)); } public EventExpectation expectPermittableGroupCreation(final String tenantIdentifier, final String permittableGroupIdentifier) { - final EventKey key = new EventKey(tenantIdentifier, OPERATION_POST_PERMITTABLE_GROUP, permittableGroupIdentifier); - final EventExpectation value = new EventExpectation(key); - eventExpectations.put(key, value); - return value; - } - - public EventExpectation expectApplicationPermissionCreation(final String tenantIdentifier, - final String applicationIdentifier, - final String permittableGroupIdentifier) { - final ApplicationPermissionEvent expectedEvent = new ApplicationPermissionEvent(applicationIdentifier, permittableGroupIdentifier); - final EventKey key = new EventKey(tenantIdentifier, OPERATION_POST_APPLICATION_PERMISSION, expectedEvent); - final EventExpectation value = new EventExpectation(key); - eventExpectations.put(key, value); - return value; + return eventListener.expect(new EventKey(tenantIdentifier, OPERATION_POST_PERMITTABLE_GROUP, permittableGroupIdentifier)); } public EventExpectation expectApplicationSignatureSet(final String tenantIdentifier, final String applicationIdentifier, final String keyTimestamp) { final ApplicationSignatureEvent expectedEvent = new ApplicationSignatureEvent(applicationIdentifier, keyTimestamp); - final EventKey key = new EventKey(tenantIdentifier, OPERATION_PUT_APPLICATION_SIGNATURE, expectedEvent); - final EventExpectation value = new EventExpectation(key); - eventExpectations.put(key, value); - return value; + return eventListener.expect(new EventKey(tenantIdentifier, OPERATION_PUT_APPLICATION_SIGNATURE, expectedEvent)); } public void withdrawExpectation(final EventExpectation eventExpectation) { - final EventExpectation expectation = eventExpectations.remove(eventExpectation.getKey()); - if (expectation != null) { - eventExpectation.setEventWithdrawn(true); - } + eventListener.withdrawExpectation(eventExpectation); } -} +} \ No newline at end of file diff --git a/service/src/main/java/io/mifos/provisioner/internal/service/TenantApplicationService.java b/service/src/main/java/io/mifos/provisioner/internal/service/TenantApplicationService.java index 2e45d9c..fe900c7 100644 --- a/service/src/main/java/io/mifos/provisioner/internal/service/TenantApplicationService.java +++ b/service/src/main/java/io/mifos/provisioner/internal/service/TenantApplicationService.java @@ -23,8 +23,8 @@ import io.mifos.anubis.config.TenantSignatureRepository; import io.mifos.core.cassandra.core.CassandraSessionProvider; import io.mifos.core.lang.AutoTenantContext; import io.mifos.core.lang.ServiceException; +import io.mifos.core.lang.listening.EventExpectation; import io.mifos.provisioner.config.ProvisionerConstants; -import io.mifos.provisioner.internal.listener.EventExpectation; import io.mifos.provisioner.internal.repository.ApplicationEntity; import io.mifos.provisioner.internal.repository.TenantApplicationEntity; import io.mifos.provisioner.internal.repository.TenantCassandraRepository; diff --git a/service/src/main/java/io/mifos/provisioner/internal/service/applications/IdentityServiceInitializer.java b/service/src/main/java/io/mifos/provisioner/internal/service/applications/IdentityServiceInitializer.java index bb1f104..83b5de1 100644 --- a/service/src/main/java/io/mifos/provisioner/internal/service/applications/IdentityServiceInitializer.java +++ b/service/src/main/java/io/mifos/provisioner/internal/service/applications/IdentityServiceInitializer.java @@ -23,6 +23,7 @@ import io.mifos.anubis.api.v1.domain.PermittableEndpoint; import io.mifos.core.api.util.InvalidTokenException; import io.mifos.core.lang.ServiceException; import io.mifos.core.lang.TenantContextHolder; +import io.mifos.core.lang.listening.EventExpectation; import io.mifos.identity.api.v1.client.ApplicationPermissionAlreadyExistsException; import io.mifos.identity.api.v1.client.CallEndpointSetAlreadyExistsException; import io.mifos.identity.api.v1.client.IdentityManager; @@ -34,7 +35,6 @@ import io.mifos.permittedfeignclient.api.v1.client.ApplicationPermissionRequirem import io.mifos.permittedfeignclient.api.v1.domain.ApplicationPermission; import io.mifos.provisioner.config.ProvisionerConstants; import io.mifos.provisioner.config.SystemProperties; -import io.mifos.provisioner.internal.listener.EventExpectation; import io.mifos.provisioner.internal.listener.IdentityListener; import io.mifos.tool.crypto.HashGenerator; import org.slf4j.Logger; -- To stop receiving notification emails like this one, please contact [email protected].
