1 package net.sf.openrocket.gui.help.tours;
3 import java.io.FileNotFoundException;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.util.ArrayList;
8 import java.util.LinkedHashMap;
12 import javax.swing.text.html.StyleSheet;
15 * A manager that loads a number of slide sets from a defined base directory
16 * and provides access to them.
18 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
20 public class SlideSetManager {
22 private static final String TOURS_FILE = "tours.txt";
23 private static final String STYLESHEET_FILE = "style.css";
26 private final String baseDir;
27 private final Map<String, SlideSet> slideSets = new LinkedHashMap<String, SlideSet>();
33 * @param baseDir the base directory containing the tours and style files.
35 public SlideSetManager(String baseDir) {
36 if (baseDir.length() > 0 && !baseDir.endsWith("/")) {
37 baseDir = baseDir + "/";
39 this.baseDir = baseDir;
46 public void load() throws IOException {
49 List<String> tours = loadTourList();
50 StyleSheet styleSheet = loadStyleSheet();
52 for (String file : tours) {
54 String base = baseDir + file;
55 int index = base.lastIndexOf('/');
57 base = base.substring(0, index);
62 SlideSetLoader loader = new SlideSetLoader(base);
63 SlideSet set = loader.load(file);
64 set.setStyleSheet(styleSheet);
65 slideSets.put(file, set);
72 * Return a set containing all the slide set names.
74 public List<String> getSlideSetNames() {
75 return new ArrayList<String>(slideSets.keySet());
79 * Retrieve an individual slide set.
81 * @param name the name of the slide set to retrieve.
82 * @return the slide set (never null)
83 * @throws IllegalArgumentException if the slide set with the name does not exist.
85 public SlideSet getSlideSet(String name) {
86 SlideSet s = slideSets.get(name);
88 throw new IllegalArgumentException("Slide set with name '" + name + "' not found.");
94 private List<String> loadTourList() throws IOException {
95 InputStream in = ClassLoader.getSystemResourceAsStream(baseDir + TOURS_FILE);
97 throw new FileNotFoundException("File '" + baseDir + TOURS_FILE + "' not found.");
102 List<String> tours = new ArrayList<String>();
103 TextLineReader reader = new TextLineReader(in);
104 while (reader.hasNext()) {
105 tours.add(reader.next());
115 private StyleSheet loadStyleSheet() throws IOException {
116 InputStream in = ClassLoader.getSystemResourceAsStream(baseDir + STYLESHEET_FILE);
118 throw new FileNotFoundException("File '" + baseDir + STYLESHEET_FILE + "' not found.");
123 StyleSheet ss = new StyleSheet();
124 InputStreamReader reader = new InputStreamReader(in, "UTF-8");
125 ss.loadRules(reader, null);