Skip to content

Commit

Permalink
merge
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jan 19, 2024
2 parents af74d50 + d46c644 commit 53087d5
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 78 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

import com.evolveum.midpoint.repo.common.ObjectOperationPolicyHelper;

import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper;
import com.evolveum.midpoint.repo.common.util.SubscriptionInformation;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.result.OperationResultStatus;

Expand Down Expand Up @@ -330,11 +330,11 @@ public String getDescribe() {

@Override
public String getObject() {
SubscriptionWrapper subscription = MidPointApplication.get().getSubscriptionWrapper();
SubscriptionInformation subscription = MidPointApplication.get().getSubscription();
if (!subscription.isCorrect()) {
return " " + createStringResource("PageBase.nonActiveSubscriptionMessage").getString();
}
if (subscription.getType() == SubscriptionWrapper.SubscriptionType.DEMO_SUBSCRIPTION) {
if (subscription.isDemo()) {
return " " + createStringResource("PageBase.demoSubscriptionMessage").getString();
}
return "";
Expand All @@ -357,9 +357,7 @@ public boolean isVisible() {
}

private boolean isFooterVisible() {
SubscriptionWrapper subscription = MidPointApplication.get().getSubscriptionWrapper();
return !subscription.isCorrect()
|| subscription.getType() == SubscriptionWrapper.SubscriptionType.DEMO_SUBSCRIPTION;
return MidPointApplication.get().getSubscription().isDemoOrIncorrect();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.web.component.prism.ValueStatus;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -122,7 +124,6 @@
import com.evolveum.midpoint.prism.util.PolyStringUtils;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.repo.common.expression.ExpressionUtil;
import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
Expand Down Expand Up @@ -3247,8 +3248,7 @@ private static VisualizationDto createTaskChangesDto(String titleKey, String box
}

public static String getMidpointCustomSystemName(PageAdminLTE pageBase, String defaultSystemNameKey) {
SubscriptionWrapper subscription = MidPointApplication.get().getSubscriptionWrapper();
if (!subscription.isCorrect() || subscription.getType() == SubscriptionWrapper.SubscriptionType.DEMO_SUBSCRIPTION) {
if (MidPointApplication.get().getSubscription().isDemoOrIncorrect()) {
return pageBase.createStringResource(defaultSystemNameKey).getString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,16 @@
import java.io.OutputStream;
import java.net.URI;
import java.util.*;
import javax.xml.datatype.Duration;

import com.evolveum.midpoint.common.ActivationComputer;
import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;

import com.evolveum.midpoint.repo.common.util.SubscriptionInformation;

import jakarta.servlet.ServletContext;

import javax.xml.datatype.Duration;

import org.apache.commons.configuration2.Configuration;
import org.apache.wicket.*;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
Expand Down Expand Up @@ -67,7 +74,6 @@
import com.evolveum.midpoint.authentication.api.authorization.DescriptorLoader;
import com.evolveum.midpoint.authentication.api.util.AuthUtil;
import com.evolveum.midpoint.cases.api.CaseManager;
import com.evolveum.midpoint.common.ActivationComputer;
import com.evolveum.midpoint.common.Clock;
import com.evolveum.midpoint.common.LocalizationService;
import com.evolveum.midpoint.common.configuration.api.MidpointConfiguration;
Expand Down Expand Up @@ -170,7 +176,7 @@ public class MidPointApplication extends AuthenticatedWebApplication implements
private WebApplicationConfiguration webApplicationConfiguration;

private DeploymentInformationType deploymentInfo;
private SubscriptionWrapper subscriptionWrapper;
private SubscriptionInformation subscriptionInformation;

public static final String MOUNT_INTERNAL_SERVER_ERROR = "/error";
public static final String MOUNT_UNAUTHORIZED_ERROR = "/error/401";
Expand Down Expand Up @@ -329,9 +335,9 @@ public DeploymentInformationType getDeploymentInfo() {
}

@NotNull
public SubscriptionWrapper getSubscriptionWrapper() {
public SubscriptionInformation getSubscription() {
// should not be null, unless called before initialization, in which case we provide default NONE
return Objects.requireNonNullElse(subscriptionWrapper, SubscriptionUtil.createNoneSubscription());
return Objects.requireNonNullElse(subscriptionInformation, SubscriptionUtil.createNoneSubscription());
}

private void initializeSchrodinger() {
Expand Down Expand Up @@ -571,8 +577,7 @@ public void update(@Nullable SystemConfigurationType value) {

private void updateDeploymentInfo(@Nullable SystemConfigurationType value) {
deploymentInfo = value != null ? value.getDeploymentInformation() : null;
String subscriptionId = deploymentInfo != null ? deploymentInfo.getSubscriptionIdentifier() : null;
subscriptionWrapper = SubscriptionUtil.getSubscriptionType(subscriptionId);
subscriptionInformation = SubscriptionUtil.getSubscriptionInformation(value);
}

/* (non-Javadoc)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.evolveum.midpoint.repo.common.util;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Arrays;
Expand All @@ -8,19 +9,29 @@
import java.util.stream.Collectors;

/**
* Wrapper for subscription. Contains information about type and validity.
* The complete (parsed) subscription information: type and validity.
*
* TODO ... or just class name of "Subscription"?
*/
public class SubscriptionWrapper {
public class SubscriptionInformation {

private final SubscriptionType type;
private final SubscriptionValidity validity;
/** Null for invalid or missing subscription ID. */
@Nullable private final SubscriptionType type;

SubscriptionWrapper(SubscriptionType type, SubscriptionValidity validity) {
/** This is the adjusted value, see {@link #adjustValidity(SubscriptionType, SubscriptionValidity)}. */
@NotNull private final SubscriptionValidity validity;

SubscriptionInformation(@NotNull SubscriptionValidity subscriptionValidity) {
this(null, subscriptionValidity);
}

SubscriptionInformation(@Nullable SubscriptionType type, @NotNull SubscriptionValidity validity) {
this.type = type;
this.validity = resolveValidity(type, validity);
this.validity = adjustValidity(type, validity);
}

private SubscriptionValidity resolveValidity(SubscriptionType type, SubscriptionValidity originalValidity) {
/** Expired demo subscriptions are considered invalid. */
private @NotNull SubscriptionValidity adjustValidity(SubscriptionType type, @NotNull SubscriptionValidity originalValidity) {
if (type == SubscriptionType.DEMO_SUBSCRIPTION
&& (originalValidity == SubscriptionValidity.INVALID_FIRST_MONTH
|| originalValidity == SubscriptionValidity.INVALID_SECOND_MONTH
Expand All @@ -30,25 +41,30 @@ private SubscriptionValidity resolveValidity(SubscriptionType type, Subscription
return originalValidity;
}

SubscriptionWrapper(SubscriptionValidity subscriptionValidity) {
this(null, subscriptionValidity);
public boolean isCorrect() {
return type != null && isTimeValid();
}

public boolean isCorrect() {
if (type != null && (validity == SubscriptionValidity.VALID
private boolean isTimeValid() {
return validity == SubscriptionValidity.VALID
|| validity == SubscriptionValidity.INVALID_FIRST_MONTH
|| validity == SubscriptionValidity.INVALID_SECOND_MONTH
|| validity == SubscriptionValidity.INVALID_THIRD_MONTH)) {
return true;
}
return false;
|| validity == SubscriptionValidity.INVALID_THIRD_MONTH;
}

public boolean isDemo() {
return type == SubscriptionType.DEMO_SUBSCRIPTION;
}

public SubscriptionType getType() {
public boolean isDemoOrIncorrect() {
return isDemo() || !isCorrect();
}

public @Nullable SubscriptionType getType() {
return type;
}

public SubscriptionValidity getValidity() {
public @NotNull SubscriptionValidity getValidity() {
return validity;
}

Expand All @@ -63,22 +79,17 @@ public enum SubscriptionType {
DEVELOPMENT_SUBSCRIPTION("04"),
DEMO_SUBSCRIPTION("05");

private final String subscriptionType;
@NotNull private final String code;

SubscriptionType(String subscriptionType) {
this.subscriptionType = subscriptionType;
SubscriptionType(@NotNull String code) {
this.code = code;
}

// public boolean isCorrect() {
// return subscriptionType != null;
// }

private static final Map<String, SubscriptionType> CODE_TO_TYPE;

static {
CODE_TO_TYPE = Arrays.stream(values())
.filter(v -> v.subscriptionType != null)
.collect(Collectors.toUnmodifiableMap(v -> v.subscriptionType, Function.identity()));
.collect(Collectors.toUnmodifiableMap(v -> v.code, Function.identity()));
}

@Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,9 @@
import org.jetbrains.annotations.Nullable;

import com.evolveum.midpoint.common.LocalizationService;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.repo.common.SystemObjectCache;
import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper.SubscriptionValidity;
import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper.SubscriptionType;
import com.evolveum.midpoint.repo.common.util.SubscriptionInformation.SubscriptionValidity;
import com.evolveum.midpoint.repo.common.util.SubscriptionInformation.SubscriptionType;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
Expand All @@ -36,29 +35,28 @@ public class SubscriptionUtil {
private static final Trace LOGGER = TraceManager.getTrace(SubscriptionUtil.class);

@NotNull
public static SubscriptionWrapper getSubscriptionType(@Nullable SystemConfigurationType systemConfigurationType) {
if (systemConfigurationType == null) {
public static SubscriptionInformation getSubscriptionInformation(@Nullable SystemConfigurationType systemConfiguration) {
if (systemConfiguration == null) {
return createNoneSubscription();
}

DeploymentInformationType deploymentInformation = systemConfigurationType.getDeploymentInformation();
DeploymentInformationType deploymentInformation = systemConfiguration.getDeploymentInformation();
if (deploymentInformation == null) {
return createNoneSubscription();
}

return getSubscriptionType(deploymentInformation.getSubscriptionIdentifier());
return getSubscriptionInformation(deploymentInformation.getSubscriptionIdentifier());
}

public static SubscriptionWrapper createNoneSubscription() {
return new SubscriptionWrapper(SubscriptionValidity.NONE);
public static SubscriptionInformation createNoneSubscription() {
return new SubscriptionInformation(SubscriptionValidity.NONE);
}

public static SubscriptionWrapper createInvalidSubscription() {
return new SubscriptionWrapper(SubscriptionValidity.INVALID);
public static SubscriptionInformation createInvalidSubscription() {
return new SubscriptionInformation(SubscriptionValidity.INVALID);
}

@NotNull
public static SubscriptionWrapper getSubscriptionType(String subscriptionId) {
private static @NotNull SubscriptionInformation getSubscriptionInformation(String subscriptionId) {
if (StringUtils.isEmpty(subscriptionId)) {
return createNoneSubscription();
}
Expand All @@ -69,31 +67,30 @@ public static SubscriptionWrapper getSubscriptionType(String subscriptionId) {
return createInvalidSubscription();
}

SubscriptionType type = SubscriptionType.resolveType(subscriptionId.substring(0, 2));
if (type == null) {
return createInvalidSubscription();
}

SubscriptionValidity successValidity;
try {
SubscriptionValidity resolvedValidity = resolveValidityForSubscriptionId(subscriptionId, new Date(System.currentTimeMillis()));
if (resolvedValidity == SubscriptionValidity.INVALID) {
// Let us check the correctness first.
VerhoeffCheckDigit checkDigit = new VerhoeffCheckDigit();
if (!checkDigit.isValid(subscriptionId)) {
return createInvalidSubscription();
}

SubscriptionType type = SubscriptionType.resolveType(subscriptionId.substring(0, 2));
if (type == null) {
return createInvalidSubscription();
}
successValidity = resolvedValidity;

return new SubscriptionInformation(
type,
determineValidity(subscriptionId, new Date()));

} catch (Exception ex) {
return createInvalidSubscription();
}
VerhoeffCheckDigit checkDigit = new VerhoeffCheckDigit();
if (!checkDigit.isValid(subscriptionId)) {
return createInvalidSubscription();
}

return new SubscriptionWrapper(type, successValidity);
}

@TestOnly
public static SubscriptionValidity resolveValidityForSubscriptionId(String subscriptionId, Date currentDate) throws ParseException {
public static @NotNull SubscriptionValidity determineValidity(String subscriptionId, Date currentDate)
throws ParseException {
String months = subscriptionId.substring(2, 4);
String years = subscriptionId.substring(4, 6);

Expand Down Expand Up @@ -142,10 +139,9 @@ private static boolean expiresIn(Calendar expireCalendarValue, Date currentDate,
public static String missingSubscriptionAppeal(
SystemObjectCache systemObjectCache, LocalizationService localizationService, Locale locale) {
try {
PrismObject<SystemConfigurationType> config =
systemObjectCache.getSystemConfiguration(new OperationResult("dummy"));
if (SubscriptionUtil.getSubscriptionType(config != null ? config.asObjectable() : null)
.isCorrect()) {
SystemConfigurationType config =
systemObjectCache.getSystemConfigurationBean(new OperationResult("dummy"));
if (SubscriptionUtil.getSubscriptionInformation(config).isCorrect()) {
return null;
}
} catch (SchemaException e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.evolveum.midpoint.repo.common;

import com.evolveum.midpoint.repo.common.util.SubscriptionUtil;
import com.evolveum.midpoint.repo.common.util.SubscriptionWrapper.SubscriptionValidity;
import com.evolveum.midpoint.repo.common.util.SubscriptionInformation.SubscriptionValidity;
import com.evolveum.midpoint.tools.testng.AbstractUnitTest;

import org.assertj.core.api.Assertions;
Expand All @@ -13,7 +13,7 @@
/**
* Tests for date validity of subscription.
*/
public class SubscriptionDateValidityTest extends AbstractUnitTest{
public class SubscriptionDateValidityTest extends AbstractUnitTest {

@Test
public void invalidYear() throws Exception{
Expand Down Expand Up @@ -72,7 +72,7 @@ public void fourthMonthInvalidThroughEndOfYear() throws Exception{

private void validateDate(String testedDatePartOfSubscriptionId, String currentDate, SubscriptionValidity expectedValidity) throws ParseException {

SubscriptionValidity validity = SubscriptionUtil.resolveValidityForSubscriptionId(
SubscriptionValidity validity = SubscriptionUtil.determineValidity(
testedDatePartOfSubscriptionId,
new SimpleDateFormat("MMyy").parse(currentDate));
Assertions.assertThat(validity).isEqualByComparingTo(expectedValidity);
Expand Down

0 comments on commit 53087d5

Please sign in to comment.