diff --git a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BackendFloatingServer.java b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BackendFloatingServer.java index 48eda4621..5c2ad55e7 100644 --- a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BackendFloatingServer.java +++ b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BackendFloatingServer.java @@ -22,10 +22,10 @@ */ public interface BackendFloatingServer { - ServiceInvocationResult canTake(ConditionRequestData request); + ServiceInvocationResult canTake(RequestedCondition request); - ServiceInvocationResult take(CertificateRequestData request); + ServiceInvocationResult take(RequestedCertificate request); - ServiceInvocationResult release(CertificateRequestData request); + ServiceInvocationResult release(RequestedCertificate request); } diff --git a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BackendLicensingRequest.java b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BackendLicensingRequest.java index 54908fb17..ad04948c0 100644 --- a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BackendLicensingRequest.java +++ b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BackendLicensingRequest.java @@ -12,7 +12,6 @@ *******************************************************************************/ package org.eclipse.passage.lbc.internal.api; -import java.io.IOException; import java.util.Optional; import java.util.function.Supplier; @@ -27,7 +26,7 @@ public interface BackendLicensingRequest { String parameter(String key); - String body() throws IOException; + String body(); Requester requester(); } diff --git a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BoundLicense.java b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BoundLicense.java index 7a90d7468..81aa90849 100644 --- a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BoundLicense.java +++ b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/BoundLicense.java @@ -1,3 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ package org.eclipse.passage.lbc.internal.api; /** @@ -8,7 +20,7 @@ public interface BoundLicense { // Condition identifier - String identifier(); + ConditionIdentifier identifier(); // Grant's capacity int capacity(); diff --git a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/ConditionIdentifier.java b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/ConditionIdentifier.java new file mode 100644 index 000000000..cd349e949 --- /dev/null +++ b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/ConditionIdentifier.java @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lbc.internal.api; + +/** + * @since 1.0 + */ +public interface ConditionIdentifier { + + String identifier(); +} diff --git a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/CertificateRequestData.java b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/RequestedCertificate.java similarity index 84% rename from bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/CertificateRequestData.java rename to bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/RequestedCertificate.java index c27bf17a0..e695efd75 100644 --- a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/CertificateRequestData.java +++ b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/RequestedCertificate.java @@ -12,17 +12,15 @@ *******************************************************************************/ package org.eclipse.passage.lbc.internal.api; -import java.util.Optional; - import org.eclipse.passage.lic.internal.api.restrictions.ExaminationCertificate; /** * @since 1.0 */ -public interface CertificateRequestData { +public interface RequestedCertificate { Requester requester(); - Optional certificate(); + ExaminationCertificate certificate(); } diff --git a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/ConditionRequestData.java b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/RequestedCondition.java similarity index 89% rename from bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/ConditionRequestData.java rename to bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/RequestedCondition.java index bcb17019d..1d8ae25cc 100644 --- a/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/ConditionRequestData.java +++ b/bundles/org.eclipse.passage.lbc.api/src/org/eclipse/passage/lbc/internal/api/RequestedCondition.java @@ -15,10 +15,10 @@ /** * @since 1.0 */ -public interface ConditionRequestData { +public interface RequestedCondition { Requester requester(); - String condition(); + ConditionIdentifier condition(); } diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseCertificateRequestData.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseCertificateRequestData.java deleted file mode 100644 index e3472e273..000000000 --- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseCertificateRequestData.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 ArSysOp - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * https://www.eclipse.org/legal/epl-2.0/. - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * ArSysOp - initial API and implementation - *******************************************************************************/ -package org.eclipse.passage.lbc.internal.base; - -import java.io.IOException; -import java.util.Optional; - -import org.eclipse.passage.lbc.internal.api.BackendLicensingRequest; -import org.eclipse.passage.lbc.internal.api.CertificateRequestData; -import org.eclipse.passage.lbc.internal.api.Requester; -import org.eclipse.passage.lic.internal.api.restrictions.ExaminationCertificate; -import org.eclipse.passage.lic.internal.json.JsonObjectMapper; - -/** - * @since 1.0 - */ -public final class BaseCertificateRequestData implements CertificateRequestData { - - private final BackendLicensingRequest request; - - public BaseCertificateRequestData(BackendLicensingRequest request) { - this.request = request; - } - - @Override - public Requester requester() { - return request.requester(); - } - - @Override - public Optional certificate() { - try { - return Optional.of(new JsonObjectMapper().get().readValue(request.body(), ExaminationCertificate.class)); - } catch (IOException e) { - e.printStackTrace(); - return Optional.empty(); - } - } - -} diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseLicensingRequest.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseLicensingRequest.java index 4fa2b925f..3c713ffbf 100644 --- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseLicensingRequest.java +++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseLicensingRequest.java @@ -29,9 +29,11 @@ public final class BaseLicensingRequest implements BackendLicensingRequest { private final HttpServletRequest httpRequest; + private final String body; - public BaseLicensingRequest(HttpServletRequest httpRequest) { + public BaseLicensingRequest(HttpServletRequest httpRequest) throws IOException { this.httpRequest = httpRequest; + this.body = body(httpRequest); } @Override @@ -40,10 +42,8 @@ public Supplier> action() { } @Override - public String body() throws IOException { - StringBuilder builder = new StringBuilder(); - httpRequest.getReader().lines().map(builder::append); - return builder.toString(); + public String body() { + return body; } @Override @@ -56,4 +56,11 @@ public Requester requester() { return new BaseRequester(parameter("process"), parameter("hardware"), parameter("feature")); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ } + private String body(HttpServletRequest httpRequest) throws IOException { + StringBuilder builder = new StringBuilder(); + httpRequest.getReader().lines().forEachOrdered(builder::append); + String string = builder.toString(); + return string; + } + } diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseRequestedCertificate.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseRequestedCertificate.java new file mode 100644 index 000000000..da4e1f1c3 --- /dev/null +++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseRequestedCertificate.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lbc.internal.base; + +import org.eclipse.passage.lbc.internal.api.RequestedCertificate; +import org.eclipse.passage.lbc.internal.api.Requester; +import org.eclipse.passage.lic.internal.api.restrictions.ExaminationCertificate; + +/** + * @since 1.0 + */ +public final class BaseRequestedCertificate implements RequestedCertificate { + + private final Requester requester; + private final ExaminationCertificate certificate; + + public BaseRequestedCertificate(ExaminationCertificate certificate, Requester requester) { + this.requester = requester; + this.certificate = certificate; + } + + @Override + public Requester requester() { + return requester; + } + + @Override + public ExaminationCertificate certificate() { + return certificate; + } + +} diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseRequester.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseRequester.java index 0447d7ba3..a37432ed1 100644 --- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseRequester.java +++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseRequester.java @@ -1,3 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ package org.eclipse.passage.lbc.internal.base; import org.eclipse.passage.lbc.internal.api.Requester; diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseServerConfiguration.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseServerConfiguration.java index 839ea10a1..fe8fa9963 100644 --- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseServerConfiguration.java +++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseServerConfiguration.java @@ -1,3 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ package org.eclipse.passage.lbc.internal.base; import java.util.Collection; diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/PassageFloatingServer.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/PassageFloatingServer.java index 1fcd896c0..e76b66edc 100644 --- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/PassageFloatingServer.java +++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/PassageFloatingServer.java @@ -13,8 +13,8 @@ package org.eclipse.passage.lbc.internal.base; import org.eclipse.passage.lbc.internal.api.BackendFloatingServer; -import org.eclipse.passage.lbc.internal.api.CertificateRequestData; -import org.eclipse.passage.lbc.internal.api.ConditionRequestData; +import org.eclipse.passage.lbc.internal.api.RequestedCertificate; +import org.eclipse.passage.lbc.internal.api.RequestedCondition; import org.eclipse.passage.lbc.internal.base.chains.Acquire; import org.eclipse.passage.lbc.internal.base.chains.CanTake; import org.eclipse.passage.lbc.internal.base.chains.Release; @@ -27,17 +27,17 @@ public final class PassageFloatingServer implements BackendFloatingServer { @Override - public ServiceInvocationResult canTake(ConditionRequestData request) { + public ServiceInvocationResult canTake(RequestedCondition request) { return new CanTake().apply(request); } @Override - public ServiceInvocationResult take(CertificateRequestData request) { + public ServiceInvocationResult take(RequestedCertificate request) { return new Acquire().apply(request); } @Override - public ServiceInvocationResult release(CertificateRequestData request) { + public ServiceInvocationResult release(RequestedCertificate request) { return new Release().apply(request); } diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/Acquire.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/Acquire.java index d5cc5d01f..4a21b0d6d 100644 --- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/Acquire.java +++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/Acquire.java @@ -15,17 +15,17 @@ import java.util.Collections; import java.util.function.Function; -import org.eclipse.passage.lbc.internal.api.CertificateRequestData; +import org.eclipse.passage.lbc.internal.api.RequestedCertificate; import org.eclipse.passage.lic.internal.api.ServiceInvocationResult; import org.eclipse.passage.lic.internal.api.restrictions.ExaminationCertificate; import org.eclipse.passage.lic.internal.base.BaseServiceInvocationResult; import org.eclipse.passage.lic.internal.base.restrictions.BaseExaminationCertificate; public final class Acquire - implements Function> { + implements Function> { @Override - public ServiceInvocationResult apply(CertificateRequestData t) { + public ServiceInvocationResult apply(RequestedCertificate t) { return new BaseServiceInvocationResult<>( new BaseExaminationCertificate(Collections.emptyList(), Collections.emptyList())); } diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/CanTake.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/CanTake.java index 96741fbfc..42847c15e 100644 --- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/CanTake.java +++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/CanTake.java @@ -14,14 +14,14 @@ import java.util.function.Function; -import org.eclipse.passage.lbc.internal.api.ConditionRequestData; +import org.eclipse.passage.lbc.internal.api.RequestedCondition; import org.eclipse.passage.lic.internal.api.ServiceInvocationResult; import org.eclipse.passage.lic.internal.base.BaseServiceInvocationResult; -public final class CanTake implements Function> { +public final class CanTake implements Function> { @Override - public ServiceInvocationResult apply(ConditionRequestData t) { + public ServiceInvocationResult apply(RequestedCondition t) { return new BaseServiceInvocationResult(true); } diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/Release.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/Release.java index 9d4b0b709..f7122abf6 100644 --- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/Release.java +++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/chains/Release.java @@ -14,14 +14,14 @@ import java.util.function.Function; -import org.eclipse.passage.lbc.internal.api.CertificateRequestData; +import org.eclipse.passage.lbc.internal.api.RequestedCertificate; import org.eclipse.passage.lic.internal.api.ServiceInvocationResult; import org.eclipse.passage.lic.internal.base.BaseServiceInvocationResult; -public final class Release implements Function> { +public final class Release implements Function> { @Override - public ServiceInvocationResult apply(CertificateRequestData t) { + public ServiceInvocationResult apply(RequestedCertificate t) { return new BaseServiceInvocationResult(true); } diff --git a/bundles/org.eclipse.passage.lbc.equinox/src/org/eclipse/passage/lbc/internal/equinox/conditions/AcquireConditionActionExecutor.java b/bundles/org.eclipse.passage.lbc.equinox/src/org/eclipse/passage/lbc/internal/equinox/conditions/AcquireConditionActionExecutor.java index 16033c689..904a0b0cb 100644 --- a/bundles/org.eclipse.passage.lbc.equinox/src/org/eclipse/passage/lbc/internal/equinox/conditions/AcquireConditionActionExecutor.java +++ b/bundles/org.eclipse.passage.lbc.equinox/src/org/eclipse/passage/lbc/internal/equinox/conditions/AcquireConditionActionExecutor.java @@ -13,6 +13,7 @@ package org.eclipse.passage.lbc.internal.equinox.conditions; import java.io.IOException; +import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -51,8 +52,12 @@ public LicensingResult executeAction(HttpServletRequest request, HttpServletResp } private List loadConditions(HttpServletRequest request) { - return new Mine(BaseServerConfiguration.empty()) - .apply(new ParsedRequest().apply(new BaseLicensingRequest(request))).data().get(); + try { + return new Mine(BaseServerConfiguration.empty()) + .apply(new ParsedRequest().apply(new BaseLicensingRequest(request))).data().get(); + } catch (IOException e) { + return Collections.emptyList(); + } } private void send(HttpServletResponse response, List conditions) throws IOException { diff --git a/tests/org.eclipse.passage.lbc.base.tests/src/org/eclipse/passage/lbc/base/tests/FakeLicensingRequest.java b/tests/org.eclipse.passage.lbc.base.tests/src/org/eclipse/passage/lbc/base/tests/FakeLicensingRequest.java index f84ff474a..ac1d6caa4 100644 --- a/tests/org.eclipse.passage.lbc.base.tests/src/org/eclipse/passage/lbc/base/tests/FakeLicensingRequest.java +++ b/tests/org.eclipse.passage.lbc.base.tests/src/org/eclipse/passage/lbc/base/tests/FakeLicensingRequest.java @@ -12,7 +12,6 @@ *******************************************************************************/ package org.eclipse.passage.lbc.base.tests; -import java.io.IOException; import java.util.Map; import java.util.Optional; import java.util.function.Supplier; @@ -48,7 +47,7 @@ public Requester requester() { } @Override - public String body() throws IOException { + public String body() { return body; } diff --git a/tests/org.eclipse.passage.lbc.base.tests/src/org/eclipse/passage/lbc/base/tests/RequestTest.java b/tests/org.eclipse.passage.lbc.base.tests/src/org/eclipse/passage/lbc/base/tests/RequestTest.java index 93513047d..e3a3d2faa 100644 --- a/tests/org.eclipse.passage.lbc.base.tests/src/org/eclipse/passage/lbc/base/tests/RequestTest.java +++ b/tests/org.eclipse.passage.lbc.base.tests/src/org/eclipse/passage/lbc/base/tests/RequestTest.java @@ -13,7 +13,9 @@ package org.eclipse.passage.lbc.base.tests; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -36,10 +38,15 @@ private Map params() { @Test public void positiveTransition() { HttpServletRequest httpRequest = new FakeHttpRequest(params()); - BackendLicensingRequest request = new BaseLicensingRequest(httpRequest); - assertEquals("action", request.action().get().get().name()); //$NON-NLS-1$ - assertEquals("value", request.parameter("key")); //$NON-NLS-1$ //$NON-NLS-2$ - assertEquals(userValue(), request.requester().hardware()); + BackendLicensingRequest request; + try { + request = new BaseLicensingRequest(httpRequest); + assertEquals("action", request.action().get().get().name()); //$NON-NLS-1$ + assertEquals("value", request.parameter("key")); //$NON-NLS-1$ //$NON-NLS-2$ + assertEquals(userValue(), request.requester().hardware()); + } catch (IOException e) { + fail(); + } } }