/** * Copyright (C) 2011 Google, Inc. * * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onebusaway.quickstart.bootstrap; import java.io.File; import java.io.IOException; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import javax.swing.JDialog; import org.onebusaway.quickstart.GuiQuickstartDataModel; import org.onebusaway.quickstart.bootstrap.gui.GtfsPathWizardPanelController; import org.onebusaway.quickstart.bootstrap.gui.GtfsRealtimePathsWizardPanelController; import org.onebusaway.quickstart.bootstrap.gui.JConsoleDialog; import org.onebusaway.quickstart.bootstrap.gui.QuickStartTypeWizardPanelController; import org.onebusaway.quickstart.bootstrap.gui.RunWizardPanelController; import org.onebusaway.quickstart.bootstrap.gui.TransitDataBundlePathWizardPanelController; import org.onebusaway.quickstart.bootstrap.gui.WelcomeWizardPanelController; import org.onebusaway.quickstart.bootstrap.gui.wizard.WizardController; import org.onebusaway.quickstart.bootstrap.gui.wizard.WizardController.ECompletionState; import org.onebusaway.quickstart.bootstrap.gui.wizard.WizardDialog; /** * * @author bdferris */ public class GuiBootstrapMain { public static GuiQuickstartDataModel configureBootstrapArgs() throws IOException, Exception { final GuiQuickstartDataModel model = new GuiQuickstartDataModel(); loadModel(model); WizardController controller = new WizardController(); controller.addPanel(WelcomeWizardPanelController.class, new WelcomeWizardPanelController()); controller.addPanel(TransitDataBundlePathWizardPanelController.class, new TransitDataBundlePathWizardPanelController(model, controller)); controller.addPanel(QuickStartTypeWizardPanelController.class, new QuickStartTypeWizardPanelController(model)); controller.addPanel(GtfsPathWizardPanelController.class, new GtfsPathWizardPanelController(model, controller)); controller.addPanel(GtfsRealtimePathsWizardPanelController.class, new GtfsRealtimePathsWizardPanelController(model)); controller.addPanel(RunWizardPanelController.class, new RunWizardPanelController(model)); controller.setCurrentPanel(WelcomeWizardPanelController.class); WizardDialog dialog = new WizardDialog(controller); dialog.setModal(true); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setVisible(true); saveModel(model); if (controller.getCompletionState() == ECompletionState.CANCELLED) System.exit(0); String path = model.getTransitDataBundlePath(); new File(path).mkdirs(); JConsoleDialog console = new JConsoleDialog( new File(path, "console.log").getAbsolutePath()); console.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); console.setVisible(true); return model; } private static void loadModel(GuiQuickstartDataModel model) { Preferences preferences = Preferences.userNodeForPackage(GuiBootstrapMain.class); model.setTransitDataBundlePath(preferences.get("transitDataBundlePath", null)); model.setGtfsPath(preferences.get("gtfsPath", null)); model.setTripUpdatesUrl(preferences.get("tripUpdatesUrl", null)); model.setVehiclePositionsUrl(preferences.get("vehiclePositionsUrl", null)); model.setAlertsUrl(preferences.get("alertsUrl", null)); } private static void saveModel(GuiQuickstartDataModel model) { Preferences preferences = Preferences.userNodeForPackage(GuiBootstrapMain.class); updatePreferences(preferences, "transitDataBundlePath", model.getTransitDataBundlePath()); updatePreferences(preferences, "gtfsPath", model.getGtfsPath()); updatePreferences(preferences, "tripUpdatesUrl", model.getTripUpdatesUrl()); updatePreferences(preferences, "vehiclePositionsUrl", model.getVehiclePositionsUrl()); updatePreferences(preferences, "alertsUrl", model.getAlertsUrl()); try { preferences.sync(); } catch (BackingStoreException e) { e.printStackTrace(); } } private static void updatePreferences(Preferences preferences, String property, String value) { if (value == null) preferences.remove(property); else preferences.put(property, value); } }