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
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