/*
* Project Info: http://jcae.sourceforge.net
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 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 Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser 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.
*
* (C) Copyright 2005, by EADS CRC
*/
package org.jcae.netbeans.mesh.bora;
import org.jcae.netbeans.mesh.bora.BoraNode;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import org.jcae.mesh.JCAEFormatter;
import org.jcae.mesh.bora.ds.BModel;
import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory;
import org.openide.LifecycleManager;
import org.openide.execution.ExecutionEngine;
import org.openide.execution.ExecutorTask;
import org.openide.nodes.Node;
import org.openide.util.Cancellable;
import org.openide.util.HelpCtx;
import org.openide.util.Task;
import org.openide.util.TaskListener;
import org.openide.util.actions.CookieAction;
import org.openide.windows.IOProvider;
import org.openide.windows.InputOutput;
public class ComputeMeshAction extends CookieAction
{
static private class MeshRun implements Runnable
{
private BModel model;
private BoraNode node;
public MeshRun(BModel model, BoraNode node)
{
this.model = model;
this.node=node;
}
public void run()
{
final Formatter jcaeFormatter = new JCAEFormatter();
//getting and redirecting logs from Bora mesher
Logger root = Logger.getLogger("org.jcae.mesh.bora");
root.setLevel(Level.INFO);
Handler redirector = new Handler() {
@Override
public void publish(LogRecord record) {
System.out.print(jcaeFormatter.format(record));
}
@Override
public void close() throws SecurityException {
}
@Override
public void flush() {
}
};
root.addHandler(redirector);
for (Handler h : root.getHandlers()) {
h.setFormatter(jcaeFormatter);
}
//computing the bora model
model.cleanWorkDirectory();
model.compute();
node.refreshGroups();
root.removeHandler(redirector);
}
}
protected int mode()
{
return CookieAction.MODE_ALL;
}
protected Class[] cookieClasses()
{
return new Class[]{BoraNode.class};
}
private static transient int ioProviderCounter=1;
protected void performAction(Node[] arg0)
{
LifecycleManager.getDefault().saveAll();
InputOutput io=IOProvider.getDefault().getIO("jCAE Mesher "+ioProviderCounter, true);
ioProviderCounter++;
for (int i = 0; i < arg0.length; i++) {
final BoraNode m = arg0[i].getCookie(BoraNode.class);
if (m.getBModel() != null) {
final ExecutorTask task = ExecutionEngine.getDefault().execute("Bora Mesher",new MeshRun(m.getBModel(), m), io);
final ProgressHandle ph = ProgressHandleFactory.createHandle("Bora Mesher", new Cancellable() {
public boolean cancel() {
task.stop();
return true;
}
});
ph.start();
task.addTaskListener(new TaskListener() {
public void taskFinished(Task arg0) {
ph.finish();
}
});
}
}
}
@Override
protected boolean asynchronous()
{
return true;
}
public String getName()
{
return "Compute";
}
public HelpCtx getHelpCtx()
{
return null;
}
}