package com.digiarea.closurefx.build;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ResourceBundle;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.control.ProgressBar;
import com.digiarea.closure.core.IPathResolver;
import com.digiarea.closure.model.Closure;
import com.digiarea.closure.model.bind.ClosureModelManager;
import com.digiarea.closurefx.IConstants;
import com.digiarea.closurefx.build.compiler.BuildpathManager;
import com.digiarea.closurefx.build.compiler.GSSBuildpathContainerResolver;
import com.digiarea.closurefx.build.compiler.GSSCompiler;
import com.digiarea.closurefx.build.compiler.GSSErrorManager;
import com.digiarea.closurefx.build.console.ConsoleManager;
import com.digiarea.closurefx.build.validation.BasicValidator;
import com.digiarea.closurefx.build.validation.IStatus.StatusType;
import com.digiarea.closurefx.build.validation.Status;
public class GSSService extends Service<Closure> {
private ProgressBar progressBar;
private Closure closure;
private BuildpathManager buildpathManager;
private ConsoleManager consoleManager;
private ResourceBundle bundle;
private IPathResolver pathResolver;
public GSSService(ProgressBar progressBar, Closure closure,
BuildpathManager buildpathManager, ConsoleManager consoleManager,
IPathResolver pathResolver) {
this.progressBar = progressBar;
this.closure = closure;
this.buildpathManager = buildpathManager;
this.consoleManager = consoleManager;
this.bundle = consoleManager.getResourceBundle();
this.pathResolver = pathResolver;
}
public void setClosure(Closure closure) {
this.closure = closure;
}
public void setProgressBar(ProgressBar progressBar) {
this.progressBar = progressBar;
}
public Closure getClosure() {
return closure;
}
@Override
protected Task<Closure> createTask() {
Task<Closure> task = new Task<Closure>() {
protected Closure call() throws IOException, MalformedURLException {
consoleManager.reportMessage(new Status(StatusType.INFO, bundle
.getString(IConstants.Console_Start), null));
if (isCancelled()) {
return null;
}
if (ClosureModelManager.canBuild(closure.getClosureGss())) {
try {
BasicValidator validator = new BasicValidator(bundle,
pathResolver);
closure.getClosureGss().accept(validator, null);
if (!validator.isValid()) {
consoleManager
.reportMessage(new Status(
StatusType.ERROR,
bundle.getString(IConstants.GSSConsole_Invalid),
null));
} else {
GSSBuildpathContainerResolver resolver = new GSSBuildpathContainerResolver(
closure.getClosureGss().getBuildpath(),
pathResolver);
resolver.resolve();
GSSCompiler
.compile(
closure.getClosureGss(),
buildpathManager.getGSSOptions(
closure, pathResolver),
new GSSErrorManager(consoleManager),
resolver.getSources(), resolver
.getExterns(), bundle,
pathResolver);
}
} catch (Exception e1) {
e1.printStackTrace();
}
} else {
consoleManager.reportMessage(new Status(StatusType.WARNING,
bundle.getString(IConstants.Console_NoResources),
null));
}
updateProgress(1, 1);
consoleManager.reportMessage(new Status(StatusType.INFO,
"> Building complited", null));
return getClosure();
}
};
progressBar.progressProperty().bind(task.progressProperty());
return task;
}
public static GSSService create(ProgressBar progressBar, Closure closure,
BuildpathManager buildpathManager, ConsoleManager consoleManager,
IPathResolver pathResolver) {
return new GSSService(progressBar, closure, buildpathManager,
consoleManager, pathResolver);
}
}