package org.openslx.dozmod.thrift; import java.util.List; import org.apache.log4j.Logger; import org.apache.thrift.TException; import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.bwlp.thrift.iface.Virtualizer; import org.openslx.thrifthelper.ThriftManager; import org.openslx.util.GenericDataCache; public class MetaDataCache { private static final Logger LOGGER = Logger.getLogger(MetaDataCache.class); /** * How long to cache data. */ private static final int CACHE_TIME_MS = 60 * 60 * 1000; private static final GenericDataCache> osCache = new GenericDataCache>(CACHE_TIME_MS) { @Override protected List update() throws TException { try { return ThriftManager.getSatClient().getOperatingSystems(); } catch (Exception e) { LOGGER.warn("Could not get OS list from satellite, trying master for backup...", e); } return ThriftManager.getMasterClient().getOperatingSystems(); } }; private static final GenericDataCache> virtualizerCache = new GenericDataCache>(CACHE_TIME_MS) { @Override protected List update() throws TException { try { return ThriftManager.getSatClient().getVirtualizers(); } catch (TException e) { LOGGER.warn("Could not get virtualizer list from satellite, trying master for backup...", e); } return ThriftManager.getMasterClient().getVirtualizers(); } }; /** * Get all known/valid operating systems an image can be marked as. * * @return */ public static List getOperatingSystems() { return osCache.get(); } public static OperatingSystem getOsById(int id){ List list = getOperatingSystems(); if (list == null) return null; for (OperatingSystem os : list) { if (os.getOsId() == id) return os; } return null; } /** * Get all supported virtualizers an image can be declared to be run as. * * @return */ public static List getVirtualizers() { return virtualizerCache.get(); } }