diff --git a/pom.xml b/pom.xml index bff5530fe0fa7325375d7347bea2dec895a9f781..7ea7f4e8942843988da53f4073b517ebed2cc7a8 100644 --- a/pom.xml +++ b/pom.xml @@ -170,6 +170,12 @@ 1.4.5.519 + + org.openjfx + javafx-controls + 11 + + @@ -181,7 +187,7 @@ static false - + src/main/static/assembly.xml ${project.build.outputDirectory} @@ -247,5 +253,41 @@ + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.apache.maven.plugins + + + maven-assembly-plugin + + + [3.2.0,) + + + single + + + + + + + + + + + + diff --git a/report_output.xml b/report_output.xml new file mode 100644 index 0000000000000000000000000000000000000000..6bb8f9a8a14d71900c95570e9784d7271c1edce4 --- /dev/null +++ b/report_output.xml @@ -0,0 +1,2 @@ + + diff --git a/src/main/java/fr/emse/gitlab/saref/JTextAreaAppender.java b/src/main/java/fr/emse/gitlab/saref/JTextAreaAppender.java new file mode 100644 index 0000000000000000000000000000000000000000..8784d1099f5d91dd313db035cf0695275c98a28c --- /dev/null +++ b/src/main/java/fr/emse/gitlab/saref/JTextAreaAppender.java @@ -0,0 +1,115 @@ +/** + * + */ +package fr.emse.gitlab.saref; + +import javax.swing.JComponent; +import javax.swing.JTextArea; + +import org.apache.log4j.AppenderSkeleton; +import org.apache.log4j.Layout; +import org.apache.log4j.spi.LoggingEvent; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.log4j.spi.ErrorCode; + +/** + * @author Omar Qawasmeh + * + * @organization Ecole des Mines de Saint Etienne + */ +/* + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * The Original Code is 'JSignPdf, a free application for PDF signing'. + * + * The Initial Developer of the Original Code is Josef Cacek. Portions created + * by Josef Cacek are Copyright (C) Josef Cacek. All Rights Reserved. + * + * Contributor(s): Josef Cacek. + * + * Alternatively, the contents of this file may be used under the terms of the + * GNU Lesser General Public License, version 2.1 (the "LGPL License"), in which + * case the provisions of LGPL License are applicable instead of those above. If + * you wish to allow use of your version of this file only under the terms of + * the LGPL License and not to allow others to use your version of this file + * under the MPL, indicate your decision by deleting the provisions above and + * replace them with the notice and other provisions required by the LGPL + * License. If you do not delete the provisions above, a recipient may use your + * version of this file under either the MPL or the LGPL License. + */ + +public class JTextAreaAppender extends AppenderSkeleton { + String NEW_LINE = System.getProperty("line.separator"); + private JTextArea jTextArea; + + /** + * Constructor. + * + * @param jTextArea + */ + public JTextAreaAppender(final JTextArea jTextArea) { + if (jTextArea == null) { + throw new IllegalArgumentException("JTextArea has to be not-null."); + } + this.jTextArea = jTextArea; + } + + /* + * (non-Javadoc) + * + * @see org.apache.log4j.Appender#close() + */ + public void close() { + jTextArea = null; + } + + /* + * (non-Javadoc) + * + * @see org.apache.log4j.Appender#requiresLayout() + */ + public boolean requiresLayout() { + return true; + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.log4j.AppenderSkeleton#append(org.apache.log4j.spi.LoggingEvent) + */ + +// protected void append(LoggingEvent event) +// { +// if(event.getLevel().equals(Level.INFO)){ +// jTextA.append(event.getMessage().toString()); +// } +// } + @Override + protected void append(LoggingEvent event) { + if (layout == null) { + errorHandler.error("No layout for appender " + name, null, ErrorCode.MISSING_LAYOUT); + return; + } + final String message = layout.format(event); + jTextArea.append(message); + + // TODO do we need this code + if (layout.ignoresThrowable()) { + for (String throwableRow : ArrayUtils.nullToEmpty(event.getThrowableStrRep())) { + jTextArea.append(throwableRow + NEW_LINE); + } + } + // scroll TextArea + jTextArea.setCaretPosition(jTextArea.getText().length()); + } + +} + diff --git a/src/main/java/fr/emse/gitlab/saref/Main.java b/src/main/java/fr/emse/gitlab/saref/Main.java index ac27c98098964855a211d87f5b8b9d98d29d7760..0a7c4dc46c8ff5b3122f0755a9e7196e8eaaf808 100644 --- a/src/main/java/fr/emse/gitlab/saref/Main.java +++ b/src/main/java/fr/emse/gitlab/saref/Main.java @@ -2,7 +2,12 @@ package fr.emse.gitlab.saref; import static fr.emse.gitlab.saref.CMDConfigurations.*; +import java.awt.BorderLayout; import java.awt.Desktop; +import java.awt.FlowLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -24,6 +29,17 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; @@ -97,7 +113,6 @@ public class Main { private static Dataset dataset; private static Var VAR_TEST_SUITES = VarUtils.allocVar("testsuites"); - static boolean remoteOnly; static boolean ignoreGit; static boolean includeMaster; @@ -105,76 +120,93 @@ public class Main { static boolean ignoreTerms; static boolean ignoreExamples; static boolean verbose; - - - - public static void main(String[] args) - throws IOException, InterruptedException, URISyntaxException, JAXBException, ParseException, RefAlreadyExistsException, RefNotFoundException, InvalidRefNameException, CheckoutConflictException, GitAPIException { - - CommandLine cl = CMDConfigurations.parseArguments(args); - if (cl.getOptions().length == 0 || cl.hasOption(ARG_HELP)) { - CMDConfigurations.displayHelp(); - return; - } - String dirName = cl.getOptionValue(ARG_DIRECTORY, ARG_DIRECTORY_DEFAULT); - directory = new File(dirName).getCanonicalFile(); - if(!directory.isDirectory()) { - LOG.error("The directory does not exist " + directory); - System.exit(-1); - } + /* added to handle the GUI */ + static boolean fileSelected = false; - remoteOnly = cl.hasOption(ARG_REMOTE_ONLY); - ignoreGit = cl.hasOption(ARG_IGNORE_GIT); - includeMaster = cl.hasOption(ARG_INCLUDE_MASTER); - generateSite = !cl.hasOption(ARG_NO_SITE); - ignoreExamples = cl.hasOption(ARG_IGNORE_EXAMPLES); - ignoreTerms = cl.hasOption(ARG_IGNORE_TERMS); - verbose = cl.hasOption(ARG_VERBOSE); - - setLogAppenders(); - prepareDirectory(); - streamManager = initializeStreamManager(); - dataset = createFreshDataset(); - LOG.info("Starting pipeline in " + directory); - - Repositories repositories; - try { - repositories = new ReadRepositories("Fetching required repositories").readRepositories(directory, remoteOnly, ignoreGit, includeMaster); - } catch (Exception ex) { - reportAndExit(-1); - return; - } + private static JTextArea txtConsole = new JTextArea("Select a directory to start\n"); + private static JFrame frame = new JFrame(); + private static JPanel functionalitiesPanel = new JPanel(new GridLayout(0, 4)); + private static JPanel infoPanel = new JPanel(); + private static JPanel textAreaPanel = new JPanel(); + public static boolean isTheConsoleActive = true; - if (repositories.getDefaultRepository() != null) { - Repository repository = repositories.getDefaultRepository(); - boolean checkExamples = !ignoreExamples; - testRepository(repository, checkExamples); - } - for(Repository repository : repositories.getNamedRepositories()) { - boolean checkExamples = !ignoreExamples && remoteOnly; - testRepository(repository, checkExamples); + public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException, JAXBException, + ParseException, RefAlreadyExistsException, RefNotFoundException, InvalidRefNameException, + CheckoutConflictException, GitAPIException { + if (isTheConsoleActive == true) { + + openConsole(); // open console } - checkOWLProfile(); - new CheckConfig().doJob(dataset, ignoreExamples); + else { + CommandLine cl = CMDConfigurations.parseArguments(args); + if (cl.getOptions().length == 0 || cl.hasOption(ARG_HELP)) { + CMDConfigurations.displayHelp(); + return; + } - if (generateSite) { - new GeneratePortal("Generate static files for the portal", streamManager).doJob(dataset, directory, verbose, ignoreExamples, ignoreTerms); - } + String dirName = cl.getOptionValue(ARG_DIRECTORY, ARG_DIRECTORY_DEFAULT); + directory = new File(dirName).getCanonicalFile(); + if (!directory.isDirectory()) { + LOG.error("The directory does not exist " + directory); + System.exit(-1); + } + + remoteOnly = cl.hasOption(ARG_REMOTE_ONLY); + ignoreGit = cl.hasOption(ARG_IGNORE_GIT); + includeMaster = cl.hasOption(ARG_INCLUDE_MASTER); + generateSite = !cl.hasOption(ARG_NO_SITE); + ignoreExamples = cl.hasOption(ARG_IGNORE_EXAMPLES); + ignoreTerms = cl.hasOption(ARG_IGNORE_TERMS); + verbose = cl.hasOption(ARG_VERBOSE); + + setLogAppenders(); + prepareDirectory(); + streamManager = initializeStreamManager(); + dataset = createFreshDataset(); + LOG.info("Starting pipeline in " + directory); + + Repositories repositories; + try { + repositories = new ReadRepositories("Fetching required repositories").readRepositories(directory, + remoteOnly, ignoreGit, includeMaster); + } catch (Exception ex) { + reportAndExit(-1); + return; + } + if (repositories.getDefaultRepository() != null) { + Repository repository = repositories.getDefaultRepository(); + boolean checkExamples = !ignoreExamples; + testRepository(repository, checkExamples); + } + for (Repository repository : repositories.getNamedRepositories()) { + boolean checkExamples = !ignoreExamples && remoteOnly; + testRepository(repository, checkExamples); + } - if (repositories.getDefaultRepository() != null && !ignoreGit) { - Repository repository = repositories.getDefaultRepository(); - resetCheckout(repository); - } - for(Repository repository : repositories.getNamedRepositories()) { - resetCheckout(repository); - } + checkOWLProfile(); + new CheckConfig().doJob(dataset, ignoreExamples); - testSuites.clean(); - - reportAndExit((int) -Math.signum(testSuites.getErrors() + testSuites.getFailures())); + if (generateSite) { + new GeneratePortal("Generate static files for the portal", streamManager).doJob(dataset, directory, + verbose, ignoreExamples, ignoreTerms); + } + + if (repositories.getDefaultRepository() != null && !ignoreGit) { + Repository repository = repositories.getDefaultRepository(); + resetCheckout(repository); + } + for (Repository repository : repositories.getNamedRepositories()) { + resetCheckout(repository); + } + + testSuites.clean(); + + reportAndExit((int) -Math.signum(testSuites.getErrors() + testSuites.getFailures())); + + } } private static void setLogAppenders() throws IOException { @@ -186,22 +218,259 @@ public class Main { org.apache.log4j.Logger loggerBase = org.apache.log4j.Logger.getLogger(Constants.LOGGER_BASE); TestSuitesAppender appender = new TestSuitesAppender(testSuites); loggerBase.addAppender(appender); - } + } + + private static boolean openConsole() throws IOException, InterruptedException, URISyntaxException, JAXBException, + ParseException, RefAlreadyExistsException, RefNotFoundException, InvalidRefNameException, + CheckoutConflictException, GitAPIException { + setGUIAppenders(); + +//LOG.info("Select a directory to start"); +// JFrame.setDefaultLookAndFeelDecorated(true); + + frame = new JFrame("Saref-Pipeline tests"); + frame.setBounds(100, 100, 800, 400); + SwingUtilities.updateComponentTreeUI(frame); + + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + JLabel lblWelcomeToSarefpipeline = new JLabel("SAREF ontologies pipeline tests"); + infoPanel.add(lblWelcomeToSarefpipeline); + + frame.getContentPane().add(functionalitiesPanel, BorderLayout.SOUTH); + +//JLabel argsLbl = new JLabel("Please choose among the arguments:"); +//functionalitiesPanel.add(argsLbl); + JLabel lbl=new JLabel("The list of arguments:"); + functionalitiesPanel.add(lbl); + + JLabel emptylbl1=new JLabel(); + functionalitiesPanel.add(emptylbl1); + + JLabel emptylbl2=new JLabel(); + functionalitiesPanel.add(emptylbl2); + + JLabel emptylbl3=new JLabel(); + functionalitiesPanel.add(emptylbl3); + + + JCheckBox remoteOnly_checkBox = new JCheckBox("Remote-only"); + remoteOnly_checkBox.setToolTipText("Do not check the directory itself.\n" + + " Only consider the repositories listed in the `.saref-repositories.yml` document.\n" + + " Used to generate the website for several extensions."); + functionalitiesPanel.add(remoteOnly_checkBox); + + JCheckBox ignoreGit_checkBox = new JCheckBox("No-git"); + ignoreGit_checkBox.setToolTipText("Only check the current state of the repository"); + functionalitiesPanel.add(ignoreGit_checkBox); + + + JCheckBox includeMaster_checkBox = new JCheckBox("Include master"); + includeMaster_checkBox.setToolTipText("Check the master branches of the remote repositories listed in the `.saref-repositories.yml` document"); + functionalitiesPanel.add(includeMaster_checkBox); + + JCheckBox generateSite_checkBox = new JCheckBox("Don't generate site"); + generateSite_checkBox.setToolTipText("Do not generate the static website"); + functionalitiesPanel.add(generateSite_checkBox); + + JCheckBox ignoreExamples_checkBox = new JCheckBox("Ignore examples"); + ignoreExamples_checkBox.setToolTipText("Only check the SAREF extension ontology. Ignore the examples"); + functionalitiesPanel.add(ignoreExamples_checkBox); + + JCheckBox verbose_checkBox = new JCheckBox("Verbose"); + verbose_checkBox.setToolTipText("Use verbose mode.\n" + + "(For example, use SPARQL-Generate in --debug-template mode when generating the documentation)"); + functionalitiesPanel.add(verbose_checkBox); + + JCheckBox ignoreTerms_checkBox = new JCheckBox("Ignore terms"); + ignoreTerms_checkBox.setToolTipText("Do not generate the website for terms"); + functionalitiesPanel.add(ignoreTerms_checkBox); + + + JLabel emptylbl4=new JLabel(); + functionalitiesPanel.add(emptylbl4); + + JLabel emptylbl5=new JLabel(); + functionalitiesPanel.add(emptylbl5); + +// JButton startBtn = new JButton("Start the pipeline"); + + + JButton startBtn = new JButton("Start the pipeline"); + + JButton fileChooserBtn = new JButton("Choose a directory"); + fileChooserBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int option = fileChooser.showOpenDialog(frame); + if (option == JFileChooser.APPROVE_OPTION) { + directory = fileChooser.getSelectedFile(); + +// directory = new File(dirName).getCanonicalFile(); + + fileSelected = true; + startBtn.setEnabled(true); + } else { + System.out.println("Open command canceled"); + } + + } + }); + functionalitiesPanel.add(fileChooserBtn); + + startBtn.setEnabled(false); + + + + startBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + + if (fileSelected == true) { + startBtn.setEnabled(true); + if (!remoteOnly_checkBox.isSelected() && !ignoreGit_checkBox.isSelected() + && !includeMaster_checkBox.isSelected() && !generateSite_checkBox.isSelected() + && !ignoreExamples_checkBox.isSelected() && !verbose_checkBox.isSelected()) { + + LOG.error("Please choose among the different options"); + return; + } + + remoteOnly = remoteOnly_checkBox.isSelected(); + ignoreGit = ignoreGit_checkBox.isSelected(); + includeMaster = includeMaster_checkBox.isSelected(); + generateSite = !generateSite_checkBox.isSelected(); + ignoreExamples = ignoreExamples_checkBox.isSelected(); + ignoreTerms = ignoreTerms_checkBox.isSelected(); + verbose = verbose_checkBox.isSelected(); + try { + + setLogAppenders(); + prepareDirectory(); + streamManager = initializeStreamManager(); + dataset = createFreshDataset(); + } catch (Exception e) { + // TODO: handle exception + } + + LOG.info("Starting pipeline in " + directory); + + Repositories repositories; + try { + repositories = new ReadRepositories("Fetching required repositories") + .readRepositories(directory, remoteOnly, ignoreGit, includeMaster); + } catch (Exception ex) { + reportAndExit(-1); + return; + } + + if (repositories.getDefaultRepository() != null) { + Repository repository = repositories.getDefaultRepository(); + boolean checkExamples = !ignoreExamples; + testRepository(repository, checkExamples); + } + for (Repository repository : repositories.getNamedRepositories()) { + boolean checkExamples = !ignoreExamples && remoteOnly; + testRepository(repository, checkExamples); + } + + checkOWLProfile(); + new CheckConfig().doJob(dataset, ignoreExamples); + + if (generateSite) { + try { + new GeneratePortal("Generate static files for the portal", streamManager).doJob(dataset, + directory, verbose, ignoreExamples, ignoreTerms); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + if (repositories.getDefaultRepository() != null && !ignoreGit) { + Repository repository = repositories.getDefaultRepository(); + resetCheckout(repository); + } + for (Repository repository : repositories.getNamedRepositories()) { + resetCheckout(repository); + } + + testSuites.clean(); + + reportAndExit((int) -Math.signum(testSuites.getErrors() + testSuites.getFailures())); + + int n = JOptionPane.showConfirmDialog(frame, + "The pipeline is finished\n" + "The report file is available at:\n" + directory + + "/target/report_output.xml\n" + + "Would you like to open it, erase the console and start the pipeline again?", + "Report results", JOptionPane.YES_NO_OPTION); + if (n == 0) { + try { + txtConsole.setText(""); + Desktop.getDesktop().open(new File(directory + "/target/report_output.xml")); + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + } + + } + }); + functionalitiesPanel.add(startBtn); + + FlowLayout flowLayout_1 = (FlowLayout) infoPanel.getLayout(); + flowLayout_1.setVgap(20); + flowLayout_1.setHgap(20); + frame.getContentPane().add(infoPanel, BorderLayout.NORTH); + + frame.getContentPane().add(textAreaPanel, BorderLayout.CENTER); + txtConsole.setColumns(70); + txtConsole.setRows(15); + textAreaPanel.add(txtConsole); + + JScrollPane scroll = new JScrollPane(txtConsole, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + frame.add(scroll); + + frame.pack(); + frame.setResizable(true); + frame.setVisible(true); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + return true; + } + + private static void setGUIAppenders() throws IOException { + + JTextAreaAppender jTextAreaAppender = new JTextAreaAppender(txtConsole); + + org.apache.log4j.Logger appenderRootLogger = org.apache.log4j.Logger.getRootLogger(); + + Layout GUIlayout = new PatternLayout("%d{mm:ss,SSS} %t %-5p %c:%L - %m%n"); + + jTextAreaAppender.setLayout(GUIlayout); + + appenderRootLogger.addAppender(jTextAreaAppender); + } + +// ************************************************ private static void prepareDirectory() throws IOException { target = new File(directory, Constants.TARGET_DIR); FileUtils.forceMkdir(target); - if(generateSite) { + if (generateSite) { File staticTargetDir = new File(directory, Constants.STATIC_TARGET_DIR); File staticTargetZip = new File(directory, Constants.STATIC_TARGET_DIR + ".zip"); URL url = Main.class.getClassLoader().getResource("static.zip"); FileUtils.copyURLToFile(url, staticTargetZip); - UnzipFile.unzip(staticTargetZip, staticTargetDir); - FileUtils.deleteQuietly(staticTargetZip); + UnzipFile.unzip(staticTargetZip, staticTargetDir); + FileUtils.deleteQuietly(staticTargetZip); } } - private static Dataset createFreshDataset() throws IOException { File datasetDir = new File(directory, Constants.DATASET_DIR); FileUtils.forceMkdir(datasetDir); @@ -210,8 +479,10 @@ public class Main { dataset.getDefaultModel().removeAll(); List toRemove = new ArrayList<>(); Iterator it = dataset.listNames(); - while(it.hasNext()) { toRemove.add(it.next()); } - for(String name : toRemove) { + while (it.hasNext()) { + toRemove.add(it.next()); + } + for (String name : toRemove) { dataset.removeNamedModel(name); } dataset.addNamedModel(Constants.CONFIG, ModelFactory.createDefaultModel()); @@ -225,7 +496,7 @@ public class Main { String versionTestSuiteName = version.toString() + " - testing repository structure"; new CheckoutJob(versionTestSuiteName).checkoutVersion(version); new CheckRepositoryStructure(versionTestSuiteName).check(version); - } catch(SAREFPipelineException ex) { + } catch (SAREFPipelineException ex) { LOG.error("Error while testing repository structure " + version, ex); continue; } @@ -234,13 +505,13 @@ public class Main { String ontologyTestSuiteName = version.toString() + " - testing ontology file"; testSuiteNames.put(version.getUri(), ontologyTestSuiteName); new ReadOntology(ontologyTestSuiteName).doJob(dataset, version); - } catch(SAREFPipelineException ex) { + } catch (SAREFPipelineException ex) { LOG.error(version.toString() + " Found errors for " + version.toString() + ". This version and all the examples will be ignored.", ex); continue; } - if(!checkExamples) { + if (!checkExamples) { return; } File examplesDir = new File(version.getRepository().getDirectory(), "examples"); @@ -262,11 +533,11 @@ public class Main { + ". This example will be ignored."); } } - } catch(Exception ex) { + } catch (Exception ex) { LOG.error(version.toString() + " Error while walking through the examples. They will be ignored.", ex); - continue; + continue; } - } + } } private static void checkOWLProfile() { @@ -296,9 +567,9 @@ public class Main { private static SPARQLExtStreamManager initializeStreamManager() throws IOException, URISyntaxException { URI uri = Main.class.getClassLoader().getResource("documentation").toURI(); Path dirPath; - if(uri.getScheme().equals("jar")) { - FileSystem fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); - dirPath = fileSystem.getPath("/documentation"); + if (uri.getScheme().equals("jar")) { + FileSystem fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); + dirPath = fileSystem.getPath("/documentation"); } else { dirPath = Paths.get(uri); } @@ -309,7 +580,7 @@ public class Main { Files.walk(dirPath).forEach((p) -> { String relativePath = dirPath.relativize(p).toString().replace("\\", "/"); String fileurl = BASE_DOC + relativePath; - if(uri.getScheme().equals("jar")) { + if (uri.getScheme().equals("jar")) { mapper.addAltEntry(fileurl, p.toString().substring(1)); } else { mapper.addAltEntry(fileurl, p.toString()); @@ -318,18 +589,17 @@ public class Main { return sm; } - private static void resetCheckout(Repository repository) { - try(Git git = Git.open(repository.getDirectory())) { + try (Git git = Git.open(repository.getDirectory())) { String currentBranch = repository.getCurrentBranch(); - if(currentBranch != null) { + if (currentBranch != null) { git.checkout().setName(currentBranch).call(); } } catch (IOException | GitAPIException ex) { LOG.warn("Error while reseting repository " + repository, ex); } } - + private static void reportAndExit(int code) { try { File report = new File(target, "report_output.xml"); @@ -341,23 +611,24 @@ public class Main { final StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(testSuites, sw); - if(generateSite) { + if (generateSite) { // generate the report.html File reportHTML = new File(directory, Constants.SITE_DIR + File.separator + "report.html"); try (IndentedWriter writer = new IndentedWriter(new FileOutputStream(reportHTML));) { - Context context = ContextUtils.build(writer).setBase(Constants.BASE) - .setDebugTemplate(verbose).setStreamManager(streamManager).build(); + Context context = ContextUtils.build(writer).setBase(Constants.BASE).setDebugTemplate(verbose) + .setStreamManager(streamManager).build(); BindingHashMap binding = new BindingHashMap(); binding.add(VAR_TEST_SUITES, NodeFactory.createLiteral(sw.toString())); List bindings = new ArrayList<>(); bindings.add(binding); String query = IOUtils.toString( - streamManager.open(new LookUpRequest("documentation/report/main.rqg", SPARQLExt.MEDIA_TYPE)), + streamManager + .open(new LookUpRequest("documentation/report/main.rqg", SPARQLExt.MEDIA_TYPE)), StandardCharsets.UTF_8); RootPlan reportPlan = PlanFactory.create(query, BASE_DOC); reportPlan.execTemplateStream(bindings, context); } - + if (openBrowser) { if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { Desktop.getDesktop().browse(reportHTML.toURI()); @@ -371,7 +642,8 @@ public class Main { ex.printStackTrace(); } - System.exit(code); + if (!isTheConsoleActive) { + System.exit(code); + } } - } diff --git a/src/main/resources/GUI/select_btn.png b/src/main/resources/GUI/select_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..f098968804228bfd983724c9e8a92d14c32f1ecd Binary files /dev/null and b/src/main/resources/GUI/select_btn.png differ diff --git a/src/main/resources/GUI/start_btn.png b/src/main/resources/GUI/start_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..29585b61f85ffa3259c9e66b565187ba16c643b1 Binary files /dev/null and b/src/main/resources/GUI/start_btn.png differ