blob: 03eb0405d655be11eea8bc13ceff8a2a00052706 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.internal.p2.updatesite;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
import org.eclipse.equinox.p2.publisher.eclipse.URLEntry;
import org.eclipse.equinox.p2.repository.spi.RepositoryReference;
/**
* A model of an update site.
*
* Copied from org.eclipse.update.core.model.SiteModel.
*/
public class SiteModel {
private List<URLEntry> archiveReferences;
/**
* Map of String (category id) -> SiteCategory
*/
private Map<String, SiteCategory> categories;
private URLEntry description;
/**
* Map of String (feature id) -> SiteFeature
*/
private List<SiteFeature> features;
private List<SiteBundle> bundles;
private List<SiteIU> ius;
private URI locationURI;
private String locationURIString;
private String mirrorsURIString;
private String statsURIString;
private boolean supportsPack200;
private String type;
private URLEntry[] associateSites;
private String digestURIString;
private List<String> messageKeys;
private Map<Locale, Map<String, String>> localizations;
private List<RepositoryReference> repositoryReferences;
private List<SiteFeature> statsFeatures;
private List<SiteBundle> statsBundles;
/**
* Creates an uninitialized site model object.
*
* @since 2.0
*/
public SiteModel() {
super();
}
/**
* Adds an archive reference model to site.
* Throws a runtime exception if this object is marked read-only.
*
* @param archiveReference archive reference model
* @since 2.0
*/
public void addArchive(URLEntry archiveReference) {
if (this.archiveReferences == null)
this.archiveReferences = new ArrayList<>();
if (!this.archiveReferences.contains(archiveReference))
this.archiveReferences.add(archiveReference);
}
/**
* Adds a category to the site.
*
* @param category category model
*/
public void addCategory(SiteCategory category) {
if (categories == null)
categories = new HashMap<>();
if (!categories.containsKey(category.getName())) {
categories.put(category.getName(), category);
if (localizations != null && !localizations.isEmpty())
category.setLocalizations(localizations);
}
}
/**
* Adds a feature reference model to site.
*
* @param featureReference feature reference model
*/
public void addFeature(SiteFeature featureReference) {
if (this.features == null)
this.features = new ArrayList<>();
this.features.add(featureReference);
}
/**
* Adds a bundle reference model to site.
*
* @param bundleReference bundle reference model
*/
public void addBundle(SiteBundle bundleReference) {
if (this.bundles == null)
this.bundles = new ArrayList<>();
this.bundles.add(bundleReference);
}
/**
* Adds a feature reference model to site stats artifacts.
*
* @param featureReference feature reference model
*/
public void addStatsFeature(SiteFeature featureReference) {
if (this.statsFeatures == null)
this.statsFeatures = new ArrayList<>();
this.statsFeatures.add(featureReference);
}
/**
* Adds a bundle reference model to site stats artifacts
*
* @param bundleReference bundle reference model
*/
public void addStatsBundle(SiteBundle bundleReference) {
if (this.statsBundles == null)
this.statsBundles = new ArrayList<>();
this.statsBundles.add(bundleReference);
}
/**
* Adds a iu model to site.
*
* @param iu iu model
*/
public void addIU(SiteIU iu) {
if (this.ius == null)
this.ius = new ArrayList<>();
this.ius.add(iu);
}
/**
* Adds a repository reference to the site
*
* @param ref repository reference
*/
public void addRepositoryReference(RepositoryReference ref) {
if (this.repositoryReferences == null)
this.repositoryReferences = new ArrayList<>();
this.repositoryReferences.add(ref);
}
/**
* Returns an array of plug-in and non-plug-in archive reference models
* on this site
*
* @return an array of archive reference models, or an empty array if there are
* no archives known to this site.
* @since 2.0
*/
public URLEntry[] getArchives() {
if (archiveReferences == null || archiveReferences.size() == 0)
return new URLEntry[0];
return archiveReferences.toArray(new URLEntry[0]);
}
public URLEntry[] getAssociatedSites() {
return associateSites;
}
/**
* Returns an array of category models for this site.
*
* @return array of site category models, or an empty array.
* @since 2.0
*/
public SiteCategory[] getCategories() {
if (categories == null || categories.size() == 0)
return new SiteCategory[0];
return categories.values().toArray(new SiteCategory[0]);
}
/**
* Returns the category with the given name.
* @return the category with the given name, or <code>null</code>
*/
public SiteCategory getCategory(String name) {
return (categories == null ? null : categories.get(name));
}
/**
* Returns the site description.
*
* @return site description, or <code>null</code>.
*/
public URLEntry getDescription() {
return description;
}
/**
* Returns an array of feature reference models on this site.
*
* @return an array of feature reference models, or an empty array.
*/
public SiteFeature[] getFeatures() {
if (features == null || features.size() == 0)
return new SiteFeature[0];
return features.toArray(new SiteFeature[0]);
}
/**
* Returns an array of bundle reference models on this site.
*
* @return an array of bundle reference models, or an empty array.
*/
public SiteBundle[] getBundles() {
if (bundles == null || bundles.size() == 0)
return new SiteBundle[0];
return bundles.toArray(new SiteBundle[0]);
}
/**
* Returns an array of feature reference models for stats on this site.
*
* @return an array of feature reference models, or an empty array.
*/
public SiteFeature[] getStatsFeatures() {
if (statsFeatures == null || statsFeatures.size() == 0)
return new SiteFeature[0];
return statsFeatures.toArray(new SiteFeature[0]);
}
/**
* Returns an array of bundle reference models for stats on this site.
*
* @return an array of bundle reference models, or an empty array.
*/
public SiteBundle[] getStatsBundles() {
if (statsBundles == null || statsBundles.size() == 0)
return new SiteBundle[0];
return statsBundles.toArray(new SiteBundle[0]);
}
/**
* Returns an array of IU models on this site.
*
* @return an array of IU models, or an empty array.
*/
public SiteIU[] getIUs() {
if (ius == null || ius.size() == 0)
return new SiteIU[0];
return ius.toArray(new SiteIU[0]);
}
/**
* Returns an array of repository references for this site.
*
* @return an array of repository references, or an empty array.
*/
public RepositoryReference[] getRepositoryReferences() {
if (repositoryReferences == null || repositoryReferences.size() == 0)
return new RepositoryReference[0];
return repositoryReferences.toArray(new RepositoryReference[repositoryReferences.size()]);
}
/**
* Returns the URI of the stats repository that tracks downloads.
*
* @return a String representation of the stats URI.
*/
public String getStatsURI() {
return statsURIString;
}
/**
* Gets the localizations for the site as a map from locale
* to the set of translated properties for that locale.
*
* @return a map from locale to property set
* @since 3.4
*/
public Map<Locale, Map<String, String>> getLocalizations() {
return this.localizations;
}
/**
* Returns the resolved URI for the site.
*
* @return url, or <code>null</code>
*/
public URI getLocationURI() {
if (locationURI == null && locationURIString != null) {
try {
locationURI = new URI(locationURIString);
} catch (URISyntaxException e) {
//ignore and return null
}
}
return locationURI;
}
/**
* Returns the unresolved URI string for the site.
*
* @return url string, or <code>null</code>
*/
public String getLocationURIString() {
return locationURIString;
}
/**
* Return the keys for translatable strings
*
* @return the list of keys for translatable strings; may be null
* @since 3.4
*/
public List<String> getMessageKeys() {
return messageKeys;
}
/**
* Returns the URI from which the list of mirrors of this site can be retrieved.
*
*/
public String getMirrorsURI() {
return mirrorsURIString;
}
/**
* Returns the site type.
*
* @return site type, or <code>null</code>.
* @since 2.0
*/
public String getType() {
return type;
}
public boolean isPack200Supported() {
return supportsPack200;
}
/**
* Sets the site description.
*
* @param description site description
* @since 2.0
*/
public void setDescription(URLEntry description) {
this.description = description;
}
/**
* Sets the localizations for the site as a map from locale
* to the set of translated properties for that locale.
*
* @param localizations as a map from locale to property set
* @since 3.4
*/
public void setLocalizations(Map<Locale, Map<String, String>> localizations) {
this.localizations = localizations;
if (localizations != null && !localizations.isEmpty() && //
categories != null && !categories.isEmpty()) {
for (SiteCategory category : categories.values()) {
category.setLocalizations(localizations);
}
}
}
/**
* Sets the unresolved URI for the site.
*
* @param locationURIString url for the site (as a string)
* @since 2.0
*/
public void setLocationURIString(String locationURIString) {
this.locationURIString = locationURIString;
}
/**
* Sets keys for translatable strings
*
* @param keys for translatable strings
* @since 3.4
*/
public void setMessageKeys(List<String> keys) {
this.messageKeys = keys;
}
/**
* Sets the mirrors url. Mirror sites will then be obtained from this mirror url later.
* This method is complementary to setMirrorsiteEntryModels(), and only one of these
* methods should be called.
*
* @param mirrorsURI additional update site mirrors
* @since 3.1
*/
public void setMirrorsURIString(String mirrorsURI) {
this.mirrorsURIString = mirrorsURI;
}
public void setSupportsPack200(boolean value) {
this.supportsPack200 = value;
}
/**
* Sets the site type.
* Throws a runtime exception if this object is marked read-only.
*
* @param type site type
* @since 2.0
*/
public void setType(String type) {
this.type = type;
}
/**
* Sets the associated sites for this update site.
*
* @param associateSites the associated sites
*/
public void setAssociateSites(URLEntry[] associateSites) {
this.associateSites = associateSites;
}
public void setDigestURIString(String digestURIString) {
this.digestURIString = digestURIString;
}
public String getDigestURIString() {
return digestURIString;
}
/**
* Sets the URI of the stats repository used to track downloads.
*
* @param statsURI a String describing the stats URI
*/
public void setStatsURIString(String statsURI) {
this.statsURIString = statsURI;
}
}