diff --git a/ph-diver-repo-s3/src/test/java/com/helger/diver/repo/s3/RepoStorageS3Test.java b/ph-diver-repo-s3/src/test/java/com/helger/diver/repo/s3/RepoStorageS3Test.java index 3cebb9c..2569f93 100644 --- a/ph-diver-repo-s3/src/test/java/com/helger/diver/repo/s3/RepoStorageS3Test.java +++ b/ph-diver-repo-s3/src/test/java/com/helger/diver/repo/s3/RepoStorageS3Test.java @@ -107,6 +107,12 @@ public void iterateAllArtifacts (final String sGroupID, public void initForRepo (final IRepoStorageWithToc aRepo) {} + + public boolean containsGroupAndArtifact (final String sGroupID, + final String sArtifactID) + { + return false; + } }); } diff --git a/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/IRepoTopTocService.java b/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/IRepoTopTocService.java index 9ad2a3b..58efd64 100644 --- a/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/IRepoTopTocService.java +++ b/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/IRepoTopTocService.java @@ -19,6 +19,7 @@ import java.util.function.Consumer; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import com.helger.commons.annotation.Nonempty; import com.helger.commons.annotation.ReturnsMutableCopy; @@ -45,6 +46,8 @@ public interface IRepoTopTocService */ void initForRepo (@Nonnull IRepoStorageWithToc aRepo); + boolean containsGroupAndArtifact (@Nullable String sGroupID, @Nullable String sArtifactID); + void iterateAllTopLevelGroupNames (@Nonnull Consumer aGroupNameConsumer); @Nonnull diff --git a/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/RepoTopTocServiceRepoBasedXML.java b/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/RepoTopTocServiceRepoBasedXML.java index 4297a26..01366c3 100644 --- a/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/RepoTopTocServiceRepoBasedXML.java +++ b/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/RepoTopTocServiceRepoBasedXML.java @@ -20,6 +20,7 @@ import java.util.function.Consumer; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; @@ -31,6 +32,7 @@ import com.helger.commons.concurrent.SimpleReadWriteLock; import com.helger.commons.error.list.ErrorList; import com.helger.commons.state.ESuccess; +import com.helger.commons.string.StringHelper; import com.helger.diver.repo.RepoStorageItem; import com.helger.diver.repo.RepoStorageKey; import com.helger.diver.repo.toptoc.jaxb.v10.RepoTopTocType; @@ -132,6 +134,18 @@ private void _checkInited () throw new IllegalStateException ("This service was not properly initialized"); } + public boolean containsGroupAndArtifact (@Nullable final String sGroupID, @Nullable final String sArtifactID) + { + _checkInited (); + + if (StringHelper.hasNoText (sGroupID)) + return false; + if (StringHelper.hasNoText (sArtifactID)) + return false; + + return m_aRWLock.readLockedBoolean ( () -> m_aTopToc.containsGroupAndArtifact (sGroupID, sArtifactID)); + } + public void iterateAllTopLevelGroupNames (@Nonnull final Consumer aGroupNameConsumer) { ValueEnforcer.notNull (aGroupNameConsumer, "GroupNameConsumer"); diff --git a/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/RepoTopTocXML.java b/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/RepoTopTocXML.java index 944ba6d..1b0a769 100644 --- a/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/RepoTopTocXML.java +++ b/ph-diver-repo/src/main/java/com/helger/diver/repo/toc/RepoTopTocXML.java @@ -105,13 +105,6 @@ public int getTopLevelGroupCount () return m_aTopLevelGroups.size (); } - public void iterateAllTopLevelGroupNames (@Nonnull final Consumer aGroupNameConsumer) - { - ValueEnforcer.notNull (aGroupNameConsumer, "GroupNameConsumer"); - - m_aTopLevelGroups.keySet ().forEach (aGroupNameConsumer); - } - @Nullable private Group _getGroup (@Nonnull @Nonempty final String sGroupID) { @@ -126,6 +119,26 @@ private Group _getGroup (@Nonnull @Nonempty final String sGroupID) return aGroup; } + public boolean containsGroupAndArtifact (@Nonnull @Nonempty final String sGroupID, + @Nonnull @Nonempty final String sArtifactID) + { + ValueEnforcer.notEmpty (sGroupID, "GroupID"); + ValueEnforcer.notEmpty (sArtifactID, "ArtifactID"); + + final Group aGroup = _getGroup (sGroupID); + if (aGroup == null) + return false; + + return aGroup.m_aArtifacts.contains (sArtifactID); + } + + public void iterateAllTopLevelGroupNames (@Nonnull final Consumer aGroupNameConsumer) + { + ValueEnforcer.notNull (aGroupNameConsumer, "GroupNameConsumer"); + + m_aTopLevelGroups.keySet ().forEach (aGroupNameConsumer); + } + private void _recursiveIterateExistingSubGroups (@Nonnull @Nonempty final String sAbsoluteGroupID, @Nonnull final Group aCurGroup, @Nonnull final IRepoTopTocGroupNameConsumer aGroupNameConsumer,