package org.apache.archiva.webtest.memory; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.metadata.model.ProjectVersionMetadata; import org.apache.archiva.metadata.model.ProjectVersionReference; import org.apache.archiva.metadata.repository.MetadataResolver; import org.apache.archiva.metadata.repository.RepositorySession; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; public class TestMetadataResolver implements MetadataResolver { private Map<String, ProjectVersionMetadata> projectVersions = new HashMap<>(); private Map<String, List<ArtifactMetadata>> artifacts = new HashMap<>(); private Map<String, List<ProjectVersionReference>> references = new HashMap<String, List<ProjectVersionReference>>(); private Map<String, List<String>> namespaces = new HashMap<>(); private Map<String, Collection<String>> projectsInNamespace = new HashMap<>(); private Map<String, Collection<String>> versionsInProject = new HashMap<>(); @Override public ProjectVersionMetadata resolveProjectVersion( RepositorySession repositorySession, String repoId, String namespace, String projectId, String projectVersion ) { return projectVersions.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); } @Override public Collection<ProjectVersionReference> resolveProjectReferences( RepositorySession repositorySession, String repoId, String namespace, String projectId, String projectVersion ) { Collection<ProjectVersionReference> projectVersionReferences = references.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); return projectVersionReferences; } @Override public Collection<String> resolveRootNamespaces( RepositorySession repositorySession, String repoId ) { return resolveNamespaces( repositorySession, repoId, null ); } @Override public Collection<String> resolveNamespaces( RepositorySession repositorySession, String repoId, String baseNamespace ) { Set<String> namespaces = new LinkedHashSet<String>(); int fromIndex = baseNamespace != null ? baseNamespace.length() + 1 : 0; for ( String namespace : this.namespaces.get( repoId ) ) { if ( baseNamespace == null || namespace.startsWith( baseNamespace + "." ) ) { int i = namespace.indexOf( '.', fromIndex ); if ( i >= 0 ) { namespaces.add( namespace.substring( fromIndex, i ) ); } else { namespaces.add( namespace.substring( fromIndex ) ); } } } return namespaces; } @Override public Collection<String> resolveProjects( RepositorySession repositorySession, String repoId, String namespace ) { Collection<String> list = projectsInNamespace.get( namespace ); return list != null ? list : Collections.<String>emptyList(); } @Override public Collection<String> resolveProjectVersions( RepositorySession repositorySession, String repoId, String namespace, String projectId ) { Collection<String> list = versionsInProject.get( namespace + ":" + projectId ); return list != null ? list : Collections.<String>emptyList(); } @Override public Collection<ArtifactMetadata> resolveArtifacts( RepositorySession repositorySession, String repoId, String namespace, String projectId, String projectVersion ) { List<ArtifactMetadata> artifacts = this.artifacts.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); return ( artifacts != null ? artifacts : Collections.<ArtifactMetadata>emptyList() ); } public void setProjectVersion( String repoId, String namespace, String projectId, ProjectVersionMetadata versionMetadata ) { projectVersions.put( createMapKey( repoId, namespace, projectId, versionMetadata.getId() ), versionMetadata ); Collection<String> projects = projectsInNamespace.get( namespace ); if ( projects == null ) { projects = new LinkedHashSet<String>(); projectsInNamespace.put( namespace, projects ); } projects.add( projectId ); String key = namespace + ":" + projectId; Collection<String> versions = versionsInProject.get( key ); if ( versions == null ) { versions = new LinkedHashSet<String>(); versionsInProject.put( key, versions ); } versions.add( versionMetadata.getId() ); } public void setArtifacts( String repoId, String namespace, String projectId, String projectVersion, List<ArtifactMetadata> artifacts ) { this.artifacts.put( createMapKey( repoId, namespace, projectId, projectVersion ), artifacts ); } private String createMapKey( String repoId, String namespace, String projectId, String projectVersion ) { return repoId + ":" + namespace + ":" + projectId + ":" + projectVersion; } public void setProjectReferences( String repoId, String namespace, String projectId, String projectVersion, List<ProjectVersionReference> references ) { this.references.put( createMapKey( repoId, namespace, projectId, projectVersion ), references ); } public void setNamespaces( String repoId, List<String> namespaces ) { this.namespaces.put( repoId, namespaces ); } }