All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ai.djl.repository.Metadata Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
 * with the License. A copy of the License is located at
 *
 * http://aws.amazon.com/apache2.0/
 *
 * or in the "license" file accompanying this file. This file 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 ai.djl.repository;

import ai.djl.Application;
import ai.djl.repository.zoo.DefaultModelZoo;

import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;

/**
 * A {@code Metadata} is a collection of {@link Artifact}s with unified metadata (including {@link
 * MRL}) that are stored in the same "metadata.json" file.
 *
 * 

All of the artifacts located within the metadata share the data defined at the metadata level * such as name, description, and website. The key difference between the artifacts within the same * metadata are the properties. * * @see Repository */ public class Metadata { private String metadataVersion; private String resourceType; private String application; protected String groupId; protected String artifactId; private String name; private String description; private String website; protected Map licenses; protected List artifacts; private Date lastUpdated; private transient Application applicationClass; private transient URI repositoryUri; /** * Returns the artifacts matching the version and property requirements. * * @param versionRange the version range for the artifact * @param filter the property filter * @return the matching artifacts */ public List search(VersionRange versionRange, Map filter) { List results = versionRange.matches(artifacts); if (filter == null) { return results; } return results.stream().filter(a -> a.hasProperties(filter)).collect(Collectors.toList()); } /** * Returns the metadata format version. * * @return the metadata format version */ public String getMetadataVersion() { return metadataVersion; } /** * Sets the metadata format version. * * @param metadataVersion the new version */ public void setMetadataVersion(String metadataVersion) { this.metadataVersion = metadataVersion; } /** * Returns the resource type. * * @return the resource type */ public String getResourceType() { return resourceType; } /** * Returns the resource type. * * @param resourceType the resource type */ public void setResourceType(String resourceType) { this.resourceType = resourceType; } /** * Returns the groupId. * * @return the groupId */ public String getGroupId() { return groupId; } /** * Sets the groupId. * * @param groupId the new groupId */ public void setGroupId(String groupId) { this.groupId = groupId; } /** * Returns the artifactId. * * @return the artifactId */ public String getArtifactId() { return artifactId; } /** * Sets the artifactId. * * @param artifactId the new artifactId */ public void setArtifactId(String artifactId) { this.artifactId = artifactId; } /** * Returns the metadata-level name. * * @return the metadata-level name */ public String getName() { return name; } /** * Sets the metadata-level name. * * @param name the new metadata-level name */ public void setName(String name) { this.name = name; } /** * Returns the description. * * @return the description */ public String getDescription() { return description; } /** * Sets the description. * * @param description the description */ public void setDescription(String description) { this.description = description; } /** * Returns the website. * * @return the website */ public String getWebsite() { return website; } /** * Sets the website. * * @param website the website */ public void setWebsite(String website) { this.website = website; } /** * Returns the {@link Application}. * * @return the {@link Application} */ public Application getApplication() { if (applicationClass == null && application != null) { applicationClass = Application.of(application); } return applicationClass; } /** * Sets the {@link Application}. * * @param application {@link Application} */ public final void setApplication(Application application) { this.applicationClass = application; this.application = application.getPath(); } /** * Returns the {@link License}. * * @return licenses in this metadata */ public Map getLicenses() { return licenses; } /** * Sets the {@link License}. * * @param licenses {@link License} */ public void setLicense(Map licenses) { this.licenses = licenses; } /** * Adds one {@link License}. * * @param license {@link License} */ public void addLicense(License license) { if (licenses == null) { licenses = new ConcurrentHashMap<>(); } licenses.put(license.getId(), license); } /** * Returns all the artifacts in the metadata. * * @return the artifacts in the metadata */ public List getArtifacts() { return artifacts; } /** * Sets the artifacts for the metadata. * * @param artifacts the new artifacts */ public void setArtifacts(List artifacts) { this.artifacts = artifacts; for (Artifact artifact : artifacts) { artifact.setMetadata(this); } } /** * Adds one artifact for the metadata. * * @param artifact the new artifact */ public void addArtifact(Artifact artifact) { if (artifacts == null) { artifacts = new ArrayList<>(); } artifacts.add(artifact); } /** * Returns the last update date for the metadata. * * @return the last update date */ public Date getLastUpdated() { return lastUpdated; } /** * Sets the last update date for the metadata. * * @param lastUpdated the new last update date */ public void setLastUpdated(Date lastUpdated) { this.lastUpdated = lastUpdated; } /** * Returns the URI to the repository storing the metadata. * * @return the URI to the repository storing the metadata */ public URI getRepositoryUri() { return repositoryUri; } /** * Sets the repository URI. * * @param repositoryUri the new URI */ public void setRepositoryUri(URI repositoryUri) { this.repositoryUri = repositoryUri; } /** * Restores artifacts state. * *

This call is required after the metadata is restored back from JSON. * * @param arguments the override arguments */ public final void init(Map arguments) { if (artifacts != null) { for (Artifact artifact : artifacts) { artifact.setMetadata(this); artifact.getArguments().putAll(arguments); } } } /** A {@code Metadata} class that matches all any search criteria. */ public static final class MatchAllMetadata extends Metadata { /** Creates a {@code MatchAllMetadata} instance. */ public MatchAllMetadata() { groupId = DefaultModelZoo.GROUP_ID; artifacts = Collections.emptyList(); setApplication(Application.UNDEFINED); } /** {@inheritDoc} */ @Override public List search(VersionRange versionRange, Map filter) { return getArtifacts(); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy