/*
 * 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;

import java.awt.BorderLayout;
import java.util.Collection;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.tree.TreeNode;

import org.apache.jmeter.gui.tree.NamedTreeNode;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.WorkBench;
import org.apache.jmeter.testelement.property.StringProperty;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.util.LocaleChangeEvent;

public class NamePanel extends JPanel implements JMeterGUIComponent {
    /** A text field containing the name. */
    private JTextField nameField = new JTextField(15);

    /** The label for the text field. */
    private JLabel nameLabel;

    /** The node which this component is providing the name for. */
    private TreeNode node;

    /**
     * Create a new NamePanel with the default name.
     */
    public NamePanel() {
        setName(getStaticLabel());
        init();
    }

    /**
     * Initialize the GUI components and layout.
     */
    private void init() {
        setLayout(new BorderLayout(5, 0));

        nameLabel = new JLabel(JMeterUtils.getResString("name")); // $NON-NLS-1$
        nameLabel.setName("name");
        nameLabel.setLabelFor(nameField);

        nameField.getDocument().addDocumentListener(new DocumentListener() {
            public void insertUpdate(DocumentEvent e) {
                updateName(nameField.getText());
            }

            public void removeUpdate(DocumentEvent e) {
                updateName(nameField.getText());
            }

            public void changedUpdate(DocumentEvent e) {
                // not for text fields
            }
        });

        add(nameLabel, BorderLayout.WEST);
        add(nameField, BorderLayout.CENTER);
    }

    public void clearGui() {
        setName(getStaticLabel());
    }

    /**
     * Get the currently displayed name.
     *
     * @return the current name
     */
    public String getName() {
        if (nameField != null) {
            return nameField.getText();
        }
        return ""; // $NON-NLS-1$
    }

    /**
     * Set the name displayed in this component.
     *
     * @param name
     *            the name to display
     */
    public void setName(String name) {
        super.setName(name);
        nameField.setText(name);
    }

    /**
     * Get the tree node which this component provides the name for.
     *
     * @return the tree node corresponding to this component
     */
    protected TreeNode getNode() {
        return node;
    }

    /**
     * Set the tree node which this component provides the name for.
     *
     * @param node
     *            the tree node corresponding to this component
     */
    public void setNode(TreeNode node) {
        this.node = node;
    }

    /* Implements JMeterGUIComponent.configure(TestElement) */
    public void configure(TestElement testElement) {
        setName(testElement.getName());
    }

    /* Implements JMeterGUIComponent.createPopupMenu() */
    public JPopupMenu createPopupMenu() {
        return null;
    }

    /* Implements JMeterGUIComponent.getStaticLabel() */
    public String getStaticLabel() {
        return JMeterUtils.getResString(getLabelResource());
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.jmeter.gui.JMeterGUIComponent#getLabelResource()
     */
    public String getLabelResource() {
        return "root"; // $NON-NLS-1$
    }

    /* Implements JMeterGUIComponent.getMenuCategories() */
    public Collection getMenuCategories() {
        return null;
    }

    /* Implements JMeterGUIComponent.createTestElement() */
    public TestElement createTestElement() {
        WorkBench wb = new WorkBench();
        modifyTestElement(wb);
        return wb;
    }

    /* Implements JMeterGUIComponent.modifyTestElement(TestElement) */
    public void modifyTestElement(TestElement wb) {
        wb.setName(getName());
        wb.setProperty(new StringProperty(TestElement.GUI_CLASS, this.getClass().getName()));
        wb.setProperty(new StringProperty(TestElement.TEST_CLASS, WorkBench.class.getName()));
    }

    /**
     * Called when the name changes. The tree node which this component names
     * will be notified of the change.
     *
     * @param newValue
     *            the new name
     */
    private void updateName(String newValue) {
        if (getNode() != null) {
            ((NamedTreeNode)getNode()).nameChanged();
        }
    }

    /**
     * Called when the locale is changed so that the label can be updated. This
     * method is not currently used.
     *
     * @param event
     *            the event to be handled
     */
    public void localeChanged(LocaleChangeEvent event) {
        nameLabel.setText(JMeterUtils.getResString(nameLabel.getName()));
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.jmeter.gui.JMeterGUIComponent#getDocAnchor()
     */
    public String getDocAnchor() {
        return null;
    }
}

@@ -1378,57 +1378,8 @@
 ils;
-%0Aimport org.apache.jmeter.util.LocaleChangeEvent;
 %0A%0Apu
@@ -5404,348 +5404,8 @@
  %7D%0A%0A
-    /**%0A     * Called when the locale is changed so that the label can be updated. This%0A     * method is not currently used.%0A     *%0A     * @param event%0A     *            the event to be handled%0A     */%0A    public void localeChanged(LocaleChangeEvent event) %7B%0A        nameLabel.setText(JMeterUtils.getResString(nameLabel.getName()));%0A    %7D%0A%0A
     

Remove unused method