Переопределил панельку, скопипастив модель списка интерфейсов из дерева устройств.
Всё работает, но такой костыль уязвляет мои религиозные чувства.
Мб всё-таки у себя так же запилите?
Код:
package ru.bitel.bgbilling.modules.inet.api.client.contract;
import ru.bitel.bgbilling.client.common.BGUPanel;
import ru.bitel.bgbilling.client.common.BGUTable;
import ru.bitel.bgbilling.client.common.ClientContext;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServType;
import ru.bitel.common.RangeUtils;
import ru.bitel.common.client.AbstractBGUPanel;
import ru.bitel.common.client.BGSwingUtilites;
import ru.bitel.common.client.table.BGTableModel;
import ru.bitel.oss.systems.inventory.resource.common.DeviceInterfaceService;
import ru.bitel.oss.systems.inventory.resource.common.bean.DeviceInterface;
import ru.bitel.oss.systems.inventory.resource.common.bean.DeviceInterfaceIndex;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.util.List;
public class InetServDeviceInterfaceForm extends BGUPanel
{
private DeviceInterfaceService deviceInterfaceService = (DeviceInterfaceService)((ClientContext)getContext()).getPort(DeviceInterfaceService.class);
private final InetServForm inetServForm;
private int interfaceId;
private DeviceInterface initialDeviceInterface;
private DeviceInterface deviceInterface;
//private BGUList<DeviceInterface> result;
private BGTableModel<DeviceInterface> result;
AbstractBGUPanel.DefaultAction interfaceSelect =
new AbstractBGUPanel.DefaultAction("interface.resource", "Интерфейсы")
{
public void actionPerformedImpl(ActionEvent e)
throws Exception
{
InetServType inetServType = InetServDeviceInterfaceForm.this.inetServForm.serviceType.getSelectedItem();
boolean personalInterface = (inetServType == null) || (inetServType.isPersonalInterface());
List<DeviceInterface> list = InetServDeviceInterfaceForm.this.deviceInterfaceService.deviceInterfaceListFree(InetServDeviceInterfaceForm.this.inetServForm.current.getDeviceId(),
InetServDeviceInterfaceForm.this.inetServForm.period.getDateFrom(), InetServDeviceInterfaceForm.this.inetServForm.period.getDateTo());
if (!personalInterface)
{
Set<DeviceInterface> freeInterfaces = new HashSet<DeviceInterface>();
for (DeviceInterface aList : list) {
freeInterfaces.add(aList);
}
list = InetServDeviceInterfaceForm.this.deviceInterfaceService.devicePortList(InetServDeviceInterfaceForm.this.inetServForm.current.getDeviceId(), false);
for (DeviceInterface iface : list) {
if (!freeInterfaces.contains(iface)) {
iface.setTitle(iface.getTitle() + " *");
}
}
}
if ((InetServDeviceInterfaceForm.this.initialDeviceInterface != null) && (InetServDeviceInterfaceForm.this.initialDeviceInterface.getDeviceId() == InetServDeviceInterfaceForm.this.inetServForm.current.getDeviceId()))
{
InetServDeviceInterfaceForm.this.result.setData(list);
if ((InetServDeviceInterfaceForm.this.deviceInterface == null) || (InetServDeviceInterfaceForm.this.deviceInterface.equals(InetServDeviceInterfaceForm.this.initialDeviceInterface)))
{
//InetServDeviceInterfaceForm.this.result.setSelectedIndex(pos);
InetServDeviceInterfaceForm.this.result.setSelectedRow(initialDeviceInterface);
//InetServDeviceInterfaceForm.this.result.ensureIndexIsVisible(pos);
}
else
{
//InetServDeviceInterfaceForm.this.result.setSelectedValue(InetServDeviceInterfaceForm.this.deviceInterface, true);
InetServDeviceInterfaceForm.this.result.setSelectedRow(InetServDeviceInterfaceForm.this.deviceInterface);
}
}
else
{
InetServDeviceInterfaceForm.this.result.setData(list);
}
InetServDeviceInterfaceForm.this.performActionOpen();
}
};
AbstractBGUPanel.DefaultAction ok = new AbstractBGUPanel.DefaultAction("ok", "Ok")
{
public void actionPerformedImpl(ActionEvent e)
throws Exception
{
DeviceInterface selected = InetServDeviceInterfaceForm.this.result.getSelectedRow();
if (selected != null)
{
InetServDeviceInterfaceForm.this.interfaceId = selected.getPort();
InetServDeviceInterfaceForm.this.deviceInterface = selected;
InetServDeviceInterfaceForm.this.inetServForm.iface.setText(InetServDeviceInterfaceForm.this.deviceInterface.getTitle());
}
else
{
InetServDeviceInterfaceForm.this.interfaceId = 0;
InetServDeviceInterfaceForm.this.deviceInterface = null;
InetServDeviceInterfaceForm.this.inetServForm.iface.setText("");
}
InetServDeviceInterfaceForm.this.performActionClose();
}
};
public InetServDeviceInterfaceForm(InetServForm inetServForm, ActionListener actionListener)
{
super(new BorderLayout());
BGSwingUtilites.wrapBorder(this, "Интерфейсы");
this.inetServForm = inetServForm;
}
protected void jbInit()
{
//this.result = new BGUList(DeviceInterface.class);
this.result = new BGTableModel<DeviceInterface>("port")
{
protected void initColumns()
{
addColumn("Интерфейс", -1, 120, 200, "port", true);
addColumn("Название", -1, 180, 240, "title", true);
addColumn("Индекс", -1, 120, 120, "port", true);
addColumn("Статус", -1, 120, 120, null, true);
//addColumn("Категория IP", -1, 180, 240, null, true);
addColumn("Подписчик", -1, 200, -1, "subscriberTitle", true);
addColumn("Комментарий", -1, 240, -1, "comment", true);
}
public Object getValue(DeviceInterface val, int column)
{
switch (column)
{
case 2:
List<DeviceInterfaceIndex> indexList = val.getIndexList();
if ((indexList == null) || (indexList.size() == 0))
{
return val.getPort();
}
Date now = new Date();
for (DeviceInterfaceIndex index : indexList)
{
if (RangeUtils.inRange(now, now, index.getTimeFrom(), index.getTimeTo()))
{
return index.getIndex();
}
}
return val.getPort();
case 3:
switch (val.getStatus())
{
case 0:
return "зарезервирован";
case 1:
return "доступен";
}
return null;
}
return super.getValue(val, column);
}
};
add(new JScrollPane(new BGUTable(this.result)));
}
public void setInterfaceId(int interfaceId)
{
this.interfaceId = interfaceId;
if (interfaceId == -1)
{
this.initialDeviceInterface = null;
this.deviceInterface = null;
return;
}
try
{
this.initialDeviceInterface = this.deviceInterfaceService.devicePort(this.inetServForm.current.getDeviceId(), interfaceId);
this.deviceInterface = this.initialDeviceInterface;
}
catch (BGException e)
{
getContext().processException(e);
}
}
public int getInterfaceId()
{
return this.interfaceId;
}
public String getInterfaceTitle()
{
return this.deviceInterface.getTitle();
}
}