/* * Copyright 2007 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.services.util; import ome.conditions.InternalException; import ome.system.PreferenceContext; import ome.util.SqlAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Hook run by the context. This hook tests the database version against the * software version on {@link #start()}. * * @author Josh Moore, josh at glencoesoftwarecom * @since 3.0-Beta3 */ public class DBPatchCheck { public final static Logger log = LoggerFactory.getLogger(DBPatchCheck.class); final SqlAction sql; final PreferenceContext prefs; public DBPatchCheck(SqlAction sql, PreferenceContext prefs) { this.sql = sql; this.prefs = prefs; } private final static String line = "***************************************************************************************\n"; private final static String see = "See http://www.openmicroscopy.org/site/support/omero5.2/sysadmins/server-upgrade.html\n"; private final static String no_table = mk("Error connecting to database table dbpatch. You may need to bootstrap.\n"); private final static String wrong_version = mk("DB version (%s) does not match omero.properties (%s). Please apply a db upgrade.\n"); private static String mk(String msg) { StringBuilder sb = new StringBuilder(); sb.append("\n"); sb.append(line); sb.append(msg); sb.append(see); sb.append(line); return sb.toString(); } /** */ public void start() throws Exception { final String[] results = new String[3]; try { results[0] = sql.dbVersion(); results[1] = prefs.getProperty("omero.db.version"); results[2] = prefs.getProperty("omero.db.patch"); } catch (Exception e) { log.error(no_table, e); // slf4j migration: fatal() to error() InternalException ie = new InternalException(no_table); throw ie; } String patch = results[0]; String version = results[1]; String dbpatch = results[2]; String omero = version + "__" + dbpatch; if (patch == null || !patch.equals(omero)) { String str = String.format(wrong_version, patch, omero); log.error(str); // slf4j migration: fatal() to error() InternalException ie = new InternalException(str); throw ie; } log.info(String.format("Verified database patch: %s", patch)); } }