com.claresco.tinman.sql.XapiAgentProfileSQLWriter.java Source code

Java tutorial

Introduction

Here is the source code for com.claresco.tinman.sql.XapiAgentProfileSQLWriter.java

Source

/**
 * Copyright (c) 1999, 2014 Claresco Corporation, Berkeley, California. All rights reserved.
 *
 *
 * XapiAgentProfileSQLWriter.java   Jun 25, 2014
 *
 * Copyright 2014 Claresco Corporation, Berkeley, CA 94704. All Rights Reserved.
 *
 * This software is the proprietary information of Claresco Corporation.
 * Use is subject to license terms.
 *
 * Author : Rheza
 *
 */
package com.claresco.tinman.sql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.TimeZone;

import org.joda.time.DateTime;

import com.claresco.tinman.lrs.XapiActor;
import com.hp.hpl.jena.sparql.modify.UpdateSink;

/**
 * XapiAgentProfileSQLWriter
 * @author Rheza
 *
 * Description: 
 *
 *
 * Status: 
 *
 *
 */
public class XapiAgentProfileSQLWriter extends SQLWriter {

    private PreparedStatement myInsertStatement;
    private PreparedStatement myUpdateStatement;

    private XapiActorSQLWriter myActorWriter;
    private XapiDocumentSQLWriter myDocumentWriter;
    private XapiAgentProfileSQLReader myAgentProfileReader;

    private String myTableName = "agentprofile";
    private String[] myFieldNames = new String[] { "agentprofileid", "actorid", "profilekey", "documentid",
            "stored" };

    /**
     * Constructor 
     *
     * Params:
     *
     *
     */
    public XapiAgentProfileSQLWriter(Connection conn, XapiActorSQLWriter theActorWriter,
            XapiDocumentSQLWriter theDocumentWriter, XapiAgentProfileSQLReader theAgentProfileReader)
            throws SQLException {
        this.myConn = conn;
        this.myActorWriter = theActorWriter;
        this.myDocumentWriter = theDocumentWriter;
        this.myAgentProfileReader = theAgentProfileReader;

        this.myInsertStatement = SQLUtility.createInsertStatement(myConn, myTableName, myFieldNames);
        this.myUpdateStatement = SQLUtility.createUpdateStatement(myConn, myTableName, new String[] { "stored" },
                new String[] { "agentprofileid" });
    }

    protected int insertAgentProfile(XapiActor theActor, String theProfileKey, String theDocument)
            throws SQLException, XapiDataIntegrityException, XapiSQLOperationProblemException {
        int theDatabaseID = -1;
        ResultSet theRS = myAgentProfileReader.getResultSet(theActor, theProfileKey);

        if (theRS != null && !SQLUtility.isResultEmpty(theRS)) {
            theRS.next();
            theDatabaseID = theRS.getInt("agentprofileid");
        }

        if (theDatabaseID != -1) {
            int theDocumentID = theRS.getInt("documentid");
            updateAgentProfile(theDocument, theDocumentID, theDatabaseID);

        } else {
            theDatabaseID = insertNewAgentProfile(theActor, theProfileKey, theDocument);
        }

        SQLUtility.closeResultSet(theRS);

        return theDatabaseID;
    }

    private int insertNewAgentProfile(XapiActor theActor, String theProfileKey, String theDocument)
            throws SQLException, XapiDataIntegrityException, XapiSQLOperationProblemException {
        int theID = super.fetchId();

        myInsertStatement.setInt(1, theID);
        myInsertStatement.setInt(2, myActorWriter.insertNewActor(theActor));
        myInsertStatement.setString(3, theProfileKey);
        myInsertStatement.setInt(4, myDocumentWriter.insertNewDocument(theDocument));

        DateTime theStoredTime = DateTime.now();
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        myInsertStatement.setTimestamp(5, SQLUtility.getTimestamp(theStoredTime), cal);

        myInsertStatement.executeUpdate();

        return theID;
    }

    private void updateAgentProfile(String theDocument, int theDocumentID, int theAgentProfileID)
            throws SQLException, XapiSQLOperationProblemException {
        myDocumentWriter.updateDocument(theDocument, theDocumentID);

        DateTime theStoredTime = DateTime.now();
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        myUpdateStatement.setTimestamp(1, SQLUtility.getTimestamp(theStoredTime), cal);

        myUpdateStatement.setInt(2, theAgentProfileID);

        myUpdateStatement.executeUpdate();
    }

    /* (non-Javadoc)
     * @see com.claresco.tinman.sql.SQLWriter#close()
     */
    @Override
    protected void close() throws SQLException {
        super.close();
        SQLUtility.closeStatement(myInsertStatement);
        SQLUtility.closeStatement(myUpdateStatement);
    }
}