Autopsy  4.6.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
LocalDiskPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2018 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.casemodule;
20 
21 import java.io.File;
22 import java.nio.file.Paths;
23 import java.util.Calendar;
24 import java.util.SimpleTimeZone;
25 import java.util.TimeZone;
26 import java.util.logging.Level;
27 import javax.swing.JFileChooser;
28 import javax.swing.JPanel;
29 import org.openide.util.NbBundle;
36 
37 @NbBundle.Messages({
38  "LocalDiskPanel.errorMessage.noOpenCaseTitle=No open case available",
39  "LocalDiskPanel.errorMessage.noOpenCaseBody=LocalDiskPanel listener couldn't get the open case.",
40  "LocalDiskPanel.imageWriterError.directoryNotExist=Error - directory does not exist",
41  "LocalDiskPanel.imageWriterError.emptyPath=Error - enter path for VHD",
42  "LocalDiskPanel.imageWriterError.isDirectory=Error - VHD path is a directory",
43  "LocalDiskPanel.imageWriterError.fileExists=Error - VHD path already exists",
44  "LocalDiskPanel.moduleErrorMessage.title=Module Error",
45  "LocalDiskPanel.moduleErrorMessage.body=A module caused an error listening to LocalDiskPanel updates. See log to determine which module. Some data could be incomplete.",
46  "LocalDiskPanel.localDiskMessage.unspecified=Unspecified"
47 })
52 final class LocalDiskPanel extends JPanel {
53 
54  private static final Logger logger = Logger.getLogger(LocalDiskPanel.class.getName());
55  private static final String[] SECTOR_SIZE_CHOICES = {"Auto Detect", "512", "1024", "2048", "4096"};
56  private static LocalDiskPanel instance;
57  private static final long serialVersionUID = 1L;
58  private LocalDisk localDisk;
59  private boolean enableNext = false;
60  private final JFileChooser fc = new JFileChooser();
61 
65  LocalDiskPanel() {
66  initComponents();
67  customInit();
68  createTimeZoneList();
69  createSectorSizeList();
70  }
71 
75  static synchronized LocalDiskPanel getDefault() {
76  if (instance == null) {
77  instance = new LocalDiskPanel();
78  }
79  return instance;
80  }
81 
82  @SuppressWarnings("unchecked")
83  private void customInit() {
84  imageWriterErrorLabel.setVisible(false);
85  imageWriterErrorLabel.setText("");
86  if (!PlatformUtil.isWindowsOS()) {
87  copyImageCheckbox.setSelected(false);
88  copyImageCheckbox.setEnabled(false);
89  }
90  pathTextField.setEnabled(copyImageCheckbox.isSelected());
91  browseButton.setEnabled(copyImageCheckbox.isSelected());
92  changeDatabasePathCheckbox.setEnabled(copyImageCheckbox.isSelected());
93  }
94 
100  @SuppressWarnings("unchecked")
101  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
102  private void initComponents() {
103 
104  timeZoneLabel = new javax.swing.JLabel();
105  timeZoneComboBox = new javax.swing.JComboBox<>();
106  noFatOrphansCheckbox = new javax.swing.JCheckBox();
107  descLabel = new javax.swing.JLabel();
108  copyImageCheckbox = new javax.swing.JCheckBox();
109  pathTextField = new javax.swing.JTextField();
110  browseButton = new javax.swing.JButton();
111  jLabel1 = new javax.swing.JLabel();
112  imageWriterErrorLabel = new javax.swing.JLabel();
113  changeDatabasePathCheckbox = new javax.swing.JCheckBox();
114  sectorSizeLabel = new javax.swing.JLabel();
115  sectorSizeComboBox = new javax.swing.JComboBox<>();
116  selectDiskButton = new javax.swing.JButton();
117  localDiskLabel = new javax.swing.JLabel();
118  localDiskNameTextField = new javax.swing.JTextField();
119 
120  setMinimumSize(new java.awt.Dimension(0, 420));
121  setPreferredSize(new java.awt.Dimension(485, 410));
122 
123  timeZoneLabel.setFont(timeZoneLabel.getFont().deriveFont(timeZoneLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
124  org.openide.awt.Mnemonics.setLocalizedText(timeZoneLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.timeZoneLabel.text")); // NOI18N
125 
126  timeZoneComboBox.setFont(timeZoneComboBox.getFont().deriveFont(timeZoneComboBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
127  timeZoneComboBox.setMaximumRowCount(30);
128 
129  noFatOrphansCheckbox.setFont(noFatOrphansCheckbox.getFont().deriveFont(noFatOrphansCheckbox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
130  org.openide.awt.Mnemonics.setLocalizedText(noFatOrphansCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.noFatOrphansCheckbox.text")); // NOI18N
131  noFatOrphansCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.noFatOrphansCheckbox.toolTipText")); // NOI18N
132 
133  descLabel.setFont(descLabel.getFont().deriveFont(descLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
134  org.openide.awt.Mnemonics.setLocalizedText(descLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.descLabel.text")); // NOI18N
135 
136  org.openide.awt.Mnemonics.setLocalizedText(copyImageCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox.text")); // NOI18N
137  copyImageCheckbox.addActionListener(new java.awt.event.ActionListener() {
138  public void actionPerformed(java.awt.event.ActionEvent evt) {
139  copyImageCheckboxActionPerformed(evt);
140  }
141  });
142 
143  pathTextField.setText(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.pathTextField.text")); // NOI18N
144  pathTextField.addKeyListener(new java.awt.event.KeyAdapter() {
145  public void keyReleased(java.awt.event.KeyEvent evt) {
146  pathTextFieldKeyReleased(evt);
147  }
148  });
149 
150  org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.browseButton.text")); // NOI18N
151  browseButton.addActionListener(new java.awt.event.ActionListener() {
152  public void actionPerformed(java.awt.event.ActionEvent evt) {
153  browseButtonActionPerformed(evt);
154  }
155  });
156 
157  org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.jLabel1.text")); // NOI18N
158 
159  imageWriterErrorLabel.setFont(imageWriterErrorLabel.getFont().deriveFont(imageWriterErrorLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
160  imageWriterErrorLabel.setForeground(new java.awt.Color(255, 0, 0));
161  org.openide.awt.Mnemonics.setLocalizedText(imageWriterErrorLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.imageWriterErrorLabel.text")); // NOI18N
162 
163  org.openide.awt.Mnemonics.setLocalizedText(changeDatabasePathCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.changeDatabasePathCheckbox.text")); // NOI18N
164 
165  org.openide.awt.Mnemonics.setLocalizedText(sectorSizeLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.sectorSizeLabel.text")); // NOI18N
166 
167  org.openide.awt.Mnemonics.setLocalizedText(selectDiskButton, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.selectDiskButton.text")); // NOI18N
168  selectDiskButton.addActionListener(new java.awt.event.ActionListener() {
169  public void actionPerformed(java.awt.event.ActionEvent evt) {
170  selectDiskButtonActionPerformed(evt);
171  }
172  });
173 
174  org.openide.awt.Mnemonics.setLocalizedText(localDiskLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.localDiskLabel.text")); // NOI18N
175 
176  localDiskNameTextField.setEditable(false);
177 
178  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
179  this.setLayout(layout);
180  layout.setHorizontalGroup(
181  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
182  .addGroup(layout.createSequentialGroup()
183  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
184  .addGroup(layout.createSequentialGroup()
185  .addComponent(localDiskLabel)
186  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
187  .addComponent(localDiskNameTextField)
188  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
189  .addComponent(selectDiskButton))
190  .addGroup(layout.createSequentialGroup()
191  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
192  .addGroup(layout.createSequentialGroup()
193  .addComponent(timeZoneLabel)
194  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
195  .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE))
196  .addComponent(noFatOrphansCheckbox)
197  .addComponent(copyImageCheckbox)
198  .addGroup(layout.createSequentialGroup()
199  .addGap(21, 21, 21)
200  .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 342, javax.swing.GroupLayout.PREFERRED_SIZE)
201  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
202  .addComponent(browseButton))
203  .addGroup(layout.createSequentialGroup()
204  .addGap(2, 2, 2)
205  .addComponent(sectorSizeLabel)
206  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
207  .addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
208  .addGroup(layout.createSequentialGroup()
209  .addGap(21, 21, 21)
210  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
211  .addComponent(descLabel)
212  .addComponent(changeDatabasePathCheckbox)
213  .addGroup(layout.createSequentialGroup()
214  .addGap(21, 21, 21)
215  .addComponent(jLabel1))
216  .addComponent(imageWriterErrorLabel))))
217  .addGap(0, 39, Short.MAX_VALUE)))
218  .addContainerGap())
219  );
220  layout.setVerticalGroup(
221  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
222  .addGroup(layout.createSequentialGroup()
223  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
224  .addComponent(localDiskLabel)
225  .addComponent(selectDiskButton)
226  .addComponent(localDiskNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
227  .addGap(18, 18, 18)
228  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
229  .addComponent(timeZoneLabel)
230  .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
231  .addGap(18, 18, 18)
232  .addComponent(noFatOrphansCheckbox)
233  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
234  .addComponent(descLabel)
235  .addGap(18, 18, 18)
236  .addComponent(copyImageCheckbox)
237  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
238  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
239  .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
240  .addComponent(browseButton))
241  .addGap(13, 13, 13)
242  .addComponent(changeDatabasePathCheckbox)
243  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
244  .addComponent(jLabel1)
245  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
246  .addComponent(imageWriterErrorLabel)
247  .addGap(12, 12, 12)
248  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
249  .addComponent(sectorSizeLabel)
250  .addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
251  .addContainerGap(127, Short.MAX_VALUE))
252  );
253  }// </editor-fold>//GEN-END:initComponents
254 
255  private void copyImageCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyImageCheckboxActionPerformed
256  pathTextField.setEnabled(copyImageCheckbox.isSelected());
257  browseButton.setEnabled(copyImageCheckbox.isSelected());
258  changeDatabasePathCheckbox.setEnabled(copyImageCheckbox.isSelected());
259  fireUpdateEvent();
260  }//GEN-LAST:event_copyImageCheckboxActionPerformed
261 
262  private void pathTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_pathTextFieldKeyReleased
263  fireUpdateEvent();
264  }//GEN-LAST:event_pathTextFieldKeyReleased
265 
266  private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed
267  String oldText = pathTextField.getText();
268  // set the current directory of the FileChooser if the ImagePath Field is valid
269  File currentFile = new File(oldText);
270  if ((currentFile.getParentFile() != null) && (currentFile.getParentFile().exists())) {
271  fc.setSelectedFile(currentFile);
272  }
273 
274  int retval = fc.showOpenDialog(this);
275  if (retval == JFileChooser.APPROVE_OPTION) {
276  String path = fc.getSelectedFile().getPath();
277  pathTextField.setText(path);
278  }
279  fireUpdateEvent();
280  }//GEN-LAST:event_browseButtonActionPerformed
281 
282  private void selectDiskButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectDiskButtonActionPerformed
283  LocalDiskSelectionDialog selectionDialog = new LocalDiskSelectionDialog();
284  selectionDialog.display();
285  LocalDisk selectedLocalDisk = selectionDialog.getLocalDiskSelection();
286  if (selectedLocalDisk != null) {
287  localDisk = selectedLocalDisk;
288  localDiskNameTextField.setText(selectedLocalDisk.getName());
289 
290  enableNext = true;
291  try {
292  setPotentialImageWriterPath(localDisk);
293  firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
294  } catch (NoCurrentCaseException ex) {
295  logger.log(Level.SEVERE, "Exception while getting open case.", ex); //NON-NLS
296  MessageNotifyUtil.Notify.show(Bundle.LocalDiskPanel_errorMessage_noOpenCaseTitle(),
297  Bundle.LocalDiskPanel_errorMessage_noOpenCaseBody(),
298  MessageNotifyUtil.MessageType.ERROR);
299  } catch (Exception ex) {
300  logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", ex); //NON-NLS
301  MessageNotifyUtil.Notify.show(Bundle.LocalDiskPanel_moduleErrorMessage_title(),
302  Bundle.LocalDiskPanel_moduleErrorMessage_body(),
303  MessageNotifyUtil.MessageType.ERROR);
304  }
305  }
306  }//GEN-LAST:event_selectDiskButtonActionPerformed
307 
308  // Variables declaration - do not modify//GEN-BEGIN:variables
309  private javax.swing.JButton browseButton;
310  private javax.swing.JCheckBox changeDatabasePathCheckbox;
311  private javax.swing.JCheckBox copyImageCheckbox;
312  private javax.swing.JLabel descLabel;
313  private javax.swing.JLabel imageWriterErrorLabel;
314  private javax.swing.JLabel jLabel1;
315  private javax.swing.JLabel localDiskLabel;
316  private javax.swing.JTextField localDiskNameTextField;
317  private javax.swing.JCheckBox noFatOrphansCheckbox;
318  private javax.swing.JTextField pathTextField;
319  private javax.swing.JComboBox<String> sectorSizeComboBox;
320  private javax.swing.JLabel sectorSizeLabel;
321  private javax.swing.JButton selectDiskButton;
322  private javax.swing.JComboBox<String> timeZoneComboBox;
323  private javax.swing.JLabel timeZoneLabel;
324  // End of variables declaration//GEN-END:variables
325 
326  private void fireUpdateEvent() {
327  try {
328  firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
329  } catch (Exception e) {
330  logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e); //NON-NLS
331  MessageNotifyUtil.Notify.show(Bundle.LocalDiskPanel_moduleErrorMessage_title(),
332  Bundle.LocalDiskPanel_moduleErrorMessage_body(),
333  MessageNotifyUtil.MessageType.ERROR);
334  }
335  }
336 
340  void resetLocalDiskSelection() {
341  localDisk = null;
342  localDiskNameTextField.setText(Bundle.LocalDiskPanel_localDiskMessage_unspecified());
343  enableNext = false;
344  }
345 
351  String getContentPath() {
352  if (localDisk != null) {
353  return localDisk.getPath();
354  } else {
355  return "";
356  }
357  }
358 
364  int getSectorSize() {
365  int sectorSizeSelectionIndex = sectorSizeComboBox.getSelectedIndex();
366 
367  if (sectorSizeSelectionIndex == 0) {
368  return 0;
369  }
370 
371  return Integer.valueOf((String) sectorSizeComboBox.getSelectedItem());
372  }
373 
374  String getTimeZone() {
375  String tz = timeZoneComboBox.getSelectedItem().toString();
376  return tz.substring(tz.indexOf(")") + 2).trim();
377 
378  }
379 
380  boolean getNoFatOrphans() {
381  return noFatOrphansCheckbox.isSelected();
382  }
383 
384  private static String getDefaultImageWriterFolder() throws NoCurrentCaseException {
385  return Paths.get(Case.getOpenCase().getModuleDirectory(), "Image Writer").toString();
386  }
387 
388  private void setPotentialImageWriterPath(LocalDisk disk) throws NoCurrentCaseException {
389 
390  File subDirectory = Paths.get(getDefaultImageWriterFolder()).toFile();
391  if (!subDirectory.exists()) {
392  subDirectory.mkdirs();
393  }
394 
395  String path = disk.getName();
396 
397  // Remove any character that isn't alphanumeric, a space, parent, or underscore.
398  // If the name ends up empty or starting with a space, prepend "localDisk"
399  path = path.replaceAll("[^0-9A-Za-z _()]", ""); // NON-NLS
400  if (path.isEmpty() || path.startsWith(" ")) {
401  path = "localDisk" + path;
402  }
403 
404  path += " " + System.currentTimeMillis();
405  path += ".vhd";
406  pathTextField.setText(Paths.get(getDefaultImageWriterFolder(), path).toString());
407  }
408 
409  private boolean imageWriterPathIsValid() {
410  if ((!copyImageCheckbox.isSelected()) || localDisk == null) {
411  imageWriterErrorLabel.setVisible(false);
412  imageWriterErrorLabel.setText("");
413  return true;
414  }
415 
416  if (pathTextField.getText().isEmpty()) {
417  imageWriterErrorLabel.setVisible(true);
418  imageWriterErrorLabel.setText(Bundle.LocalDiskPanel_imageWriterError_emptyPath());
419  return false;
420  }
421 
422  File f = new File(pathTextField.getText());
423  if (((f.getParentFile() != null) && (!f.getParentFile().exists()))
424  || (f.getParentFile() == null)) {
425  imageWriterErrorLabel.setVisible(true);
426  imageWriterErrorLabel.setText(Bundle.LocalDiskPanel_imageWriterError_directoryNotExist());
427  return false;
428  }
429  if (f.isDirectory()) {
430  imageWriterErrorLabel.setVisible(true);
431  imageWriterErrorLabel.setText(Bundle.LocalDiskPanel_imageWriterError_isDirectory());
432  return false;
433  }
434  if (f.exists()) {
435  imageWriterErrorLabel.setVisible(true);
436  imageWriterErrorLabel.setText(Bundle.LocalDiskPanel_imageWriterError_fileExists());
437  return false;
438  }
439  imageWriterErrorLabel.setVisible(false);
440  imageWriterErrorLabel.setText("");
441  return true;
442  }
443 
444  boolean getImageWriterEnabled() {
445  return copyImageCheckbox.isSelected();
446  }
447 
448  ImageWriterSettings getImageWriterSettings() {
449  return new ImageWriterSettings(pathTextField.getText(), changeDatabasePathCheckbox.isSelected());
450  }
451 
458  boolean validatePanel() {
459  if (!imageWriterPathIsValid()) {
460  return false;
461  }
462  return enableNext;
463  }
464 
469  public void createTimeZoneList() {
470  // load and add all timezone
471  String[] ids = SimpleTimeZone.getAvailableIDs();
472  for (String id : ids) {
473  TimeZone zone = TimeZone.getTimeZone(id);
474  int offset = zone.getRawOffset() / 1000;
475  int hour = offset / 3600;
476  int minutes = (offset % 3600) / 60;
477  String item = String.format("(GMT%+d:%02d) %s", hour, minutes, id); //NON-NLS
478 
479  /*
480  * DateFormat dfm = new SimpleDateFormat("z");
481  * dfm.setTimeZone(zone); boolean hasDaylight =
482  * zone.useDaylightTime(); String first = dfm.format(new Date(2010,
483  * 1, 1)); String second = dfm.format(new Date(2011, 6, 6)); int mid
484  * = hour * -1; String result = first + Integer.toString(mid);
485  * if(hasDaylight){ result = result + second; }
486  * timeZoneComboBox.addItem(item + " (" + result + ")");
487  */
488  timeZoneComboBox.addItem(item);
489  }
490  // get the current timezone
491  TimeZone thisTimeZone = Calendar.getInstance().getTimeZone();
492  int thisOffset = thisTimeZone.getRawOffset() / 1000;
493  int thisHour = thisOffset / 3600;
494  int thisMinutes = (thisOffset % 3600) / 60;
495  String formatted = String.format("(GMT%+d:%02d) %s", thisHour, thisMinutes, thisTimeZone.getID()); //NON-NLS
496 
497  // set the selected timezone
498  timeZoneComboBox.setSelectedItem(formatted);
499 
500  }
501 
506  private void createSectorSizeList() {
507  for (String choice : SECTOR_SIZE_CHOICES) {
508  sectorSizeComboBox.addItem(choice);
509  }
510  sectorSizeComboBox.setSelectedIndex(0);
511  }
512 }

Copyright © 2012-2016 Basis Technology. Generated on: Mon May 7 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.