blob: 53c5c65f595adca9e58e7879e19bce0741f527a0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 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.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* TODO ensure thread safety
*
*/
public class ConfigurationCache {
private static Map<String, CacheEntry> cache = new HashMap<String, CacheEntry>();
// class used to represent cache values
static class CacheEntry {
long timestamp;
Configuration config;
}
// helper method to convert the file to a cache key. convert to an absolute
// path to ensure equality between relative and absolute comparisons
private static String toKey(File file) {
try {
return file.getCanonicalPath();
} catch (IOException e) {
// ignore and return the absolute value instead
}
return file.getAbsolutePath();
}
/*
* Return the configuration object in the cache which is represented
* by the given file. Do a check on disk to see if the cache is up-to-date.
* If not, then treat it as a cache miss.
*/
public static Configuration get(File file) {
String key = toKey(file);
CacheEntry entry = cache.get(key);
if (entry == null)
return null;
return file.lastModified() == entry.timestamp ? entry.config : null;
}
/*
* Store the given configuration in the cache.
*/
public static void put(File file, Configuration config) {
String key = toKey(file);
if (config == null) {
cache.remove(key);
return;
}
CacheEntry entry = new CacheEntry();
entry.config = config;
entry.timestamp = file.lastModified();
cache.put(key, entry);
}
}