Revision 2937 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/pickercontroller/BytearrayPickerControllerImpl.java

View differences:

BytearrayPickerControllerImpl.java
2 2

  
3 3
import java.awt.Cursor;
4 4
import java.awt.event.ActionEvent;
5
import java.io.ByteArrayInputStream;
5 6
import java.io.File;
6 7
import java.nio.charset.StandardCharsets;
8
import javax.swing.AbstractAction;
9
import javax.swing.Action;
7 10
import javax.swing.JButton;
8 11
import javax.swing.JFileChooser;
12
import javax.swing.JMenuItem;
9 13
import javax.swing.JOptionPane;
14
import javax.swing.JPopupMenu;
10 15
import javax.swing.text.JTextComponent;
11 16
import org.apache.commons.io.FileUtils;
12 17
import org.apache.commons.lang3.ArrayUtils;
......
23 28
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
24 29
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
25 30
import static org.gvsig.tools.swing.api.windowmanager.WindowManager_v2.BUTTON_OK;
31
import org.gvsig.tools.swing.impl.hexeditor.swing.HexEditor;
32
import org.gvsig.tools.swing.impl.zipviewer.ZipViewerImpl;
26 33

  
27 34
/**
28 35
 *
......
36 43
    private final JTextComponent jtext;
37 44
    private final JButton btnUpload;
38 45
    private final JButton btnDownload;
39
    private final JButton btnEditAsText;
46
    private final JButton btnEdit;
40 47
    
41 48
    private byte[] value;
42 49
    private final String fileChooserID;
......
54 61
        this.btnUpload = btnUpload;
55 62
        this.btnDownload = btnDownload;
56 63
        if( btnEdiAsText == null ) {
57
            this.btnEditAsText = new JButton();
64
            this.btnEdit = new JButton();
58 65
        } else {
59
            this.btnEditAsText = btnEdiAsText;
66
            this.btnEdit = btnEdiAsText;
60 67
        }
61 68
        this.fileChooserID = fileChooserID;
62 69
        this.initialPath = initialPath;
......
80 87
        this.btnUpload.addActionListener((ActionEvent e) -> {
81 88
          doUpload();
82 89
        });
83
        this.btnEditAsText.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
84
        this.btnEditAsText.setText("");
85
        if( StringUtils.isBlank(this.btnEditAsText.getToolTipText()) ) {
86
            this.btnEditAsText.setToolTipText(i18n.getTranslation("_Edit_as_text"));
90
        this.btnEdit.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
91
        this.btnEdit.setText("");
92
        if( StringUtils.isBlank(this.btnEdit.getToolTipText()) ) {
93
            this.btnEdit.setToolTipText(i18n.getTranslation("_Edit"));
87 94
        }
88
        this.btnEditAsText.setIcon(this.getIcon("picker-bytearray-editastext"));
89
        this.btnEditAsText.addActionListener((ActionEvent e) -> {
90
          doEditAsText(!((e.getModifiers() & ActionEvent.CTRL_MASK) == ActionEvent.CTRL_MASK));
95
        this.btnEdit.setIcon(this.getIcon("picker-bytearray-editastext"));
96
        this.btnEdit.addActionListener((ActionEvent e) -> {
97
          doEdit(!((e.getModifiers() & ActionEvent.CTRL_MASK) == ActionEvent.CTRL_MASK));
91 98
        });
92 99
        
93 100
        this.jtext.setEditable(false);
......
95 102
            this.value = null;
96 103
            this.jtext.setText("");
97 104
            this.btnDownload.setEnabled(false);
98
            this.btnEditAsText.setEnabled(true);
105
            this.btnEdit.setEnabled(true);
99 106
        });
100 107
    }
101 108
    
......
109 116
        this.value = value;
110 117
        if( this.value==null ) {
111 118
            this.btnDownload.setEnabled(false);
112
            this.btnEditAsText.setEnabled(true);
119
            this.btnEdit.setEnabled(true);
113 120
            this.jtext.setText("");
114 121
        } else {
115 122
            this.btnDownload.setEnabled(true);
116
            this.btnEditAsText.setEnabled(true);
123
            this.btnEdit.setEnabled(true);
117 124
            int size = this.value.length;
118 125
            this.jtext.setText(String.format("%d bytes", size));
119 126
        }
......
129 136
    public void setEnabled(boolean enabled) {
130 137
        this.btnDownload.setEnabled(true);
131 138
        this.btnUpload.setEnabled(enabled);
132
        this.btnEditAsText.setEnabled(true);
139
        this.btnEdit.setEnabled(true);
133 140
    }
134 141

  
135 142
    @Override
......
189 196
        }
190 197
    }
191 198
    
199
    private void doEdit(boolean modal) {
200
        JPopupMenu popup = new JPopupMenu();
201
                
202
        I18nManager i18n = ToolsLocator.getI18nManager();
203
        popup.add(new JMenuItem(new AbstractAction(i18n.getTranslation("_Show_as_hexadecimal")) {
204
            @Override
205
            public void actionPerformed(ActionEvent e) {
206
                doEditAsHex(modal);
207
            }
208
        }));
209
        popup.add(new JMenuItem(new AbstractAction(i18n.getTranslation("_Edit_as_text")) {
210
            @Override
211
            public void actionPerformed(ActionEvent e) {
212
                doEditAsText(modal);
213
            }
214
        }));
215
        popup.add(new JMenuItem(new AbstractAction(i18n.getTranslation("_Show_as_ZIP")) {
216
            @Override
217
            public void actionPerformed(ActionEvent e) {
218
                doEditAsZip(modal);
219
            }
220
        }));
221
        Action action = new AbstractAction(i18n.getTranslation("_Show_as_image")) {
222
            @Override
223
            public void actionPerformed(ActionEvent e) {
224
                
225
            }
226
        };
227
        action.setEnabled(false);
228
        popup.add(new JMenuItem(action));
229
        popup.show(this.btnEdit, 0, this.btnEdit.getHeight());    
230
    }
231
    
192 232
    private void doEditAsText(boolean modal) {
193 233
        I18nManager i18n = ToolsLocator.getI18nManager();
194 234
        final boolean isEditable = this.isEditable() && this.isEnabled();
......
235 275
        }
236 276
    }
237 277
    
278
    private void doEditAsHex(boolean modal) {
279
        I18nManager i18n = ToolsLocator.getI18nManager();
280
        final boolean isEditable = this.isEditable() && this.isEnabled();
281
        String title = isEditable?i18n.getTranslation("_Hexadecimal_viewer"):i18n.getTranslation("_Hexadecimal_viewer");
282
        try {
283
            ByteArrayInputStream value_stream = new ByteArrayInputStream(value);
284
            HexEditor editor = new HexEditor();
285
            editor.open(value_stream);
286
            editor.setEnabled(isEditable);
287

  
288
            WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
289
            Dialog dialog = winmanager.createDialog(editor, title, null, WindowManager_v2.BUTTONS_OK_CANCEL);
290
            dialog.setButtonEnabled(BUTTON_OK, isEditable);
291
            dialog.addActionListener((ActionEvent e) -> {
292
                if( isEditable && dialog.getAction()==WindowManager_v2.BUTTONS_OK ) {
293
                    try {                        
294
                        set(editor.getBytes());
295
                    } catch(Exception ex) {
296
                        LOG.warn("Can't retrieve bytes from GUI.",ex);
297
                        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
298
                        dialogs.messageDialog(
299
                                i18n.getTranslation("_Cant_convert_text_to_raw_bytes"),
300
                                title,
301
                                JOptionPane.WARNING_MESSAGE
302
                        );
303
                    }
304
                }
305
            });
306
            dialog.show(modal?WindowManager.MODE.DIALOG:WindowManager.MODE.WINDOW);
307

  
308
        } catch(Exception ex) {
309
            LOG.warn("Can't show hex editor.",ex);
310
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
311
            dialogs.messageDialog(
312
                    i18n.getTranslation("_Cant_show_hex_editor"), 
313
                    title, 
314
                    JOptionPane.WARNING_MESSAGE
315
            );
316
        }
317
    }
318
    
319
    private void doEditAsZip(boolean modal) {
320
        I18nManager i18n = ToolsLocator.getI18nManager();
321
        final boolean isEditable = this.isEditable() && this.isEnabled();
322
        String title = isEditable?i18n.getTranslation("_Zip_viewer"):i18n.getTranslation("_Zip_viewer");
323
        try {
324
            ByteArrayInputStream value_stream = new ByteArrayInputStream(value);
325
            ZipViewerImpl editor = new ZipViewerImpl();
326
            editor.put(value_stream);
327
            editor.setEnabled(isEditable);
328

  
329
            WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
330
            Dialog dialog = winmanager.createDialog(editor, title, null, WindowManager_v2.BUTTON_CANCEL);
331
            dialog.show(modal?WindowManager.MODE.DIALOG:WindowManager.MODE.WINDOW);
332

  
333
        } catch(Exception ex) {
334
            LOG.warn("Can't show zip viewer.",ex);
335
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
336
            dialogs.messageDialog(
337
                    i18n.getTranslation("_Cant_show_zip_viewer"), 
338
                    title, 
339
                    JOptionPane.WARNING_MESSAGE
340
            );
341
        }
342
    }
343
    
238 344
    public static void selfRegister() {
239 345
    }
240 346
}

Also available in: Unified diff