esg.node.components.registry.RegistrationGleanerHelperDAO.java Source code

Java tutorial

Introduction

Here is the source code for esg.node.components.registry.RegistrationGleanerHelperDAO.java

Source

/***************************************************************************
*                                                                          *
*  Organization: Lawrence Livermore National Lab (LLNL)                    *
*   Directorate: Computation                                               *
*    Department: Computing Applications and Research                       *
*      Division: S&T Global Security                                       *
*        Matrix: Atmospheric, Earth and Energy Division                    *
*       Program: PCMDI                                                     *
*       Project: Earth Systems Grid Federation (ESGF) Data Node Software   *
*  First Author: Gavin M. Bell (gavin@llnl.gov)                            *
*                                                                          *
****************************************************************************
*                                                                          *
*   Copyright (c) 2009, Lawrence Livermore National Security, LLC.         *
*   Produced at the Lawrence Livermore National Laboratory                 *
*   Written by: Gavin M. Bell (gavin@llnl.gov)                             *
*   LLNL-CODE-420962                                                       *
*                                                                          *
*   All rights reserved. This file is part of the:                         *
*   Earth System Grid Federation (ESGF) Data Node Software Stack           *
*                                                                          *
*   For details, see http://esgf.org/esg-node/                             *
*   Please also read this link                                             *
*    http://esgf.org/LICENSE                                               *
*                                                                          *
*   * Redistribution and use in source and binary forms, with or           *
*   without modification, are permitted provided that the following        *
*   conditions are met:                                                    *
*                                                                          *
*   * Redistributions of source code must retain the above copyright       *
*   notice, this list of conditions and the disclaimer below.              *
*                                                                          *
*   * Redistributions in binary form must reproduce the above copyright    *
*   notice, this list of conditions and the disclaimer (as noted below)    *
*   in the documentation and/or other materials provided with the          *
*   distribution.                                                          *
*                                                                          *
*   Neither the name of the LLNS/LLNL nor the names of its contributors    *
*   may be used to endorse or promote products derived from this           *
*   software without specific prior written permission.                    *
*                                                                          *
*   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS    *
*   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT      *
*   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS      *
*   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE    *
*   LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR     *
*   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,           *
*   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT       *
*   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF       *
*   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND    *
*   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,     *
*   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT     *
*   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF     *
*   SUCH DAMAGE.                                                           *
*                                                                          *
***************************************************************************/
package esg.node.components.registry;

import esg.common.generated.registration.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import esg.common.db.DatabaseResource;

/**
   Description:
   Provides database access support to the RegistrationGleaner.
*/
public class RegistrationGleanerHelperDAO {

    private static final Log log = LogFactory.getLog(RegistrationGleanerHelperDAO.class);

    private Properties props = null;
    private DataSource dataSource = null;
    private QueryRunner queryRunner = null;
    private ResultSetHandler<Map<String, String>> attributeGroupsResultSetHandler = null;

    //-------------------------------------
    //QUERY SHOPPE
    //-------------------------------------
    private static final String attributeGroupsQuery = "SELECT name, description FROM esgf_security.group";
    //-------------------------------------

    public RegistrationGleanerHelperDAO(Properties props) {
        this.props = props;

        if (DatabaseResource.getInstance() == null) {
            DatabaseResource.init(props.getProperty("db.driver", "org.postgresql.Driver")).setupDataSource(props);
        }

        this.setDataSource(DatabaseResource.getInstance().getDataSource());
        init();
    }

    public void setDataSource(DataSource dataSource) {
        log.trace("Helper, Setting Up RegistrationGleaners's Pooled Data Source");
        this.dataSource = dataSource;
        this.queryRunner = new QueryRunner(dataSource);
    }

    //Create handlers for query results
    public void init() {
        attributeGroupsResultSetHandler = new ResultSetHandler<Map<String, String>>() {
            public Map<String, String> handle(ResultSet rs) throws SQLException {
                HashMap<String, String> results = new HashMap<String, String>();
                String name = null;
                String desc = null;
                java.util.regex.Matcher typeMatcher = AtsWhitelistGleaner.TYPE_PATTERN.matcher("");
                while (rs.next()) {
                    name = rs.getString(1);
                    desc = rs.getString(2);
                    typeMatcher.reset(name);
                    if (typeMatcher.find()) {
                        log.trace("Skipping " + name);
                        continue;
                    }
                    results.put(name, desc);
                }
                return results;
            }
        };
    }

    public void loadAttributeServiceGroups(AttributeService attrSvc) {
        try {
            Map<String, String> results = queryRunner.query(attributeGroupsQuery, attributeGroupsResultSetHandler);
            for (String name : results.keySet()) {
                Group newGroup = new Group();
                log.info("Adding Group: " + name + " - " + results.get(name));
                newGroup.setName(name);
                newGroup.setDescription(results.get(name));
                attrSvc.getGroup().add(newGroup);
            }
        } catch (SQLException e) {
            log.error(e);
        }
    }
}