接続先のサーバのIPアドレスが異なっても同じマシンであれば、前回のセッションを引き継いで再開できるように修正
@@ -22,6 +22,7 @@ | ||
22 | 22 | public static final String PLUGIN = "plugin.xml"; |
23 | 23 | public static final String FONT = "font.xml"; |
24 | 24 | public static final String SERVER = "serverstat.xml"; |
25 | + public static final String SESSION = "session.xml"; | |
25 | 26 | |
26 | 27 | private static String prefix = null; |
27 | 28 |
@@ -3,6 +3,7 @@ | ||
3 | 3 | */ |
4 | 4 | package jp.sf.chaplet.core.ui; |
5 | 5 | |
6 | +import java.awt.Cursor; | |
6 | 7 | import java.awt.Frame; |
7 | 8 | import java.awt.GridBagConstraints; |
8 | 9 | import java.awt.GridBagLayout; |
@@ -27,6 +28,7 @@ | ||
27 | 28 | |
28 | 29 | import jp.sf.chaplet.StorageUtils; |
29 | 30 | import jp.sf.chaplet.core.client.ServerAddress; |
31 | +import jp.sf.chaplet.core.client.Session; | |
30 | 32 | |
31 | 33 | /** |
32 | 34 | * 接続設定ダイアログ。<br> |
@@ -54,18 +56,28 @@ | ||
54 | 56 | |
55 | 57 | private JList historyList = null; |
56 | 58 | |
57 | - private DefaultListModel historyListModel = null; // @jve:decl-index=0:visual-constraint="389,12" | |
59 | + private DefaultListModel historyListModel = null; // @jve:decl-index=0:visual-constraint="461,10" | |
58 | 60 | |
59 | 61 | private JButton cancelButton = null; |
60 | 62 | |
61 | 63 | private Action connectAction; // @jve:decl-index=0: |
62 | 64 | |
63 | - private DefaultFormatter portFormatter = null; // @jve:decl-index=0:visual-constraint="386,63" | |
65 | + private DefaultFormatter portFormatter = null; // @jve:decl-index=0:visual-constraint="474,58" | |
64 | 66 | |
65 | - private DefaultFormatterFactory formatterFactory = null; // @jve:decl-index=0:visual-constraint="381,110" | |
67 | + private DefaultFormatterFactory formatterFactory = null; // @jve:decl-index=0:visual-constraint="472,103" | |
66 | 68 | |
67 | 69 | private List<ServerAddress> addressList; // @jve:decl-index=0: |
70 | + | |
71 | + private List<Session> sessionList; | |
68 | 72 | |
73 | + private JScrollPane scroll2Pane = null; | |
74 | + | |
75 | + private JList sessionIdList = null; | |
76 | + | |
77 | + private JLabel jLabel2 = null; | |
78 | + | |
79 | + private DefaultListModel sessionIdListModel = null; // @jve:decl-index=0:visual-constraint="459,155" | |
80 | + | |
69 | 81 | /** |
70 | 82 | * @param owner |
71 | 83 | */ |
@@ -85,7 +97,7 @@ | ||
85 | 97 | */ |
86 | 98 | @SuppressWarnings("unchecked") |
87 | 99 | private void initialize() { |
88 | - this.setSize(335, 200); | |
100 | + this.setSize(363, 200); | |
89 | 101 | this.setTitle("接続設定"); |
90 | 102 | this.setContentPane(getJContentPane()); |
91 | 103 | addressList = (List<ServerAddress>) StorageUtils.load("server.xml", ArrayList.class); |
@@ -102,6 +114,13 @@ | ||
102 | 114 | getPortText().setText(String.valueOf(address.getPort())); |
103 | 115 | getPortText().setValue(address.getPort()); |
104 | 116 | } |
117 | + getSessionIdListModel().addElement(new Session()); | |
118 | + sessionList = (List<Session>) StorageUtils.load(StorageUtils.SESSION, ArrayList.class); | |
119 | + for (Session session : sessionList) { | |
120 | + if(!session.isNew()){ | |
121 | + getSessionIdListModel().addElement(session); | |
122 | + } | |
123 | + } | |
105 | 124 | } |
106 | 125 | |
107 | 126 | /** |
@@ -111,6 +130,19 @@ | ||
111 | 130 | */ |
112 | 131 | private JPanel getJContentPane() { |
113 | 132 | if (jContentPane == null) { |
133 | + GridBagConstraints gridBagConstraints21 = new GridBagConstraints(); | |
134 | + gridBagConstraints21.gridx = 2; | |
135 | + gridBagConstraints21.gridy = 0; | |
136 | + jLabel2 = new JLabel(); | |
137 | + jLabel2.setText("過去のセッション"); | |
138 | + GridBagConstraints gridBagConstraints11 = new GridBagConstraints(); | |
139 | + gridBagConstraints11.fill = GridBagConstraints.BOTH; | |
140 | + gridBagConstraints11.gridy = 1; | |
141 | + gridBagConstraints11.weightx = 60.0; | |
142 | + gridBagConstraints11.weighty = 1.0; | |
143 | + gridBagConstraints11.gridheight = 2; | |
144 | + gridBagConstraints11.insets = new Insets(5, 5, 5, 5); | |
145 | + gridBagConstraints11.gridx = 2; | |
114 | 146 | GridBagConstraints gridBagConstraints5 = new GridBagConstraints(); |
115 | 147 | gridBagConstraints5.fill = GridBagConstraints.BOTH; |
116 | 148 | gridBagConstraints5.gridy = 2; |
@@ -120,12 +152,13 @@ | ||
120 | 152 | gridBagConstraints5.insets = new Insets(5, 5, 5, 5); |
121 | 153 | gridBagConstraints5.gridx = 0; |
122 | 154 | GridBagConstraints gridBagConstraints4 = new GridBagConstraints(); |
123 | - gridBagConstraints4.gridx = 2; | |
155 | + gridBagConstraints4.gridx = 0; | |
124 | 156 | gridBagConstraints4.weightx = 0.0; |
125 | 157 | gridBagConstraints4.fill = GridBagConstraints.HORIZONTAL; |
126 | 158 | gridBagConstraints4.gridheight = 2; |
127 | 159 | gridBagConstraints4.anchor = GridBagConstraints.NORTH; |
128 | - gridBagConstraints4.gridy = 1; | |
160 | + gridBagConstraints4.gridwidth = 3; | |
161 | + gridBagConstraints4.gridy = 3; | |
129 | 162 | GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); |
130 | 163 | gridBagConstraints3.fill = GridBagConstraints.HORIZONTAL; |
131 | 164 | gridBagConstraints3.gridy = 1; |
@@ -135,7 +168,7 @@ | ||
135 | 168 | GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); |
136 | 169 | gridBagConstraints2.fill = GridBagConstraints.HORIZONTAL; |
137 | 170 | gridBagConstraints2.gridy = 1; |
138 | - gridBagConstraints2.weightx = 50.0; | |
171 | + gridBagConstraints2.weightx = 40.0; | |
139 | 172 | gridBagConstraints2.insets = new Insets(5, 5, 5, 5); |
140 | 173 | gridBagConstraints2.gridx = 0; |
141 | 174 | GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); |
@@ -156,6 +189,8 @@ | ||
156 | 189 | jContentPane.add(getPortText(), gridBagConstraints3); |
157 | 190 | jContentPane.add(getButtonPanel(), gridBagConstraints4); |
158 | 191 | jContentPane.add(getScrollPane(), gridBagConstraints5); |
192 | + jContentPane.add(getScroll2Pane(), gridBagConstraints11); | |
193 | + jContentPane.add(jLabel2, gridBagConstraints21); | |
159 | 194 | } |
160 | 195 | return jContentPane; |
161 | 196 | } |
@@ -196,11 +231,12 @@ | ||
196 | 231 | gridBagConstraints7.fill = GridBagConstraints.HORIZONTAL; |
197 | 232 | gridBagConstraints7.insets = new Insets(5, 5, 5, 5); |
198 | 233 | GridBagConstraints gridBagConstraints6 = new GridBagConstraints(); |
199 | - gridBagConstraints6.gridx = 0; | |
234 | + gridBagConstraints6.gridx = 1; | |
200 | 235 | gridBagConstraints6.insets = new Insets(5, 5, 5, 5); |
201 | - gridBagConstraints6.gridy = 1; | |
236 | + gridBagConstraints6.gridy = 0; | |
202 | 237 | buttonPanel = new JPanel(); |
203 | 238 | buttonPanel.setLayout(new GridBagLayout()); |
239 | + buttonPanel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); | |
204 | 240 | buttonPanel.add(getOkButton(), gridBagConstraints7); |
205 | 241 | buttonPanel.add(getCancelButton(), gridBagConstraints6); |
206 | 242 | } |
@@ -215,7 +251,7 @@ | ||
215 | 251 | private JButton getOkButton() { |
216 | 252 | if (okButton == null) { |
217 | 253 | okButton = new JButton(); |
218 | - okButton.setText("接続"); | |
254 | + okButton.setText(" 接続 "); | |
219 | 255 | okButton.addActionListener(new java.awt.event.ActionListener() { |
220 | 256 | public void actionPerformed(java.awt.event.ActionEvent e) { |
221 | 257 | ServerAddress address = new ServerAddress(); |
@@ -224,7 +260,6 @@ | ||
224 | 260 | for (Iterator<ServerAddress> iter = addressList.iterator(); iter.hasNext();) { |
225 | 261 | ServerAddress addr = iter.next(); |
226 | 262 | if(addr.equals(address)){ |
227 | - address.setSessionId(addr.getSessionId()); | |
228 | 263 | iter.remove(); |
229 | 264 | } |
230 | 265 | } |
@@ -233,6 +268,19 @@ | ||
233 | 268 | addressList.remove(7); |
234 | 269 | } |
235 | 270 | StorageUtils.save(addressList, "server.xml"); |
271 | + Session session = (Session) sessionIdList.getSelectedValue(); | |
272 | + if(session == null){ | |
273 | + session = new Session(); | |
274 | + } | |
275 | + for (Iterator<Session> iterator = sessionList.iterator(); iterator.hasNext();) { | |
276 | + Session s = (Session) iterator.next(); | |
277 | + if(session.equals(s)){ | |
278 | + iterator.remove(); | |
279 | + break; | |
280 | + } | |
281 | + } | |
282 | + sessionList.add(0, session); | |
283 | + StorageUtils.save(sessionList, StorageUtils.SESSION); | |
236 | 284 | connectAction.actionPerformed(e); |
237 | 285 | dispose(); |
238 | 286 | } |
@@ -337,4 +385,38 @@ | ||
337 | 385 | return formatterFactory; |
338 | 386 | } |
339 | 387 | |
388 | + /** | |
389 | + * This method initializes scroll2Pane | |
390 | + * | |
391 | + * @return javax.swing.JScrollPane | |
392 | + */ | |
393 | + private JScrollPane getScroll2Pane() { | |
394 | + if (scroll2Pane == null) { | |
395 | + scroll2Pane = new JScrollPane(); | |
396 | + scroll2Pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); | |
397 | + scroll2Pane.setViewportView(getSessionIdList()); | |
398 | + } | |
399 | + return scroll2Pane; | |
400 | + } | |
401 | + | |
402 | + /** | |
403 | + * This method initializes sessionIdList | |
404 | + * | |
405 | + * @return javax.swing.JList | |
406 | + */ | |
407 | + private JList getSessionIdList() { | |
408 | + if (sessionIdList == null) { | |
409 | + sessionIdList = new JList(); | |
410 | + sessionIdList.setModel(getSessionIdListModel()); | |
411 | + } | |
412 | + return sessionIdList; | |
413 | + } | |
414 | + | |
415 | + public DefaultListModel getSessionIdListModel() { | |
416 | + if(sessionIdListModel == null){ | |
417 | + sessionIdListModel = new DefaultListModel(); | |
418 | + } | |
419 | + return sessionIdListModel; | |
420 | + } | |
421 | + | |
340 | 422 | } // @jve:decl-index=0:visual-constraint="10,10" |
@@ -25,13 +25,16 @@ | ||
25 | 25 | ConfigLoader.getInstance().load().setGM(response.length > 3); |
26 | 26 | Handle handle = (Handle) StorageUtils.load(StorageUtils.HANDLE, Handle.class); |
27 | 27 | appendSystemLog(handle.getName() + " さんがログインしました。"); |
28 | - ArrayList<ServerAddress> serverList = | |
29 | - (ArrayList<ServerAddress>) StorageUtils.load("server.xml", ArrayList.class); | |
30 | - if(serverList.size() > 0){ | |
31 | - ServerAddress address = serverList.get(0); | |
32 | - address.setSessionId(response[1]); | |
33 | - StorageUtils.save(serverList, "server.xml"); | |
28 | + ArrayList<Session> sessionList = | |
29 | + (ArrayList<Session>) StorageUtils.load(StorageUtils.SESSION, ArrayList.class); | |
30 | + Session session = null; | |
31 | + if(sessionList.size() == 0){ | |
32 | + session = new Session(); | |
33 | + } else { | |
34 | + session = sessionList.get(0); | |
34 | 35 | } |
36 | + session.setSessionId(response[1]); | |
37 | + StorageUtils.save(sessionList, StorageUtils.SESSION); | |
35 | 38 | |
36 | 39 | getMainView().setLoginOK(true); |
37 | 40 | return ActionResult.OK_NEXT; |
@@ -3,6 +3,7 @@ | ||
3 | 3 | */ |
4 | 4 | package jp.sf.chaplet.core.client; |
5 | 5 | |
6 | + | |
6 | 7 | /** |
7 | 8 | * サーバのアドレス。<br> |
8 | 9 | * ホスト名とポート番号の組。 |
@@ -22,7 +23,6 @@ | ||
22 | 23 | this.port = port; |
23 | 24 | } |
24 | 25 | |
25 | - private String sessionId; | |
26 | 26 | /** |
27 | 27 | * @return host |
28 | 28 | */ |
@@ -72,16 +72,4 @@ | ||
72 | 72 | } |
73 | 73 | return host.equals(address.host) && port == address.port; |
74 | 74 | } |
75 | - /** | |
76 | - * @return sessionId | |
77 | - */ | |
78 | - public String getSessionId() { | |
79 | - return sessionId; | |
80 | - } | |
81 | - /** | |
82 | - * @param sessionId 設定する sessionId | |
83 | - */ | |
84 | - public void setSessionId(String sessionId) { | |
85 | - this.sessionId = sessionId; | |
86 | - } | |
87 | 75 | } |
@@ -481,10 +481,23 @@ | ||
481 | 481 | view.setMessage("接続失敗です。先にあなたの名前を指定してください。"); |
482 | 482 | return; |
483 | 483 | } |
484 | + Handle handle = (Handle) StorageUtils.load(StorageUtils.HANDLE, Handle.class); | |
485 | + handle.setName(name); | |
486 | + StorageUtils.save(handle, StorageUtils.HANDLE); | |
487 | + | |
484 | 488 | ServerAddress address = serverList.get(0); |
489 | + | |
490 | + String sessionId = ""; | |
491 | + ArrayList<Session> sessionList = (ArrayList<Session>) StorageUtils.load(StorageUtils.SESSION, ArrayList.class); | |
492 | + if(sessionList.size() > 0){ | |
493 | + Session session = sessionList.get(0); | |
494 | + if(!session.isNew()){ | |
495 | + sessionId = session.getSessionId(); | |
496 | + } | |
497 | + } | |
498 | + | |
485 | 499 | try { |
486 | - connection.connect(address.getHost(), address.getPort(), address | |
487 | - .getSessionId(), name); | |
500 | + connection.connect(address.getHost(), address.getPort(), sessionId, name); | |
488 | 501 | return; |
489 | 502 | } catch (Exception e) { |
490 | 503 | view.setMessage("サーバ [" + address + "] への接続に失敗しました。"); |
@@ -493,10 +506,18 @@ | ||
493 | 506 | } |
494 | 507 | } |
495 | 508 | |
509 | + @SuppressWarnings("unchecked") | |
496 | 510 | private void disconnect() { |
497 | 511 | connection.close(); |
498 | 512 | view.appendSystemLog(view.getHandleText().getText() + " さんがログアウトしました。"); |
499 | 513 | view.setLoginOK(false); |
514 | + ArrayList<Session> sessionList = | |
515 | + (ArrayList<Session>) StorageUtils.load(StorageUtils.SESSION, ArrayList.class); | |
516 | + if(sessionList.size() > 0){ | |
517 | + Session session = sessionList.get(0); | |
518 | + session.setDate(new Date()); | |
519 | + StorageUtils.save(sessionList, StorageUtils.SESSION); | |
520 | + } | |
500 | 521 | } |
501 | 522 | |
502 | 523 | /** |
@@ -599,7 +620,6 @@ | ||
599 | 620 | address = new ServerAddress(); |
600 | 621 | address.setHost("127.0.0.1"); |
601 | 622 | address.setPort(10001); |
602 | - address.setSessionId(UUID.randomUUID().toString()); | |
603 | 623 | serverList.add(0, address); |
604 | 624 | } else { |
605 | 625 | address = serverList.get(0); |
@@ -607,19 +627,37 @@ | ||
607 | 627 | address = new ServerAddress(); |
608 | 628 | address.setHost("127.0.0.1"); |
609 | 629 | address.setPort(10001); |
610 | - address.setSessionId(UUID.randomUUID().toString()); | |
611 | 630 | serverList.add(0, address); |
612 | 631 | } |
613 | 632 | } |
614 | 633 | StorageUtils.save(serverList, "server.xml"); |
615 | 634 | |
635 | + ArrayList<Session> sessionList = (ArrayList<Session>) StorageUtils.load(StorageUtils.SESSION, ArrayList.class); | |
636 | + Session session = null; | |
637 | + if(sessionList.size() == 0){ | |
638 | + session = new Session(); | |
639 | + session.setSessionId(UUID.randomUUID().toString()); | |
640 | + sessionList.add(session); | |
641 | + } else { | |
642 | + session = sessionList.get(0); | |
643 | + if(session.isNew()){ | |
644 | + session = new Session(); | |
645 | + session.setSessionId(UUID.randomUUID().toString()); | |
646 | + sessionList.add(0, session); | |
647 | + } | |
648 | + } | |
649 | + StorageUtils.save(sessionList, StorageUtils.SESSION); | |
650 | + | |
616 | 651 | String name = view.getHandleText().getText(); |
617 | 652 | if (name == null || name.length() == 0) { |
618 | 653 | view.setMessage("接続失敗です。先にあなたの名前を指定してください。"); |
619 | 654 | return; |
620 | 655 | } |
656 | + Handle handle = (Handle) StorageUtils.load(StorageUtils.HANDLE, Handle.class); | |
657 | + handle.setName(name); | |
658 | + StorageUtils.save(handle, StorageUtils.HANDLE); | |
621 | 659 | |
622 | - final String sessionId = address.getSessionId(); | |
660 | + final String sessionId = session.getSessionId(); | |
623 | 661 | |
624 | 662 | Thread thread = new Thread(new Runnable() { |
625 | 663 | public void run() { |
@@ -0,0 +1,57 @@ | ||
1 | +/** | |
2 | + * | |
3 | + */ | |
4 | +package jp.sf.chaplet.core.client; | |
5 | + | |
6 | +import java.text.DateFormat; | |
7 | +import java.text.SimpleDateFormat; | |
8 | +import java.util.Date; | |
9 | + | |
10 | +/** | |
11 | + * Session<br> | |
12 | + * @version $Id$ | |
13 | + */ | |
14 | +public class Session { | |
15 | + private String sessionId = ""; | |
16 | + private Date date; | |
17 | + private DateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); | |
18 | + public String getSessionId() { | |
19 | + return sessionId; | |
20 | + } | |
21 | + public void setSessionId(String sessionId) { | |
22 | + this.sessionId = sessionId; | |
23 | + } | |
24 | + public Date getDate() { | |
25 | + return date; | |
26 | + } | |
27 | + public void setDate(Date date) { | |
28 | + this.date = date; | |
29 | + } | |
30 | + | |
31 | + /** | |
32 | + * @see java.lang.Object#equals(java.lang.Object) | |
33 | + */ | |
34 | + @Override | |
35 | + public boolean equals(Object obj) { | |
36 | + if(obj instanceof Session){ | |
37 | + return false; | |
38 | + } | |
39 | + return sessionId.equals(((Session) obj).sessionId); | |
40 | + } | |
41 | + | |
42 | + /** | |
43 | + * @see java.lang.Object#toString() | |
44 | + */ | |
45 | + @Override | |
46 | + public String toString() { | |
47 | + if(date == null){ | |
48 | + return "(新規)"; | |
49 | + } else { | |
50 | + return format.format(date); | |
51 | + } | |
52 | + } | |
53 | + | |
54 | + public boolean isNew(){ | |
55 | + return date == null; | |
56 | + } | |
57 | +} |