Package com.esri.gpt.catalog.harvest.jobs

Source Code of com.esri.gpt.catalog.harvest.jobs.HjCreateRequest

/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.catalog.harvest.jobs;

import com.esri.gpt.catalog.harvest.jobs.HjRecord.JobStatus;
import com.esri.gpt.catalog.harvest.jobs.HjRecord.JobType;
import com.esri.gpt.catalog.harvest.repository.HrRecord;
import com.esri.gpt.control.webharvest.common.CommonCriteria;
import com.esri.gpt.framework.context.RequestContext;
import com.esri.gpt.framework.sql.ManagedConnection;
import com.esri.gpt.framework.util.UuidUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;

/**
* Create job request.
* This request will insert new harvesting job. A job will not be created if any
* other job already exist for the specific repository or repository doesn't
* exist.
*/
public class HjCreateRequest extends HjRequest {

// class variables =============================================================
// instance variables ==========================================================
/** parent harvest site */
private HrRecord _parent;
/** job type. Default: {@link HjRecord.JobType#Now} */
private JobType _jobType = JobType.Now;
/** job status. Default: {@link HjRecord.JobStatus#Submited} */
private JobStatus _jobStatus = JobStatus.Submited;
/** criteria */
private CommonCriteria criteria = new CommonCriteria();

// constructors ================================================================
/**
* Creates instance of the request.
* @param requestContext request context
* @param parent parent harvest site
* @param running <code>true</code> to make job marked as running
*/
public HjCreateRequest(RequestContext requestContext, HrRecord parent, CommonCriteria criteria, boolean running) {
  super(requestContext, new HjCriteria(), new HjResult());
  setParent(parent);
  setJobType(criteria == null || criteria.getFromDate() == null ? JobType.Full : JobType.Now);
  setJobStatus(running? JobStatus.Running: JobStatus.Submited);
  this.criteria = criteria;
}

// properties ==================================================================
/**
* Gets parent site.
* @return parent site
*/
private HrRecord getParent() {
  return _parent;
}

/**
* Sets parent site.
* @param parent parent site
*/
private void setParent(HrRecord parent) {
  _parent = parent != null ? parent : new HrRecord();
}

/**
* Gets job type.
* @return job type
*/
private HjRecord.JobType getJobType() {
  return _jobType;
}

/**
* Sets job type.
* @param jobType job type
*/
private void setJobType(HjRecord.JobType jobType) {
  _jobType = jobType;
}

/**
* Gets job status.
* @return job status.
*/
public JobStatus getJobStatus() {
  return _jobStatus;
}

/**
* Sets job status.
* @param jobStatus job status
*/
public final void setJobStatus(JobStatus jobStatus) {
  this._jobStatus = jobStatus;
}

// methods =====================================================================
/**
* Inserts a new jobs into the database.
* If there is any job for the particular repository, no record will be
* inserted.
* @return <code>true</code> if any record has been inserted
*/
public boolean execute() {
  if (recover())
    return true;
  // nothing has been recovered; create new record
  return insert();
}

/**
* Recovers possible canceled task.
* @return <code>true</code> if any record has been recovered
*/
private boolean recover() {
  // intitalize
  PreparedStatement st = null;

  Date currentDate = new Date();

  try {

    StringBuilder sbStmt = new StringBuilder();

    // insert sql
    sbStmt.append("UPDATE ").append(getHarvestingJobsPendingTableName());
    sbStmt.append(" SET INPUT_DATE=?,HARVEST_DATE=?,JOB_STATUS=?,");
    sbStmt.append(" JOB_TYPE=?,CRITERIA=?");
    if (getIsDbCaseSensitive(this.getRequestContext())) {
      sbStmt.append(" WHERE HARVEST_ID=? AND UPPER(JOB_STATUS)='").append(JobStatus.Canceled.name().toUpperCase()).append("'");
    } else {
      sbStmt.append(" WHERE HARVEST_ID=? AND JOB_STATUS='").append(JobStatus.Canceled.name().toUpperCase()).append("'");
    }


    // establish the connection
    ManagedConnection mc = returnConnection();
    Connection con = mc.getJdbcConnection();

    // prepare statement
    st = con.prepareStatement(sbStmt.toString());

    int n = 1;
    st.setTimestamp(n++, new java.sql.Timestamp(currentDate.getTime()));
    st.setTimestamp(n++, new java.sql.Timestamp(currentDate.getTime()));
    st.setString(n++, HjRecord.JobStatus.Submited.name().toLowerCase());
    st.setString(n++, getJobType().name().toLowerCase());
    st.setString(n++, criteria.toXmlString());
    st.setString(n++, getParent().getUuid());

    logExpression(sbStmt.toString());

    // execute
    int nRowCount = st.executeUpdate();
    getActionResult().setNumberOfRecordsModified(nRowCount);

    return nRowCount > 0;

  } catch (SQLException ex) {

    return false;

  } finally {
    closeStatement(st);
  }
}

/**
* Inserts a new record.
* @return <code>true</code> if new record has been inserted
*/
private boolean insert() {
  // intitalize
  PreparedStatement st = null;

  Date currentDate = new Date();

  try {

    StringBuilder sbStmt = new StringBuilder();

    // insert sql
    sbStmt.append("INSERT INTO ").append(getHarvestingJobsPendingTableName());
    sbStmt.append(" (UUID,INPUT_DATE,HARVEST_DATE,JOB_STATUS,");
    sbStmt.append(" JOB_TYPE,CRITERIA,HARVEST_ID,SERVICE_ID) ");
    sbStmt.append(" VALUES (?,?,?,?,?,?,?,?)");


    // establish the connection
    ManagedConnection mc = returnConnection();
    Connection con = mc.getJdbcConnection();

    // prepare statement
    st = con.prepareStatement(sbStmt.toString());

    // init statement
    String sUuid = UuidUtil.makeUuid(true);

    int n = 1;
    st.setString(n++, sUuid);
    st.setTimestamp(n++, new java.sql.Timestamp(currentDate.getTime()));
    st.setTimestamp(n++, new java.sql.Timestamp(currentDate.getTime()));
    st.setString(n++, getJobStatus().name().toLowerCase());
    st.setString(n++, getJobType().name().toLowerCase());
    st.setString(n++, criteria.toXmlString());
    st.setString(n++, getParent().getUuid());
    st.setString(n++, getActionCriteria().getHostAddress());

    logExpression(sbStmt.toString());

    // execute
    int nRowCount = st.executeUpdate();
    getActionResult().setNumberOfRecordsModified(nRowCount);

    return nRowCount > 0;

  } catch (SQLException ex) {

    return false;

  } finally {
    closeStatement(st);
  }
}
}
TOP

Related Classes of com.esri.gpt.catalog.harvest.jobs.HjCreateRequest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.