com.idega.block.article.data.CategoryBugRemover.java Source code

Java tutorial

Introduction

Here is the source code for com.idega.block.article.data.CategoryBugRemover.java

Source

/**
 * @(#)CategoryBugRemover.java    1.0.0 15:54:50
 *
 * Idega Software hf. Source Code Licence Agreement x
 *
 * This agreement, made this 10th of February 2006 by and between 
 * Idega Software hf., a business formed and operating under laws 
 * of Iceland, having its principal place of business in Reykjavik, 
 * Iceland, hereinafter after referred to as "Manufacturer" and Agura 
 * IT hereinafter referred to as "Licensee".
 * 1. License Grant: Upon completion of this agreement, the source 
 *     code that may be made available according to the documentation for 
 *     a particular software product (Software) from Manufacturer 
 *     (Source Code) shall be provided to Licensee, provided that 
 *     (1) funds have been received for payment of the License for Software and 
 *     (2) the appropriate License has been purchased as stated in the 
 *     documentation for Software. As used in this License Agreement, 
 *      Licensee  shall also mean the individual using or installing 
 *     the source code together with any individual or entity, including 
 *     but not limited to your employer, on whose behalf you are acting 
 *     in using or installing the Source Code. By completing this agreement, 
 *     Licensee agrees to be bound by the terms and conditions of this Source 
 *     Code License Agreement. This Source Code License Agreement shall 
 *     be an extension of the Software License Agreement for the associated 
 *     product. No additional amendment or modification shall be made 
 *     to this Agreement except in writing signed by Licensee and 
 *     Manufacturer. This Agreement is effective indefinitely and once
 *     completed, cannot be terminated. Manufacturer hereby grants to 
 *     Licensee a non-transferable, worldwide license during the term of 
 *     this Agreement to use the Source Code for the associated product 
 *     purchased. In the event the Software License Agreement to the 
 *     associated product is terminated; (1) Licensee's rights to use 
 *     the Source Code are revoked and (2) Licensee shall destroy all 
 *     copies of the Source Code including any Source Code used in 
 *     Licensee's applications.
 * 2. License Limitations
 *     2.1 Licensee may not resell, rent, lease or distribute the 
 *         Source Code alone, it shall only be distributed as a 
 *         compiled component of an application.
 *     2.2 Licensee shall protect and keep secure all Source Code 
 *         provided by this this Source Code License Agreement. 
 *         All Source Code provided by this Agreement that is used 
 *         with an application that is distributed or accessible outside
 *         Licensee's organization (including use from the Internet), 
 *         must be protected to the extent that it cannot be easily 
 *         extracted or decompiled.
 *     2.3 The Licensee shall not resell, rent, lease or distribute 
 *         the products created from the Source Code in any way that 
 *         would compete with Idega Software.
 *     2.4 Manufacturer's copyright notices may not be removed from 
 *         the Source Code.
 *     2.5 All modifications on the source code by Licencee must 
 *         be submitted to or provided to Manufacturer.
 * 3. Copyright: Manufacturer's source code is copyrighted and contains 
 *     proprietary information. Licensee shall not distribute or 
 *     reveal the Source Code to anyone other than the software 
 *     developers of Licensee's organization. Licensee may be held 
 *     legally responsible for any infringement of intellectual property 
 *     rights that is caused or encouraged by Licensee's failure to abide 
 *     by the terms of this Agreement. Licensee may make copies of the 
 *     Source Code provided the copyright and trademark notices are 
 *     reproduced in their entirety on the copy. Manufacturer reserves 
 *     all rights not specifically granted to Licensee.
 *
 * 4. Warranty & Risks: Although efforts have been made to assure that the 
 *     Source Code is correct, reliable, date compliant, and technically 
 *     accurate, the Source Code is licensed to Licensee as is and without 
 *     warranties as to performance of merchantability, fitness for a 
 *     particular purpose or use, or any other warranties whether 
 *     expressed or implied. Licensee's organization and all users 
 *     of the source code assume all risks when using it. The manufacturers, 
 *     distributors and resellers of the Source Code shall not be liable 
 *     for any consequential, incidental, punitive or special damages 
 *     arising out of the use of or inability to use the source code or 
 *     the provision of or failure to provide support services, even if we 
 *     have been advised of the possibility of such damages. In any case, 
 *     the entire liability under any provision of this agreement shall be 
 *     limited to the greater of the amount actually paid by Licensee for the 
 *     Software or 5.00 USD. No returns will be provided for the associated 
 *     License that was purchased to become eligible to receive the Source 
 *     Code after Licensee receives the source code. 
 */
package com.idega.block.article.data;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import com.idega.block.article.importer.ArticlesImporter;
import com.idega.core.business.DefaultSpringBean;
import com.idega.data.SimpleQuerier;

/**
 * Class for consequences of my bug.
 * You can report about problems to: <a href="mailto:martynas@idega.com">Martynas Stak</a>
 * You can expect to find some test cases notice in the end of the file.
 *
 * @version 1.0.0 2011.09.29
 * @author martynas
 */
@Service
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class CategoryBugRemover extends DefaultSpringBean implements ApplicationListener {

    private static Logger LOGGER = Logger.getLogger(CategoryBugRemover.class.getName());

    public boolean removeBug() {
        try {
            if (!isBadColunmsExist()) {
                getApplication().getSettings().setProperty(ArticlesImporter.CATEGORIES_BUG_FIXED_PROP,
                        Boolean.TRUE.toString());
                return Boolean.TRUE;
            }
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE, "Failed to check for bug.", e);
            getApplication().getSettings().setProperty(ArticlesImporter.CATEGORIES_BUG_FIXED_PROP,
                    Boolean.FALSE.toString());
            return Boolean.FALSE;
        }

        try {
            if (isBadTableExist("JND_ARTICLE_CATEGORY")) {
                SimpleQuerier.executeUpdate("DROP TABLE JND_ARTICLE_CATEGORY", Boolean.TRUE);
            }

            if (isBadTableExist("IC_ARTICLE")) {
                SimpleQuerier.executeUpdate("DROP TABLE IC_ARTICLE", Boolean.TRUE);
            }

            if (isBadColunmExist("ID")) {
                SimpleQuerier.executeUpdate("ALTER TABLE IC_CATEGORY DROP COLUMN ID", Boolean.TRUE);
            }

            if (isBadColunmExist("CATEGORY")) {
                SimpleQuerier.executeUpdate("ALTER TABLE IC_CATEGORY DROP COLUMN CATEGORY", Boolean.TRUE);
            }

            if (isBadColunmExist("HASHCODE")) {
                try {
                    SimpleQuerier.executeUpdate("ALTER TABLE IC_CATEGORY DROP COLUMN HASHCODE", Boolean.TRUE);
                } catch (Exception e) {
                    getLogger().warning(
                            "Most probably IC_CATEGORY table was empty and this was an attempt to remove the last column of a table");
                }
            }

            getApplication().getSettings().setProperty(ArticlesImporter.CATEGORIES_BUG_FIXED_PROP,
                    Boolean.TRUE.toString());

            return Boolean.TRUE;
        } catch (SQLException e) {
            LOGGER.log(Level.SEVERE, "Failed to fix the bug.", e);
            getApplication().getSettings().setProperty(ArticlesImporter.CATEGORIES_BUG_FIXED_PROP,
                    Boolean.FALSE.toString());
            return Boolean.FALSE;
        }
    }

    public boolean isBadColunmsExist() throws SQLException {
        Boolean isCategoriesImported = getApplication().getSettings()
                .getBoolean(ArticlesImporter.CATEGORIES_IMPORTED_APP_PROP, false);
        Boolean isArticlesImported = getApplication().getSettings()
                .getBoolean(ArticlesImporter.ARTICLES_IMPORTED_APP_PROP, false);

        if (isArticlesImported || isCategoriesImported) {
            return Boolean.TRUE;
        }

        Connection conn = null;
        try {
            conn = SimpleQuerier.getConnection();
            DatabaseMetaData meta = conn.getMetaData();
            ResultSet columnsInfo = meta.getColumns(null, null, "IC_CATEGORY", null);
            while (columnsInfo.next()) {
                String columnName = columnsInfo.getString("COLUMN_NAME");
                if (columnName.equalsIgnoreCase("ID")) {
                    return Boolean.TRUE;
                }

                if (columnName.equalsIgnoreCase("CATEGORY")) {
                    return Boolean.TRUE;
                }

                if (columnName.equalsIgnoreCase("HASHCODE")) {
                    return Boolean.TRUE;
                }
            }
        } finally {
            if (conn != null)
                conn.close();
        }

        return Boolean.FALSE;
    }

    public boolean isBadColunmExist(String column) throws SQLException {
        Connection conn = null;
        try {
            conn = SimpleQuerier.getConnection();
            DatabaseMetaData meta = conn.getMetaData();
            ResultSet columnsInfo = meta.getColumns(null, null, "IC_CATEGORY", null);
            while (columnsInfo.next()) {
                String columnName = columnsInfo.getString("COLUMN_NAME");
                if (columnName.equalsIgnoreCase(column)) {
                    return Boolean.TRUE;
                }
            }
        } finally {
            if (conn != null)
                conn.close();
        }

        return Boolean.FALSE;
    }

    public boolean isBadTableExist(String tableName) throws SQLException {
        Connection conn = null;
        try {
            conn = SimpleQuerier.getConnection();
            DatabaseMetaData meta = conn.getMetaData();
            ResultSet columnsInfo = meta.getColumns(null, null, tableName, null);

            if (columnsInfo.next()) {
                return Boolean.TRUE;
            } else {
                return Boolean.FALSE;
            }

        } finally {
            if (conn != null)
                conn.close();
        }
    }

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
    }
}