/*
* Copyright (c) 2011-2012 by Stefan Laubenberger.
*
* Test is free software: you can redistribute it and/or modify
* it under the terms of the General Public License v2.0.
*
* Test is distributed together with Tyr 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:
* <http://www.gnu.org/licenses>
*
* This distribution is available at:
* <http://code.google.com/p/tyr/>
* <http://dev.laubenberger.net/tyr/>
*
* Contact information:
* Stefan Laubenberger
* Bullingerstrasse 53
* CH-8004 Zuerich
*
* <http://www.laubenberger.net>
*
* <laubenberger@gmail.com>
*/
package net.laubenberger.tyr.module.test;
import java.awt.TrayIcon.MessageType;
import java.awt.event.ActionEvent;
import java.io.File;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;
import javax.swing.JDialog;
import javax.swing.SwingUtilities;
import javax.xml.bind.JAXBException;
import net.laubenberger.bogatyr.helper.HelperCollection;
import net.laubenberger.bogatyr.helper.HelperLog;
import net.laubenberger.bogatyr.helper.HelperTime;
import net.laubenberger.bogatyr.helper.HelperXml;
import net.laubenberger.bogatyr.misc.Constants;
import net.laubenberger.bogatyr.misc.Event;
import net.laubenberger.bogatyr.model.application.ModelApplication;
import net.laubenberger.bogatyr.model.misc.Language;
import net.laubenberger.bogatyr.service.localizer.Localizer;
import net.laubenberger.bogatyr.service.property.Property;
import net.laubenberger.bogatyr.view.View;
import net.laubenberger.bogatyr.view.swing.ActionAbstract;
import net.laubenberger.bogatyr.view.swing.Dialog;
import net.laubenberger.bogatyr.view.swing.Separator;
import net.laubenberger.bogatyr.view.swing.worker.Worker;
import net.laubenberger.bogatyr.view.swing.worker.WorkerAbstract;
import net.laubenberger.tyr.controller.ModuleAbstract;
import net.laubenberger.tyr.misc.Callback;
import net.laubenberger.tyr.misc.ScalableIcon;
import net.laubenberger.tyr.model.FileType;
import net.laubenberger.tyr.model.Icon;
import net.laubenberger.tyr.model.ModuleConfig;
import net.laubenberger.tyr.model.ModuleConfigImpl;
import net.laubenberger.tyr.model.ModuleData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Test module
*
* @author Stefan Laubenberger
* @version 0.9.2 (20110531)
* @since 0.0.1
*/
public class TestImpl extends ModuleAbstract implements Test {
static final Logger log = LoggerFactory.getLogger(TestImpl.class);
private static final String KEY_LAST_RUN = "key.last.run"; //$NON-NLS-1$
final ModelApplication model = getModel();
final Property property = model.getProperty();
final Localizer localizer = model.getLocalizer();
final Dialog dialogAbout;
final Dialog dialogData;
final Dialog dialogDb;
final Dialog dialogComponents;
final Collection<Dialog> dialogs = new HashSet<Dialog>();
private boolean isExit = false;
public static void main(final String[] args) {
final ModuleConfig cm = new ModuleConfigImpl();
cm.setName("Test"); //$NON-NLS-1$
cm.setVersion(new BigDecimal("0.92")); //$NON-NLS-1$
cm.setBuild(247);
cm.setCreated(HelperTime.getDate(2012, 5, 31, 8, 37, 0));
cm.setLanguage(Language.ENGLISH);
cm.setUUID(UUID.fromString("febb21fe-52e6-4776-bfd4-dcc0fd2cc074")); //$NON-NLS-1$
cm.addPerson(Constants.BOGATYR.getPersons().get(0)); //hopefully it's me :-)
cm.setJars(HelperCollection.getList("tyr-module-test-0.92.jar", "lib/jbusycomponent-1.2.2.jar", "lib/jxlayer-3.0.4.jar" /*, "lib/commons-0.2.jar"*/)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
cm.setModuleClass("net.laubenberger.tyr.module.test.TestImpl"); //$NON-NLS-1$
cm.setLocalizerBase("net/laubenberger/tyr/module/test/test"); //$NON-NLS-1$
cm.setLogo("net/laubenberger/tyr/module/test/icon/small/logo.png"); //$NON-NLS-1$
cm.setLogoLarge("net/laubenberger/tyr/module/test/icon/large/logo.png"); //$NON-NLS-1$
try {
cm.setUrl(new URL("http://dev.laubenberger.net/")); //$NON-NLS-1$
// cm.setUpdateLocation(new
// URL("file://User/slaubenberger/Desktop/test_update.xml"));
} catch (MalformedURLException ex) {
// should never happen!
log.error("URL invalid", ex); //$NON-NLS-1$
}
try {
HelperXml.serialize(new File(cm.getName() + FileType.CONFIGURATION.getExtension()), cm);
} catch (JAXBException ex) {
log.error("Could not write the configration file", ex); //$NON-NLS-1$
}
}
{
dialogAbout = new DialogAbout(this);
dialogData = new DialogData(this);
dialogDb = new DialogDb(this);
dialogComponents = new DialogComponents(this);
}
public TestImpl(final ModuleConfig moduleConfig, final ModuleData moduleData, final Callback callback,
final ScalableIcon logo, final File dirDB) {
super(moduleConfig, moduleData, callback, logo, dirDB);
if (log.isTraceEnabled()) log.trace(HelperLog.constructor(moduleConfig, moduleData, callback, logo, dirDB));
}
/*
* Implemented methods
*/
@Override
public synchronized void exit(final int returnCode) {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart(returnCode));
isExit = true;
getModuleData().addValue(KEY_LAST_RUN, new Date());
for (final Worker worker : model.getModelWorker().getWorkers()) {
while (worker.cancel(false))
; // TODO endless loop?
}
if (log.isDebugEnabled()) log.debug("Test says byebye!");
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
@Override
public List<Object> getMenuItems() {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart());
final List<Object> result = new ArrayList<Object>();
result.add(new ActionData());
result.add(new ActionDb());
result.add(new ActionThread());
result.add(new ActionTask());
result.add(new ActionMessage());
result.add(new Separator());
result.add(new ActionComponents());
result.add(new Separator());
result.add(new ActionAbout());
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit(result));
return result;
}
@Override
public void localeChanged(final Event<Localizer> event) {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart(event));
for (final Dialog dialog : dialogs) {
dialog.createAndShowGUI();
}
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
@Override
public void lookAndFeelChanged() {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart());
for (final JDialog dialog : dialogs) {
SwingUtilities.updateComponentTreeUI(dialog);
dialog.pack();
}
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
@Override
public void fontSizeChanged() {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart());
for (final JDialog dialog : dialogs) {
dialog.pack();
}
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
@Override
public void iconSizeChanged() {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart());
for (final Dialog dialog : dialogs) {
dialog.createAndShowGUI();
}
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
@Override
public Collection<Dialog> getDialogs() {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart());
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit(dialogs));
return dialogs;
}
@Override
public void start(final Event<Worker> event) {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart(event));
model.getModelWorker().add(event.getSource());
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
@Override
public void done(final Event<Worker> event) {
if (log.isDebugEnabled()) log.debug(HelperLog.methodStart(event));
getCallback().removeWorker(event.getSource());
if (!isExit) {
model.getModelWorker().remove(event.getSource());
}
if (log.isDebugEnabled()) log.debug(HelperLog.methodExit());
}
@Override
public View getView() {
// must not be implemented
return null;
}
@Override
public void setModel(final ModelApplication arg0) {
// must not be implemented
}
@Override
public void setView(final View arg0) {
// must not be implemented
}
/*
* Inner classes
*/
private class ActionData extends ActionAbstract {
private static final long serialVersionUID = 105006621470300297L;
public ActionData() {
super(localizer.getValue(HelperResource.RES_ACTION_DATA), getCallback().getScaledIcon(Icons.DATA), localizer
.getTooltip(HelperResource.RES_ACTION_DATA), localizer.getMnemonic(HelperResource.RES_ACTION_DATA),
localizer.getAccelerator(HelperResource.RES_ACTION_DATA));
}
@Override
public void actionPerformed(final ActionEvent e) {
dialogData.createAndShowGUI();
}
}
private class ActionDb extends ActionAbstract {
private static final long serialVersionUID = 9072848516956733674L;
public ActionDb() {
super(localizer.getValue(HelperResource.RES_ACTION_DB), getCallback().getScaledIcon(Icons.DB), localizer
.getTooltip(HelperResource.RES_ACTION_DB), localizer.getMnemonic(HelperResource.RES_ACTION_DB),
localizer.getAccelerator(HelperResource.RES_ACTION_DB));
}
@Override
public void actionPerformed(final ActionEvent e) {
dialogDb.createAndShowGUI();
}
}
private class ActionThread extends ActionAbstract {
private static final long serialVersionUID = 4161586338566306702L;
public ActionThread() {
super(localizer.getValue(HelperResource.RES_ACTION_THREAD), getCallback().getScaledIcon(Icons.THREAD),
localizer.getTooltip(HelperResource.RES_ACTION_THREAD), localizer
.getMnemonic(HelperResource.RES_ACTION_THREAD), localizer
.getAccelerator(HelperResource.RES_ACTION_THREAD));
}
@Override
public void actionPerformed(final ActionEvent e) {
new DialogThread(TestImpl.this).createAndShowGUI();
}
}
private class ActionTask extends ActionAbstract {
private static final long serialVersionUID = -6383063323936181122L;
public ActionTask() {
super(localizer.getValue(HelperResource.RES_ACTION_TASK), getCallback().getScaledIcon(Icons.TASK), localizer
.getTooltip(HelperResource.RES_ACTION_TASK), localizer.getMnemonic(HelperResource.RES_ACTION_TASK),
localizer.getAccelerator(HelperResource.RES_ACTION_TASK));
}
@Override
public void actionPerformed(final ActionEvent e) {
final Worker worker = new WorkerAbstract<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
fireWorkerStart();
while (!isCancelled()) {
Thread.sleep(250);
}
return null;
}
};
worker.addListener(TestImpl.this);
getCallback().addWorker(worker, localizer.getValue(HelperResource.RES_ACTION_TASK), "working...", Icons.TASK);
// worker.execute();
final Thread thread = new Thread(worker);
thread.start();
// ....
}
}
private class ActionMessage extends ActionAbstract {
private static final long serialVersionUID = -6069743810336885345L;
public ActionMessage() {
super(localizer.getValue(HelperResource.RES_ACTION_MESSAGE), getCallback().getScaledIcon(Icons.MESSAGE),
localizer.getTooltip(HelperResource.RES_ACTION_MESSAGE), localizer
.getMnemonic(HelperResource.RES_ACTION_MESSAGE), localizer
.getAccelerator(HelperResource.RES_ACTION_MESSAGE));
}
@Override
public void actionPerformed(final ActionEvent e) {
// getCallback().displayMessage(localizer.getValue(HelperResource.RES_ACTION_MESSAGE),
// "Hello world!", TrayIcon.MessageType.NONE);
getCallback().displayMessage(null, "Hello world!", MessageType.INFO);
}
}
private class ActionComponents extends ActionAbstract {
private static final long serialVersionUID = 3634669752305335991L;
public ActionComponents() {
super(localizer.getValue(HelperResource.RES_ACTION_COMPONENTS), getCallback().getScaledIcon(Icons.COMPONENTS),
localizer.getTooltip(HelperResource.RES_ACTION_COMPONENTS), localizer
.getMnemonic(HelperResource.RES_ACTION_COMPONENTS), localizer
.getAccelerator(HelperResource.RES_ACTION_COMPONENTS));
}
@Override
public void actionPerformed(final ActionEvent e) {
dialogComponents.createAndShowGUI();
}
}
private class ActionAbout extends ActionAbstract {
private static final long serialVersionUID = -5430835616592091539L;
public ActionAbout() {
super(localizer.getValue(HelperResource.RES_ACTION_ABOUT), getCallback().getScaledIcon(Icon.ABOUT), localizer
.getTooltip(HelperResource.RES_ACTION_ABOUT), localizer.getMnemonic(HelperResource.RES_ACTION_ABOUT),
localizer.getAccelerator(HelperResource.RES_ACTION_ABOUT));
}
@Override
public void actionPerformed(final ActionEvent e) {
dialogAbout.createAndShowGUI();
}
}
}