001: package net.sourceforge.squirrel_sql.plugins.dataimport.importer.csv;
002:
003: /*
004: * Copyright (C) 2007 Thorsten Mürell
005: *
006: * This program is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU General Public License
008: * as published by the Free Software Foundation; either version 2
009: * of the License, or any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
019: */
020: import java.awt.event.ActionEvent;
021: import java.awt.event.ActionListener;
022: import java.awt.event.KeyAdapter;
023: import java.awt.event.KeyEvent;
024: import java.awt.event.KeyListener;
025: import java.nio.charset.Charset;
026:
027: import javax.swing.ButtonGroup;
028: import javax.swing.JComboBox;
029: import javax.swing.JLabel;
030: import javax.swing.JPanel;
031: import javax.swing.JRadioButton;
032: import javax.swing.JTextField;
033:
034: import net.sourceforge.squirrel_sql.fw.util.StringManager;
035: import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
036:
037: import com.jgoodies.forms.builder.PanelBuilder;
038: import com.jgoodies.forms.layout.CellConstraints;
039: import com.jgoodies.forms.layout.FormLayout;
040:
041: /**
042: * This class contains the panel for the CSV settings.
043: *
044: * @author Thorsten Mürell
045: */
046: public class CSVSettingsPanel extends JPanel {
047: private static final long serialVersionUID = 5532627733371852354L;
048:
049: private static final StringManager stringMgr = StringManagerFactory
050: .getStringManager(CSVSettingsPanel.class);
051:
052: private CSVSettingsBean settings = null;
053:
054: private JTextField seperatorChar = null;
055: private JTextField dateFormat = null;
056: private JRadioButton useChar = null;
057: private JRadioButton useTab = null;
058: private JComboBox encoding = null;
059:
060: /**
061: * Standard constructor
062: *
063: * @param settings
064: */
065: public CSVSettingsPanel(CSVSettingsBean settings) {
066: this .settings = settings;
067: init();
068: loadSettings();
069: }
070:
071: private void init() {
072: // TODO: Tooltips
073: ActionListener stateChangedListener = new ActionListener() {
074: public void actionPerformed(ActionEvent e) {
075: CSVSettingsPanel.this .stateChanged();
076: }
077: };
078: KeyListener keyStateChangedListener = new KeyAdapter() {
079: @Override
080: public void keyReleased(KeyEvent e) {
081: CSVSettingsPanel.this .stateChanged();
082: }
083: };
084: seperatorChar = new JTextField(1);
085: seperatorChar.addActionListener(stateChangedListener);
086: seperatorChar.addKeyListener(keyStateChangedListener);
087: //i18n[CSVSettingsPanel.seperatorCharToolTip=Specify the character that is used to seperate the columns in this file (e.g. ',' or ';')]
088: seperatorChar.setToolTipText(stringMgr
089: .getString("CSVSettingsPanel.seperatorCharToolTip"));
090: dateFormat = new JTextField(20);
091: dateFormat.addActionListener(stateChangedListener);
092: dateFormat.addKeyListener(keyStateChangedListener);
093: //i18n[CSVSettingsPanel.useTab=Tab seperated]
094: useTab = new JRadioButton(stringMgr
095: .getString("CSVSettingsPanel.useTab"));
096: //i18n[CSVSettingsPanel.useChar=Seperated by character:]
097: useChar = new JRadioButton(stringMgr
098: .getString("CSVSettingsPanel.useChar"));
099: useChar.setSelected(true);
100: useTab.addActionListener(stateChangedListener);
101: useChar.addActionListener(stateChangedListener);
102: encoding = new JComboBox();
103: for (String c : Charset.availableCharsets().keySet()) {
104: encoding.addItem(c);
105: }
106: encoding.addActionListener(stateChangedListener);
107:
108: ButtonGroup bg = new ButtonGroup();
109: bg.add(useTab);
110: bg.add(useChar);
111:
112: final FormLayout layout = new FormLayout(
113: // Columns
114: "pref, 6dlu, pref, 12dlu, pref:grow",
115: // Rows
116: "pref, 6dlu, pref, 6dlu, pref, 6dlu, pref, 6dlu");
117:
118: PanelBuilder builder = new PanelBuilder(layout);
119: CellConstraints cc = new CellConstraints();
120: builder.setDefaultDialogBorder();
121:
122: int y = 1;
123: //i18n[CSVSettingsPanel.csvSettings=CSV settings]
124: builder.addSeparator(stringMgr
125: .getString("CSVSettingsPanel.csvSettings"), cc.xywh(1,
126: y, 5, 1));
127:
128: y += 2;
129: builder.add(useChar, cc.xy(1, y));
130: builder.add(seperatorChar, cc.xy(3, y));
131: builder.add(useTab, cc.xy(5, y));
132:
133: y += 2;
134: //i18n[CSVSettingsPanel.inputFileEncoding=Input file encoding]
135: builder.add(new JLabel(stringMgr
136: .getString("CSVSettingsPanel.inputFileEncoding")), cc
137: .xywh(1, y, 3, 1));
138: builder.add(encoding, cc.xy(5, y));
139:
140: y += 2;
141: //i18n[CSVSettingsPanel.dateFormat=Date format]
142: builder.add(new JLabel(stringMgr
143: .getString("CSVSettingsPanel.dateFormat")), cc.xywh(1,
144: y, 3, 1));
145: builder.add(dateFormat, cc.xy(5, y));
146:
147: add(builder.getPanel());
148: }
149:
150: private void applySettings() {
151: if (useTab.isSelected()) {
152: settings.setSeperator('\t');
153: } else {
154: if (seperatorChar.getText().length() > 0) {
155: settings
156: .setSeperator(seperatorChar.getText().charAt(0));
157: } else {
158: settings.setSeperator(';');
159: }
160: }
161: settings.setImportCharset(Charset.forName(encoding
162: .getSelectedItem().toString()));
163: settings.setDateFormat(dateFormat.getText());
164: }
165:
166: private void loadSettings() {
167: if (settings.getSeperator() == '\t') {
168: useTab.setSelected(true);
169: } else {
170: useChar.setSelected(true);
171: seperatorChar.setText(Character.toString(settings
172: .getSeperator()));
173: }
174: dateFormat.setText(settings.getDateFormat());
175: encoding.setSelectedItem(settings.getImportCharset().name());
176: }
177:
178: private void stateChanged() {
179: if (seperatorChar.getText().length() > 1) {
180: try {
181: seperatorChar.setText(seperatorChar.getText(0, 1));
182: } catch (Exception e) { /* Ignore that */
183: }
184: }
185: if (useTab.isSelected()) {
186: seperatorChar.setEnabled(false);
187: } else {
188: seperatorChar.setEnabled(true);
189: }
190: applySettings();
191: }
192: }
|