/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2011 Neil C Smith.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3 only, as
* published by the Free Software Foundation.
*
* This code 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
* version 3 for more details.
*
* You should have received a copy of the GNU General Public License version 3
* along with this work; if not, see http://www.gnu.org/licenses/
*
*
* Please visit http://neilcsmith.net if you need additional information or
* have any questions.
*/
package net.neilcsmith.praxis.live.project;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashSet;
import java.util.Set;
import javax.swing.SwingUtilities;
import net.neilcsmith.praxis.core.CallArguments;
import net.neilcsmith.praxis.live.core.api.Callback;
import net.neilcsmith.praxis.live.project.api.ExecutionLevel;
import net.neilcsmith.praxis.live.project.api.FileHandler;
import net.neilcsmith.praxis.live.project.api.PraxisProject;
import org.openide.filesystems.FileObject;
import org.openide.util.RequestProcessor;
/**
*
* @author Neil C Smith (http://neilcsmith.net)
*/
class DefaultFileHandler extends FileHandler {
private static BuildRegistry REGISTRY = new BuildRegistry();
// private static RequestProcessor RP = new RequestProcessor();
private ExecutionLevel level;
private PraxisProject project;
private FileObject file;
DefaultFileHandler(PraxisProject project, ExecutionLevel level, FileObject file) {
this.project = project;
this.file = file;
this.level = level;
}
@Override
public void process(Callback callback) throws Exception {
if (level == ExecutionLevel.BUILD) {
if (!REGISTRY.addIfAbsent(file)) {
}
}
String script = file.asText();
script = "set _PWD " + project.getProjectDirectory().getURL().toURI() + "\n" + script;
ProjectHelper.getDefault().executeScript(script, callback);
}
private static class BuildRegistry implements PropertyChangeListener {
private Set<FileObject> files;
private BuildRegistry() {
files = new HashSet<FileObject>();
ProjectHelper.getDefault().addPropertyChangeListener(this);
}
private boolean addIfAbsent(FileObject file) {
return files.add(file);
}
@Override
public void propertyChange(PropertyChangeEvent pce) {
if (ProjectHelper.PROP_HUB_CONNECTED.equals(pce.getPropertyName())) {
files.clear();
}
}
}
}