Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.swing / org.gvsig.expressionevaluator.swing.impl / src / main / java / org / gvsig / expressionevaluator / swing / impl / DefaultBookmarksPanel.java @ 44282

History | View | Annotate | Download (6.65 KB)

1
package org.gvsig.expressionevaluator.swing.impl;
2

    
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.util.Date;
7
import javax.swing.DefaultListModel;
8
import javax.swing.event.ListSelectionEvent;
9
import javax.swing.event.ListSelectionListener;
10
import org.apache.commons.lang3.StringUtils;
11
import org.gvsig.expressionevaluator.Bookmark;
12
import org.gvsig.expressionevaluator.Bookmarks;
13
import org.gvsig.expressionevaluator.Expression;
14
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
15

    
16
/**
17
 *
18
 * @author jjdelcerro
19
 */
20
public class DefaultBookmarksPanel extends DefaultBookmarksPanelView {
21
    
22
    private static final int STATE_VIEWING = 0;
23
    private static final int STATE_MODIFYING = 1;
24
    
25
    private static class BookmarkListModel extends DefaultListModel<Bookmark> {
26

    
27
        public void contentsChanged() {
28
            super.fireContentsChanged(this, 0, this.getSize());
29
        }
30
        
31
        
32
    }
33
    
34
    private int state;
35
    private Bookmark currentBookmark;
36
    private int currentIndex;
37
    private BookmarkListModel bookmarkListModel;
38
    
39
    public DefaultBookmarksPanel() {
40
        this(null);
41
    }
42
    
43
    public DefaultBookmarksPanel(Expression expression) {
44
        this.state = STATE_VIEWING;
45
        if( expression!=null ) {
46
            Date now = new Date();
47
            String name = String.format(
48
                    "%tF %tR %s", 
49
                    now, now,
50
                    StringUtils.abbreviate(expression.getPhrase(), 40)
51
            );
52
            Bookmarks bookmarks = ExpressionEvaluatorLocator.getManager().getBookmarks();
53
            Bookmark bookmark = bookmarks.add(name, expression);
54
            this.put(bookmark);
55
            this.changeStateTo(STATE_MODIFYING);
56
        }
57
        this.initComponents();
58
    }
59
    
60
    private void initComponents() {
61
        this.currentIndex = -1;
62
        this.currentBookmark = null;
63
        this.bookmarkListModel = this.createBookmarksModel();
64
        this.lstBookmarks.setModel(this.bookmarkListModel);
65
        this.lstBookmarks.addListSelectionListener(new ListSelectionListener() {
66
            @Override
67
            public void valueChanged(ListSelectionEvent e) {
68
                if( e.getValueIsAdjusting()) {
69
                    return;
70
                }
71
                if( state != STATE_VIEWING ) {
72
                    return;
73
                }
74
                Bookmark value = (Bookmark) lstBookmarks.getSelectedValue();
75
                if( value == null ) {
76
                    return;
77
                }
78
                put(value);
79
                changeStateTo(state);
80
            }
81
        });
82
        this.btnDelete.addActionListener(new ActionListener() {
83
            @Override
84
            public void actionPerformed(ActionEvent e) {
85
                doDelete();
86
            }
87
        });
88
        this.btnModify.addActionListener(new ActionListener() {
89
            @Override
90
            public void actionPerformed(ActionEvent e) {
91
                doModify();
92
            }
93
        });
94
        this.btnAccept.addActionListener(new ActionListener() {
95
            @Override
96
            public void actionPerformed(ActionEvent e) {
97
                doAccept();
98
            }
99
        });
100
        this.btnDiscard.addActionListener(new ActionListener() {
101
            @Override
102
            public void actionPerformed(ActionEvent e) {
103
                doDiscard();
104
            }
105
        });
106
        this.txtLastUse.setEditable(false);
107
        this.txtExpression.setEditable(false);
108
        this.changeStateTo(STATE_VIEWING);
109
        this.setPreferredSize(new Dimension(450, 350));
110
    }
111

    
112
    private BookmarkListModel createBookmarksModel() {
113
        Bookmarks bookmarks = ExpressionEvaluatorLocator.getManager().getBookmarks();
114
        BookmarkListModel model = new BookmarkListModel();
115
        for (Bookmark bookmark : bookmarks) {
116
            model.addElement(bookmark);
117
        }
118
        return model;
119
    }
120
    
121
    public Bookmark getCurrentBookmark() {
122
        return this.currentBookmark;
123
    }
124
    
125
    private void put(Bookmark bookmark) {
126
        this.currentBookmark = bookmark;
127
        this.currentIndex = this.lstBookmarks.getSelectedIndex();
128
        this.txtExpression.setText(bookmark.getValue().getPhrase());
129
        this.txtExpression.setCaretPosition(0);
130
        this.txtName.setText(bookmark.getName());
131
        this.txtLastUse.setText(String.valueOf(bookmark.getLastUse()));
132
    }
133
    
134
    private void fetch(Bookmark bookmark) {
135
        bookmark.setName(this.txtName.getText());
136
    }
137
    
138
    private void doDelete() {
139
        Bookmark  bookmark = (Bookmark) this.lstBookmarks.getSelectedValue();
140
        if( bookmark==null ) {
141
            return;
142
        }
143
        Bookmarks bookmarks = ExpressionEvaluatorLocator.getManager().getBookmarks();
144
        bookmarks.remove(bookmark.getName());
145
        this.bookmarkListModel = this.createBookmarksModel();
146
        this.lstBookmarks.setModel(this.bookmarkListModel);
147
        this.changeStateTo(STATE_VIEWING);
148
    }
149
    
150
    private void doModify() {
151
        Bookmark  bookmark = (Bookmark) this.lstBookmarks.getSelectedValue();
152
        if( bookmark==null ) {
153
            return;
154
        }
155
        this.put(bookmark);
156
        this.changeStateTo(STATE_MODIFYING);
157
    }
158
    
159
    private void doAccept() {
160
        Bookmark  bookmark = (Bookmark) this.lstBookmarks.getSelectedValue();
161
        if( bookmark==null ) {
162
            return;
163
        }
164
        this.fetch(bookmark);
165
        this.bookmarkListModel.contentsChanged();
166
        this.changeStateTo(STATE_VIEWING);
167
    }
168
    
169
    private void doDiscard() {
170
        Bookmark  bookmark = (Bookmark) this.lstBookmarks.getSelectedValue();
171
        if( bookmark==null ) {
172
            return;
173
        }
174
        this.put(bookmark);
175
        this.changeStateTo(STATE_VIEWING);
176
    }
177
    
178
    private void changeStateTo(int newstate) {
179
        switch(newstate) {
180
            case STATE_VIEWING:
181
                this.btnAccept.setEnabled(false);
182
                this.btnDelete.setEnabled(true);
183
                this.btnDiscard.setEnabled(false);
184
                this.btnModify.setEnabled(true);
185
                this.txtName.setEnabled(false);
186
                this.txtLastUse.setEnabled(false);
187
                this.txtExpression.setEnabled(false);
188
                break;
189
             case STATE_MODIFYING:
190
                this.btnAccept.setEnabled(true);
191
                this.btnDelete.setEnabled(true);
192
                this.btnDiscard.setEnabled(true);
193
                this.btnModify.setEnabled(false);
194
                this.txtName.setEnabled(true);
195
                this.txtLastUse.setEnabled(true);
196
                this.txtExpression.setEnabled(true);
197
                break;
198
        }
199
        this.state = newstate;
200
    }
201
}