/*
* This file is part of the aidGer project.
*
* Copyright (C) 2010-2013 The aidGer Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.aidger.controller;
import java.awt.Font;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import de.aidger.controller.actions.AboutAction;
import de.aidger.controller.actions.ActivityReportExportAction;
import de.aidger.controller.actions.ActivityReportGenerateAction;
import de.aidger.controller.actions.BudgetExportAction;
import de.aidger.controller.actions.BudgetGenerateAction;
import de.aidger.controller.actions.ControllingExportAllAction;
import de.aidger.controller.actions.ControllingExportDifferencesAction;
import de.aidger.controller.actions.ControllingGenerateAction;
import de.aidger.controller.actions.DatabaseCheckFinishAction;
import de.aidger.controller.actions.DatabaseDetailsFinishAction;
import de.aidger.controller.actions.DatabaseSelectionFinishAction;
import de.aidger.controller.actions.DetailViewerCloseAction;
import de.aidger.controller.actions.DetailViewerEditAction;
import de.aidger.controller.actions.DialogAbortAction;
import de.aidger.controller.actions.EditorCancelAction;
import de.aidger.controller.actions.EditorSaveAction;
import de.aidger.controller.actions.ExitAction;
import de.aidger.controller.actions.FinancialControllingGenerateAction;
import de.aidger.controller.actions.FirstStartNameFinishAction;
import de.aidger.controller.actions.HelpAction;
import de.aidger.controller.actions.HomepageAction;
import de.aidger.controller.actions.PrintAction;
import de.aidger.controller.actions.ProtocolExportAction;
import de.aidger.controller.actions.ReportExportAction;
import de.aidger.controller.actions.ReportGenerateAction;
import de.aidger.controller.actions.SettingsAction;
import de.aidger.controller.actions.SettingsBrowseAction;
import de.aidger.controller.actions.SettingsDatabaseConfigAction;
import de.aidger.controller.actions.SettingsSaveAction;
import de.aidger.controller.actions.ViewerActivityExportAction;
import de.aidger.controller.actions.ViewerActivityReportAction;
import de.aidger.controller.actions.ViewerAddAction;
import de.aidger.controller.actions.ViewerAssistantAction;
import de.aidger.controller.actions.ViewerContractAction;
import de.aidger.controller.actions.ViewerCourseAction;
import de.aidger.controller.actions.ViewerDeleteAction;
import de.aidger.controller.actions.ViewerDetailViewAction;
import de.aidger.controller.actions.ViewerEditAction;
import de.aidger.controller.actions.WizardNextAction;
import de.aidger.controller.actions.WizardPreviousAction;
import de.aidger.model.Runtime;
import de.aidger.view.UI;
/**
* Application is a singleton class in which the main() function is located. The
* application initializes all controller specific classes and registers the
* actions at the action registry.
*
* @author aidGer Team
*/
public final class Application {
/**
* Holds an instance of this class.
*/
private static Application instance = null;
boolean isMac = false;
/**
* Constructor must be private and does nothing.
*/
private Application() {
}
/**
* Provides access to an instance of this class.
*
* @return instance of this Application
*/
public synchronized static Application getInstance() {
if (instance == null) {
instance = new Application();
}
return instance;
}
/**
* Initializes the application by registering the actions.
*/
public void initialize() {
Runtime.getInstance().initialize();
registerActions();
}
/**
* Returns true if the computer is running Mac OS
*
* @return True if Mac OS is running
*/
public boolean isMac() {
return isMac;
}
/**
* Registers all action classes at ActionRegistry
*/
private void registerActions() {
ActionRegistry.getInstance().register(new ExitAction());
ActionRegistry.getInstance().register(new PrintAction());
ActionRegistry.getInstance().register(new SettingsAction());
ActionRegistry.getInstance().register(new SettingsDatabaseConfigAction());
ActionRegistry.getInstance().register(new SettingsBrowseAction());
ActionRegistry.getInstance().register(new SettingsSaveAction());
ActionRegistry.getInstance().register(new HelpAction());
ActionRegistry.getInstance().register(new HomepageAction());
ActionRegistry.getInstance().register(new AboutAction());
ActionRegistry.getInstance().register(new DialogAbortAction());
ActionRegistry.getInstance().register(new ViewerDetailViewAction());
ActionRegistry.getInstance().register(new ViewerEditAction());
ActionRegistry.getInstance().register(new ViewerAddAction());
ActionRegistry.getInstance().register(new ViewerDeleteAction());
ActionRegistry.getInstance().register(new ViewerCourseAction());
ActionRegistry.getInstance().register(new ViewerAssistantAction());
ActionRegistry.getInstance().register(new ViewerContractAction());
ActionRegistry.getInstance().register(new ViewerActivityReportAction());
ActionRegistry.getInstance().register(new ViewerActivityExportAction());
ActionRegistry.getInstance().register(new EditorSaveAction());
ActionRegistry.getInstance().register(new EditorCancelAction());
ActionRegistry.getInstance().register(new DetailViewerEditAction());
ActionRegistry.getInstance().register(new DetailViewerCloseAction());
ActionRegistry.getInstance().register(new ReportGenerateAction());
ActionRegistry.getInstance().register(new ReportExportAction());
ActionRegistry.getInstance().register(new ProtocolExportAction());
ActionRegistry.getInstance().register(new ActivityReportGenerateAction());
ActionRegistry.getInstance().register(new ActivityReportExportAction());
ActionRegistry.getInstance().register(new ControllingGenerateAction());
ActionRegistry.getInstance().register(new ControllingExportAllAction());
ActionRegistry.getInstance().register(new ControllingExportDifferencesAction());
ActionRegistry.getInstance().register(new FinancialControllingGenerateAction());
ActionRegistry.getInstance().register(new BudgetGenerateAction());
ActionRegistry.getInstance().register(new BudgetExportAction());
ActionRegistry.getInstance().register(new WizardNextAction());
ActionRegistry.getInstance().register(new WizardPreviousAction());
ActionRegistry.getInstance().register(new FirstStartNameFinishAction());
ActionRegistry.getInstance().register(new DatabaseSelectionFinishAction());
ActionRegistry.getInstance().register(new DatabaseDetailsFinishAction());
ActionRegistry.getInstance().register(new DatabaseCheckFinishAction());
}
/**
* Starts the application aidGer
*
* @param args
*/
public static void main(String[] args) {
Application app = Application.getInstance();
// Check for Mac OS and set some options
if (System.getProperty("os.name").toLowerCase().indexOf("mac") > -1) {
app.isMac = true;
System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty("com.apple.macos.useScreenMenuBar", "true");
System.setProperty("com.apple.mrj.application.apple.menu.about.name", "aidGer");
}
// Set the look & feel
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e_) {
}
}
// Set some individual look & feel
Font oldFont = UIManager.getFont("TitledBorder.font");
UIManager.put("TitledBorder.font", new Font(oldFont.getName(), oldFont
.getStyle(), 15));
Application.getInstance().initialize();
// Starts the main UI in the thread that runs the event loop.
Runnable ui = new Runnable() {
@Override
public void run() {
UI.getInstance().run();
}
};
SwingUtilities.invokeLater(ui);
}
}