annotate src/viewer_swing/java/com/glavsoft/viewer/swing/gui/ConnectionsHistory.java @ 52:472a9bcacb21 draft default tip

TightVNC 2.7.1.0
author you@cr.ie.u-ryukyu.ac.jp
date Wed, 07 Aug 2013 19:01:17 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 package com.glavsoft.viewer.swing.gui;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
2
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
3 import com.glavsoft.rfb.protocol.ProtocolSettings;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 import com.glavsoft.utils.Strings;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
5 import com.glavsoft.viewer.mvp.Model;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6 import com.glavsoft.viewer.swing.ConnectionParams;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 import com.glavsoft.viewer.UiSettings;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 import com.glavsoft.viewer.UiSettingsData;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 import java.io.*;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11 import java.security.AccessControlException;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 import java.util.*;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 import java.util.logging.Logger;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 import java.util.prefs.BackingStoreException;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15 import java.util.prefs.Preferences;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 /**
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 * @author dime at tightvnc.com
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 */
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20 public class ConnectionsHistory implements Model {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21 private static int MAX_ITEMS = 32;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 public static final String CONNECTIONS_HISTORY_ROOT_NODE = "com/glavsoft/viewer/connectionsHistory";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
23 public static final String NODE_HOST_NAME = "hostName";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
24 public static final String NODE_PORT_NUMBER = "portNumber";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
25 public static final String NODE_SSH_USER_NAME = "sshUserName";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
26 public static final String NODE_SSH_HOST_NAME = "sshHostName";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
27 public static final String NODE_SSH_PORT_NUMBER = "sshPortNumber";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28 public static final String NODE_USE_SSH = "useSsh";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
29 public static final String NODE_PROTOCOL_SETTINGS = "protocolSettings";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
30 public static final String NODE_UI_SETTINGS = "uiSettings";
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31 private final Logger logger;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
32
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
33 private Map<ConnectionParams, ProtocolSettings> protocolSettingsMap;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
34 private Map<ConnectionParams, UiSettingsData> uiSettingsDataMap;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
35 LinkedList<ConnectionParams> connections;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
37 public ConnectionsHistory() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 logger = Logger.getLogger(getClass().getName());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
39 init();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 retrieve();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
41 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
42
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
43 private void init() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
44 protocolSettingsMap = new HashMap<ConnectionParams, ProtocolSettings>();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
45 uiSettingsDataMap = new HashMap<ConnectionParams, UiSettingsData>();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
46 connections = new LinkedList<ConnectionParams>();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
47 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
48
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49 private void retrieve() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
50 Preferences connectionsHistoryNode;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
51 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
52 connectionsHistoryNode = getConnectionHistoryNode();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
53 } catch (AccessControlException ace) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 return;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
55 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
57 final String[] orderNums;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
58 orderNums = connectionsHistoryNode.childrenNames();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
59 SortedMap<Integer, ConnectionParams> conns = new TreeMap<Integer, ConnectionParams>();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
60 HashSet<ConnectionParams> uniques = new HashSet<ConnectionParams>();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 for (String orderNum : orderNums) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
62 int num = 0;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
63 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
64 num = Integer.parseInt(orderNum);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
65 } catch (NumberFormatException skip) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
66 //nop
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
67 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
68 Preferences node = connectionsHistoryNode.node(orderNum);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
69 String hostName = node.get(NODE_HOST_NAME, null);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
70 if (null == hostName) continue; // skip entries without hostName field
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
71 ConnectionParams cp = new ConnectionParams(hostName, node.getInt(NODE_PORT_NUMBER, 0),
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
72 node.getBoolean(NODE_USE_SSH, false), node.get(NODE_SSH_HOST_NAME, ""), node.getInt(NODE_SSH_PORT_NUMBER, 0), node.get(NODE_SSH_USER_NAME, "")
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
73 );
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
74 if (uniques.contains(cp)) continue; // skip duplicates
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
75 uniques.add(cp);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
76 conns.put(num, cp);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
77 logger.finest("deserialialize: " + cp.toPrint());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
78 retrieveProtocolSettings(node, cp);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
79 retrieveUiSettings(node, cp);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
80 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
81 int itemsCount = 0;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
82 for (ConnectionParams cp : conns.values()) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
83 if (itemsCount < MAX_ITEMS) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
84 connections.add(cp);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
85 } else {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
86 connectionsHistoryNode.node(cp.hostName).removeNode();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
87 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
88 ++itemsCount;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
89 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
90 } catch (BackingStoreException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
91 logger.severe("Cannot retrieve connections history info: " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
92 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
93 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
94
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
95 private void retrieveUiSettings(Preferences node, ConnectionParams cp) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
96 byte[] bytes = node.getByteArray(NODE_UI_SETTINGS, new byte[0]);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
97 if (bytes.length != 0) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
98 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
99 UiSettingsData settings = (UiSettingsData) (new ObjectInputStream(
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
100 new ByteArrayInputStream(bytes))).readObject();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
101 uiSettingsDataMap.put(cp, settings);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
102 logger.finest("deserialialize: " + settings);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
103 } catch (IOException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
104 logger.info("Cannot deserialize UiSettings: " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
105 } catch (ClassNotFoundException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
106 logger.severe("Cannot deserialize UiSettings : " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
107 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
108 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
109 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
110
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
111 private void retrieveProtocolSettings(Preferences node, ConnectionParams cp) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
112 byte[] bytes = node.getByteArray(NODE_PROTOCOL_SETTINGS, new byte[0]);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
113 if (bytes.length != 0) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
114 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
115 ProtocolSettings settings = (ProtocolSettings) (new ObjectInputStream(
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
116 new ByteArrayInputStream(bytes))).readObject();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
117 settings.refine();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
118 protocolSettingsMap.put(cp, settings);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
119 logger.finest("deserialialize: " + settings);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
120 } catch (IOException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
121 logger.info("Cannot deserialize ProtocolSettings: " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
122 } catch (ClassNotFoundException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
123 logger.severe("Cannot deserialize ProtocolSettings : " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
124 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
125 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
126 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
127
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
128 /**
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
129 * Implicit Model interface
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
130 */
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
131 @SuppressWarnings("UnusedDeclaration")
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
132 public LinkedList<ConnectionParams> getConnectionsList() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
133 return connections;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
134 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
135
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
136 public ProtocolSettings getProtocolSettings(ConnectionParams cp) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
137 return protocolSettingsMap.get(cp);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
138 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
139
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
140 public UiSettingsData getUiSettingsData(ConnectionParams cp) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
141 return uiSettingsDataMap.get(cp);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
142 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
143
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
144 public void save() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
145 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
146 cleanStorage();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
147 Preferences connectionsHistoryNode = getConnectionHistoryNode();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
148 int num = 0;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
149 for (ConnectionParams cp : connections) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
150 if (num >= MAX_ITEMS) break;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
151 if ( ! Strings.isTrimmedEmpty(cp.hostName)) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
152 addNode(cp, connectionsHistoryNode, num++);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
153 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
154 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
155 } catch (AccessControlException ace) { /*nop*/ }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
156 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
157
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
158
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
159 public void clear() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
160 cleanStorage();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
161 init();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
162 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
163
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
164 private void cleanStorage() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
165 Preferences connectionsHistoryNode = getConnectionHistoryNode();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
166 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
167 for (String host : connectionsHistoryNode.childrenNames()) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
168 connectionsHistoryNode.node(host).removeNode();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
169 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
170 } catch (BackingStoreException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
171 logger.severe("Cannot remove node: " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
172 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
173 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
174
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
175 private Preferences getConnectionHistoryNode() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
176 Preferences root = Preferences.userRoot();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
177 return root.node(CONNECTIONS_HISTORY_ROOT_NODE);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
178 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
179
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
180 private void addNode(ConnectionParams connectionParams, Preferences connectionsHistoryNode, int orderNum) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
181 ProtocolSettings protocolSettings = protocolSettingsMap.get(connectionParams);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
182 UiSettingsData uiSettingsData = uiSettingsDataMap.get(connectionParams);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
183 final Preferences node = connectionsHistoryNode.node(String.valueOf(orderNum));
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
184 serializeConnectionParams(node, connectionParams);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
185 serializeProtocolSettings(node, protocolSettings);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
186 serializeUiSettingsData(node, uiSettingsData);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
187 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
188 node.flush();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
189 } catch (BackingStoreException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
190 logger.severe("Cannot retrieve connections history info: " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
191 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
192 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
193
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
194 private void serializeUiSettingsData(Preferences node, UiSettingsData uiSettingsData) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
195 if (uiSettingsData != null) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
196 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
197 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
198 ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
199 objectOutputStream.writeObject(uiSettingsData);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
200 node.putByteArray(NODE_UI_SETTINGS, byteArrayOutputStream.toByteArray());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
201 logger.finest("serialized (" + node.name() + ") " + uiSettingsData);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
202 } catch (IOException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
203 logger.severe("Cannot serialize UiSettings: " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
204 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
205 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
206 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
207
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
208 private void serializeProtocolSettings(Preferences node, ProtocolSettings protocolSettings) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
209 if (protocolSettings != null) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
210 try {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
211 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
212 ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
213 objectOutputStream.writeObject(protocolSettings);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
214 node.putByteArray(NODE_PROTOCOL_SETTINGS, byteArrayOutputStream.toByteArray());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
215 logger.finest("serialized (" + node.name() + ") " + protocolSettings);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
216 } catch (IOException e) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
217 logger.severe("Cannot serialize ProtocolSettings: " + e.getMessage());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
218 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
219 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
220 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
221
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
222 private void serializeConnectionParams(Preferences node, ConnectionParams connectionParams) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
223 node.put(NODE_HOST_NAME, connectionParams.hostName);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
224 node.putInt(NODE_PORT_NUMBER, connectionParams.getPortNumber());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
225 if (connectionParams.useSsh()) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
226 node.putBoolean(NODE_USE_SSH, connectionParams.useSsh());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
227 node.put(NODE_SSH_USER_NAME, connectionParams.sshUserName != null ? connectionParams.sshUserName: "");
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
228 node.put(NODE_SSH_HOST_NAME, connectionParams.sshHostName != null ? connectionParams.sshHostName: "");
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
229 node.putInt(NODE_SSH_PORT_NUMBER, connectionParams.getSshPortNumber());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
230 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
231 logger.finest("serialized (" + node.name() + ") " + connectionParams.toPrint());
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
232 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
233
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
234 public void reorder(ConnectionParams connectionParams) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
235 reorder(connectionParams, getProtocolSettings(connectionParams), getUiSettingsData(connectionParams));
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
236 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
237
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
238 public void reorder(ConnectionParams connectionParams, ProtocolSettings protocolSettings, UiSettings uiSettings) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
239 reorder(connectionParams, protocolSettings, uiSettings != null? uiSettings.getData() : null);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
240 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
241
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
242 private void reorder(ConnectionParams connectionParams, ProtocolSettings protocolSettings, UiSettingsData uiSettingsData) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
243 while (connections.remove(connectionParams)) {/*empty - remove all occurrences (if any)*/}
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
244 LinkedList<ConnectionParams> cpList = new LinkedList<ConnectionParams>();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
245 cpList.addAll(connections);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
246
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
247 connections.clear();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
248 connections.add(new ConnectionParams(connectionParams));
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
249 connections.addAll(cpList);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
250 storeSettings(connectionParams, protocolSettings, uiSettingsData);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
251 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
252
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
253 private void storeSettings(ConnectionParams connectionParams, ProtocolSettings protocolSettings, UiSettingsData uiSettingsData) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
254 if (protocolSettings != null) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
255 ProtocolSettings savedSettings = protocolSettingsMap.get(connectionParams);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
256 if (savedSettings != null) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
257 savedSettings.copyDataFrom(protocolSettings);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
258 } else {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
259 protocolSettingsMap.put(new ConnectionParams(connectionParams), new ProtocolSettings(protocolSettings));
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
260 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
261 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
262 if (uiSettingsData != null) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
263 uiSettingsDataMap.put(new ConnectionParams(connectionParams), new UiSettingsData(uiSettingsData));
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
264 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
265 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
266
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
267 /**
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
268 * Search most suitable connectionParams (cp) from history.
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
269 * When history is empty, returns original parameter.
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
270 * When original parameter is empty (null or hostName is empty) returns the very first cp from history.
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
271 * Then subsequently compare cp from history with original for most fields will match in sequent of
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
272 * hostName, portNumber, useSsh, sshHostName, sshPortName, sshPortNumber.
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
273 * When any match found it returns.
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
274 * When no matches found returns the very first cp from history.
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
275 *
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
276 * @param orig connectionParams to search
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
277 * @return most suitable cp
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
278 */
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
279 public ConnectionParams getMostSuitableConnection(ConnectionParams orig) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
280 ConnectionParams res = connections.isEmpty()? orig: connections.get(0);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
281 if (null == orig || Strings.isTrimmedEmpty(orig.hostName)) return res;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
282 for (ConnectionParams cp : connections) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
283 if (orig.equals(cp)) return cp;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
284 if (compareTextFields(orig.hostName, res.hostName, cp.hostName)) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
285 res = cp;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
286 continue;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
287 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
288 if (orig.hostName.equals(cp.hostName) &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
289 comparePorts(orig.getPortNumber(), res.getPortNumber(), cp.getPortNumber())) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
290 res = cp;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
291 continue;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
292 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
293 if (orig.hostName.equals(cp.hostName) &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
294 orig.getPortNumber() == cp.getPortNumber() &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
295 orig.useSsh() == cp.useSsh() && orig.useSsh() != res.useSsh()) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
296 res = cp;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
297 continue;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
298 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
299 if (orig.hostName.equals(cp.hostName) &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
300 orig.getPortNumber() == cp.getPortNumber() &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
301 orig.useSsh() && cp.useSsh() &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
302 compareTextFields(orig.sshHostName, res.sshHostName, cp.sshHostName)) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
303 res = cp;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
304 continue;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
305 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
306 if (orig.hostName.equals(cp.hostName) &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
307 orig.getPortNumber() == cp.getPortNumber() &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
308 orig.useSsh() && cp.useSsh() &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
309 orig.sshHostName != null && orig.sshHostName.equals(cp.hostName) &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
310 comparePorts(orig.getSshPortNumber(), res.getSshPortNumber(), cp.getSshPortNumber())) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
311 res = cp;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
312 continue;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
313 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
314 if (orig.hostName.equals(cp.hostName) &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
315 orig.getPortNumber() == cp.getPortNumber() &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
316 orig.useSsh() && cp.useSsh() &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
317 orig.sshHostName != null && orig.sshHostName.equals(cp.hostName) &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
318 orig.getSshPortNumber() == cp.getSshPortNumber() &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
319 compareTextFields(orig.sshUserName, res.sshUserName, cp.sshUserName)) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
320 res = cp;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
321 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
322 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
323 return res;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
324 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
325
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
326 private boolean comparePorts(int orig, int res, int test) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
327 return orig == test && orig != res;
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
328 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
329
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
330 private boolean compareTextFields(String orig, String res, String test) {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
331 return (orig != null && test != null && res != null) &&
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
332 orig.equals(test) && ! orig.equals(res);
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
333 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
334
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
335 public boolean isEmpty() {
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
336 return connections.isEmpty();
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
337 }
472a9bcacb21 TightVNC 2.7.1.0
you@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
338 }