/*
GNU General Public License
CacheWolf is a software for PocketPC, Win and Linux that
enables paperless caching.
It supports the sites geocaching.com and opencaching.de
Copyright (C) 2006 CacheWolf development team
See http://www.cachewolf.de/ for more information.
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; version 2 of the License.
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, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package CacheWolf.view.pda;
import CacheWolf.MainForm;
import CacheWolf.MainTab;
import CacheWolf.Preferences;
import CacheWolf.database.CacheDB;
import CacheWolf.database.CacheHolder;
import CacheWolf.database.CacheHolderDetail;
import CacheWolf.database.Travelbug;
import CacheWolf.database.TravelbugJourney;
import CacheWolf.imp.GCImporter;
import CacheWolf.utils.CWWrapper;
import CacheWolf.utils.MyLocale;
import ewe.sys.Vm;
public class PDATravelbugDetailMenu extends PDAMenu {
private static final String BROWSER = "browser";
private static final String SPIDER = "spider";
private static final String DELETE = "delete";
private static final String EXIT = "exit";
private static final String DROP = "drop";
private PDATravelbugDetailPanel view;
private PDATravelbugJourneyScreen journeyScreen;
public PDATravelbugDetailMenu(PDATravelbugDetailPanel view, PDATravelbugJourneyScreen journeyScreen) {
this.view = view;
this.journeyScreen = journeyScreen;
setTitle("TravelBugDetail - Menu");
addMenuItem(MyLocale.getMsg(6041, "Drop TB in cache"), DROP);
addMenuItem(MyLocale.getMsg(6044, "Get mission (and name)"), SPIDER);
addMenuItem(MyLocale.getMsg(6045, "Open on-line"), BROWSER);
addMenuItem(MyLocale.getMsg(6043, "Delete Travelbug"), DELETE);
addMenuItem(MyLocale.getMsg(6061, "Close"), EXIT);
buildMenu();
}
public void actionPerformed(String action) {
if (action.equals(DROP)) {
Travelbug tb = view.getTravelbug().getTb();
int curCacheNo = MainTab.itself.tablePanel.getSelectedCache();
CacheDB cacheDB = MainForm.profile.cacheDB;
if (curCacheNo >= 0 && curCacheNo < cacheDB.size()) {
CacheHolder ch = cacheDB.get(curCacheNo);
CacheHolderDetail cacheDetails = ch.getDetails();
cacheDetails.Travelbugs.add(tb);
journeyScreen.model.allTravelbugJourneys.addTbDrop(tb, MainForm.profile.name, ch.getCode());
ch.hasBugs(true);
ch.saveCacheDetails();
// Set Input fields to the new Values:
view.getInpToWaypoint().setText(view.getTravelbug().getToWaypoint());
view.getInpToProfile().setText(view.getTravelbug().getToProfile());
view.getInpToDate().setText(view.getTravelbug().getToDate());
// Save now. The action won't recognize the changes:
journeyScreen.model.allTravelbugJourneys.saveTravelbugsFile();
}
journeyScreen.setupTBButtons();
exit(0);
} else if (action.equals(BROWSER)) {
GCImporter spider = new GCImporter();
Vm.showWait(true);
// First check whether ID is set, if not get it
Travelbug tb = view.getTravelbug().getTb();
if (tb.getGuid().length() == 0) {
tb.setGuid(spider.getBugId(tb.getName()));
}
if (tb.getGuid().length() != 0) {
Vm.showWait(false);
try {
String s;
if (tb.getGuid().length() > 10)
s = "http://www.geocaching.com/track/details.aspx?guid=" + tb.getGuid();
else
s = "http://www.geocaching.com/track/details.aspx?id=" + tb.getGuid();
CWWrapper.exec(Preferences.itself().browser, s);
Preferences.itself().log("Executed: \"" + Preferences.itself().browser + "\" \"" + s + "\"");
} catch (Exception ioex) {
Preferences.itself().log("Ignored Exception", ioex, true);
}
}
spider.setOldGCLanguage();
exit(0);
} else if (action.equals(SPIDER)) {
Travelbug tb = view.getTravelbug().getTb();
GCImporter spider = new GCImporter();
Vm.showWait(true);
// if we have an ID, get mission by ID
if (tb.getGuid().length() != 0) {
tb.setMission(spider.getBugMissionByGuid(tb.getGuid()));
} else {
// try to get mission and name by tracking number
boolean suceeded = false;
if (tb.getTrackingNo().length() != 0) {
suceeded = spider.getBugMissionAndNameByTrackNr(tb);
}
// if this has't worked, try to get ID by name
if (!suceeded) {
tb.setGuid(spider.getBugId(tb.getName().trim()));
// if we have an ID now, get mission by ID
if (tb.getGuid().length() != 0) {
tb.setMission(spider.getBugMissionByGuid(tb.getGuid()));
}
}
}
journeyScreen.model.allTravelbugJourneys.saveTravelbugsFile();
Vm.showWait(false);
spider.setOldGCLanguage();
exit(0);
} else if (action.equals(DELETE)) {
// LOESCHEN DES TB's aus der Datenbank ist Boese!!!
// Erst mal eine Sicherheitesabfrage bauen:
int r = PDAOptionPane.showConfirmDialog(this.getFrame(), "Sind Sie Sicher???", "Wollen Sie wirklich den TB l�schen??");
if (r == PDAOptionPane.OK) {
for (int i = 0; i < journeyScreen.model.allTravelbugJourneys.size(); i++) {
TravelbugJourney tbJourney = journeyScreen.model.allTravelbugJourneys.getTBJourney(i);
if (tbJourney.getTb().getTrackingNo().equals(view.getTravelbug().getTb().getTrackingNo())) {
journeyScreen.model.allTravelbugJourneys.remove(i);
journeyScreen.model.allTravelbugJourneys.saveTravelbugsFile();
journeyScreen.setupTBButtons();
break;
}
}
}
} else if (action.equals(EXIT)) {
boolean changed = false;
if (!view.getInpName().text.equals(view.getTravelbug().getTb().getName())) {
view.getTravelbug().getTb().setName(view.getInpName().text);
changed = true;
}
if (!view.getInpTrackingNo().text.equals(view.getTravelbug().getTb().getTrackingNo())) {
view.getTravelbug().getTb().setTrackingNo(view.getInpTrackingNo().text);
changed = true;
}
if (!view.getInpFromProfile().text.equals(view.getTravelbug().getFromProfile())) {
view.getTravelbug().setFromProfile(view.getInpFromProfile().text);
changed = true;
}
if (!view.getInpFromWaypoint().text.equals(view.getTravelbug().getFromWaypoint())) {
view.getTravelbug().setFromWaypoint(view.getInpFromWaypoint().text);
changed = true;
}
if (!view.getInpFromDate().text.equals(view.getTravelbug().getFromDate())) {
view.getTravelbug().setFromDate(view.getInpFromDate().text);
changed = true;
}
if (view.getTravelbug().getFromLogged() != view.getChkFromLogged().state) {
view.getTravelbug().setFromLogged(view.getChkFromLogged().state);
changed = true;
}
if (!view.getInpToProfile().text.equals(view.getTravelbug().getToProfile())) {
view.getTravelbug().setToProfile(view.getInpToProfile().text);
changed = true;
}
if (!view.getInpToWaypoint().text.equals(view.getTravelbug().getToWaypoint())) {
view.getTravelbug().setToWaypoint(view.getInpToWaypoint().text);
changed = true;
}
if (!view.getInpToDate().text.equals(view.getTravelbug().getToDate())) {
view.getTravelbug().setToDate(view.getInpToDate().text);
changed = true;
}
if (view.getTravelbug().getToLogged() != view.getChkToLogged().state) {
view.getTravelbug().setToLogged(view.getChkToLogged().state);
changed = true;
}
if (changed) {
journeyScreen.model.allTravelbugJourneys.saveTravelbugsFile();
journeyScreen.createShowSet();
}
exit(1);
}
}
}