/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed 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 net.java.sip.communicator.plugin.propertieseditor;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import org.jitsi.service.configuration.*;
import org.jitsi.service.resources.*;
/**
* @author Marin Dzhigarov
* @author Pawel Domas
*/
public class PropertiesEditorPanel
extends TransparentPanel
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = 1L;
/**
* The buttons panel.
*/
private final ButtonsPanel buttonsPanel;
/**
* The panel containing the props table and the buttons panel
*/
private final JPanel centerPanel;
/**
* The props table.
*/
private final JTable propsTable;
/**
* Creates an instance <tt>PropertiesEditorPanel</tt>.
*/
public PropertiesEditorPanel()
{
super(new BorderLayout());
/**
* Instantiates the properties table and adds selection model and
* listener and adds a row sorter to the table model
*/
ResourceManagementService r
= PropertiesEditorActivator.getResourceManagementService();
String[] columnNames
= new String[]
{
r.getI18NString("service.gui.NAME"),
r.getI18NString("service.gui.VALUE")
};
propsTable
= new JTable(new PropsTableModel(initTableModel(), columnNames));
propsTable.setRowSorter(
new TableRowSorter<TableModel>(propsTable.getModel()));
propsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
PropsListSelectionListener selectionListener
= new PropsListSelectionListener();
propsTable.getSelectionModel().addListSelectionListener(
selectionListener);
propsTable
.getColumnModel()
.getSelectionModel()
.addListSelectionListener(selectionListener);
JScrollPane scrollPane = new JScrollPane(propsTable);
SearchField searchField = new SearchField("", propsTable);
buttonsPanel = new ButtonsPanel(propsTable, searchField);
centerPanel = new TransparentPanel(new BorderLayout());
centerPanel.add(scrollPane, BorderLayout.CENTER);
centerPanel.add(buttonsPanel, BorderLayout.EAST);
JLabel needRestart
= new JLabel(
r.getI18NString("plugin.propertieseditor.NEED_RESTART"));
needRestart.setForeground(Color.RED);
TransparentPanel searchPanel
= new TransparentPanel(new BorderLayout(5, 0));
searchPanel.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));
searchPanel.add(searchField, BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
add(searchPanel, BorderLayout.NORTH);
add(centerPanel, BorderLayout.CENTER);
add(needRestart, BorderLayout.SOUTH);
}
/**
* Listens for events triggered when a selection is made in the props list.
*/
private class PropsListSelectionListener
implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e)
{
int selectedRow = propsTable.getSelectedRow();
if (selectedRow == -1)
buttonsPanel.defaultButtonState();
else
buttonsPanel.enableDeleteButton(true);
}
}
/**
* Gets the data from the <tt>ConfigurationService</tt> that will construct
* the <tt>PropsTableModel</tt> for the properties table.
*
* @return The data necessary to initialize the <tt>PropsTableModel</tt>
*/
private Object[][] initTableModel()
{
ConfigurationService confService
= PropertiesEditorActivator.getConfigurationService();
java.util.List<String> properties = confService.getAllPropertyNames();
Object[][] data = new Object[properties.size()][];
int i = 0;
for (String property : properties)
{
data[i++]
= new Object[] { property, confService.getProperty(property) };
}
return data;
}
}