/******************************************************************************* * Copyright (c) 2012, 2016 Original authors and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Original authors and others - initial API and implementation ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.examples; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.eclipse.nebula.widgets.nattable.examples.runner.TabbedNatExampleRunner; public class NatTableExamples { public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException { if (args.length == 0) { List<String> examples; InputStream inputStream = NatTableExamples.class.getResourceAsStream("/examples.index"); if (inputStream != null) { examples = new ArrayList<>(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line = reader.readLine(); while (line != null) { examples.add(line); line = reader.readLine(); } reader.close(); } else { System.out.println("examples.index not found, reconstructing"); examples = createExamplesIndex(null); } TabbedNatExampleRunner.run(examples.toArray(new String[0])); } else if (args.length == 2 && "--createIndex".equals(args[0])) { System.out.println("Creating examples.index"); System.out.println("basedir: " + args[1]); createExamplesIndex(args[1]); } else { System.out.println("Usage: NatTableExamples [--createIndex <basedir>]"); } } public static List<String> createExamplesIndex(String basedir) throws IOException { List<String> examples = new ArrayList<>(); File examplesDir = new File(basedir, "src" + INatExample.BASE_PATH); findTutorialExamples(examplesDir, examples); examplesDir = new File(basedir, "src" + INatExample.CLASSIC_BASE_PATH); findExamples(examplesDir, examples, INatExample.CLASSIC_EXAMPLES_PREFIX); File examplesIndexFile = new File(new File(basedir, "src"), "examples.index"); BufferedWriter writer = new BufferedWriter(new FileWriter(examplesIndexFile)); for (String example : examples) { writer.write(example + "\n"); } writer.flush(); writer.close(); return examples; } private static void findTutorialExamples(File dir, List<String> examples) throws IOException { FilenameFilter packageFilter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.matches("_\\d{3}.*"); } }; List<String> sortedList = Arrays.asList(dir.list(packageFilter)); Collections.sort(sortedList); for (String packageName : sortedList) { File f = new File(dir, packageName); if (f.isDirectory()) { findExamples(f, examples, INatExample.TUTORIAL_EXAMPLES_PREFIX); } } } public static void findExamples(File dir, List<String> examples, String prefix) throws IOException { List<String> sortedList = Arrays.asList(dir.list()); Collections.sort(sortedList); for (String s : sortedList) { File f = new File(dir, s); if (f.isDirectory()) { findExamples(f, examples, prefix); } else { String examplePath = dir.getCanonicalPath() + File.separator + s; examplePath = examplePath.replace(File.separator, "/"); // Convert // to // /-delimited // path if (examplePath.endsWith(".java")) { examplePath = examplePath.replaceAll("^.*/src/", "").replaceAll("\\.java$", ""); examples.add(prefix + examplePath); } } } } }