Package com.esri.gpt.control.webharvest.engine

Source Code of com.esri.gpt.control.webharvest.engine.TaskQueue

/* 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.control.webharvest.engine;

import com.esri.gpt.catalog.harvest.jobs.HjCancelRequest;
import com.esri.gpt.catalog.harvest.jobs.HjCompleteRequest;
import com.esri.gpt.catalog.harvest.jobs.HjCreateRequest;
import com.esri.gpt.catalog.harvest.jobs.HjGetNextRequest;
import com.esri.gpt.catalog.harvest.jobs.HjLoadAllRequest;
import com.esri.gpt.catalog.harvest.jobs.HjRecord;
import com.esri.gpt.catalog.harvest.jobs.HjRecords;
import com.esri.gpt.catalog.harvest.repository.HrRecord;
import com.esri.gpt.control.webharvest.common.CommonCriteria;
import com.esri.gpt.framework.context.RequestContext;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* Queue of tasks. Allows to add new taskDescriptor to the end of the queue and pick
* a next taskDescriptor from the begining of the queue. Only one taskDescriptor of associated with
* given repository can exist in the queue.
*/
class TaskQueue {

/** logger */
private static final Logger LOGGER = Logger.getLogger(TaskQueue.class.getCanonicalName());

/**
* Adds new harvesting task to the queue.
* @param context request context
* @param resource resource to harvest
* @param criteria criteria
* @return <code>true</code> if task has been sumbited
*/
public synchronized boolean add(RequestContext context, HrRecord resource, CommonCriteria criteria) {
  HjCreateRequest request = new HjCreateRequest(context, resource, criteria, false);
  boolean result = request.execute();
  notify();
  return result;
}

/**
* Registers harvesting task. No notification will be sent.
* @param context request context
* @param resource resource to harvest
* @param criteria criteria
* @return <code>true</code> if task has been registered
*/
public synchronized boolean register(RequestContext context, HrRecord resource, CommonCriteria criteria) {
  HjCreateRequest request = new HjCreateRequest(context, resource, criteria, true);
  return request.execute();
}

/**
* Notifies change.
*/
public synchronized void notifyChange() {
  notify();
}

/**
* Cancels harvesting of a specific resource.
* @param context request context
* @param uuid resource uuid
* @return <code>true</code> if matching taskDescriptor has been found and has been withdrawn
*/
public boolean cancel(RequestContext context, String uuid) {
  try {
    HjCancelRequest request = new HjCancelRequest(context, uuid);
    return request.execute();
  } catch (SQLException ex) {
    LOGGER.log(Level.WARNING, "[SYNCHRONIZER] Error canceling task", ex);
    return false;
  }
}

/**
* Completes the task.
* @param context request context
* @param uuid resource UUID
* @return <code>true</code> if task has been found and completed
*/
public boolean complete(RequestContext context, String uuid) {
  try {
    HjCompleteRequest request = new HjCompleteRequest(context, uuid);
    return request.execute();
  } catch (SQLException ex) {
    LOGGER.log(Level.WARNING, "[SYNCHRONIZER] Error completing task", ex);
    return false;
  }
}

/**
* Gets next taskDescriptor in the queue.
* @param context request context
* @return task descriptor or <code>null</code> if no more tasks
* @throws SQLException if accessing database fails
*/
public Task next(RequestContext context) throws SQLException {
  HjGetNextRequest request = new HjGetNextRequest(context);
  request.execute();
  HjRecords records = request.getQueryResult().getRecords();
  if (records.size() != 1) {
    return null;
  }
  return new Task(records.get(0));
}

/**
* Gets all tasks.
* @param context request context
* @return all tasks
*/
public Task[] all(RequestContext context) {
  try {
    HjLoadAllRequest request = new HjLoadAllRequest(context);
    request.execute();
    ArrayList<Task> tasks = new ArrayList<Task>();
    for (HjRecord record : request.getQueryResult().getRecords()) {
      tasks.add(new Task(record));
    }
    return tasks.toArray(new Task[tasks.size()]);
  } catch (SQLException ex) {
    LOGGER.log(Level.WARNING, "[SYNCHRONIZER] Error getting all tasks", ex);
    return new Task[]{};
  }
}
}
TOP

Related Classes of com.esri.gpt.control.webharvest.engine.TaskQueue

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.