/** * Copyright (c) 2010-2016 by the respective copyright holders. * * 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 */ package org.openhab.binding.zwave.internal.config; import java.util.List; import org.osgi.framework.Version; import com.thoughtworks.xstream.annotations.XStreamConverter; import com.thoughtworks.xstream.annotations.XStreamImplicit; import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; /** * Implements the product class for the XML product database * * @author Chris Jackson * @since 1.4.0 * */ public class ZWaveDbProduct { @XStreamImplicit public List<ZWaveDbProductReference> Reference; public String Model; @XStreamImplicit public List<ZWaveDbLabel> Label; @XStreamImplicit private List<ZWaveDbConfigFile> ConfigFile; @XStreamConverter(value = ToAttributedValueConverter.class, strings = { "Filename", "VersionMin", "VersionMax" }) private class ZWaveDbConfigFile { String VersionMin; String VersionMax; String Filename; } public String getConfigFile(String version) { if (ConfigFile == null) { return null; } Version vIn = new Version(version); String filename = null; // Check for a version'ed file // There are multiple permutations of the file that we need to account for -: // * No version information // * Only a min version // * Only a max version // * Both min and max versions // Versions need to be evaluated with the max and min specifiers separately // i.e. the part either side of the decimal. // So, version 1.3 is lower than version 1.11 for (ZWaveDbConfigFile cfg : ConfigFile) { // Find a default - ie one with no version information if (cfg.VersionMin == null && cfg.VersionMax == null && filename == null) { filename = cfg.Filename; continue; } if (cfg.VersionMin != null) { Version vMin = new Version(cfg.VersionMin); if (vIn.compareTo(vMin) < 0) { continue; } } if (cfg.VersionMax != null) { Version vMax = new Version(cfg.VersionMax); if (vIn.compareTo(vMax) > 0) { continue; } } // This version matches the criterea return cfg.Filename; } // Otherwise return the default if there was one! return filename; } }