All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.integratedmodelling.engine.modelling.runtime.AbstractBaseTask Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (C) 2007, 2015:
 * 
 * - Ferdinando Villa  - integratedmodelling.org - any
 * other authors listed in @author annotations
 *
 * All rights reserved. This file is part of the k.LAB software suite, meant to enable
 * modular, collaborative, integrated development of interoperable data and model
 * components. For details, see http://integratedmodelling.org.
 * 
 * This program is free software; you can redistribute it and/or modify it under the terms
 * of the Affero General Public License Version 3 or any later version.
 *
 * 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 Affero General Public License for more details.
 * 
 * You should have received a copy of the Affero General Public License along with this
 * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite
 * 330, Boston, MA 02111-1307, USA. The license is also available at:
 * https://www.gnu.org/licenses/agpl.html
 *******************************************************************************/
package org.integratedmodelling.engine.modelling.runtime;

import java.util.Date;

import org.integratedmodelling.api.monitoring.IMonitor;
import org.integratedmodelling.api.monitoring.Messages;
import org.integratedmodelling.api.runtime.ISession;
import org.integratedmodelling.api.runtime.ITask;
import org.integratedmodelling.common.monitoring.Monitor;
import org.integratedmodelling.common.utils.NameGenerator;

/**
 * @author ferdinando.villa
 *
 */
public abstract class AbstractBaseTask extends Thread implements ITask {

    protected volatile ITask.Status status = Status.RUNNING;
    protected String                taskId;
    protected IMonitor              monitor;
    protected String                description;
    protected ISession              session;
    protected long                  startTime;
    protected long                  endTime;

    protected AbstractBaseTask(IMonitor monitor) {
        this.session = monitor.getSession();
        this.taskId = NameGenerator.shortUUID();
        this.monitor = ((Monitor) monitor).get(this);
        this.description = "";
        this.startTime = new Date().getTime();
    }

    @Override
    public final String getTaskId() {
        return this.taskId;
    }

    @Override
    public final String getDescription() {
        return this.description;
    }

    @Override
    public final void interrupt() {
        // _monitor.stop(this);
        synchronized (this.status) {
            this.status = Status.INTERRUPTED;
        }
        this.endTime = new Date().getTime();
        this.monitor.send(Messages.TASK_INTERRUPTED);

    }

    protected Object finish(Object ret) {
        for (;;) {
            synchronized (this.status) {
                if (this.status == Status.FINISHED) {
                    break;
                }
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                }
            }
        }
        return ret;
    }

    @Override
    public final Status getStatus() {
        synchronized (this.status) {
            return this.status;
        }
    }

    @Override
    public final long getStartTime() {
        return this.startTime;
    }

    @Override
    public final long getEndTime() {
        return this.endTime;
    }

    /**
     * Set the status. Only the engine should do this.
     * 
     * @param status
     */
    public void setStatus(Status status) {
        this.status = status;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy