Skip to content

Commit

Permalink
Added VES Status
Browse files Browse the repository at this point in the history
  • Loading branch information
phax committed Mar 19, 2024
1 parent adb3af8 commit 43d3328
Show file tree
Hide file tree
Showing 9 changed files with 335 additions and 30 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,9 @@ Please ensure that your stack size is at least 1MB (for Saxon). Using the Oracle

# News and noteworthy

* v9.1.1 - work in progress
* v9.2.0 - work in progress
* Extended the VES status XSD with new optional elements
* Introducing `[I]ValidationExecutorSetStatus` representing the status of a single Validation Executor Set
* v9.1.0 - 2024-03-09
* Updated to ph-schematron 8.0.0 using Saxon 12.x
* Updated to ph-diver 1.1.0
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*
* Copyright (C) 2014-2024 Philip Helger (www.helger.com)
* philip[at]helger[dot]com
*
* 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 com.helger.phive.api.executorset;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import com.helger.commons.annotation.Nonempty;
import com.helger.commons.id.IHasID;
import com.helger.commons.lang.EnumHelper;

/**
* Defines the overall status of a validation executor.
*
* @author Philip Helger
* @since 9.2.0
*/
public enum EValidationExecutorStatusType implements IHasID <String>
{
/**
* The executor is explicitly deprecated. Most likely a replacement is
* available.
*/
DEPRECATED ("deprecated"),
/**
* The executor has a validity period that starts in the future.
*/
NOT_YET_ACTIVE ("notyetactive"),
/**
* The executor has a validity period that ended in the past.
*/
EXPIRED ("expired"),
/**
* The executor is valid.
*/
VALID ("valid");

private final String m_sID;

EValidationExecutorStatusType (@Nonnull @Nonempty final String sID)
{
m_sID = sID;
}

@Nonnull
@Nonempty
public String getID ()
{
return m_sID;
}

/**
* @return <code>true</code> if the status type is deprecated,
* <code>false</code> if not.
*/
public boolean isDeprecated ()
{
return this == DEPRECATED;
}

public boolean isValid ()
{
return this == VALID;
}

@Nullable
public static EValidationExecutorStatusType getFromIDOrNull (@Nullable final String sID)
{
return EnumHelper.getFromIDOrNull (EValidationExecutorStatusType.class, sID);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,17 @@ public interface IValidationExecutorSet <SOURCETYPE extends IValidationSource> e
/**
* @return <code>true</code> if this document is deprecated (phased-out or end
* of life)?
* @see #getStatus()
*/
boolean isDeprecated ();
@Deprecated (forRemoval = true, since = "9.2.0")
default boolean isDeprecated ()
{
return getStatus ().isDeprecated ();
}

/**
* @return The VES status. Never <code>null</code>.
*/
@Nonnull
IValidationExecutorSetStatus getStatus ();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.helger.phive.api.executorset;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import com.helger.diver.api.version.VESID;

/**
* Defines the status of a VES.
*
* @author Philip Helger
* @since 9.2.0
*/
public interface IValidationExecutorSetStatus
{
/**
* @return The effective status type. May not be <code>null</code>.
*/
@Nonnull
EValidationExecutorStatusType getType ();

/**
* @return <code>true</code> if the status type is deprecated,
* <code>false</code> if not.
*/
default boolean isDeprecated ()
{
return getType ().isDeprecated ();
}

/**
* @return <code>true</code> if a replacement VESID is present,
* <code>false</code> if not.
*/
default boolean hasReplacementVESID ()
{
return getReplacementVESID () != null;
}

/**
* @return The replacement VESID to be used. May be <code>null</code>.
*/
@Nullable
VESID getReplacementVESID ();
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,26 @@ public class ValidationExecutorSet <SOURCETYPE extends IValidationSource> implem
private final VESID m_aID;
private final String m_sDisplayName;
private final ICommonsList <IValidationExecutor <SOURCETYPE>> m_aList = new CommonsArrayList <> ();
private final boolean m_bDeprecated;
private ValidationExecutorSetStatus m_aStatus;

@Deprecated (forRemoval = true, since = "9.2.0")
public ValidationExecutorSet (@Nonnull final VESID aID,
@Nonnull @Nonempty final String sDisplayName,
final boolean bDeprecated)
{
m_aID = ValueEnforcer.notNull (aID, "ID");
m_sDisplayName = ValueEnforcer.notEmpty (sDisplayName, "DisplayName");
m_bDeprecated = bDeprecated;
this (aID, sDisplayName, ValidationExecutorSetStatus.createDeprecated (bDeprecated));
}

public ValidationExecutorSet (@Nonnull final VESID aID,
@Nonnull @Nonempty final String sDisplayName,
@Nonnull final ValidationExecutorSetStatus aStatus)
{
ValueEnforcer.notNull (aID, "ID");
ValueEnforcer.notEmpty (sDisplayName, "DisplayName");
ValueEnforcer.notNull (aStatus, "Status");
m_aID = aID;
m_sDisplayName = sDisplayName;
m_aStatus = aStatus;
}

@Nonnull
Expand Down Expand Up @@ -92,9 +103,10 @@ public final ICommonsList <IValidationExecutor <SOURCETYPE>> getAllExecutors ()
return m_aList.getClone ();
}

public final boolean isDeprecated ()
@Nonnull
public final ValidationExecutorSetStatus getStatus ()
{
return m_bDeprecated;
return m_aStatus;
}

/**
Expand Down Expand Up @@ -158,21 +170,36 @@ public String toString ()
.append ("ID", m_aID)
.append ("DisplayName", m_sDisplayName)
.append ("List", m_aList)
.append ("Status", m_aStatus)
.getToString ();
}

@Nonnull
@SafeVarargs
@Deprecated (forRemoval = true, since = "9.2.0")
public static <ST extends IValidationSource> ValidationExecutorSet <ST> create (@Nonnull final VESID aID,
@Nonnull @Nonempty final String sDisplayName,
final boolean bIsDeprecated,
@Nonnull final IValidationExecutor <ST>... aValidationExecutors)
{
return create (aID,
sDisplayName,
ValidationExecutorSetStatus.createDeprecated (bIsDeprecated),
aValidationExecutors);
}

@Nonnull
@SafeVarargs
public static <ST extends IValidationSource> ValidationExecutorSet <ST> create (@Nonnull final VESID aID,
@Nonnull @Nonempty final String sDisplayName,
@Nonnull final ValidationExecutorSetStatus aStatus,
@Nonnull final IValidationExecutor <ST>... aValidationExecutors)
{
ValueEnforcer.notNull (aID, "ID");
ValueEnforcer.notEmpty (sDisplayName, "DisplayName");
ValueEnforcer.noNullValue (aValidationExecutors, "ValidationExecutors");

final ValidationExecutorSet <ST> ret = new ValidationExecutorSet <> (aID, sDisplayName, bIsDeprecated);
final ValidationExecutorSet <ST> ret = new ValidationExecutorSet <> (aID, sDisplayName, aStatus);

// Add Schematrons
for (final IValidationExecutor <ST> aItem : aValidationExecutors)
Expand All @@ -182,16 +209,29 @@ public static <ST extends IValidationSource> ValidationExecutorSet <ST> create (
}

@Nonnull
@Deprecated (forRemoval = true, since = "9.2.0")
public static <ST extends IValidationSource> ValidationExecutorSet <ST> create (@Nonnull final VESID aID,
@Nonnull @Nonempty final String sDisplayName,
final boolean bIsDeprecated,
@Nonnull final Collection <? extends IValidationExecutor <ST>> aValidationExecutors)
{
return create (aID,
sDisplayName,
ValidationExecutorSetStatus.createDeprecated (bIsDeprecated),
aValidationExecutors);
}

@Nonnull
public static <ST extends IValidationSource> ValidationExecutorSet <ST> create (@Nonnull final VESID aID,
@Nonnull @Nonempty final String sDisplayName,
@Nonnull final ValidationExecutorSetStatus aStatus,
@Nonnull final Collection <? extends IValidationExecutor <ST>> aValidationExecutors)
{
ValueEnforcer.notNull (aID, "ID");
ValueEnforcer.notEmpty (sDisplayName, "DisplayName");
ValueEnforcer.noNullValue (aValidationExecutors, "ValidationExecutors");

final ValidationExecutorSet <ST> ret = new ValidationExecutorSet <> (aID, sDisplayName, bIsDeprecated);
final ValidationExecutorSet <ST> ret = new ValidationExecutorSet <> (aID, sDisplayName, aStatus);

// Add Schematrons
for (final IValidationExecutor <ST> aItem : aValidationExecutors)
Expand Down Expand Up @@ -220,18 +260,51 @@ public static <ST extends IValidationSource> ValidationExecutorSet <ST> create (
*/
@Nonnull
@SafeVarargs
@Deprecated (forRemoval = true, since = "9.2.0")
public static <ST extends IValidationSource> ValidationExecutorSet <ST> createDerived (@Nonnull final IValidationExecutorSet <ST> aBaseVES,
@Nonnull final VESID aID,
@Nonnull @Nonempty final String sDisplayName,
final boolean bIsDeprecated,
@Nonnull final IValidationExecutor <ST>... aValidationExecutors)
{
return createDerived (aBaseVES,
aID,
sDisplayName,
ValidationExecutorSetStatus.createDeprecated (bIsDeprecated),
aValidationExecutors);
}

/**
* Create a derived VES from an existing VES. This means that only Schematrons
* can be added, but the XSDs are taken from the base VES only.
*
* @param aBaseVES
* The base VES to copy from. May not be <code>null</code>.
* @param aID
* The ID to use. May not be <code>null</code>.
* @param sDisplayName
* The name of the VES. May neither be <code>null</code> nor empty.
* @param aStatus
* The status of the VES. May not be <code>null</code>.
* @param aValidationExecutors
* The resources to be associated with the VES. May not be
* <code>null</code>.
* @return The newly created VES. Never <code>null</code>.
*/
@Nonnull
@SafeVarargs
public static <ST extends IValidationSource> ValidationExecutorSet <ST> createDerived (@Nonnull final IValidationExecutorSet <ST> aBaseVES,
@Nonnull final VESID aID,
@Nonnull @Nonempty final String sDisplayName,
@Nonnull final ValidationExecutorSetStatus aStatus,
@Nonnull final IValidationExecutor <ST>... aValidationExecutors)
{
ValueEnforcer.notNull (aBaseVES, "BaseVES");
ValueEnforcer.notNull (aID, "ID");
ValueEnforcer.notEmpty (sDisplayName, "DisplayName");
ValueEnforcer.notEmptyNoNullValue (aValidationExecutors, "ValidationExecutors");

final ValidationExecutorSet <ST> ret = new ValidationExecutorSet <> (aID, sDisplayName, bIsDeprecated);
final ValidationExecutorSet <ST> ret = new ValidationExecutorSet <> (aID, sDisplayName, aStatus);

// Copy all existing ones
for (final IValidationExecutor <ST> aVE : aBaseVES)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.helger.phive.api.executorset;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import com.helger.commons.ValueEnforcer;
import com.helger.commons.string.ToStringGenerator;
import com.helger.diver.api.version.VESID;

/**
* Defines the status of a VES.
*
* @author Philip Helger
* @since 9.2.0
*/
public class ValidationExecutorSetStatus implements IValidationExecutorSetStatus
{
private final EValidationExecutorStatusType m_eType;
private final VESID m_aReplacementVESID;

public ValidationExecutorSetStatus (@Nonnull final EValidationExecutorStatusType eType,
@Nullable final VESID aReplacementVESID)
{
ValueEnforcer.notNull (eType, "Type");
m_eType = eType;
m_aReplacementVESID = aReplacementVESID;
}

@Nonnull
public EValidationExecutorStatusType getType ()
{
return m_eType;
}

@Nullable
public VESID getReplacementVESID ()
{
return m_aReplacementVESID;
}

@Override
public String toString ()
{
return new ToStringGenerator (null).append ("Type", m_eType)
.append ("ReplacementVESID", m_aReplacementVESID)
.getToString ();
}

@Nonnull
public static ValidationExecutorSetStatus createValid ()
{
return new ValidationExecutorSetStatus (EValidationExecutorStatusType.VALID, null);
}

@Nonnull
public static ValidationExecutorSetStatus createDeprecated (final boolean bDeprecated)
{
return new ValidationExecutorSetStatus (bDeprecated ? EValidationExecutorStatusType.DEPRECATED
: EValidationExecutorStatusType.VALID, null);
}
}
Loading

0 comments on commit 43d3328

Please sign in to comment.