blob: b367bb0073e96a9f7b8b9d4169f143d59e6851d8 [file] [log] [blame]
/*******************************************************************************
* 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.io.IOException;
import java.net.URL;
import java.util.Date;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.update.configurator.IPlatformConfiguration;
import org.eclipse.update.core.ISite;
import org.eclipse.update.core.SiteFeatureReference;
import org.eclipse.update.core.SiteManager;
import org.eclipse.update.core.model.SiteModel;
import org.eclipse.update.internal.configurator.FeatureEntry;
import org.eclipse.update.internal.configurator.PlatformConfiguration;
import org.eclipse.update.internal.configurator.SiteEntry;
import org.eclipse.update.internal.core.BaseSiteLocalFactory;
import org.eclipse.update.internal.core.Messages;
import org.eclipse.update.internal.core.UpdateCore;
import org.eclipse.update.internal.core.UpdateManagerUtils;
/**
* parse the default site.xml
*/
public class InstallConfigurationParser {
private PlatformConfiguration platformConfig;
private URL siteURL;
private InstallConfigurationModel config;
private ConfiguredSiteModel configSite;
/**
* Constructor for DefaultSiteParser
*/
public InstallConfigurationParser(
IPlatformConfiguration platformConfig,
InstallConfigurationModel config, boolean light)
throws IOException, CoreException {
Assert.isTrue(platformConfig instanceof PlatformConfiguration);
this.platformConfig = (PlatformConfiguration)platformConfig;
this.config = config;
// DEBUG:
if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_PARSING) {
UpdateCore.debug("Start parsing Configuration:" + (config).getURL().toExternalForm()); //$NON-NLS-1$
}
if (light) {
processConfigurationLight(this.platformConfig);
} else {
processConfig(this.platformConfig);
}
}
/**
* process the Site info
*/
private void processSite(SiteEntry siteEntry) throws CoreException, IOException {
//site url
siteURL = siteEntry.getURL();
try {
siteURL = FileLocator.toFileURL(siteURL);
// TODO workaround bug in platform url resolution
if (siteURL.getProtocol().equals("file")) //$NON-NLS-1$
siteURL = new File(siteURL.getFile()).toURL();
} catch (IOException e) {
// keep original url
}
// policy
ISite site = SiteManager.getSite(siteURL,null);
// configuration site
BaseSiteLocalFactory factory = new BaseSiteLocalFactory();
configSite = factory.createConfigurationSiteModel((SiteModel) site, siteEntry.getSitePolicy().getType());
//platform url
configSite.setPlatformURLString(siteEntry.getURL().toExternalForm());
// configured
configSite.setEnabled(siteEntry.isEnabled());
// check if the site exists and is updatable
configSite.setUpdatable(siteEntry.isUpdateable());
// add to install configuration
config.addConfigurationSiteModel(configSite);
configSite.setInstallConfigurationModel(config);
FeatureEntry[] features = siteEntry.getFeatureEntries();
for (int i=0; i<features.length; i++) {
processFeature(features[i]);
}
}
/**
* process the DefaultFeature info
*/
private void processFeature(FeatureEntry feature) throws CoreException, IOException {
// url
String path = feature.getURL();
URL url = UpdateManagerUtils.getURL(siteURL, path, null);
if (url != null) {
SiteFeatureReference ref = new SiteFeatureReference();
ref.setSite((ISite) configSite.getSiteModel());
ref.setURL(url);
(configSite.getConfigurationPolicyModel()).addConfiguredFeatureReference(ref);
//updateURL
//TODO do we need the update url and to resolve it?
// String updateURLString = attributes.getValue("updateURL"); //$NON-NLS-1$
// URLEntry entry = new URLEntry();
// entry.setURLString(updateURLString);
// entry.resolve(siteURL,null);
// DEBUG:
if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_PARSING) {
UpdateCore.debug("End Processing DefaultFeature Tag: url:" + url.toExternalForm()); //$NON-NLS-1$
}
} else {
UpdateCore.log( Messages.InstallConfigurationParser_FeatureReferenceNoURL, new Exception());
}
}
/**
* process the Activity info
*/
// private void processActivity(Attributes attributes) {
//
// // action
// String actionString = attributes.getValue("action"); //$NON-NLS-1$
// int action = Integer.parseInt(actionString);
//
// // create
// ConfigurationActivityModel activity =
// new BaseSiteLocalFactory().createConfigurationActivityModel();
// activity.setAction(action);
//
// // label
// String label = attributes.getValue("label"); //$NON-NLS-1$
// if (label != null)
// activity.setLabel(label);
//
// // date
// String dateString = attributes.getValue("date"); //$NON-NLS-1$
// Date date = new Date(Long.parseLong(dateString));
// activity.setDate(date);
//
// // status
// String statusString = attributes.getValue("status"); //$NON-NLS-1$
// int status = Integer.parseInt(statusString);
// activity.setStatus(status);
//
// config.addActivityModel(activity);
//
// // DEBUG:
// if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_PARSING) {
// UpdateCore.debug("End Processing Activity: action:" + actionString + " label: " + label + " date:" + dateString + " status" + statusString); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
// }
//
// }
/**
* process the Config info
*/
private void processConfig(PlatformConfiguration platformConfig) throws IOException, CoreException {
// date
processConfigurationLight(platformConfig);
//timeline
// String timelineString = attributes.getValue("timeline"); //$NON-NLS-1$
// long timeline = config.getCreationDate().getTime();
// if (timelineString!=null) {
// timeline = Long.parseLong(timelineString);
// }
// config.setTimeline(timeline);
SiteEntry[] sites = platformConfig.getConfiguration().getSites();
for (int i=0; i<sites.length; i++)
processSite(sites[i]);
}
private void processConfigurationLight(PlatformConfiguration platformConfig) {
Date date = new Date(platformConfig.getChangeStamp());
config.setCreationDate(date);
config.setLabel(date.toString());
config.setCurrent( date.equals(org.eclipse.update.internal.configurator.PlatformConfiguration.getCurrent().getConfiguration().getDate()));
}
}