| /******************************************************************************* |
| * Copyright (c) 2000, 2006 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 |
| *******************************************************************************/ |
| package org.eclipse.update.internal.model; |
| import java.io.File; |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.ArrayList; |
| import java.util.Date; |
| import java.util.List; |
| import java.util.MissingResourceException; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.update.core.model.ModelObject; |
| import org.eclipse.update.internal.core.BaseSiteLocalFactory; |
| import org.eclipse.update.internal.core.UpdateCore; |
| import org.eclipse.update.internal.core.UpdateManagerUtils; |
| |
| /** |
| * This class manages the configurations. |
| */ |
| |
| public class SiteLocalModel extends ModelObject { |
| public static final String CONFIG_FILE = "platform.xml"; //$NON-NLS-1$ |
| private long stamp; |
| private String label; |
| private URL location; |
| private String locationURLString; |
| private int history = UpdateCore.DEFAULT_HISTORY; |
| private List /* of InstallConfigurationModel */configurations; |
| private List /* of InstallConfigurationModel */preservedConfigurations; |
| private InstallConfigurationModel currentConfiguration; |
| |
| /** |
| * Constructor for LocalSite |
| */ |
| public SiteLocalModel(){ |
| super(); |
| } |
| |
| /** |
| * @since 2.0 |
| */ |
| public InstallConfigurationModel getCurrentConfigurationModel() { |
| return currentConfiguration; |
| } |
| |
| /** |
| * @since 2.0 |
| */ |
| public InstallConfigurationModel[] getConfigurationHistoryModel() { |
| if (configurations==null) |
| // initialize history |
| processHistory(); |
| |
| if (configurations == null || configurations.size() == 0) |
| return new InstallConfigurationModel[0]; |
| else |
| return (InstallConfigurationModel[])configurations.toArray(arrayTypeFor(configurations)); |
| } |
| |
| /** |
| * adds a new configuration to the LocalSite |
| * the newly added configuration is teh current one |
| */ |
| public void addConfigurationModel(InstallConfigurationModel config) { |
| if (config != null) { |
| if (configurations == null) |
| configurations = new ArrayList(); |
| if (!configurations.contains(config)) |
| configurations.add(config); |
| } |
| } |
| |
| /** |
| * adds a new configuration to the LocalSite |
| * the newly added configuration is teh current one |
| */ |
| public boolean removeConfigurationModel(InstallConfigurationModel config) { |
| if (config != null) { |
| return configurations.remove(config); |
| } |
| return false; |
| } |
| /** |
| * Gets the location of the local site. |
| * @return Returns a URL |
| */ |
| public URL getLocationURL() { |
| return location; |
| } |
| |
| /** |
| * Gets the locationURLString. |
| * @return Returns a String |
| */ |
| public String getLocationURLString() { |
| return locationURLString; |
| } |
| |
| |
| /** |
| * Sets the locationURLString. |
| * @param locationURLString The locationURLString to set |
| */ |
| public void setLocationURLString(String locationURLString) { |
| assertIsWriteable(); |
| this.locationURLString = locationURLString; |
| this.location=null; |
| } |
| |
| |
| /** |
| * @since 2.0 |
| */ |
| public String getLabel() { |
| return label; |
| } |
| |
| /** |
| * Sets the label. |
| * @param label The label to set |
| */ |
| public void setLabel(String label) { |
| assertIsWriteable(); |
| this.label = label; |
| } |
| |
| |
| /** |
| * @since 2.0 |
| */ |
| public int getMaximumHistoryCount() { |
| return history; |
| } |
| |
| /** |
| * @since 2.0 |
| */ |
| public void setMaximumHistoryCount(int history) { |
| assertIsWriteable(); |
| this.history = history; |
| } |
| |
| |
| /** |
| * Adds a preserved configuration into teh collection |
| * do not save the configuration |
| * @since 2.0 |
| */ |
| public void addPreservedInstallConfigurationModel(InstallConfigurationModel configuration) { |
| if (preservedConfigurations == null) |
| preservedConfigurations = new ArrayList(); |
| |
| preservedConfigurations.add(configuration); |
| } |
| |
| /** |
| * @since 2.0 |
| */ |
| public boolean removePreservedConfigurationModel(InstallConfigurationModel configuration) { |
| if (preservedConfigurations != null) { |
| return preservedConfigurations.remove(configuration); |
| } |
| return false; |
| } |
| |
| /** |
| * @since 2.0 |
| */ |
| public InstallConfigurationModel[] getPreservedConfigurationsModel() { |
| if (preservedConfigurations==null || preservedConfigurations.isEmpty()) |
| return new InstallConfigurationModel[0]; |
| return (InstallConfigurationModel[])preservedConfigurations.toArray(arrayTypeFor(preservedConfigurations)); |
| } |
| |
| |
| /** |
| * Sets the currentConfiguration. |
| * @param currentConfiguration The currentConfiguration to set |
| */ |
| public void setCurrentConfigurationModel(InstallConfigurationModel currentConfiguration) { |
| assertIsWriteable(); |
| this.currentConfiguration = currentConfiguration; |
| |
| //2.0.2 set the configuredSite of sites |
| ConfiguredSiteModel[] confSites = currentConfiguration.getConfigurationSitesModel(); |
| for (int i = 0; i < confSites.length; i++) { |
| confSites[i].getSiteModel().setConfiguredSiteModel(confSites[i]); |
| } |
| } |
| |
| /* |
| * @see ModelObject#resolve(URL) |
| */ |
| public void resolve(URL base,URL bundleURL) throws MalformedURLException { |
| // local |
| location = resolveURL(base,bundleURL,getLocationURLString()); |
| |
| // delegate |
| resolveListReference(getConfigurationHistoryModel(),base,bundleURL); |
| resolveListReference(getPreservedConfigurationsModel(),base,bundleURL); |
| resolveReference(getCurrentConfigurationModel(),base,bundleURL); |
| } |
| |
| |
| /** |
| * Gets the stamp. |
| * @return Returns a long |
| */ |
| public long getStamp() { |
| return stamp; |
| } |
| |
| /** |
| * Sets the stamp. |
| * @param stamp The stamp to set |
| */ |
| public void setStamp(long stamp) { |
| this.stamp = stamp; |
| } |
| |
| /** |
| * @see org.eclipse.update.core.model.ModelObject#getPropertyName() |
| */ |
| protected String getPropertyName() { |
| return "platform"; //$NON-NLS-1$ |
| } |
| |
| /* |
| * reads the configuration/history directory |
| */ |
| private void processHistory() { |
| try { |
| URL historyURL = new URL(getLocationURL(), "history"); //$NON-NLS-1$ |
| historyURL = FileLocator.toFileURL(historyURL); |
| File historyDir = new File(historyURL.getFile()); |
| if (historyDir.exists()) { |
| File[] backedConfigs = historyDir.listFiles(); |
| BaseSiteLocalFactory factory = new BaseSiteLocalFactory(); |
| for (int i=0; i<backedConfigs.length; i++) { |
| String name = backedConfigs[i].getName(); |
| if (name.endsWith(".xml")) //$NON-NLS-1$ |
| name = name.substring(0, name.length()-4); |
| else |
| continue; |
| Date date = new Date(Long.parseLong(name)); |
| InstallConfigurationModel config = factory.createInstallConfigurationModel(); |
| config.setLocationURLString(backedConfigs[i].getAbsolutePath().replace('\\', '/')); |
| config.setLabel(date.toString()); |
| config.setCreationDate(date); |
| config.resolve(backedConfigs[i].toURL(), getResourceBundleURL()); |
| |
| // add the config |
| addConfigurationModel(config); |
| } |
| } |
| } catch (Exception e) { |
| UpdateCore.warn("Error processing history: ", e); //$NON-NLS-1$ |
| } |
| } |
| |
| /** |
| * return the appropriate resource bundle for this sitelocal |
| */ |
| URL getResourceBundleURL() throws CoreException { |
| URL url = null; |
| try { |
| url = UpdateManagerUtils.asDirectoryURL(getLocationURL()); |
| } catch (MissingResourceException e) { |
| UpdateCore.warn(e.getLocalizedMessage() + ":" + url.toExternalForm()); //$NON-NLS-1$ |
| } catch (MalformedURLException e) { |
| UpdateCore.warn(e.getLocalizedMessage()); |
| } |
| return url; |
| } |
| |
| } |