diff options
Diffstat (limited to 'khtml/java/kjavaprocess.h')
-rw-r--r-- | khtml/java/kjavaprocess.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/khtml/java/kjavaprocess.h b/khtml/java/kjavaprocess.h new file mode 100644 index 000000000..566e8fda5 --- /dev/null +++ b/khtml/java/kjavaprocess.h @@ -0,0 +1,164 @@ +// -*- c++ -*- + +/* This file is part of the KDE project + * + * Copyright (C) 2000 Richard Moore <rich@kde.org> + * 2000 Wynn Wilkes <wynnw@caldera.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef KJAVAPROCESS_H +#define KJAVAPROCESS_H + +#include <kprocess.h> +#include <qcstring.h> + +/** + * @short A class for invoking a Java VM + * + * This class is a general tool for invoking a Java interpreter. It allows you + * to specify some of the standard options that should be understood by all + * JVMs. + * + * @author Richard J. Moore, rich@kde.org + * @author Wynn Wilkes, wynnw@calderasystems.com + */ + +class KJavaProcessPrivate; +class KJavaProcess : public KProcess //QObject +{ +Q_OBJECT + +public: + /** + * Creates a process object, the process is NOT invoked at this point. + * You should first set the process's parameters, and then call startJava. + */ + KJavaProcess(); + virtual ~KJavaProcess(); + + /** + * Invoke the JVM with the parameters that have been set. The Java process + * will start after this call. + */ + bool startJava(); + + /** + * Stop the JVM (if it's running). + */ + void stopJava(); + + /** + * Returns the status of the java Process- true if it's ok, false if it has died. + * It calls KProcess::isRunning() + */ + bool isRunning(); + + /** + * Used to specify the path to the Java executable to be run. + */ + void setJVMPath( const QString& path ); + + /** + * This will set the classpath the Java process will use. It's used as a the + * -cp command line option. It adds every jar file stored in $KDEDIRS/share/apps/kjava/ + * to the classpath, and then adds the $CLASSPATH environmental variable. This allows + * users to simply drop the JSSE (Java Secure Sockets Extension classes into that directory + * without having to modify the jvm configuration files. + */ + void setClasspath( const QString& classpath ); + + /** + * Set a property on the java command line as -Dname=value, or -Dname if value is QString::null. + * For example, you could call setSystemProperty( "kjas.debug", "" ) to set the kjas.debug property. + */ + void setSystemProperty( const QString& name, const QString& value ); + + /** + * The class to be called when startJava() is called. + */ + void setMainClass( const QString& clazzName ); + + /** + * Extra flags passed to the JVM. + */ + void setExtraArgs( const QString& args ); + + /** + * Arguments passed to the main class. They will be very last in the java + * command line, after the main class. + */ + void setClassArgs( const QString& classArgs ); + + /** + * Sends a command to the KJAS Applet Server by building a QByteArray + * out of the data, and then writes it standard out. + */ + void send( char cmd_code, const QStringList& args ); + + /** + * Sends a command to the KJAS Applet Server by building a QByteArray + * out of the data, and then writes it standard out. It adds each QString + * in the arg list, and then adds the data array. + */ + void send( char cmd_code, const QStringList& args, const QByteArray& data ); + + /** + * Writes all pending data to JVM + **/ + void flushBuffers(); + +protected slots: + /** + * This slot is called whenever something is written to stdin of the process. + * It's called again to make sure we keep emptying out the buffer that contains + * the messages we need send. + */ + void slotWroteData(); + + /** + * This slot is called when the Java Process writes to standard out. We then + * process the data from the file descriptor that is passed to us and send the + * command to the AppletServer + */ + void slotReceivedData( int, int& ); + /** + * This slot is called when the Java Process exited. + */ + void slotExited( KProcess *process ); + +protected: + virtual bool invokeJVM(); + virtual void killJVM(); + + QByteArray* addArgs( char cmd_code, const QStringList& args ); + void popBuffer(); + void sendBuffer( QByteArray* buff ); + void storeSize( QByteArray* buff ); + + KProcess* javaProcess; + +signals: + void received( const QByteArray& ); + void exited( int status ); + +private: + KJavaProcessPrivate *d; + +}; + +#endif // KJAVAPROCESS_H |