From dccfd18415131a22490c1b5f42867426b239dc1e Mon Sep 17 00:00:00 2001 From: Andreas Billmann Date: Sun, 15 Jun 2014 08:38:22 +0200 Subject: [PATCH] minimum list management implemented --- src/de/geofroggerfx/fx/GeoFroggerFXMain.java | 1 + .../fx/cachelist/CacheListController.java | 6 ++- .../geofroggerfx/fx/cachelist/cache_list.fxml | 45 ++++++++++++------- .../fx/geofrogger/GeofroggerController.java | 44 +++++++++++++++++- .../fx/geofrogger/geofrogger.fxml | 6 +++ .../geofroggerfx/fx/geofrogger_de.properties | 6 ++- .../geofroggerfx/fx/geofrogger_en.properties | 7 ++- src/de/geofroggerfx/model/CacheList.java | 4 +- src/de/geofroggerfx/service/CacheService.java | 13 ++++++ .../service/CacheServiceImpl.java | 27 +++++++++++ 10 files changed, 135 insertions(+), 24 deletions(-) diff --git a/src/de/geofroggerfx/fx/GeoFroggerFXMain.java b/src/de/geofroggerfx/fx/GeoFroggerFXMain.java index a01cdda..301fc60 100644 --- a/src/de/geofroggerfx/fx/GeoFroggerFXMain.java +++ b/src/de/geofroggerfx/fx/GeoFroggerFXMain.java @@ -33,6 +33,7 @@ import javafx.scene.text.Font; import javafx.stage.Stage; import org.jboss.weld.environment.se.Weld; import org.jboss.weld.environment.se.WeldContainer; +import org.scenicview.ScenicView; import javax.enterprise.util.AnnotationLiteral; diff --git a/src/de/geofroggerfx/fx/cachelist/CacheListController.java b/src/de/geofroggerfx/fx/cachelist/CacheListController.java index eb85ac4..fa768c1 100644 --- a/src/de/geofroggerfx/fx/cachelist/CacheListController.java +++ b/src/de/geofroggerfx/fx/cachelist/CacheListController.java @@ -41,6 +41,7 @@ import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.image.ImageView; import javafx.util.Callback; +import org.scenicview.ScenicView; import javax.inject.Inject; import java.net.URL; @@ -115,7 +116,7 @@ public class CacheListController implements Initializable { @SuppressWarnings("unchecked") private void resetCacheList() { List caches = (List) sessionContext.getData("cache-list"); - cacheNumber.setText("(" + caches.size() + ")"); + cacheNumber.setText(" " + caches.size()); cacheListView.getItems().setAll(caches); } @@ -153,6 +154,9 @@ public class CacheListController implements Initializable { addClasses(menuIcon, CACHE_LIST_ACTION_ICONS); menuIcon.setGraphic(new ImageView(IconManager.getIcon("iconmonstr-menu-icon.png", IconManager.IconSize.SMALL))); menuIcon.getItems().addAll(createSortMenu(rb)); + menuIcon.minHeightProperty().bind(cacheListComboBox.heightProperty()); + menuIcon.prefHeightProperty().bind(cacheListComboBox.heightProperty()); + menuIcon.maxHeightProperty().bind(cacheListComboBox.heightProperty()); } private Menu createSortMenu(final ResourceBundle rb) { diff --git a/src/de/geofroggerfx/fx/cachelist/cache_list.fxml b/src/de/geofroggerfx/fx/cachelist/cache_list.fxml index face900..d703d2e 100644 --- a/src/de/geofroggerfx/fx/cachelist/cache_list.fxml +++ b/src/de/geofroggerfx/fx/cachelist/cache_list.fxml @@ -1,32 +1,45 @@ + + + - - + + - + - - - - + + + + + + - + + + + + + + + + + + - - + diff --git a/src/de/geofroggerfx/fx/geofrogger/GeofroggerController.java b/src/de/geofroggerfx/fx/geofrogger/GeofroggerController.java index b1ae4d0..2d28acd 100644 --- a/src/de/geofroggerfx/fx/geofrogger/GeofroggerController.java +++ b/src/de/geofroggerfx/fx/geofrogger/GeofroggerController.java @@ -29,6 +29,7 @@ import de.geofroggerfx.application.ProgressEvent; import de.geofroggerfx.application.SessionContext; import de.geofroggerfx.gpx.GPXReader; import de.geofroggerfx.model.Cache; +import de.geofroggerfx.model.CacheList; import de.geofroggerfx.plugins.Plugin; import de.geofroggerfx.plugins.PluginService; import de.geofroggerfx.service.CacheService; @@ -39,19 +40,20 @@ import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.layout.BorderPane; -import javafx.scene.layout.Pane; import javafx.stage.FileChooser; import org.controlsfx.dialog.Dialog; +import org.controlsfx.dialog.Dialogs; +import org.scenicview.ScenicView; import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.List; +import java.util.Optional; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; @@ -183,6 +185,41 @@ public class GeofroggerController implements Initializable { // FXMLLoader.load() } + @FXML + public void newList(ActionEvent actionEvent) { + final Optional listNameOption = Dialogs. + create(). + title("New list"). + message("List name"). + showTextInput(); + if (hasValue(listNameOption)) { + final String listName = listNameOption.get().trim(); + if (cacheService.doesCacheListNameExist(listName)) { + Dialogs.create().message("List does already exist!").showError(); + } else { + CacheList list = new CacheList(); + list.setName(listName); + cacheService.storeCacheList(list); + sessionContext.setData("cache-lists", cacheService.getAllCacheLists()); + } + } + } + + + @FXML + public void deleteList(ActionEvent actionEvent) { + final Optional listOption = Dialogs. + create(). + title("Delete list"). + message("List name"). + showChoices(cacheService.getAllCacheLists()); + + if (listOption.isPresent()) { + cacheService.deleteCacheList(listOption.get()); + sessionContext.setData("cache-lists", cacheService.getAllCacheLists()); + } + } + @FXML public void exit(ActionEvent actionEvent) { Platform.exit(); @@ -195,6 +232,9 @@ public class GeofroggerController implements Initializable { }); } + private boolean hasValue(Optional listNameOption) { + return listNameOption.isPresent() && !listNameOption.get().trim().isEmpty(); + } private class LoadCacheListsFromDatabaseService extends Service { diff --git a/src/de/geofroggerfx/fx/geofrogger/geofrogger.fxml b/src/de/geofroggerfx/fx/geofrogger/geofrogger.fxml index 875c733..e77e432 100644 --- a/src/de/geofroggerfx/fx/geofrogger/geofrogger.fxml +++ b/src/de/geofroggerfx/fx/geofrogger/geofrogger.fxml @@ -18,6 +18,12 @@ + + + + + + diff --git a/src/de/geofroggerfx/fx/geofrogger_de.properties b/src/de/geofroggerfx/fx/geofrogger_de.properties index e8ba97a..b5f5327 100644 --- a/src/de/geofroggerfx/fx/geofrogger_de.properties +++ b/src/de/geofroggerfx/fx/geofrogger_de.properties @@ -5,11 +5,15 @@ menu.title.help = Hilfe menu.title.settings = Einstellungen menu.title.about = \u00dcber GeoFroggerFX menu.title.plugins = Plugins +menu.title.list = Listen +menu.title.list.new = Liste anlegen +menu.title.list.delete = Liste l\u00F6schen menu.title.sort = Sortieren menu.title.filter = Filtern -label.text.cache.list=Caches +label.text.cache.list=Liste: +label.text.cache.list.count=Anzahl: label.text.name=Name: label.text.difficulty=Schwierigkeit: label.text.terrain=Gel\u00E4nde diff --git a/src/de/geofroggerfx/fx/geofrogger_en.properties b/src/de/geofroggerfx/fx/geofrogger_en.properties index b6adbc4..5579b80 100644 --- a/src/de/geofroggerfx/fx/geofrogger_en.properties +++ b/src/de/geofroggerfx/fx/geofrogger_en.properties @@ -5,11 +5,16 @@ menu.title.help = Help menu.title.settings = Settings menu.title.about = About GeoFroggerFX menu.title.plugins = Plugins +menu.title.list = Lists +menu.title.list.new = New list +menu.title.list.delete = Delete list + menu.title.sort = Sort menu.title.filter = Filter -label.text.cache.list=Caches +label.text.cache.list=List: +label.text.cache.list.count=Number: label.text.name=Name: label.text.difficulty=Difficulty: label.text.terrain=Terrain: diff --git a/src/de/geofroggerfx/model/CacheList.java b/src/de/geofroggerfx/model/CacheList.java index 5dd6b9c..ab6e754 100644 --- a/src/de/geofroggerfx/model/CacheList.java +++ b/src/de/geofroggerfx/model/CacheList.java @@ -84,8 +84,6 @@ public class CacheList { @Override public String toString() { - return "CacheList{" + - "name='" + name + '\'' + - '}'; + return getName(); } } diff --git a/src/de/geofroggerfx/service/CacheService.java b/src/de/geofroggerfx/service/CacheService.java index 300ec1c..3177d45 100644 --- a/src/de/geofroggerfx/service/CacheService.java +++ b/src/de/geofroggerfx/service/CacheService.java @@ -63,9 +63,22 @@ public interface CacheService { */ List getAllCacheLists(); + /** + * Test if a cache list with the given name already exists + * @param name of the cache list + * @return true if a list with the given name exists + */ + boolean doesCacheListNameExist(String name); + /** * Stores a cache list * @param list list of caches */ void storeCacheList(CacheList list); + + /** + * Deletes a cache list + * @param cacheList deletes the given cache list + */ + void deleteCacheList(CacheList cacheList); } diff --git a/src/de/geofroggerfx/service/CacheServiceImpl.java b/src/de/geofroggerfx/service/CacheServiceImpl.java index 5940efe..970d322 100644 --- a/src/de/geofroggerfx/service/CacheServiceImpl.java +++ b/src/de/geofroggerfx/service/CacheServiceImpl.java @@ -135,6 +135,33 @@ public class CacheServiceImpl implements CacheService { return lists; } + @Override + public boolean doesCacheListNameExist(String name) { + boolean doesExist = false; + try { + EntityManager em = dbService.getEntityManager(); + String query = "select count(l) from CacheList l where l.name = :name"; + Long result = (Long)em.createQuery(query).setParameter("name", name).getSingleResult(); + doesExist = result > 0; + } catch (Exception e) { + e.printStackTrace(); + } + return doesExist; + } + + @Override + public void deleteCacheList(CacheList cacheList) { + EntityManager em = dbService.getEntityManager(); + try { + em.getTransaction().begin(); + em.remove(cacheList); + em.getTransaction().commit(); + } catch (Exception e) { + e.printStackTrace(); + em.getTransaction().rollback(); + } + } + /** * {@inheritDoc} */