/*
 * Copyright 2009- ECMWF.
 *
 * This software is licensed under the terms of the Apache Licence version 2.0
 * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
 * In applying this licence, ECMWF does not waive the privileges and immunities
 * granted to it by virtue of its status as an intergovernmental organisation
 * nor does it submit to any jurisdiction.
 */

#ifndef ecflow_viewer_ShellCommand_HPP
#define ecflow_viewer_ShellCommand_HPP

#include <sstream>
#include <string>
#include <vector>

#include <QDateTime>
#include <QObject>
#include <QProcess>

#include "CommandOutput.hpp"

class ShellCommand : public QObject {
    Q_OBJECT
public:
    static ShellCommand* run(const std::string&, const std::string&, bool addToDialog = true);

    QString command() const;
    QString commandDef() const { return commandDef_; }
    QDateTime startTime() const { return startTime_; }

protected Q_SLOTS:
    void procFinished(int exitCode, QProcess::ExitStatus exitStatus);
    void slotStdOutput();
    void slotStdError();

protected:
    ShellCommand(const std::string&, const std::string&, bool);

    QProcess* proc_;
    QString command_;
    QString commandDef_;
    QDateTime startTime_;
    CommandOutput_ptr item_;
    bool addToDialog_;
    static bool envChecked_;
    static bool envHasToBeSet_;
};

#endif /* ecflow_viewer_ShellCommand_HPP */
