/*
* 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.desktoputil.wizard;
import java.util.*;
import net.java.sip.communicator.plugin.desktoputil.*;
/**
* Implements {@link TableModel} for encryption configuration (ZRTP, SDES and
* MIKEY).
*
* @author Lyubomir Marinov
* @author Vincent Lucas
*/
public class EncryptionConfigurationTableModel
extends MoveableTableModel
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = 0L;
/**
* The encryption protocol names.
*/
private String[] encryptionProtocols;
/**
* The encryption protocol status (enabled / disabled).
*/
private boolean[] encryptionProtocolStatus;
/**
* Creates a new table model in order to manage the encryption protocols and
* the corresponding priority.
*
* @param encryptionProtocols The encryption protocol names.
* @param encryptionProtocolStatuss The encryption protocol status (enabled
* / disabled).
*/
public EncryptionConfigurationTableModel(
String[] encryptionProtocols,
boolean[] encryptionProtocolStatus)
{
this.init(encryptionProtocols, encryptionProtocolStatus);
}
@Override
public Class<?> getColumnClass(int columnIndex)
{
return
(columnIndex == 0)
? Boolean.class
: super.getColumnClass(columnIndex);
}
public int getColumnCount()
{
return 2;
}
/**
* Returns the number of row in this table model.
*
* @return the number of row in this table model.
*/
public int getRowCount()
{
return encryptionProtocols.length;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return (columnIndex == 0);
}
public Object getValueAt(int rowIndex, int columnIndex)
{
switch (columnIndex)
{
case 0:
return encryptionProtocolStatus[rowIndex];
case 1:
return encryptionProtocols[rowIndex];
default:
return null;
}
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex)
{
if ((columnIndex == 0) && (value instanceof Boolean))
{
this.encryptionProtocolStatus[rowIndex]
= ((Boolean) value).booleanValue();
// We fire the update event before setting the configuration
// property in order to have more reactive user interface.
fireTableCellUpdated(rowIndex, columnIndex);
}
}
/**
* Move the row.
*
* @param rowIndex index of the row
* @param up true to move up, false to move down
* @return the next row index
*/
@Override
public int move(int rowIndex, boolean up)
{
int toRowIndex;
if (up)
{
toRowIndex = rowIndex - 1;
if (toRowIndex < 0)
throw new IllegalArgumentException("rowIndex");
}
else
{
toRowIndex = rowIndex + 1;
if (toRowIndex >= getRowCount())
throw new IllegalArgumentException("rowIndex");
}
// Swaps the selection list.
boolean tmpSelectionItem = this.encryptionProtocolStatus[rowIndex];
this.encryptionProtocolStatus[rowIndex]
= this.encryptionProtocolStatus[toRowIndex];
this.encryptionProtocolStatus[toRowIndex] = tmpSelectionItem;
// Swaps the label list.
String tmpLabel = this.encryptionProtocols[rowIndex];
this.encryptionProtocols[rowIndex]
= this.encryptionProtocols[toRowIndex];
this.encryptionProtocols[toRowIndex] = tmpLabel;
fireTableRowsUpdated(rowIndex, toRowIndex);
return toRowIndex;
}
/**
* Returns the map between encryption protocol names and their priority
* order.
*
* @return The map between encryption protocol names and their priority
* order.
*/
public Map<String, Integer> getEncryptionProtocols()
{
Map<String, Integer> encryptionProtocolMap
= new HashMap<String, Integer>(this.encryptionProtocols.length);
for(int i = 0; i < this.encryptionProtocols.length; ++i)
{
encryptionProtocolMap.put(
this.encryptionProtocols[i],
new Integer(i));
}
return encryptionProtocolMap;
}
/**
* Returns the map between encryption protocol names and their status.
*
* @return The map between encryption protocol names and their status.
*/
public Map<String, Boolean> getEncryptionProtocolStatus()
{
Map<String, Boolean> encryptionProtocolStatusMap
= new HashMap<String, Boolean>(
this.encryptionProtocolStatus.length);
for(int i = 0; i < this.encryptionProtocolStatus.length; ++i)
{
encryptionProtocolStatusMap.put(
encryptionProtocols[i],
new Boolean(encryptionProtocolStatus[i]));
}
return encryptionProtocolStatusMap;
}
/**
* Returns if the label is enabled or disabled.
*
* @param label The label to be determined as enabled or disabled.
*
* @return True if the label given in parameter is enabled. False,
* otherwise.
*/
public boolean isEnabledLabel(String label)
{
for(int i = 0; i < this.encryptionProtocols.length; ++i)
{
if(this.encryptionProtocols[i].equals(label))
{
return this.encryptionProtocolStatus[i];
}
}
return false;
}
/**
* Initiates this table model in order to manage the encryption protocols
* and the corresponding priority.
*
* @param encryptionProtocols The encryption protocol names.
* @param encryptionProtocolStatuss The encryption protocol status (enabled
* / disabled).
*/
public void init(
String[] encryptionProtocols,
boolean[] encryptionProtocolStatus)
{
this.encryptionProtocols = encryptionProtocols;
this.encryptionProtocolStatus = encryptionProtocolStatus;
}
}