Package org.apache.oodt.cas.workflow.instrepo

Source Code of org.apache.oodt.cas.workflow.instrepo.MemoryWorkflowInstanceRepository

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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 org.apache.oodt.cas.workflow.instrepo;

//OODT imports
import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
import org.apache.oodt.cas.workflow.structs.exceptions.InstanceRepositoryException;
import org.apache.oodt.commons.util.DateConvert;

//JDK imports
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Date;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* @author mattmann
* @version $Revsion$
*
* <p>
* A simple {@link WorkflowInstanceRepository} that does not require the use of
* a database to track the status of the Workflow executions it manages.
* </p>
*/
public class MemoryWorkflowInstanceRepository extends
        AbstractPaginatibleInstanceRepository {

    /* our workflow instance map: maps workfllowInstId to WorkflowInstance */
    private HashMap workflowInstMap = null;

    /* our log stream */
    private static final Logger LOG = Logger
            .getLogger(MemoryWorkflowInstanceRepository.class.getName());

    /**
     * <p>
     * Default Constructor
     * </p>
     */
    public MemoryWorkflowInstanceRepository(int pageSize) {
        workflowInstMap = new HashMap();
        this.pageSize = pageSize;
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.WorkflowInstanceRepository#addWorkflowInstance(org.apache.oodt.cas.workflow.structs.WorkflowInstance)
     */
    public synchronized void addWorkflowInstance(WorkflowInstance wInst)
            throws InstanceRepositoryException {
        String instId = "urn:" + DateConvert.isoFormat(new Date());
        wInst.setId(instId);
        workflowInstMap.put(instId, wInst);
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.WorkflowInstanceRepository#removeWorkflowInstance(org.apache.oodt.cas.workflow.structs.WorkflowInstance)
     */
    public synchronized void removeWorkflowInstance(WorkflowInstance wInst)
            throws InstanceRepositoryException {
        workflowInstMap.remove(wInst.getId());
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.WorkflowInstanceRepository#updateWorkflowInstance(org.apache.oodt.cas.workflow.structs.WorkflowInstance)
     */
    public synchronized void updateWorkflowInstance(WorkflowInstance wInst)
            throws InstanceRepositoryException {
        WorkflowInstance inst = (WorkflowInstance) workflowInstMap.get(wInst
                .getId());

        if (inst == null) {
            LOG
                    .log(
                            Level.WARNING,
                            "Attempt to update workflow instance id: "
                                    + wInst.getId()
                                    + " workflow instance is not being tracked by this engine!");
            return;
        }

        workflowInstMap.put(wInst.getId(), wInst);
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.WorkflowInstanceRepository#getWorkflowInstanceById(java.lang.String)
     */
    public WorkflowInstance getWorkflowInstanceById(String workflowInstId)
            throws InstanceRepositoryException {
        return (WorkflowInstance) workflowInstMap.get(workflowInstId);
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.WorkflowInstanceRepository#getWorkflowInstances()
     */
    public List getWorkflowInstances() throws InstanceRepositoryException {
        return Arrays.asList(workflowInstMap.values().toArray());
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.WorkflowInstanceRepository#getWorkflowInstancesByStatus(java.lang.String)
     */
    public List getWorkflowInstancesByStatus(String status)
            throws InstanceRepositoryException {
        List instances = new Vector();

        for (Iterator i = workflowInstMap.keySet().iterator(); i.hasNext();) {
            String workflowInstId = (String) i.next();
            WorkflowInstance inst = (WorkflowInstance) workflowInstMap
                    .get(workflowInstId);
            if (inst.getStatus().equals(status)) {
                instances.add(inst);
            }
        }

        return instances;
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.AbstractPaginatibleInstanceRepository#paginateWorkflows(int,
     *      java.lang.String)
     */
    protected List paginateWorkflows(int pageNum, String status)
            throws InstanceRepositoryException {
        // first sort insts by startDateTime
        List allInsts = Arrays.asList(this.workflowInstMap.keySet().toArray());
        Collections.sort(allInsts, new Comparator() {

            public int compare(Object o1, Object o2) {
                WorkflowInstance inst1 = (WorkflowInstance) o1;
                WorkflowInstance inst2 = (WorkflowInstance) o2;

                return inst1.getStartDateTimeIsoStr().compareTo(
                        inst2.getStartDateTimeIsoStr());
            }

        });

        int startNum = (pageNum - 1) * pageSize;
        if (startNum > allInsts.size()) {
            startNum = 0;
        }

        List instIds = new Vector(pageSize);

        for (int i = startNum; i < Math.min(allInsts.size(),
                (startNum + pageSize)); i++) {
            WorkflowInstance wInst = (WorkflowInstance)allInsts.get(i);
            instIds.add(wInst.getId());
        }

        return instIds;
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.WorkflowInstanceRepository#getNumWorkflowInstances()
     */
    public int getNumWorkflowInstances() throws InstanceRepositoryException {
        return this.workflowInstMap.keySet().size();
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.oodt.cas.workflow.instrepo.WorkflowInstanceRepository#getNumWorkflowInstancesByStatus(java.lang.String)
     */
    public int getNumWorkflowInstancesByStatus(String status)
            throws InstanceRepositoryException {
        int cnt = 0;

        if (this.workflowInstMap != null
                && this.workflowInstMap.keySet() != null
                && this.workflowInstMap.keySet().size() > 0) {
            for (Iterator i = this.workflowInstMap.keySet().iterator(); i
                    .hasNext();) {
                String wInstId = (String) i.next();
                WorkflowInstance inst = (WorkflowInstance) this.workflowInstMap
                        .get(wInstId);
                if (inst.getStatus().equals(status)) {
                    cnt++;
                }
            }
        }

        return cnt;
    }

}
TOP

Related Classes of org.apache.oodt.cas.workflow.instrepo.MemoryWorkflowInstanceRepository

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.