/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.cluster.view.internal; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import de.rcenvironment.core.utils.cluster.ClusterJobInformation; import de.rcenvironment.core.utils.cluster.ClusterService; /** * Model holding job information entries and connected cluster items. * * @author Doreen Seider */ public class ClusterJobInformationModel { /** Constant shown in the drop down menu of no cluster connection is active. */ public static final String NOT_CONNECTED = Messages.notConnectedSelection; private static ClusterJobInformationModel instance = null; private Map<String, Set<ClusterJobInformation>> clusterJobInformationMap = new HashMap<String, Set<ClusterJobInformation>>(); private Map<String, ClusterConnectionInformation> connectionInformationMap = new HashMap<String, ClusterConnectionInformation>(); private Map<String, ClusterService> connectedClustersMap = new HashMap<String, ClusterService>(); private String selectedConnectedConfigurationName = NOT_CONNECTED; protected static synchronized ClusterJobInformationModel getInstance() { if (null == instance) { instance = new ClusterJobInformationModel(); } return instance; } protected synchronized Set<ClusterJobInformation> getClusterJobInformation() { if (selectedConnectedConfigurationName == null) { throw new IllegalArgumentException("no cluster set as selected"); } else if (selectedConnectedConfigurationName.equals(NOT_CONNECTED)) { return new HashSet<ClusterJobInformation>(); } else { return clusterJobInformationMap.get(selectedConnectedConfigurationName); } } protected synchronized void setSelectedConnectedConfigurationName(String configurationName) { if (connectedClustersMap.containsKey(configurationName) || configurationName.equals(NOT_CONNECTED)) { this.selectedConnectedConfigurationName = configurationName; } } protected synchronized void addClusterConnectionInformation(String configurationName, ClusterConnectionInformation connectionInformation) { connectionInformationMap.put(configurationName, connectionInformation); } protected synchronized ClusterConnectionInformation getClusterConnectionInformation(String configurationName) { if (!connectionInformationMap.containsKey(configurationName)) { throw new IllegalArgumentException("no cluster connection information available for: " + configurationName); } return connectionInformationMap.get(configurationName); } protected synchronized String[] getConnectedConfigurationNames() { if (connectedClustersMap.isEmpty()) { return new String[] { NOT_CONNECTED }; } else { return connectedClustersMap.keySet().toArray(new String[connectedClustersMap.size()]); } } protected synchronized void getUpdateFromCluster() throws IOException { if (selectedConnectedConfigurationName == null) { throw new IllegalArgumentException("no cluster set as selected"); } else if (!selectedConnectedConfigurationName.equals(NOT_CONNECTED)) { clusterJobInformationMap.put(selectedConnectedConfigurationName, connectedClustersMap.get(selectedConnectedConfigurationName).fetchClusterJobInformation()); connectionInformationMap.get(selectedConnectedConfigurationName).setLastUpdate(new Date()); } } protected synchronized void addConnectedCluster(String configurationName, ClusterService jobInformationService) { connectedClustersMap.put(configurationName, jobInformationService); } protected synchronized void removeConnectedCluster(String configurationName) { connectedClustersMap.remove(configurationName); connectionInformationMap.remove(configurationName); if (configurationName.equals(selectedConnectedConfigurationName)) { if (connectedClustersMap.isEmpty()) { setSelectedConnectedConfigurationName(NOT_CONNECTED); } else { setSelectedConnectedConfigurationName(connectedClustersMap.keySet().iterator().next()); } } } // TODO not really part of the model. should be extracted in extra class. for now added it here // to keep it simple -seid_do protected ClusterService getClusterInformationService() { return connectedClustersMap.get(selectedConnectedConfigurationName); } }