// --- BEGIN COPYRIGHT BLOCK --- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; version 2 of the License. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. // // (C) 2007 Red Hat, Inc. // All rights reserved. // --- END COPYRIGHT BLOCK --- package com.netscape.certsrv.request; import java.math.BigInteger; import com.netscape.certsrv.base.EBaseException; import com.netscape.certsrv.dbs.repository.IRepository; /** * The IRequestQueue interface defines the operations on a collection of * requests within the certificate server. There are may several collections, * such as KRA, RA and CA requests. Each of these request collection has a * defined set of policies, a notification service (for request completion) and * a service routine. The request queue provides an interface for creating and * viewing requests, as well as performing operations on them. *

* * @version $Revision$ $Date$ */ public interface IRequestQueue { /** * Creates a new request object. A request id is assigned to it - see * IRequest.getRequestId, and the status is set to RequestStatus.BEGIN *

* The request is LOCKED. The caller MUST release the request object by * calling releaseRequest(). *

* TODO: provide other required values (such as type and sourceId) * * @param requestType request type * @return new request * @exception EBaseException failed to create new request */ public IRequest newRequest(String requestType) throws EBaseException; /** * Clones a request object. A new request id is assigned and all attributes * of the request is copied to cloned request, except for the sourceID of * the original request (remote authority's request Id). *

* The cloned request that is returned is LOCKED. The caller MUST release * the request object by calling releaseRequest(). * * @param r request to be cloned * @return cloned request * @exception EBaseException failed to clone request */ public IRequest cloneRequest(IRequest r) throws EBaseException; /** * Gets the Request corresponding to id. Returns null if the id does not * correspond to a valid request id. *

* Errors may be generated for other conditions. * * @param id request id * @return found request * @exception EBaseException failed to access request queue */ public IRequest findRequest(RequestId id) throws EBaseException; /** * Begins processing for this request. This call is valid only on requests * with status BEGIN An error is generated for other cases. * * @param req request to be processed * @exception EBaseException failed to process request */ public void processRequest(IRequest req) throws EBaseException; /** * Sets request scheduler. * * @param scheduler request scheduler */ public void setRequestScheduler(IRequestScheduler scheduler); /** * Gets request scheduler. * * @return request scheduler */ public IRequestScheduler getRequestScheduler(); /** * Puts a new request into the PENDING state. This call is only valid for * requests with status BEGIN. An error is generated for other cases. *

* This call might be used by agent servlets that want to copy a previous * request, and resubmit it. By putting it into PENDING state, the normal * agent screens can be used for further processing. * * @param req the request to mark PENDING * @exception EBaseException failed to mark request as pending */ public void markRequestPending(IRequest req) throws EBaseException; /** * Clones a request object and mark it pending. A new request id is assigned * and all attributes of the request is copied to cloned request, except for * the sourceID of the original request (remote authority's request Id). *

* The cloned request that is returned is LOCKED. The caller MUST release * the request object by calling releaseRequest(). * * @param r request to be cloned * @return cloned request mark PENDING * @exception EBaseException failed to clone or mark request */ public IRequest cloneAndMarkPending(IRequest r) throws EBaseException; /** * Approves a request. The request must be locked. *

* This call will fail if: the request is not in PENDING state the policy * modules do not accept the request *

* If the policy modules reject the request, then the request will remain in * the PENDING state. Messages from the policy module can be display to the * agent to indicate the source of the problem. *

* The request processing code adds an AgentApproval to this request that * contains the authentication id of the agent. This data is retrieved from * the Session object (qv). * * @param request the request that is being approved * @exception EBaseException failed to approve request */ public void approveRequest(IRequest request) throws EBaseException; /** * Rejects a request. The request must be locked. *

* This call will fail if: the request is not in PENDING state *

* The agent servlet (or other application) may wish to store AgentMessage * values to indicate the reason for the action * * @param request the request that is being rejected * @exception EBaseException failed to reject request */ public void rejectRequest(IRequest request) throws EBaseException; /** * Cancels a request. The request must be locked. *

* This call will fail if: the request is not in PENDING state *

* The agent servlet (or other application) may wish to store AgentMessage * values to indicate the reason for the action * * @param request the request that is being canceled * @exception EBaseException failed to cancel request */ public void cancelRequest(IRequest request) throws EBaseException; /** * Updates the request in the permanent data store. *

* This call can be made after changing a value like source id or owner, to * force the new value to be written. *

* The request must be locked to make this call. * * @param request the request that is being updated * @exception EBaseException failed to update request */ public void updateRequest(IRequest request) throws EBaseException; /** * Returns an enumerator that lists all RequestIds in the queue. The caller * should use the RequestIds to locate each request by calling * findRequest(). *

* NOTE: This interface will not be useful for large databases. This needs * to be replace by a VLV (paged) search object. * * @return request list */ public IRequestList listRequests(); /** * Returns an enumerator that lists all RequestIds for requests that are in * the given status. For example, all the PENDING requests could be listed * by specifying RequestStatus.PENDING as the status argument *

* NOTE: This interface will not be useful for large databases. This needs * to be replace by a VLV (paged) search object. * * @param status request status * @return request list */ public IRequestList listRequestsByStatus(RequestStatus status); /** * Returns an enumerator that lists all RequestIds for requests that match * the filter. *

* NOTE: This interface will not be useful for large databases. This needs * to be replace by a VLV (paged) search object. * * @param filter search filter * @return request list */ public IRequestList listRequestsByFilter(String filter); /** * Returns an enumerator that lists all RequestIds for requests that match * the filter. *

* NOTE: This interface will not be useful for large databases. This needs * to be replace by a VLV (paged) search object. * * @param filter search filter * @param maxSize max size to return * @return request list */ public IRequestList listRequestsByFilter(String filter, int maxSize); /** * Returns an enumerator that lists all RequestIds for requests that match * the filter. *

* NOTE: This interface will not be useful for large databases. This needs * to be replace by a VLV (paged) search object. * * @param filter search filter * @param maxSize max size to return * @param timeLimit timeout value for the search * @return request list */ public IRequestList listRequestsByFilter(String filter, int maxSize, int timeLimit); /** * Gets requests that are pending on handling by the service *

* * @return list of pending requests */ // public IRequestList listServicePendingRequests(); /** * Locates a request from the SourceId. * * @param id a unique identifier for the record that is based on the source * of the request, and possibly an identify assigned by the * source. * @return The requestid corresponding to this source id. null is returned * if the source id does not exist. */ public RequestId findRequestBySourceId(String id); /** * Locates all requests with a particular SourceId. *

* * @param id an identifier for the record that is based on the source of the * request * @return A list of requests corresponding to this source id. null is * returned if the source id does not exist. */ public IRequestList findRequestsBySourceId(String id); /** * Releases the LOCK on a request obtained from findRequest() or * newRequest() *

* * @param r request */ public void releaseRequest(IRequest r); /** * Marks as serviced after destination authority has serviced request. Used * by connector. * * @param r request */ public void markAsServiced(IRequest r); /** * Resends requests */ public void recover(); /** * Gets a pageable list of IRequest entries in this queue. * * @param pageSize page size * @return request list */ public IRequestVirtualList getPagedRequests(int pageSize); /** * Gets a pageable list of IRequest entries in this queue. * * @param filter search filter * @param pageSize page size * @param sortKey the attributes to sort by * @return request list */ public IRequestVirtualList getPagedRequestsByFilter(String filter, int pageSize, String sortKey); /** * Gets a pageable list of IRequest entries in this queue. * * @param fromId request id to start with * @param filter search filter * @param pageSize page size * @param sortKey the attributes to sort by * @return request list */ public IRequestVirtualList getPagedRequestsByFilter(RequestId fromId, String filter, int pageSize, String sortKey); /** * Gets a pageable list of IRequest entries in this queue. This jumps right * to the end of the list * * @param fromId request id to start with * @param jumpToEnd jump to end of list (set fromId to null) * @param filter search filter * @param pageSize page size * @param sortKey the attributes to sort by * @return request list */ public IRequestVirtualList getPagedRequestsByFilter(RequestId fromId, boolean jumpToEnd, String filter, int pageSize, String sortKey); /** * Retrieves the notifier for pending request. * * @return notifier for pending request */ public INotify getPendingNotify(); public BigInteger getLastRequestIdInRange(BigInteger reqId_low_bound, BigInteger reqId_upper_bound); /** * Resets serial number. */ public void resetSerialNumber(BigInteger serial) throws EBaseException; /** * Removes all objects with this repository. */ public void removeAllObjects() throws EBaseException; /** * Gets request repository. * * @return request repository */ public IRepository getRequestRepository(); public String getPublishingStatus(); public void setPublishingStatus(String status); }