package com.nexirius.theteam;
import com.nexirius.framework.application.Application;
import com.nexirius.framework.application.DialogManager;
import com.nexirius.framework.datamodel.DataModel;
import com.nexirius.framework.datamodel.DataModelCommand;
import com.nexirius.framework.datamodel.DefaultDataModelCommand;
import com.nexirius.framework.datamodel.StringModel;
import com.nexirius.framework.dataviewer.HTMLViewerCreator;
import com.nexirius.framework.dataviewer.ViewerCreatorMap;
import com.nexirius.framework.onlinehelp.HTMLHelpDialog;
import com.nexirius.framework.onlinehelp.OnlineHelp;
import com.nexirius.framework.onlinehelp.OnlineHelpManager;
import com.nexirius.framework.swing.SwingViewerCreator;
import com.nexirius.theteam.datacontroller.MainController;
import com.nexirius.theteam.dataeditor.*;
import com.nexirius.theteam.datamodel.*;
import com.nexirius.theteam.dataviewer.AddressViewer;
import com.nexirius.theteam.dataviewer.PersonViewer;
import com.nexirius.theteam.dataviewer.HelpViewer;
import com.nexirius.theteam.layout.AddressArrayLayout;
import com.nexirius.theteam.layout.MemberArrayLayout;
import com.nexirius.theteam.layout.PhoneArrayLayout;
import com.nexirius.theteam.persistence.FileBasedTeamPersistence;
import com.nexirius.theteam.persistence.TeamPersistenceManager;
import com.nexirius.util.XFile;
import com.nexirius.util.XString;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.net.URL;
public class TheTeam extends Application {
static TheTeam onlyInstance = null;
StringModel statusLineModel = new StringModel("", "StatusLine");
MainModel mainModel = null;
MainController mainController;
HTMLHelpDialog helpDialog = null;
String installDir;
DataModelCommand exitMethod;
public TheTeam(String argv[])
throws Exception {
super(argv);
onlyInstance = this;
}
public static TheTeam getApplication() {
return onlyInstance;
}
public class MyOnlineHelpManager implements OnlineHelpManager {
public String getHelpString(String resourceKey) {
return getClientResource().getHelpString(resourceKey);
}
public void help(String text) {
showHelp(getText(text));
}
}
public void preInit() {
OnlineHelp.init(new MyOnlineHelpManager());
DialogManager.setErrorAdaptor(this);
DialogManager.setPopupEditorAdaptor(this);
ViewerCreatorMap map = getFactory().getViewerCreatorMap();
map.register(MainModel.class, new SwingViewerCreator(MainEditor.class));
map.register(MemberModel.class, new SwingViewerCreator(MemberEditor.class));
map.register(AddressModel.class, new SwingViewerCreator(AddressEditor.class));
map.register(AddressModel.class, new SwingViewerCreator(AddressViewer.class));
map.register(PersonModel.class, new SwingViewerCreator(PersonEditor.class));
map.register(PersonModel.class, new SwingViewerCreator(PersonViewer.class));
map.register(PhoneModel.class, new SwingViewerCreator(PhoneEditor.class));
map.register(MemberArrayModel.class, new MemberArrayLayout(400), false);
map.register(AddressArrayModel.class, new AddressArrayLayout(400), false);
map.register(PhoneArrayModel.class, new PhoneArrayLayout(400), false);
map.register(EditListModel.class, new SwingViewerCreator(EditListEditor.class));
try {
mainController = new MainController(getFactory());
} catch (Exception e) {
e.printStackTrace();
}
mainModel = mainController.getMainModel();
mainModel.appendMethod(exitMethod = new ExitMethod());
mainModel.appendMethod(new HelpCommand("About", "about.help"));
}
public void init() {
TeamPersistenceManager.setPersistence(new FileBasedTeamPersistence());
getMainPanel().setLayout(new BorderLayout());
getMainPanel().add(mainController.createJComponent(), BorderLayout.CENTER);
getMainFrame().pack();
DialogManager.center(getMainFrame(), true);
}
public void postInit() {
mainModel.getMemberList().load();
}
public String getApplicationName() {
return "TheTeam";
}
public DataModel getStatusLineModel() {
return statusLineModel;
}
public DataModel getApplicationModel() {
return mainModel;
}
public void setStatusText(String text) {
statusLineModel.setText(text);
}
public void info(String text) {
setStatusText(text);
}
public void clear() {
mainModel.clear();
}
public String getHelpBase() {
return getInstallURL() + "help/";
}
public String getInstallDir() {
if (installDir == null) {
String prop = "InstallDir";
installDir = System.getProperty(prop);
if (installDir == null) {
System.err.println(prop + " is not set!");
return "";
}
}
return installDir;
}
public String getInstallURL() {
String s = getInstallDir();
if (s == null) {
return "";
}
XString xs = new XString(s);
xs.replace(File.separator, "/");
String path = xs.toString();
if (!path.startsWith("/")) {
path = "/" + path;
}
if (!path.endsWith("/")) {
path = path + "/";
}
try {
URL url = new URL("file", "", path);
return url.toString();
} catch (Exception ex) {
ex.printStackTrace();
System.err.println("Can't translate directory into URL:'" + path + "'");
}
return "";
}
public String getApplicationTitle() {
String ret = getClientResource().getText("ApplicationTitle");
return ret;
}
public void showHelp(String text) {
StringModel about = new StringModel("");
try {
XFile aboutFile = new XFile(text);
about.setText(new String(aboutFile.getBytes()));
} catch (Exception ex) {
about.setText(ex.getClass().getName());
ex.printStackTrace();
}
DialogManager.getPopupEditorAdaptor().noDuplicatePopupEdit(about, new SwingViewerCreator(HelpViewer.class), null);
}
public static void main(String argv[]) {
String plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
try {
javax.swing.UIManager.setLookAndFeel(plaf);
} catch (Exception e) {
System.out.println("Can't set '" + plaf + "' look and feel");
}
try {
new TheTeam(argv).run();
} catch (Exception ex) {
ex.printStackTrace();
}
}
class ExitMethod extends DefaultDataModelCommand {
ExitMethod() {
super("Exit");
}
public void doAction() {
exit();
}
}
class HelpCommand extends DefaultDataModelCommand {
String _help;
HelpCommand(String name, String help) {
super(name);
_help = help;
}
public void doAction() {
OnlineHelp.help(_help);
}
}
public JFrame getMainFrame() {
return super.getMainFrame(); //TODO
}
}