/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.util.databasechange; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.UUID; import liquibase.FileOpener; import liquibase.change.custom.CustomTaskChange; import liquibase.database.Database; import liquibase.database.DatabaseConnection; import liquibase.exception.CustomChangeException; import liquibase.exception.InvalidChangeDefinitionException; import liquibase.exception.SetupException; import liquibase.exception.UnsupportedChangeException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.util.FormConstants; /** * This change set copies form metadata from the form table into the form attributes table */ public class CopyFormMetadataChangeSet implements CustomTaskChange { protected final static Log log = LogFactory.getLog(CopyFormMetadataChangeSet.class); /** * @see CustomTaskChange#execute(Database) */ public void execute(Database database) throws CustomChangeException, UnsupportedChangeException { DatabaseConnection connection = database.getConnection(); String getFormMetadataSql = "SELECT form_id, xslt, template FROM form"; StringBuilder insertFormMetadataSql = new StringBuilder(); insertFormMetadataSql.append("INSERT INTO form_resource"); insertFormMetadataSql.append(" (form_id, owner, name, value, uuid)"); insertFormMetadataSql.append(" VALUES (?, ?, ?, ?, ?)"); PreparedStatement insertStatement = null; try { insertStatement = connection.prepareStatement(insertFormMetadataSql.toString()); // iterate over deleted HL7s ResultSet forms = connection.createStatement().executeQuery(getFormMetadataSql); while (forms.next()) { // define the xslt object byte[] xslt = forms.getString(2) == null ? null : forms.getString(2).getBytes(); // define the template object byte[] template = forms.getString(3) == null ? null : forms.getString(3).getBytes(); // add xslt if (xslt != null) { insertStatement.setInt(1, forms.getInt(1)); insertStatement.setString(2, FormConstants.FORM_RESOURCE_FORMENTRY_OWNER); insertStatement.setString(3, FormConstants.FORM_RESOURCE_FORMENTRY_XSLT); insertStatement.setBytes(4, xslt); insertStatement.setString(5, UUID.randomUUID().toString()); insertStatement.executeUpdate(); } // add template if (template != null) { insertStatement.setInt(1, forms.getInt(1)); insertStatement.setString(2, FormConstants.FORM_RESOURCE_FORMENTRY_OWNER); insertStatement.setString(3, FormConstants.FORM_RESOURCE_FORMENTRY_TEMPLATE); insertStatement.setBytes(4, template); insertStatement.setString(5, UUID.randomUUID().toString()); insertStatement.executeUpdate(); } } // cleanup if (insertStatement != null) insertStatement.close(); } catch (SQLException e) { throw new CustomChangeException("Unable to copy form metadata to form attributes table", e); } } /** * @see CustomChange#getConfirmationMessage() */ @Override public String getConfirmationMessage() { return "Finished copying form metadata"; } /** * @see CustomChange#setFileOpener(FileOpener) */ @Override public void setFileOpener(FileOpener fo) { } /** * @see CustomChange#setUp() */ @Override public void setUp() throws SetupException { } /** * @see CustomChange#validate(Database) */ @Override public void validate(Database db) throws InvalidChangeDefinitionException { } }