/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.apache.jmeter.gui.util;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.apache.jmeter.util.JMeterUtils;

public class DirectoryPanel extends HorizontalPanel implements ActionListener {
    protected JTextField filename = new JTextField(20);

    protected JButton browse = new JButton(JMeterUtils.getResString("browse"));

    List listeners = new LinkedList();

    String title;

    String filetype;

    Color background;

    /**
     * Constructor for the FilePanel object.
     */
    public DirectoryPanel() {
        title = "";
        init();
    }

    public DirectoryPanel(String title) {
        this.title = title;
        init();
    }

    public DirectoryPanel(String title, String filetype, Color bk) {
        this(title,filetype);
        this.background = bk;
        init();
    }

    public DirectoryPanel(String title, String filetype) {
        this(title);
        this.filetype = filetype;
    }

    /**
     * Constructor for the FilePanel object.
     */
    public DirectoryPanel(ChangeListener l, String title) {
        this.title = title;
        init();
        listeners.add(l);
    }

    public void addChangeListener(ChangeListener l) {
        listeners.add(l);
    }

    private void init() {
        setBackground(this.background);
        setBorder(BorderFactory.createTitledBorder(title));
        add(Box.createHorizontalStrut(5));
        add(filename);
        add(Box.createHorizontalStrut(5));
        filename.addActionListener(this);
        add(browse);
        browse.setActionCommand("browse");
        browse.addActionListener(this);
    }

    /**
     * If the gui needs to enable/disable the FilePanel, call the method.
     *
     * @param enable
     */
    public void enableFile(boolean enable) {
        browse.setEnabled(enable);
        filename.setEnabled(enable);
    }

    /**
     * Gets the filename attribute of the FilePanel object.
     *
     * @return the filename value
     */
    public String getFilename() {
        return filename.getText();
    }

    /**
     * Sets the filename attribute of the FilePanel object.
     *
     * @param f
     *            the new filename value
     */
    public void setFilename(String f) {
        filename.setText(f);
    }

    private void fireFileChanged() {
        Iterator iter = listeners.iterator();
        while (iter.hasNext()) {
            ((ChangeListener) iter.next()).stateChanged(new ChangeEvent(this));
        }
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("browse")) {
            JFileChooser chooser = DirectoryDialoger.promptToOpenFile();
            if (chooser.getSelectedFile() != null) {
                filename.setText(chooser.getSelectedFile().getPath());
                fireFileChanged();
            }
        } else {
            fireFileChanged();
        }
    }
}

@@ -1364,29 +1364,108 @@
 tener %7B%0A
+%0A
     pr
-otected
+ivate static final String ACTION_BROWSE = %22browse%22; // $NON-NSL-1$%0A%0A    private final
  JTextFi
@@ -1510,15 +1510,19 @@
   pr
-otected
+ivate final
  JBu
@@ -1593,47 +1593,107 @@
     
-List listeners = new LinkedList();%0A%0A   
+private final List%3CChangeListener%3E listeners = new LinkedList%3CChangeListener%3E();%0A%0A    private final
  Str
@@ -1704,20 +1704,36 @@
 title;%0A%0A
+//
     
+private final 
 String f
@@ -1740,21 +1740,47 @@
 iletype;
-%0A%0A   
+ // NOT USED%0A%0A    private final
  Color b
@@ -1895,32 +1895,26 @@
    t
-itle = %22%22;%0A        init(
+his(%22%22, null, null
 );%0A 
@@ -1977,37 +1977,26 @@
 this
-.
+(
 title
- = title;%0A        init(
+, null, null
 );%0A 
@@ -2086,24 +2086,58 @@
 this
-(
+.
 title
-,filetype)
+ = title;%0A//        this.filetype = filetype
 ;%0A  
@@ -2268,43 +2268,25 @@
 itle
-);%0A        this.filetype = filetype
+, filetype, null)
 ;%0A  
@@ -2427,37 +2427,14 @@
 this
-.
+(
 title
- = title;%0A        init(
 );%0A 
@@ -2882,24 +2882,29 @@
 Command(
-%22browse%22
+ACTION_BROWSE
 );%0A     
@@ -3649,16 +3649,32 @@
 Iterator
+%3CChangeListener%3E
  iter = 
@@ -3743,26 +3743,8 @@
     
- ((ChangeListener)
  ite
@@ -3751,17 +3751,16 @@
 r.next()
-)
 .stateCh
@@ -3895,24 +3895,29 @@
 .equals(
-%22browse%22
+ACTION_BROWSE
 )) %7B%0A   

Tidy up