package org.korsakow.services.conversion; import java.math.BigDecimal; import javax.xml.xpath.XPathExpressionException; import org.korsakow.ide.Build; import org.korsakow.ide.DomHelper; import org.w3c.dom.Document; public class ConversionFactory extends ConversionModule { public ConversionFactory(Document document) { super(document); } /** * @return null if the document is up to date * @throws ConversionException on error or if no module is found for the document's version */ private IConversionModule getConversionModule(Document document, BigDecimal targetVersion) throws ConversionException { BigDecimal versionMinor; String versionMajor; try { versionMinor = new BigDecimal(DomHelper.xpathAsString(document, "/korsakow/@versionMinor")); versionMajor = DomHelper.xpathAsString(document, "/korsakow/@versionMajor"); } catch (XPathExpressionException e) { throw new ConversionException(e); } catch (NumberFormatException e) { throw new ConversionException(e); } if (versionMinor.compareTo(targetVersion) >= 0) return null; if (versionMinor.compareTo(new BigDecimal("22.4")) < 0) return new ConvertUpTo22_4(document); if (versionMinor.compareTo(new BigDecimal("22.91")) < 0) return new ConvertUpTo22_91(document); if (versionMinor.compareTo(new BigDecimal("22.94")) < 0) return new ConvertUpTo22_94(document); if (versionMinor.compareTo(new BigDecimal("23.0")) < 0) return new ConvertUpTo23_0(document); if (versionMinor.compareTo(new BigDecimal("23.10")) < 0) return new ConvertUpTo23_10(document); if (versionMinor.compareTo(new BigDecimal("24.10")) < 0) return new ConvertUpTo24_10(document); if (versionMinor.compareTo(new BigDecimal("25.02")) < 0) return new ConvertUpTo25_02(document); return new ConvertUpToBuild(document); } @Override public void convert() throws ConversionException { IConversionModule module = null; while ((module = getConversionModule(document, Build.getRelease2())) != null) { module.convert(); warnings.addAll(module.getWarnings()); } } }