001: /*
002: * Copyright 2006-2007 Pentaho Corporation. All rights reserved.
003: * This software was developed by Pentaho Corporation and is provided under the terms
004: * of the Mozilla Public License, Version 1.1, or any later version. You may not use
005: * this file except in compliance with the license. If you need a copy of the license,
006: * please go to http://www.mozilla.org/MPL/MPL-1.1.txt.
007: *
008: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
009: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
010: * the license for the specific language governing your rights and limitations.
011: *
012: * Additional Contributor(s): Martin Schmid gridvision engineering GmbH
013: */
014: package org.pentaho.reportdesigner.crm.report.settings;
015:
016: import com.jgoodies.forms.layout.CellConstraints;
017: import com.jgoodies.forms.layout.FormLayout;
018: import org.jetbrains.annotations.NonNls;
019: import org.jetbrains.annotations.NotNull;
020: import org.pentaho.reportdesigner.crm.report.util.JFileChooserHelper;
021: import org.pentaho.reportdesigner.lib.client.i18n.TranslationManager;
022: import org.pentaho.reportdesigner.lib.client.util.UncaughtExcpetionsModel;
023: import org.pentaho.reportdesigner.lib.client.components.CenterPanelDialog;
024:
025: import javax.swing.*;
026: import java.awt.*;
027: import java.awt.event.ActionEvent;
028: import java.awt.event.ActionListener;
029: import java.io.File;
030: import java.io.IOException;
031:
032: /**
033: * User: Martin
034: * Date: 02.03.2006
035: * Time: 07:37:12
036: */
037: public class ExternalToolSettingsPanel extends SettingsPanel {
038: @NotNull
039: private JTabbedPane tabbedPane;
040:
041: @NotNull
042: private ToolSettingsPanel toolSettingsPanelPDF;
043: @NotNull
044: private ToolSettingsPanel toolSettingsPanelRTF;
045: @NotNull
046: private ToolSettingsPanel toolSettingsPanelXLS;
047: @NotNull
048: private ToolSettingsPanel toolSettingsPanelCSV;
049: @NotNull
050: private ToolSettingsPanel toolSettingsPanelXML;
051:
052: public ExternalToolSettingsPanel() {
053: tabbedPane = new JTabbedPane();
054:
055: toolSettingsPanelPDF = new ToolSettingsPanel();
056: toolSettingsPanelRTF = new ToolSettingsPanel();
057: toolSettingsPanelXLS = new ToolSettingsPanel();
058: toolSettingsPanelCSV = new ToolSettingsPanel();
059: toolSettingsPanelXML = new ToolSettingsPanel();
060:
061: tabbedPane.addTab(TranslationManager.getInstance()
062: .getTranslation("R",
063: "ExternalToolSettingsPanel.Tab.PDF"),
064: toolSettingsPanelPDF);
065: tabbedPane.addTab(TranslationManager.getInstance()
066: .getTranslation("R",
067: "ExternalToolSettingsPanel.Tab.RTF"),
068: toolSettingsPanelRTF);
069: tabbedPane.addTab(TranslationManager.getInstance()
070: .getTranslation("R",
071: "ExternalToolSettingsPanel.Tab.XLS"),
072: toolSettingsPanelXLS);
073: tabbedPane.addTab(TranslationManager.getInstance()
074: .getTranslation("R",
075: "ExternalToolSettingsPanel.Tab.CSV"),
076: toolSettingsPanelCSV);
077: tabbedPane.addTab(TranslationManager.getInstance()
078: .getTranslation("R",
079: "ExternalToolSettingsPanel.Tab.XML"),
080: toolSettingsPanelXML);
081:
082: setLayout(new BorderLayout());
083: add(tabbedPane, BorderLayout.CENTER);
084:
085: reset();
086: }
087:
088: @NotNull
089: public ValidationResult getValidationResult() {
090: ValidationResult validationResult = new ValidationResult();
091: validationResult.addValidationMessages(toolSettingsPanelPDF
092: .getValidationMessages());
093: validationResult.addValidationMessages(toolSettingsPanelRTF
094: .getValidationMessages());
095: validationResult.addValidationMessages(toolSettingsPanelXLS
096: .getValidationMessages());
097: validationResult.addValidationMessages(toolSettingsPanelCSV
098: .getValidationMessages());
099: validationResult.addValidationMessages(toolSettingsPanelXML
100: .getValidationMessages());
101: return validationResult;
102: }
103:
104: public void apply() {
105: ApplicationSettings.getInstance().getExternalToolSettings()
106: .setUseDefaultPDFViewer(
107: toolSettingsPanelPDF.getUseDefaultRadioButton()
108: .isSelected());
109: ApplicationSettings.getInstance().getExternalToolSettings()
110: .setCustomPDFViewerExecutable(
111: toolSettingsPanelPDF
112: .getCustomExecutableTextField()
113: .getText());
114: ApplicationSettings.getInstance().getExternalToolSettings()
115: .setCustomPDFViewerParameters(
116: toolSettingsPanelPDF
117: .getCustomParametersTextField()
118: .getText());
119:
120: ApplicationSettings.getInstance().getExternalToolSettings()
121: .setUseDefaultRTFViewer(
122: toolSettingsPanelRTF.getUseDefaultRadioButton()
123: .isSelected());
124: ApplicationSettings.getInstance().getExternalToolSettings()
125: .setCustomRTFViewerExecutable(
126: toolSettingsPanelRTF
127: .getCustomExecutableTextField()
128: .getText());
129: ApplicationSettings.getInstance().getExternalToolSettings()
130: .setCustomRTFViewerParameters(
131: toolSettingsPanelRTF
132: .getCustomParametersTextField()
133: .getText());
134:
135: ApplicationSettings.getInstance().getExternalToolSettings()
136: .setUseDefaultXLSViewer(
137: toolSettingsPanelXLS.getUseDefaultRadioButton()
138: .isSelected());
139: ApplicationSettings.getInstance().getExternalToolSettings()
140: .setCustomXLSViewerExecutable(
141: toolSettingsPanelXLS
142: .getCustomExecutableTextField()
143: .getText());
144: ApplicationSettings.getInstance().getExternalToolSettings()
145: .setCustomXLSViewerParameters(
146: toolSettingsPanelXLS
147: .getCustomParametersTextField()
148: .getText());
149:
150: ApplicationSettings.getInstance().getExternalToolSettings()
151: .setUseDefaultCSVViewer(
152: toolSettingsPanelCSV.getUseDefaultRadioButton()
153: .isSelected());
154: ApplicationSettings.getInstance().getExternalToolSettings()
155: .setCustomCSVViewerExecutable(
156: toolSettingsPanelCSV
157: .getCustomExecutableTextField()
158: .getText());
159: ApplicationSettings.getInstance().getExternalToolSettings()
160: .setCustomCSVViewerParameters(
161: toolSettingsPanelCSV
162: .getCustomParametersTextField()
163: .getText());
164:
165: ApplicationSettings.getInstance().getExternalToolSettings()
166: .setUseDefaultXMLViewer(
167: toolSettingsPanelXML.getUseDefaultRadioButton()
168: .isSelected());
169: ApplicationSettings.getInstance().getExternalToolSettings()
170: .setCustomXMLViewerExecutable(
171: toolSettingsPanelXML
172: .getCustomExecutableTextField()
173: .getText());
174: ApplicationSettings.getInstance().getExternalToolSettings()
175: .setCustomXMLViewerParameters(
176: toolSettingsPanelXML
177: .getCustomParametersTextField()
178: .getText());
179: }
180:
181: public void reset() {
182: toolSettingsPanelPDF.getUseDefaultRadioButton().setSelected(
183: ApplicationSettings.getInstance()
184: .getExternalToolSettings()
185: .isUseDefaultPDFViewer());
186: toolSettingsPanelPDF.getUseCustomExecutableRadioButton()
187: .setSelected(
188: !ApplicationSettings.getInstance()
189: .getExternalToolSettings()
190: .isUseDefaultPDFViewer());
191: toolSettingsPanelPDF.getCustomExecutableTextField().setText(
192: ApplicationSettings.getInstance()
193: .getExternalToolSettings()
194: .getCustomPDFViewerExecutable());
195: toolSettingsPanelPDF.getCustomParametersTextField().setText(
196: ApplicationSettings.getInstance()
197: .getExternalToolSettings()
198: .getCustomPDFViewerParameters());
199: toolSettingsPanelPDF.changeTextFieldState(!ApplicationSettings
200: .getInstance().getExternalToolSettings()
201: .isUseDefaultPDFViewer());
202:
203: toolSettingsPanelRTF.getUseDefaultRadioButton().setSelected(
204: ApplicationSettings.getInstance()
205: .getExternalToolSettings()
206: .isUseDefaultRTFViewer());
207: toolSettingsPanelRTF.getUseCustomExecutableRadioButton()
208: .setSelected(
209: !ApplicationSettings.getInstance()
210: .getExternalToolSettings()
211: .isUseDefaultRTFViewer());
212: toolSettingsPanelRTF.getCustomExecutableTextField().setText(
213: ApplicationSettings.getInstance()
214: .getExternalToolSettings()
215: .getCustomRTFViewerExecutable());
216: toolSettingsPanelRTF.getCustomParametersTextField().setText(
217: ApplicationSettings.getInstance()
218: .getExternalToolSettings()
219: .getCustomRTFViewerParameters());
220: toolSettingsPanelRTF.changeTextFieldState(!ApplicationSettings
221: .getInstance().getExternalToolSettings()
222: .isUseDefaultRTFViewer());
223:
224: toolSettingsPanelXLS.getUseDefaultRadioButton().setSelected(
225: ApplicationSettings.getInstance()
226: .getExternalToolSettings()
227: .isUseDefaultXLSViewer());
228: toolSettingsPanelXLS.getUseCustomExecutableRadioButton()
229: .setSelected(
230: !ApplicationSettings.getInstance()
231: .getExternalToolSettings()
232: .isUseDefaultXLSViewer());
233: toolSettingsPanelXLS.getCustomExecutableTextField().setText(
234: ApplicationSettings.getInstance()
235: .getExternalToolSettings()
236: .getCustomXLSViewerExecutable());
237: toolSettingsPanelXLS.getCustomParametersTextField().setText(
238: ApplicationSettings.getInstance()
239: .getExternalToolSettings()
240: .getCustomXLSViewerParameters());
241: toolSettingsPanelXLS.changeTextFieldState(!ApplicationSettings
242: .getInstance().getExternalToolSettings()
243: .isUseDefaultXLSViewer());
244:
245: toolSettingsPanelCSV.getUseDefaultRadioButton().setSelected(
246: ApplicationSettings.getInstance()
247: .getExternalToolSettings()
248: .isUseDefaultCSVViewer());
249: toolSettingsPanelCSV.getUseCustomExecutableRadioButton()
250: .setSelected(
251: !ApplicationSettings.getInstance()
252: .getExternalToolSettings()
253: .isUseDefaultCSVViewer());
254: toolSettingsPanelCSV.getCustomExecutableTextField().setText(
255: ApplicationSettings.getInstance()
256: .getExternalToolSettings()
257: .getCustomCSVViewerExecutable());
258: toolSettingsPanelCSV.getCustomParametersTextField().setText(
259: ApplicationSettings.getInstance()
260: .getExternalToolSettings()
261: .getCustomCSVViewerParameters());
262: toolSettingsPanelCSV.changeTextFieldState(!ApplicationSettings
263: .getInstance().getExternalToolSettings()
264: .isUseDefaultCSVViewer());
265:
266: toolSettingsPanelXML.getUseDefaultRadioButton().setSelected(
267: ApplicationSettings.getInstance()
268: .getExternalToolSettings()
269: .isUseDefaultXMLViewer());
270: toolSettingsPanelXML.getUseCustomExecutableRadioButton()
271: .setSelected(
272: !ApplicationSettings.getInstance()
273: .getExternalToolSettings()
274: .isUseDefaultXMLViewer());
275: toolSettingsPanelXML.getCustomExecutableTextField().setText(
276: ApplicationSettings.getInstance()
277: .getExternalToolSettings()
278: .getCustomXMLViewerExecutable());
279: toolSettingsPanelXML.getCustomParametersTextField().setText(
280: ApplicationSettings.getInstance()
281: .getExternalToolSettings()
282: .getCustomXMLViewerParameters());
283: toolSettingsPanelXML.changeTextFieldState(!ApplicationSettings
284: .getInstance().getExternalToolSettings()
285: .isUseDefaultXMLViewer());
286:
287: }
288:
289: public boolean hasChanged() {
290: return true;
291: }
292:
293: private static class ToolSettingsPanel extends JPanel {
294: @NotNull
295: private JRadioButton useDefaultRadioButton;
296: @NotNull
297: private JRadioButton useCustomExecutableRadioButton;
298: @NotNull
299: private JButton showFileChooserButton;
300: @NotNull
301: private JTextField customExecutableTextField;
302: @NotNull
303: private JTextField customParametersTextField;
304: @NotNull
305: private JLabel sampleCustomExecutableLabel;
306:
307: @NotNull
308: private ButtonGroup buttonGroup;
309: @NotNull
310: private JLabel customExecutableLabel;
311: @NotNull
312: private JLabel customParametersLabel;
313:
314: private ToolSettingsPanel() {
315: @NonNls
316: FormLayout formLayout = new FormLayout(
317: "4dlu, pref, 4dlu, 10dlu:grow, 0dlu, default, 4dlu",
318: "4dlu, pref, " + "4dlu, pref, " + "4dlu, pref, "
319: + "4dlu, pref, " + "4dlu, pref, "
320: + "4dlu, ");
321:
322: @NonNls
323: CellConstraints cc = new CellConstraints();
324:
325: setLayout(formLayout);
326:
327: useDefaultRadioButton = new JRadioButton(
328: TranslationManager
329: .getInstance()
330: .getTranslation("R",
331: "ToolSettingsPanel.defaultBrowserRadioButton"));
332: useCustomExecutableRadioButton = new JRadioButton(
333: TranslationManager
334: .getInstance()
335: .getTranslation("R",
336: "ToolSettingsPanel.customExecutableRadioButton"));
337:
338: showFileChooserButton = new JButton(TranslationManager
339: .getInstance().getTranslation("R",
340: "ToolSettingsPanel.showFileChooserButton"));
341: showFileChooserButton.setMargin(new Insets(0, 0, 0, 0));
342:
343: customExecutableTextField = new JTextField();
344: customParametersTextField = new JTextField("{0}");
345: sampleCustomExecutableLabel = new JLabel(
346: TranslationManager
347: .getInstance()
348: .getTranslation("R",
349: "ToolSettingsPanel.sampleCustomExecutableTextArea"));
350:
351: customExecutableLabel = new JLabel(
352: TranslationManager
353: .getInstance()
354: .getTranslation("R",
355: "ToolSettingsPanel.customExecutableTextField"));
356: customParametersLabel = new JLabel(
357: TranslationManager
358: .getInstance()
359: .getTranslation("R",
360: "ToolSettingsPanel.customParametersTextField"));
361:
362: add(useDefaultRadioButton, cc.xyw(2, 2, 3));
363: add(useCustomExecutableRadioButton, cc.xyw(2, 4, 3));
364: add(customExecutableLabel, cc.xy(2, 6));
365: add(customExecutableTextField, cc.xy(4, 6));
366: add(customParametersLabel, cc.xy(2, 8));
367: add(customParametersTextField, cc.xy(4, 8));
368: add(showFileChooserButton, cc.xy(6, 6, "fill, fill"));
369: add(sampleCustomExecutableLabel, cc.xy(4, 10));
370:
371: buttonGroup = new ButtonGroup();
372: buttonGroup.add(useDefaultRadioButton);
373: buttonGroup.add(useCustomExecutableRadioButton);
374:
375: showFileChooserButton
376: .addActionListener(new ActionListener() {
377: public void actionPerformed(@NotNull
378: ActionEvent e) {
379: JFileChooser fileChooser = new JFileChooserHelper(
380: CenterPanelDialog.ModalityType.DOCUMENT_MODAL);
381: int value = fileChooser
382: .showOpenDialog(ToolSettingsPanel.this );
383: if (value == JFileChooser.APPROVE_OPTION) {
384: File selectedFile = fileChooser
385: .getSelectedFile();
386: try {
387: customExecutableTextField
388: .setText(selectedFile
389: .getCanonicalPath());
390: } catch (IOException e1) {
391: UncaughtExcpetionsModel
392: .getInstance()
393: .addException(e1);
394: }
395: }
396: }
397: });
398:
399: useCustomExecutableRadioButton
400: .addActionListener(new ActionListener() {
401: public void actionPerformed(@NotNull
402: ActionEvent e) {
403: changeTextFieldState(useCustomExecutableRadioButton
404: .isSelected());
405: }
406: });
407:
408: useDefaultRadioButton
409: .addActionListener(new ActionListener() {
410: public void actionPerformed(@NotNull
411: ActionEvent e) {
412: changeTextFieldState(useCustomExecutableRadioButton
413: .isSelected());
414: }
415: });
416: }
417:
418: public void changeTextFieldState(boolean enable) {
419: customExecutableLabel.setEnabled(enable);
420: customParametersLabel.setEnabled(enable);
421: customExecutableTextField.setEnabled(enable);
422: customParametersTextField.setEnabled(enable);
423: sampleCustomExecutableLabel.setEnabled(enable);
424: showFileChooserButton.setEnabled(enable);
425: }
426:
427: @NotNull
428: public JRadioButton getUseCustomExecutableRadioButton() {
429: return useCustomExecutableRadioButton;
430: }
431:
432: @NotNull
433: public JRadioButton getUseDefaultRadioButton() {
434: return useDefaultRadioButton;
435: }
436:
437: @NotNull
438: public JTextField getCustomExecutableTextField() {
439: return customExecutableTextField;
440: }
441:
442: @NotNull
443: public JTextField getCustomParametersTextField() {
444: return customParametersTextField;
445: }
446:
447: @NotNull
448: public ValidationMessage[] getValidationMessages() {
449: if (!getCustomParametersTextField().getText().contains(
450: "{0}")) {
451: return new ValidationMessage[] { new ValidationMessage(
452: ValidationMessage.Severity.ERROR,
453: "ExternalToolSettingsPanel.MissingVariable") };
454: }
455: return ValidationMessage.EMPTY_ARRAY;
456: }
457: }
458: }
|