// Path: headlands-ui/src/main/java/com/airhacks/headlands/CacheAccessor.java
// public class CacheAccessor {
// 
//     private ObjectProperty<Cache<String, String>> currentCache;
//     private CachingProvider cachingProvider;
//     private CacheManager cacheManager;
// 
//     private SimpleBooleanProperty cacheStarted;
// 
//     private ExecutorService executor;
// 
//     @PostConstruct
//     public void initialize() {
//         System.setProperty("hazelcast.jcache.provider.type", "server");
//         this.currentCache = new SimpleObjectProperty<>();
//         this.cacheStarted = new SimpleBooleanProperty();
//         this.executor = Executors.newCachedThreadPool();
//     }
// 
//     public void store(String keyString, String valueString) {
//         getCurrentCache().put(keyString, valueString);
//     }
// 
//     public List<String> getCacheNames() {
//         List<String> caches = new ArrayList<>();
//         Iterable<String> names = this.cacheManager.getCacheNames();
//         names.forEach(caches::add);
//         return caches;
//     }
// 
//     public void start() {
//         this.executor.submit(() -> {
//             this.cachingProvider = Caching.getCachingProvider();
//             this.cacheManager = cachingProvider.getCacheManager();
//             runLater(() -> this.cacheStarted.set(true));
//         }
//         );
//     }
// 
//     public BooleanProperty isStarted() {
//         return cacheStarted;
//     }
// 
//     public void stop() {
//         this.executor.submit(() -> {
//             getCurrentCache().close();
//             this.cacheManager.close();
//             this.cachingProvider.close();
//             runLater(() -> this.cacheStarted.set(false));
// 
//         });
// 
//     }
// 
//     public void createCache(String cacheName) {
//         MutableConfiguration<String, String> configuration = new MutableConfiguration<>();
// 
//         configuration.setStoreByValue(false).
//                 setTypes(String.class, String.class).
//                 setManagementEnabled(true).
//                 setStoreByValue(true);
// 
//         this.currentCache.set(cacheManager.
//                 createCache(cacheName, configuration));
// 
//     }
// 
//     public String getValue(String key) {
//         return getCurrentCache().get(key);
//     }
// 
//     public List<Cache.Entry<String, String>> getAllEntries() {
//         List<Cache.Entry<String, String>> entries = new ArrayList<>();
//         for (Cache.Entry<String, String> entry : getCurrentCache()) {
//             entries.add(entry);
//         }
//         return entries;
//     }
// 
//     public void remove(String key) {
//         getCurrentCache().remove(key);
//     }
// 
//     public void selectCache(String cacheName) {
//         this.currentCache.set(this.cacheManager.getCache(cacheName, String.class, String.class));
//     }
// 
//     Cache<String, String> getCurrentCache() {
//         return this.currentCache.get();
//     }
// 
//     public ObjectProperty<Cache<String, String>> currentCacheProperty() {
//         return this.currentCache;
//     }
// 
// }
// 
// Path: headlands-ui/src/main/java/com/airhacks/headlands/HazelcastDiscoverer.java
// public class HazelcastDiscoverer {
// 
//     public List<String> getMapNames() {
//         Set<HazelcastInstance> allHazelcastInstances = Hazelcast.getAllHazelcastInstances();
//         return allHazelcastInstances.stream().map(i -> i.getDistributedObjects()).
//                 map(this::convert).flatMap(list -> list.stream()).collect(Collectors.toList());
//     }
// 
//     List<String> convert(Collection<DistributedObject> distributedObjects) {
//         return distributedObjects.stream().map(this::extractCacheName).
//                 flatMap(list -> list.stream()).
//                 collect(Collectors.toList());
//     }
// 
//     List<String> extractCacheName(DistributedObject distributedObject) {
//         CacheDistributedObject cdo = (CacheDistributedObject) distributedObject;
//         return cdo.getService().getCacheConfigs().
//                 stream().map(c -> c.getName()).
//                 collect(Collectors.toList());
// 
//     }
// 
// }


import com.airhacks.headlands.CacheAccessor;
import com.airhacks.headlands.HazelcastDiscoverer;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import javafx.beans.property.BooleanProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javax.inject.Inject;
package com.airhacks.headlands.caches;


/**
 *
 * @author airhacks.com
 */
public class CachesPresenter implements Initializable {

    @FXML
    ComboBox<String> caches;

    @Inject
    CacheAccessor accessor;

    @FXML
    Button startButton;

    @FXML
    Button stopButton;

    @FXML
    Button createCacheButton;

    @FXML
    TextField cacheNameField;

    @Inject
    HazelcastDiscoverer discoverer;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        BooleanProperty started = this.accessor.isStarted();
        startButton.disableProperty().bind(started);
// Path: headlands-ui/src/main/java/com/airhacks/headlands/CacheAccessor.java
// public class CacheAccessor {
// 
//     private ObjectProperty<Cache<String, String>> currentCache;
//     private CachingProvider cachingProvider;
//     private CacheManager cacheManager;
// 
//     private SimpleBooleanProperty cacheStarted;
// 
//     private ExecutorService executor;
// 
//     @PostConstruct
//     public void initialize() {
//         System.setProperty("hazelcast.jcache.provider.type", "server");
//         this.currentCache = new SimpleObjectProperty<>();
//         this.cacheStarted = new SimpleBooleanProperty();
//         this.executor = Executors.newCachedThreadPool();
//     }
// 
//     public void store(String keyString, String valueString) {
//         getCurrentCache().put(keyString, valueString);
//     }
// 
//     public List<String> getCacheNames() {
//         List<String> caches = new ArrayList<>();
//         Iterable<String> names = this.cacheManager.getCacheNames();
//         names.forEach(caches::add);
//         return caches;
//     }
// 
//     public void start() {
//         this.executor.submit(() -> {
//             this.cachingProvider = Caching.getCachingProvider();
//             this.cacheManager = cachingProvider.getCacheManager();
//             runLater(() -> this.cacheStarted.set(true));
//         }
//         );
//     }
// 
//     public BooleanProperty isStarted() {
//         return cacheStarted;
//     }
// 
//     public void stop() {
//         this.executor.submit(() -> {
//             getCurrentCache().close();
//             this.cacheManager.close();
//             this.cachingProvider.close();
//             runLater(() -> this.cacheStarted.set(false));
// 
//         });
// 
//     }
// 
//     public void createCache(String cacheName) {
//         MutableConfiguration<String, String> configuration = new MutableConfiguration<>();
// 
//         configuration.setStoreByValue(false).
//                 setTypes(String.class, String.class).
//                 setManagementEnabled(true).
//                 setStoreByValue(true);
// 
//         this.currentCache.set(cacheManager.
//                 createCache(cacheName, configuration));
// 
//     }
// 
//     public String getValue(String key) {
//         return getCurrentCache().get(key);
//     }
// 
//     public List<Cache.Entry<String, String>> getAllEntries() {
//         List<Cache.Entry<String, String>> entries = new ArrayList<>();
//         for (Cache.Entry<String, String> entry : getCurrentCache()) {
//             entries.add(entry);
//         }
//         return entries;
//     }
// 
//     public void remove(String key) {
//         getCurrentCache().remove(key);
//     }
// 
//     public void selectCache(String cacheName) {
//         this.currentCache.set(this.cacheManager.getCache(cacheName, String.class, String.class));
//     }
// 
//     Cache<String, String> getCurrentCache() {
//         return this.currentCache.get();
//     }
// 
//     public ObjectProperty<Cache<String, String>> currentCacheProperty() {
//         return this.currentCache;
//     }
// 
// }
// 
// Path: headlands-ui/src/main/java/com/airhacks/headlands/HazelcastDiscoverer.java
// public class HazelcastDiscoverer {
// 
//     public List<String> getMapNames() {
//         Set<HazelcastInstance> allHazelcastInstances = Hazelcast.getAllHazelcastInstances();
//         return allHazelcastInstances.stream().map(i -> i.getDistributedObjects()).
//                 map(this::convert).flatMap(list -> list.stream()).collect(Collectors.toList());
//     }
// 
//     List<String> convert(Collection<DistributedObject> distributedObjects) {
//         return distributedObjects.stream().map(this::extractCacheName).
//                 flatMap(list -> list.stream()).
//                 collect(Collectors.toList());
//     }
// 
//     List<String> extractCacheName(DistributedObject distributedObject) {
//         CacheDistributedObject cdo = (CacheDistributedObject) distributedObject;
//         return cdo.getService().getCacheConfigs().
//                 stream().map(c -> c.getName()).
//                 collect(Collectors.toList());
// 
//     }
// 
// }


// Path: headlands-ui/src/main/java/com/airhacks/headlands/caches/CachesPresenter.java
import com.airhacks.headlands.CacheAccessor;
import com.airhacks.headlands.HazelcastDiscoverer;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import javafx.beans.property.BooleanProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javax.inject.Inject;

package com.airhacks.headlands.caches;


/**
 *
 * @author airhacks.com
 */
public class CachesPresenter implements Initializable {

    @FXML
    ComboBox<String> caches;

    @Inject
    CacheAccessor accessor;

    @FXML
    Button startButton;

    @FXML
    Button stopButton;

    @FXML
    Button createCacheButton;

    @FXML
    TextField cacheNameField;

    @Inject
    HazelcastDiscoverer discoverer;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        BooleanProperty started = this.accessor.isStarted();
        startButton.disableProperty().bind(started);
        stopButton.disableProperty().bind(started.not());