| /******************************************************************************* |
| * Copyright (c) 2000, 2010 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * James D Miles (IBM Corp.) - bug 191783, NullPointerException in FeatureDownloader |
| *******************************************************************************/ |
| package org.eclipse.update.core.model; |
| |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| |
| import org.eclipse.update.core.Site; |
| import org.eclipse.update.internal.core.UpdateCore; |
| import org.eclipse.update.internal.core.UpdateManagerUtils; |
| |
| /** |
| * Feature reference model object. |
| * <p> |
| * This class may be instantiated or subclassed by clients. However, in most |
| * cases clients should instead instantiate or subclass the provided |
| * concrete implementation of this model. |
| * </p> |
| * <p> |
| * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to |
| * change significantly before reaching stability. It is being made available at this early stage to solicit feedback |
| * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken |
| * (repeatedly) as the API evolves. |
| * </p> |
| * @see org.eclipse.update.core.FeatureReference |
| * @since 2.0 |
| * @deprecated The org.eclipse.update component has been replaced by Equinox p2. |
| * This API will be deleted in a future release. See bug 311590 for details. |
| */ |
| public class FeatureReferenceModel extends ModelObject { |
| |
| private String type; |
| private URL url; |
| private String urlString; |
| private String featureId; |
| private String featureVersion; |
| private SiteModel site; |
| private String label; |
| private String localizedLabel; |
| |
| // performance |
| private URL bundleURL; |
| private URL base; |
| private boolean resolved = false; |
| private String os; |
| private String ws; |
| private String nl; |
| private String arch; |
| private String patch; |
| |
| /** |
| * Creates an uninitialized feature reference model object. |
| * |
| * @since 2.0 |
| */ |
| public FeatureReferenceModel() { |
| super(); |
| } |
| |
| /** |
| * Constructor FeatureReferenceModel. |
| * @param ref |
| */ |
| public FeatureReferenceModel(FeatureReferenceModel ref) { |
| setFeatureIdentifier(ref.getFeatureIdentifier()); |
| setFeatureVersion(ref.getFeatureVersion()); |
| setType(ref.getType()); |
| setSiteModel(ref.getSiteModel()); |
| setLabel(ref.getLabel()); |
| setWS(ref.getWS()); |
| setOS(ref.getOS()); |
| setArch(ref.getOSArch()); |
| setNL(ref.getNL()); |
| } |
| |
| /** |
| * Compares 2 feature reference models for equality |
| * |
| * @param object feature reference model to compare with |
| * @return <code>true</code> if the two models are equal, |
| * <code>false</code> otherwise |
| * @since 2.0 |
| */ |
| public boolean equals(Object object) { |
| |
| if (object == null) |
| return false; |
| if (getURL() == null) |
| return false; |
| |
| if (!(object instanceof FeatureReferenceModel)) |
| return false; |
| |
| FeatureReferenceModel f = (FeatureReferenceModel) object; |
| |
| return UpdateManagerUtils.sameURL(getURL(), f.getURL()); |
| } |
| |
| /** |
| * Returns the referenced feature type. |
| * |
| * @return feature type, or <code>null</code> representing the default |
| * feature type for the site |
| * @since 2.0 |
| */ |
| public String getType() { |
| return type; |
| } |
| |
| /** |
| * Returns the site model for the reference. |
| * |
| * @return site model |
| * @since 2.0 |
| */ |
| public SiteModel getSiteModel() { |
| return site; |
| } |
| |
| /** |
| * Returns the unresolved URL string for the reference. |
| * |
| * @return url string |
| * @since 2.0 |
| */ |
| public String getURLString() { |
| return urlString; |
| } |
| |
| /** |
| * Returns the resolved URL for the feature reference. |
| * |
| * @return url string |
| * @since 2.0 |
| */ |
| public URL getURL() { |
| delayedResolve(); |
| return url; |
| } |
| |
| /** |
| * Returns the feature identifier as a string |
| * |
| * @see org.eclipse.update.core.IFeatureReference#getVersionedIdentifier() |
| * @return feature identifier |
| * @since 2.0 |
| */ |
| public String getFeatureIdentifier() { |
| return featureId; |
| } |
| |
| /** |
| * Returns the feature version as a string |
| * |
| * @see org.eclipse.update.core.IFeatureReference#getVersionedIdentifier() |
| * @return feature version |
| * @since 2.0 |
| */ |
| public String getFeatureVersion() { |
| return featureVersion; |
| } |
| |
| /** |
| * Sets the referenced feature type. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param type referenced feature type |
| * @since 2.0 |
| */ |
| public void setType(String type) { |
| assertIsWriteable(); |
| this.type = type; |
| } |
| |
| /** |
| * Sets the site for the referenced. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param site site for the reference |
| * @since 2.0 |
| */ |
| public void setSiteModel(SiteModel site) { |
| assertIsWriteable(); |
| this.site = site; |
| } |
| |
| /** |
| * Sets the unresolved URL for the feature reference. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param urlString unresolved URL string |
| * @since 2.0 |
| */ |
| public void setURLString(String urlString) { |
| assertIsWriteable(); |
| this.urlString = urlString; |
| this.url = null; |
| } |
| |
| /** |
| * Sets the feature identifier. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param featureId feature identifier |
| * @since 2.0 |
| */ |
| public void setFeatureIdentifier(String featureId) { |
| assertIsWriteable(); |
| this.featureId = featureId; |
| } |
| |
| /** |
| * Sets the feature version. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param featureVersion feature version |
| * @since 2.0 |
| */ |
| public void setFeatureVersion(String featureVersion) { |
| assertIsWriteable(); |
| this.featureVersion = featureVersion; |
| } |
| |
| /** |
| * Resolve the model object. |
| * Any URL strings in the model are resolved relative to the |
| * base URL argument. Any translatable strings in the model that are |
| * specified as translation keys are localized using the supplied |
| * resource bundle. |
| * |
| * @param base URL |
| * @param bundleURL resource bundle URL |
| * @exception MalformedURLException |
| * @since 2.0 |
| */ |
| public void resolve(URL base,URL bundleURL) throws MalformedURLException { |
| this.base = base; |
| this.bundleURL = bundleURL; |
| } |
| |
| private void delayedResolve() { |
| |
| // PERF: delay resolution |
| if (resolved) |
| return; |
| |
| // resolve local elements |
| localizedLabel = resolveNLString(bundleURL, label); |
| try { |
| url = resolveURL(base, bundleURL, urlString); |
| resolved = true; |
| } catch (MalformedURLException e){ |
| UpdateCore.warn("",e); //$NON-NLS-1$ |
| } |
| } |
| |
| /** |
| * @see Object#toString() |
| */ |
| public String toString() { |
| StringBuffer buffer = new StringBuffer(); |
| buffer.append(getClass().toString() + " :"); //$NON-NLS-1$ |
| buffer.append(" at "); //$NON-NLS-1$ |
| if (url != null) |
| buffer.append(url.toExternalForm()); |
| return buffer.toString(); |
| } |
| |
| /** |
| * @see org.eclipse.update.core.model.ModelObject#getPropertyName() |
| */ |
| protected String getPropertyName() { |
| return Site.SITE_FILE; |
| } |
| |
| /** |
| * Retrieve the displayable label for the feature reference. If the model |
| * object has been resolved, the label is localized. |
| * |
| * @return displayable label, or <code>null</code>. |
| * @since 2.0 |
| */ |
| public String getLabel() { |
| delayedResolve(); |
| if (localizedLabel != null) |
| return localizedLabel; |
| else |
| return label; |
| } |
| |
| /** |
| * Retrieve the non-localized displayable label for the feature reference. |
| * |
| * @return non-localized displayable label, or <code>null</code>. |
| * @since 2.0 |
| */ |
| public String getLabelNonLocalized() { |
| return label; |
| } |
| |
| /** |
| * Sets the label. |
| * @param label The label to set |
| */ |
| public void setLabel(String label) { |
| this.label = label; |
| } |
| |
| /** |
| * Get optional operating system specification as a comma-separated string. |
| * |
| * @return the operating system specification string, or <code>null</code>. |
| * @since 2.1 |
| */ |
| public String getOS() { |
| return os; |
| } |
| |
| |
| /** |
| * Get optional windowing system specification as a comma-separated string. |
| * |
| * @return the windowing system specification string, or <code>null</code>. |
| * @since 2.1 |
| */ |
| public String getWS() { |
| return ws; |
| } |
| |
| |
| /** |
| * Get optional system architecture specification as a comma-separated string. |
| * |
| * @return the system architecture specification string, or <code>null</code>. |
| * @since 2.1 |
| */ |
| public String getOSArch() { |
| return arch; |
| } |
| |
| |
| /** |
| * Get optional locale specification as a comma-separated string. |
| * |
| * @return the locale specification string, or <code>null</code>. |
| * @since 2.1 |
| */ |
| public String getNL() { |
| return nl; |
| } |
| |
| /** |
| * Sets the operating system specification. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param os operating system specification as a comma-separated list |
| * @since 2.1 |
| */ |
| public void setOS(String os) { |
| assertIsWriteable(); |
| this.os = os; |
| } |
| |
| |
| /** |
| * Sets the windowing system specification. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param ws windowing system specification as a comma-separated list |
| * @since 2.1 |
| */ |
| public void setWS(String ws) { |
| assertIsWriteable(); |
| this.ws = ws; |
| } |
| |
| |
| /** |
| * Sets the locale specification. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param nl locale specification as a comma-separated list |
| * @since 2.1 |
| */ |
| public void setNL(String nl) { |
| assertIsWriteable(); |
| this.nl = nl; |
| } |
| |
| |
| /** |
| * Sets the system architecture specification. |
| * Throws a runtime exception if this object is marked read-only. |
| * |
| * @param arch system architecture specification as a comma-separated list |
| * @since 2.1 |
| */ |
| public void setArch(String arch) { |
| assertIsWriteable(); |
| this.arch = arch; |
| } |
| |
| /** |
| * Returns the patch mode. |
| */ |
| public String getPatch() { |
| return patch; |
| } |
| |
| |
| /** |
| * Sets the patch mode. |
| */ |
| public void setPatch(String patch) { |
| this.patch = patch; |
| } |
| |
| } |