| /******************************************************************************* |
| * Copyright (c) 2009, 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 |
| *******************************************************************************/ |
| package org.eclipse.equinox.internal.p2.update; |
| |
| import java.io.File; |
| import java.net.URL; |
| import org.eclipse.equinox.p2.core.ProvisionException; |
| |
| /* |
| * Class which controls the reading and writing of Configuration (platform.xml) objects. |
| * We keep a local cached copy to avoid multiple reads. When we install new features we |
| * seem to only write out the platform.xml in the "commit" phase so we don't need to |
| * batch the writes. |
| */ |
| public class ConfigurationIO { |
| private static CacheEntry cache = null; |
| |
| // class used to represent cache values |
| static class CacheEntry { |
| Configuration config; |
| URL osgiInstallArea; |
| File location; |
| long timestamp; |
| } |
| |
| /* |
| * Return the configuration object which is represented by the given file. |
| */ |
| static Configuration read(File file, URL osgiInstallArea) throws ProvisionException { |
| // check the cached copy first |
| if (cache != null && file.lastModified() == cache.timestamp) |
| return cache.config; |
| |
| // cache miss or file is out of date, read from disk |
| Configuration config = ConfigurationParser.parse(file, osgiInstallArea); |
| if (config == null) |
| return null; |
| |
| // successful read, store in the cache before we return |
| cache(file, config, osgiInstallArea); |
| return config; |
| } |
| |
| /* |
| * Store the given configuration file in the local cache. |
| */ |
| private static void cache(File location, Configuration config, URL osgiInstallArea) { |
| CacheEntry entry = new CacheEntry(); |
| entry.config = config; |
| entry.osgiInstallArea = osgiInstallArea; |
| entry.location = location; |
| entry.timestamp = location.lastModified(); |
| cache = entry; |
| } |
| |
| /* |
| * Save the given configuration to the file-system. |
| */ |
| static void write(File location, Configuration config, URL osgiInstallArea) throws ProvisionException { |
| // write it to disk |
| ConfigurationWriter.save(config, location, osgiInstallArea); |
| // save a copy in the cache |
| cache(location, config, osgiInstallArea); |
| } |
| |
| } |