/*
* Copyright (C) 2004 Anthony Smith
*
* 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; either version 2
* of the License, or (at your option) 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
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* ----------------------------------------------------------------------------
* TITLE $Id$
* ---------------------------------------------------------------------------
*
* --------------------------------------------------------------------------*/
package opendbcopy.controller;
import opendbcopy.swing.SwingWorker;
import java.lang.reflect.Constructor;
import java.util.Observable;
import java.util.Observer;
/**
* class description
*
* @author Anthony Smith
* @version $Revision$
*/
public class TaskLauncher extends Observable {
private MainController controller;
private int lengthOfTask;
private int currentTask;
private String statMessage;
private SwingWorker worker = null;
private Integer frameConsoleWidth;
private Integer frameConsoleHeight;
private String pathFilenameConsoleOut;
private String pathFilenameLogo;
/**
* Creates a new TaskLauncher object.
*
* @param controller DOCUMENT ME!
* @param lengthOfTask DOCUMENT ME!
* @param frameConsoleWidth DOCUMENT ME!
* @param frameConsoleHeight DOCUMENT ME!
* @param pathFilenameConsoleOut DOCUMENT ME!
* @param pathFilenameLogo DOCUMENT ME!
*/
public TaskLauncher(MainController controller,
int lengthOfTask,
int frameConsoleWidth,
int frameConsoleHeight,
String pathFilenameConsoleOut,
String pathFilenameLogo) {
this.controller = controller;
this.lengthOfTask = lengthOfTask;
this.frameConsoleWidth = new Integer(frameConsoleWidth);
this.frameConsoleHeight = new Integer(frameConsoleHeight);
this.pathFilenameConsoleOut = pathFilenameConsoleOut;
this.pathFilenameLogo = pathFilenameLogo;
currentTask = 0;
}
/**
* DOCUMENT ME!
*/
private void broadcast() {
setChanged();
notifyObservers();
}
/**
* Decide which Execute class to use
*
* @throws Exception DOCUMENT ME!
*/
public final void go() throws Exception {
worker = new SwingWorker() {
public Object construct() {
try {
Class dynClass = Class.forName("opendbcopy.gui.FrameConsole");
Constructor[] constructors = dynClass.getConstructors();
Object[] params = new Object[6];
params[0] = TaskLauncher.this;
params[1] = controller;
params[2] = frameConsoleWidth;
params[3] = frameConsoleHeight;
params[4] = pathFilenameConsoleOut;
params[5] = pathFilenameLogo;
// works as long there is only one constructor
return constructors[0].newInstance(params);
} catch (Exception e) {
System.err.println(e.fillInStackTrace());
return null;
}
}
};
try {
worker.start();
} catch (Exception e) {
throw e;
}
}
/**
* DOCUMENT ME!
*
* @param observer DOCUMENT ME!
*
* @throws IllegalArgumentException DOCUMENT ME!
*/
public final void registerObserver(Observer observer) {
if (observer == null) {
throw new IllegalArgumentException("Missing observer");
}
this.addObserver(observer);
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final int getLengthOfTask() {
return lengthOfTask;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final int getCurrentTask() {
return currentTask;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getMessage() {
return statMessage;
}
/**
* Sets the message and increments current task
*
* @param message DOCUMENT ME!
*/
public final void setMessage(String message) {
this.statMessage = message;
this.currentTask++;
broadcast();
}
}