Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / bookmarkshistory / DefaultBookmarksPanel.java @ 2339

History | View | Annotate | Download (7.6 KB)

1
package org.gvsig.tools.swing.impl.bookmarkshistory;
2

    
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import javax.swing.DefaultListModel;
7
import javax.swing.JOptionPane;
8
import javax.swing.event.ListSelectionEvent;
9
import javax.swing.event.ListSelectionListener;
10
import org.apache.commons.lang3.StringUtils;
11
import org.gvsig.tools.bookmarksandhistory.Bookmark;
12
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
13
import org.gvsig.tools.swing.api.ToolsSwingLocator;
14
import org.gvsig.tools.swing.api.ToolsSwingManager;
15

    
16
public class DefaultBookmarksPanel<T> extends DefaultBookmarksPanelView {
17

    
18
    public static final int STATE_VIEWING = 0;
19
    public static final int STATE_MODIFYING = 1;
20
    private Bookmarks<T> bookmarks;
21

    
22
    private static class BookmarkListModel extends DefaultListModel<Bookmark> {
23

    
24
        public void contentsChanged() {
25
            super.fireContentsChanged(this, 0, this.getSize());
26
        }
27
        
28
        public boolean containsName(String name) {
29
            for (int i = 0; i < this.getSize(); i++) {
30
                Bookmark value = this.get(i);
31
                if (StringUtils.equalsIgnoreCase(value.getName(),name)) {
32
                    return true;
33
                }
34
            }
35
            return false;
36
        }
37

    
38
    }
39

    
40
    private int state;
41
    private Bookmark<T> currentBookmark;
42
    private BookmarkListModel bookmarkListModel;
43

    
44
    public DefaultBookmarksPanel(Bookmarks<T> bookmarks) {
45
        this(bookmarks, null);
46
    }
47

    
48
    public DefaultBookmarksPanel(Bookmarks<T> bookmarks, T value) {
49
        this.bookmarks = bookmarks;
50
        this.state = STATE_VIEWING;
51
        if (value != null) {
52
            Bookmark<T> bookmark = bookmarks.add(value);
53
            this.put(bookmark);
54
            this.changeStateTo(STATE_MODIFYING);
55
        }
56
        this.initComponents();
57
    }
58
    
59
    public int getState() {
60
        return this.state;
61
    }
62

    
63
    private void initComponents() {
64
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
65
        swingManager.translate(btnAccept);
66
        swingManager.translate(btnDelete);
67
        swingManager.translate(btnDiscard);
68
        swingManager.translate(btnModify);
69
        swingManager.translate(lblLabel);
70
        swingManager.translate(lblLastUse);
71
        swingManager.translate(lblName);
72
        
73
        this.txtLabel.setLineWrap(true);
74
        
75
        this.currentBookmark = null;
76
        this.bookmarkListModel = this.createBookmarksModel();
77
        this.lstBookmarks.setModel(this.bookmarkListModel);
78
        this.lstBookmarks.addListSelectionListener(new ListSelectionListener() {
79
            @Override
80
            public void valueChanged(ListSelectionEvent e) {
81
                if (e.getValueIsAdjusting()) {
82
                    return;
83
                }
84
                if (state != STATE_VIEWING) {
85
                    return;
86
                }
87
                Bookmark value = (Bookmark) lstBookmarks.getSelectedValue();
88
                if (value == null) {
89
                    return;
90
                }
91
                put(value);
92
                changeStateTo(state);
93
            }
94
        });
95
        this.btnDelete.addActionListener(new ActionListener() {
96
            @Override
97
            public void actionPerformed(ActionEvent e) {
98
                doDelete();
99
            }
100
        });
101
        this.btnModify.addActionListener(new ActionListener() {
102
            @Override
103
            public void actionPerformed(ActionEvent e) {
104
                doModify();
105
            }
106
        });
107
        this.btnAccept.addActionListener(new ActionListener() {
108
            @Override
109
            public void actionPerformed(ActionEvent e) {
110
                doAccept();
111
            }
112
        });
113
        this.btnDiscard.addActionListener(new ActionListener() {
114
            @Override
115
            public void actionPerformed(ActionEvent e) {
116
                doDiscard();
117
            }
118
        });
119
        this.txtLastUse.setEditable(false);
120
        this.txtLabel.setEditable(false);
121
        this.changeStateTo(STATE_VIEWING);
122
        this.setPreferredSize(new Dimension(450, 350));
123
    }
124

    
125
    private BookmarkListModel createBookmarksModel() {
126
        BookmarkListModel model = new BookmarkListModel();
127
        for (Bookmark<T> bookmark : bookmarks) {
128
            model.addElement(bookmark);
129
        }
130
        return model;
131
    }
132

    
133
    public Bookmark<T> getSelectedValue() {
134
        return this.currentBookmark;
135
    }
136

    
137
    private void put(Bookmark<T> bookmark) {
138
        this.currentBookmark = bookmark;
139
        this.txtLabel.setText(bookmark.getValue().toString());
140
        this.txtLabel.setCaretPosition(0);
141
        this.txtName.setText(bookmark.getName());
142
        this.txtLastUse.setText(String.valueOf(bookmark.getLastUse()));
143
    }
144

    
145
    private void fetch(Bookmark<T> bookmark) {
146
        bookmark.setName(this.txtName.getText());
147
    }
148

    
149
    private void doDelete() {
150
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
151
        if (bookmark == null) {
152
            return;
153
        }
154
        bookmarks.remove(bookmark.getName());
155
        this.bookmarkListModel = this.createBookmarksModel();
156
        this.lstBookmarks.setModel(this.bookmarkListModel);
157
        this.changeStateTo(STATE_VIEWING);
158
    }
159

    
160
    private void doModify() {
161
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
162
        if (bookmark == null) {
163
            return;
164
        }
165
        this.put(bookmark);
166
        this.changeStateTo(STATE_MODIFYING);
167
    }
168

    
169
    private void doAccept() {
170
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
171
        if (bookmark == null) {
172
            return;
173
        }
174
        for (int i = 0; i < bookmarkListModel.getSize(); i++) {
175
            Bookmark value = bookmarkListModel.get(i);
176
            if (i==this.lstBookmarks.getSelectedIndex()) {
177
                continue;
178
            }
179
            if (this.txtName.getText().equalsIgnoreCase(value.getName())) {
180
                ToolsSwingLocator.getThreadSafeDialogsManager().messageDialog(
181
                        "_Bookmark_already_exists_with_this_name_choose_a_different_name", 
182
                        "_Bookmark_name_conflict",
183
                        JOptionPane.WARNING_MESSAGE);
184
                return;
185
            }
186
        }
187
        this.fetch(bookmark);
188
        this.bookmarkListModel.contentsChanged();
189
        this.changeStateTo(STATE_VIEWING);
190
    }
191

    
192
    private void doDiscard() {
193
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
194
        if (bookmark == null) {
195
            return;
196
        }
197
        this.put(bookmark);
198
        this.changeStateTo(STATE_VIEWING);
199
    }
200

    
201
    private void changeStateTo(int newstate) {
202
        switch (newstate) {
203
            case STATE_VIEWING:
204
                this.btnAccept.setEnabled(false);
205
                this.btnDelete.setEnabled(true);
206
                this.btnDiscard.setEnabled(false);
207
                this.btnModify.setEnabled(true);
208
                this.txtName.setEnabled(false);
209
                this.txtLastUse.setEnabled(false);
210
                this.txtLabel.setEnabled(false);
211
                this.lstBookmarks.setEnabled(true);
212
                break;
213
            case STATE_MODIFYING:
214
                this.btnAccept.setEnabled(true);
215
                this.btnDelete.setEnabled(true);
216
                this.btnDiscard.setEnabled(true);
217
                this.btnModify.setEnabled(false);
218
                this.txtName.setEnabled(true);
219
                this.txtLastUse.setEnabled(true);
220
                this.txtLabel.setEnabled(true);
221
                this.lstBookmarks.setEnabled(false);
222
                break;
223
        }
224
        this.state = newstate;
225
    }
226
}