package com.digiarea.closure.model.controller.dialogs;
import java.io.File;
import java.io.FileOutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleButton;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import com.digiarea.closure.core.Path;
import com.digiarea.closure.model.export.ClosureCLExporter;
import com.digiarea.closurefx.Document;
import com.digiarea.closurefx.IConstants;
import com.digiarea.closurefx.build.validation.IStatus;
import com.digiarea.closurefx.build.validation.Status;
import com.digiarea.closurefx.build.validation.IStatus.StatusType;
import com.digiarea.closurefx.cli.console.BasicConsole;
import com.google.common.io.Files;
/**
* FXML Controller class
*
* @author daginno
*/
public class ExportCLIDialogController implements Initializable {
private ResourceBundle bundle;
private Document document;
private Stage stage;
@FXML
private TextField controlFile;
@FXML
private ListView<Status> controlDetails;
@FXML
private ToggleButton controlWhite;
@FXML
private ToggleButton controlSimple;
@FXML
private ToggleButton controlAdvanced;
@FXML
private ToggleButton controlDefault;
@FXML
private ToggleButton controlQuite;
@FXML
private ToggleButton controlVerbose;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
}
private String getCompilationLevel() {
if (controlWhite.isSelected()) {
return "WHITESPACE_ONLY";
} else if (controlSimple.isSelected()) {
return "SIMPLE_OPTIMIZATIONS";
} else if (controlAdvanced.isSelected()) {
return "ADVANCED_OPTIMIZATIONS";
}
return null;
}
private String getWarningLevel() {
if (controlDefault.isSelected()) {
return "DEFAULT";
} else if (controlQuite.isSelected()) {
return "QUIET";
} else if (controlVerbose.isSelected()) {
return "VERBOSE";
}
return null;
}
@FXML
private void handleStartButton(ActionEvent event) {
if (controlFile.getText() != null && !controlFile.getText().isEmpty()) {
File file = new File(controlFile.getText());
try {
Files.createParentDirs(file);
if (!file.exists()) {
file.createNewFile();
}
BasicConsole console = new BasicConsole(
new HashMap<IStatus.StatusType, List<IStatus>>(), null);
ClosureCLExporter exporter = new ClosureCLExporter(
document.getPathResolver(), new FileOutputStream(file),
console, bundle);
exporter.setWarningLevel(getWarningLevel());
exporter.setCompilationLevel(getCompilationLevel());
document.getClosure().accept(exporter, null);
List<IStatus> statuses = new ArrayList<IStatus>();
for (List<IStatus> iStatus : console.getErrors().values()) {
statuses.addAll(iStatus);
}
DialogFactory.getStatusesDialog(bundle,
IConstants.ExportCLIDialog_Result,
IConstants.ExportCLIDialog_Result_Desc, statuses);
stage.close();
} catch (Exception e) {
DialogFactory.getStatusDialog(bundle, new Status(
StatusType.ERROR, e.getMessage(), e),
"An error occurred!");
stage.close();
}
}
}
@FXML
private void handleBrowseButtonAction(ActionEvent event) {
DirectoryChooser chooser = new DirectoryChooser();
chooser.setTitle(bundle.getString(IConstants.ExportDialog_CLI));
chooser.setInitialDirectory(document.getFile().getParentFile());
File file = chooser.showDialog(stage);
controlFile.setText(file.getAbsolutePath());
}
public void setDocument(Document document) {
this.document = document;
controlFile.setText(getDefaultFile(document.getFile())
.getAbsolutePath());
}
public void setBundle(ResourceBundle bundle) {
this.bundle = bundle;
}
public void setStage(Stage stage) {
this.stage = stage;
}
public File getDefaultFile(File file) {
if (file.isFile()) {
file = file.getParentFile();
}
return new File(new Path(file.getAbsolutePath())
.append(document.getName()).addFileExtension("cli").toString());
}
}