/******************************************************************************* * 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())); } }