/*
* Copyright (c) 2008 Keith A. Jaska
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package geriatricassistant.utils;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileFilter;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.osgi.service.log.LogService;
import com.buglabs.bug.base.pub.ITimeProvider;
import com.buglabs.bug.module.gps.pub.IPositionProvider;
import com.buglabs.bug.module.gps.pub.LatLon;
/**
* The Class GeriatricAssistantGUI. This class generates the GUI associated with
* the Geriatric Assistant application.
*
* @author Keith A. Jaska
*/
public class GeriatricAssistantGUI {
private Button btnPlay;
private Component compImages;
private Component compMain;
private MenuBar mbMain;
private MenuItem miImageViewer;
private MenuItem miMain;
private Menu mnuSwitchPerspective;
private Panel pnlMain;
private Panel pnlViewer;
private Panel pnlViewerControls;
private Frame fraMain = new Frame();
private CardLayout cardLayout;
private Image mainImage = Toolkit.getDefaultToolkit().getImage(
GeriatricAssistantGUI.class.getResource("/main.jpg"));
private Image viewerImage = Toolkit.getDefaultToolkit().getImage(
GeriatricAssistantGUI.class.getResource("/main.jpg"));
private Menu mnuSimulateFall;
private MenuItem miFall;
private ITimeProvider timeProvider;
private IPositionProvider positionProvider;
private LogService logService;
public GeriatricAssistantGUI(Frame frame, ITimeProvider timeProvider,
IPositionProvider positionProvider, LogService logService) {
this.timeProvider = timeProvider;
this.positionProvider = positionProvider;
this.logService = logService;
fraMain = frame;
createGUI();
}
private void createGUI() {
cardLayout = new CardLayout();
fraMain.setLayout(cardLayout);
createMenu();
createMainPanel();
createViewerPanel();
cardLayout.first(fraMain);
fraMain.show();
}
private void createMainPanel() {
pnlMain = new Panel();
compMain = new Component() {
public void paint(Graphics g) {
g.drawImage(mainImage, 0, 0, getWidth(), getHeight(), null);
}
};
pnlMain.setName("Main Panel");
pnlMain.setLayout(new BorderLayout());
compMain.setName("Main Canvas");
pnlMain.add(compMain, BorderLayout.CENTER);
fraMain.add(pnlMain, "MainScreen");
}
private void createViewerPanel() {
pnlViewer = new Panel();
compImages = new Component() {
public void paint(Graphics g) {
g.drawImage(viewerImage, 0, 0, getWidth(), getHeight(), null);
}
};
pnlViewerControls = new Panel();
btnPlay = new Button();
pnlViewer.setName("Viewer Panel");
pnlViewer.setLayout(new BorderLayout());
compImages.setName("Image Canvas");
pnlViewer.add(compImages, BorderLayout.CENTER);
pnlViewerControls.setName("Control Panel");
btnPlay.setLabel(">");
btnPlay.setName("Play");
btnPlay.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
logService.log(LogService.LOG_INFO, "Beginning image display.");
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyyMMdd");
String directory = sdf.format(new Date()) + File.separator;
File dir = new File(directory);
File[] files = dir.listFiles();
FileFilter fileFilter = new FileFilter() {
public boolean accept(File file) {
return file.getName().endsWith(".jpg");
}
};
files = dir.listFiles(fileFilter);
logService.log(LogService.LOG_INFO, files.length
+ " images will be displayed.");
for (int i = 0; i < files.length; i++) {
File file = files[i];
viewerImage = Toolkit.getDefaultToolkit().getImage(
file.getAbsolutePath());
compImages.repaint();
try {
// This should allow a user to watch an entire day in 12
// minutes.
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
logService.log(LogService.LOG_INFO, "Image display finished.");
}
});
pnlViewerControls.add(btnPlay);
pnlViewer.add(pnlViewerControls, BorderLayout.SOUTH);
fraMain.add(pnlViewer, "ImageViewer");
}
private void createMenu() {
mbMain = new MenuBar();
mnuSwitchPerspective = new Menu();
miMain = new MenuItem();
miImageViewer = new MenuItem();
mnuSimulateFall = new Menu();
miFall = new MenuItem();
mbMain.setName("Main Menu");
mnuSwitchPerspective.setLabel("Switch Perspective");
mnuSwitchPerspective.setName("mnuSwitchPerspective");
miMain.setLabel("Main");
miMain.setName("Main Menu Item");
miMain.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cardLayout.first(fraMain);
}
});
mnuSwitchPerspective.add(miMain);
miImageViewer.setLabel("Image Viewer");
miImageViewer.setName("Image Viewer Menu Item");
miImageViewer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cardLayout.last(fraMain);
}
});
mnuSwitchPerspective.add(miImageViewer);
mbMain.add(mnuSwitchPerspective);
mnuSimulateFall.setLabel("Simulate Fall");
mnuSimulateFall.setName("mnuSimulateFall");
miFall.setLabel("Fall");
miFall.setName("Fall Menu Item");
miFall.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
LatLon position = positionProvider.getLatitudeLongitude();
logService.log(LogService.LOG_INFO,
"Requesting a map image from Yahoo! Maps API using the following coordinates: "
+ position.latitude + "," + position.longitude
+ ".");
String imageUrl = WSUtilities.generateYahooMap(
position.latitude, position.longitude);
WSUtilities.postImageToTumblr(imageUrl, position.latitude,
position.longitude, timeProvider.getTime());
logService.log(LogService.LOG_INFO, "Posted to tumblr.");
}
});
mnuSimulateFall.add(miFall);
mbMain.add(mnuSimulateFall);
fraMain.setMenuBar(mbMain);
}
}