package com.iailab.netsdk.demo.frame;
|
|
import java.awt.BorderLayout;
|
import java.awt.Dimension;
|
import java.awt.GridLayout;
|
|
import java.awt.FlowLayout;
|
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.awt.event.WindowAdapter;
|
import java.awt.event.WindowEvent;
|
import java.util.Vector;
|
|
import javax.swing.DefaultComboBoxModel;
|
import javax.swing.JButton;
|
import javax.swing.JComboBox;
|
import javax.swing.JFrame;
|
import javax.swing.JLabel;
|
import javax.swing.JOptionPane;
|
import javax.swing.JPanel;
|
import javax.swing.JProgressBar;
|
import javax.swing.JScrollPane;
|
import javax.swing.JTable;
|
import javax.swing.ListSelectionModel;
|
import javax.swing.SwingUtilities;
|
import javax.swing.UIManager;
|
import javax.swing.border.EmptyBorder;
|
import javax.swing.table.DefaultTableCellRenderer;
|
import javax.swing.table.DefaultTableModel;
|
|
import com.iailab.netsdk.common.*;
|
import com.iailab.netsdk.demo.module.DownLoadRecordModule;
|
import com.iailab.netsdk.demo.module.LoginModule;
|
import com.iailab.netsdk.lib.*;
|
import com.iailab.netsdk.lib.NetSDKLib.LLong;
|
|
import com.sun.jna.CallbackThreadInitializer;
|
import com.sun.jna.Native;
|
import com.sun.jna.Pointer;
|
import com.sun.jna.ptr.IntByReference;
|
|
/*
|
* 下载录像Demo
|
*/
|
class DownLoadRecordFrame extends JFrame{
|
private static final long serialVersionUID = 1L;
|
private Vector<String> chnlist = new Vector<String>();
|
|
private DefaultTableModel model;
|
private LLong m_hDownLoadByTimeHandle = new LLong(0); // 按时间下载句柄
|
private LLong m_hDownLoadByFileHandle = new LLong(0); // 按文件下载句柄
|
|
private boolean b_downloadByTime = false;
|
private boolean b_downloadByFile = false;
|
private IntByReference nFindCount = new IntByReference(0);
|
|
// 设备断线通知回调
|
private DisConnect disConnect = new DisConnect();
|
|
// 网络连接恢复
|
private static HaveReConnect haveReConnect = new HaveReConnect();
|
|
// 开始时间
|
private NetSDKLib.NET_TIME stTimeStart = new NetSDKLib.NET_TIME();
|
|
// 结束时间
|
private NetSDKLib.NET_TIME stTimeEnd = new NetSDKLib.NET_TIME();
|
|
// 录像文件信息
|
private NetSDKLib.NET_RECORDFILE_INFO[] stFileInfo = (NetSDKLib.NET_RECORDFILE_INFO[])new NetSDKLib.NET_RECORDFILE_INFO().toArray(2000);
|
|
Object[][] data = null;
|
|
// 获取界面窗口
|
private static JFrame frame = new JFrame();
|
|
public DownLoadRecordFrame() {
|
setTitle(Res.string().getDownloadRecord());
|
setLayout(new BorderLayout());
|
pack();
|
setSize(800, 560);
|
setResizable(false);
|
setLocationRelativeTo(null);
|
LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
|
|
try {
|
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
loginPanel = new LoginPanel();
|
downloadRecordPanel = new DownLoadRecordPanel();
|
|
add(loginPanel, BorderLayout.NORTH);
|
add(downloadRecordPanel, BorderLayout.CENTER);
|
|
loginPanel.addLoginBtnActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
if(loginPanel.checkLoginText()) {
|
if(login()) {
|
frame = ToolKits.getFrame(e);
|
frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getOnline());
|
}
|
}
|
}
|
});
|
|
loginPanel.addLogoutBtnActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
frame.setTitle(Res.string().getDownloadRecord());
|
logout();
|
}
|
});
|
|
addWindowListener(new WindowAdapter() {
|
public void windowClosing(WindowEvent e) {
|
DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);
|
DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
|
LoginModule.logout();
|
LoginModule.cleanup(); // 关闭工程,释放资源
|
dispose();
|
|
SwingUtilities.invokeLater(new Runnable() {
|
public void run() {
|
FunctionList demo = new FunctionList();
|
demo.setVisible(true);
|
}
|
});
|
}
|
});
|
}
|
|
/////////////////面板//////////////////
|
// 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
|
private class DisConnect implements NetSDKLib.fDisConnect {
|
public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
|
// 断线提示
|
SwingUtilities.invokeLater(new Runnable() {
|
public void run() {
|
frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getDisConnectReconnecting());
|
|
setButtonEnable(true);
|
b_downloadByFile = false;
|
downloadByFileBtn.setText(Res.string().getDownload());
|
b_downloadByTime = false;
|
downloadByTimeBtn.setText(Res.string().getDownload());
|
DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);
|
DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
|
}
|
});
|
}
|
}
|
|
// 网络连接恢复,设备重连成功回调
|
// 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
|
private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
|
public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
|
|
// 重连提示
|
SwingUtilities.invokeLater(new Runnable() {
|
public void run() {
|
frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getOnline());
|
}
|
});
|
}
|
}
|
|
// 登录
|
public boolean login() {
|
Native.setCallbackThreadInitializer(m_DownLoadPosByFile,
|
new CallbackThreadInitializer(false, false, "downloadbyfile callback thread"));
|
Native.setCallbackThreadInitializer(m_DownLoadPosByTime,
|
new CallbackThreadInitializer(false, false, "downloadbytime callback thread"));
|
if(LoginModule.login(loginPanel.ipTextArea.getText(),
|
Integer.parseInt(loginPanel.portTextArea.getText()),
|
loginPanel.nameTextArea.getText(),
|
new String(loginPanel.passwordTextArea.getPassword()))) {
|
loginPanel.setButtonEnable(true);
|
setButtonEnable(true);
|
|
for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
|
chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
|
}
|
|
// 默认设置主辅码流
|
DownLoadRecordModule.setStreamType(streamComboBoxByFile.getSelectedIndex());
|
|
// 登陆成功,将通道添加到控件
|
chnComboBoxByFile.setModel(new DefaultComboBoxModel(chnlist));
|
chnComboBoxByTime.setModel(new DefaultComboBoxModel(chnlist));
|
} else {
|
JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return false;
|
}
|
|
return true;
|
}
|
|
//登出
|
public void logout() {
|
LoginModule.logout();
|
loginPanel.setButtonEnable(false);
|
setButtonEnable(false);
|
|
// 列表清空
|
data = new Object[14][5];
|
table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName()));
|
table.getColumnModel().getColumn(0).setPreferredWidth(23);
|
table.getColumnModel().getColumn(1).setPreferredWidth(28);
|
table.getColumnModel().getColumn(2).setPreferredWidth(50);
|
|
for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) {
|
chnlist.clear();
|
}
|
|
chnComboBoxByFile.setModel(new DefaultComboBoxModel());
|
chnComboBoxByTime.setModel(new DefaultComboBoxModel());
|
|
b_downloadByFile = false;
|
downloadByFileBtn.setText(Res.string().getDownload());
|
b_downloadByTime = false;
|
downloadByTimeBtn.setText(Res.string().getDownload());
|
}
|
|
/*
|
* 下载录像面板
|
*/
|
private class DownLoadRecordPanel extends JPanel {
|
private static final long serialVersionUID = 1L;
|
|
public DownLoadRecordPanel() {
|
BorderEx.set(this, Res.string().getDownloadRecord(), 2);
|
setLayout(new GridLayout(1, 2));
|
|
downloadByTimePanel = new DownLoadByTimePanel(); // 按时间下载
|
downloadByFilePanel = new DownLoadByFilePanel(); // 按文件下载
|
|
add(downloadByTimePanel);
|
add(downloadByFilePanel);
|
}
|
}
|
|
/*
|
* 按文件下载面板
|
*/
|
private class DownLoadByFilePanel extends JPanel {
|
private static final long serialVersionUID = 1L;
|
|
public DownLoadByFilePanel() {
|
BorderEx.set(this, Res.string().getDownloadByFile(), 2);
|
setLayout(new BorderLayout());
|
|
downloadByFileSetPanel = new JPanel(); // 设置
|
queryPanel = new JPanel(); // 查询
|
downByFilePanel = new JPanel(); // 下载
|
|
add(downloadByFileSetPanel, BorderLayout.NORTH);
|
add(queryPanel, BorderLayout.CENTER);
|
add(downByFilePanel, BorderLayout.SOUTH);
|
|
/******** 设置面板***********/
|
JPanel startTimeByFile = new JPanel();
|
JPanel endTimeByFile = new JPanel();
|
JPanel chnByFile = new JPanel();
|
JPanel streamByFile = new JPanel();
|
|
downloadByFileSetPanel.setLayout(new GridLayout(2, 2));
|
|
downloadByFileSetPanel.add(startTimeByFile);
|
downloadByFileSetPanel.add(endTimeByFile);
|
downloadByFileSetPanel.add(chnByFile);
|
downloadByFileSetPanel.add(streamByFile);
|
|
// 开始时间设置
|
startTimeByFile.setBorder(new EmptyBorder(5, 5, 5, 20));
|
startTimeByFile.setLayout(new GridLayout(2, 1));
|
JLabel startLabel = new JLabel(Res.string().getStartTime());
|
dateChooserStartByFile = new DateChooserJButton();
|
|
Dimension dimension = new Dimension();
|
dimension.height = 20;
|
dateChooserStartByFile.setPreferredSize(dimension);
|
|
startTimeByFile.add(startLabel);
|
startTimeByFile.add(dateChooserStartByFile);
|
|
// 结束时间设置
|
endTimeByFile.setBorder(new EmptyBorder(5, 20, 5, 5));
|
endTimeByFile.setLayout(new GridLayout(2, 1));
|
JLabel endLabel = new JLabel(Res.string().getEndTime());
|
dateChooserEndByFile = new DateChooserJButton();
|
dateChooserEndByFile.setPreferredSize(dimension);
|
|
endTimeByFile.add(endLabel);
|
endTimeByFile.add(dateChooserEndByFile);
|
|
// 通道设置
|
chnByFile.setBorder(new EmptyBorder(5, 10, 0, 5));
|
chnByFile.setLayout(new FlowLayout());
|
chnlabel = new JLabel(Res.string().getChannel());
|
chnComboBoxByFile = new JComboBox();
|
chnComboBoxByFile.setPreferredSize(new Dimension(115, 20));
|
chnByFile.add(chnlabel);
|
chnByFile.add(chnComboBoxByFile);
|
|
// 码流设置
|
streamByFile.setBorder(new EmptyBorder(5, 10, 0, 5));
|
streamByFile.setLayout(new FlowLayout());
|
streamLabel = new JLabel(Res.string().getStreamType());
|
String[] stream = {Res.string().getMasterAndSub(), Res.string().getMasterStream(), Res.string().getSubStream()};
|
streamComboBoxByFile = new JComboBox(stream);
|
streamComboBoxByFile.setModel(new DefaultComboBoxModel(stream));
|
streamComboBoxByFile.setPreferredSize(new Dimension(115, 20));
|
streamByFile.add(streamLabel);
|
streamByFile.add(streamComboBoxByFile);
|
|
/******** 查询面板***********/
|
queryPanel.setLayout(new BorderLayout());
|
queryPanel.setBorder(new EmptyBorder(0, 5, 5, 5));
|
|
data = new Object[14][5];
|
defaultmodel = new DefaultTableModel(data, Res.string().getDownloadTableName());
|
table = new JTable(defaultmodel){
|
private static final long serialVersionUID = 1L;
|
@Override
|
public boolean isCellEditable(int row, int column) {
|
return false;
|
}
|
};
|
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
|
|
table.getColumnModel().getColumn(0).setPreferredWidth(20);
|
table.getColumnModel().getColumn(1).setPreferredWidth(20);
|
table.getColumnModel().getColumn(2).setPreferredWidth(50);
|
|
DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
|
dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
|
table.setDefaultRenderer(Object.class, dCellRenderer);
|
|
queryPanel.add(new JScrollPane(table), BorderLayout.CENTER);
|
|
/******** 下载面板***********/
|
downByFilePanel.setLayout(new BorderLayout());
|
downByFilePanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
|
JPanel btnPanel1 = new JPanel();
|
downloadByFileProgressBar = new JProgressBar(0, 100);
|
|
downloadByFileProgressBar.setPreferredSize(new Dimension(100, 20));
|
downloadByFileProgressBar.setStringPainted(true);
|
|
downByFilePanel.add(btnPanel1, BorderLayout.CENTER);
|
downByFilePanel.add(downloadByFileProgressBar, BorderLayout.SOUTH);
|
|
// 查询、下载按钮
|
queryRecordBtn = new JButton(Res.string().getQuery());
|
downloadByFileBtn = new JButton(Res.string().getDownload());
|
|
queryRecordBtn.setPreferredSize(new Dimension(175, 20));
|
downloadByFileBtn.setPreferredSize(new Dimension(175, 20));
|
|
btnPanel1.setLayout(new FlowLayout());
|
btnPanel1.add(queryRecordBtn);
|
btnPanel1.add(downloadByFileBtn);
|
|
queryRecordBtn.setEnabled(false);
|
downloadByFileBtn.setEnabled(false);
|
downloadByFileProgressBar.setEnabled(false);
|
chnComboBoxByFile.setEnabled(false);
|
streamComboBoxByFile.setEnabled(false);
|
dateChooserStartByFile.setEnabled(false);
|
dateChooserEndByFile.setEnabled(false);
|
|
streamComboBoxByFile.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
DownLoadRecordModule.setStreamType(streamComboBoxByFile.getSelectedIndex());
|
}
|
});
|
|
queryRecordBtn.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent arg0) {
|
int i = 1; // 列表序号
|
int time = 0;
|
|
System.out.println(dateChooserStartByFile.getText() + "\n" + dateChooserEndByFile.getText());
|
// 开始时间
|
String[] dateStartByFile = dateChooserStartByFile.getText().split(" ");
|
String[] dateStart1 = dateStartByFile[0].split("-");
|
String[] dateStart2 = dateStartByFile[1].split(":");
|
|
stTimeStart.dwYear = Integer.parseInt(dateStart1[0]);
|
stTimeStart.dwMonth = Integer.parseInt(dateStart1[1]);
|
stTimeStart.dwDay = Integer.parseInt(dateStart1[2]);
|
|
stTimeStart.dwHour = Integer.parseInt(dateStart2[0]);
|
stTimeStart.dwMinute = Integer.parseInt(dateStart2[1]);
|
stTimeStart.dwSecond = Integer.parseInt(dateStart2[2]);
|
|
// 结束时间
|
String[] dateEndByFile = dateChooserEndByFile.getText().split(" ");
|
String[] dateEnd1 = dateEndByFile[0].split("-");
|
String[] dateEnd2 = dateEndByFile[1].split(":");
|
|
stTimeEnd.dwYear = Integer.parseInt(dateEnd1[0]);
|
stTimeEnd.dwMonth = Integer.parseInt(dateEnd1[1]);
|
stTimeEnd.dwDay = Integer.parseInt(dateEnd1[2]);
|
|
stTimeEnd.dwHour = Integer.parseInt(dateEnd2[0]);
|
stTimeEnd.dwMinute = Integer.parseInt(dateEnd2[1]);
|
stTimeEnd.dwSecond = Integer.parseInt(dateEnd2[2]);
|
|
if(stTimeStart.dwYear != stTimeEnd.dwYear
|
|| stTimeStart.dwMonth != stTimeEnd.dwMonth
|
|| (stTimeEnd.dwDay - stTimeStart.dwDay > 1)) {
|
JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
if(stTimeEnd.dwDay - stTimeStart.dwDay == 1) {
|
time = (24 + stTimeEnd.dwHour)*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond -
|
stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond;
|
} else {
|
time = stTimeEnd.dwHour*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond -
|
stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond;
|
}
|
|
if(time > 6 * 60 * 60
|
|| time <= 0) {
|
JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
if(!DownLoadRecordModule.queryRecordFile(chnComboBoxByFile.getSelectedIndex(),
|
stTimeStart,
|
stTimeEnd,
|
stFileInfo,
|
nFindCount)) {
|
// 列表清空
|
data = new Object[14][5];
|
table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName()));
|
table.getColumnModel().getColumn(0).setPreferredWidth(23);
|
table.getColumnModel().getColumn(1).setPreferredWidth(28);
|
table.getColumnModel().getColumn(2).setPreferredWidth(50);
|
JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
} else {
|
System.out.println(nFindCount.getValue());
|
int count = 0;
|
if(nFindCount.getValue() > 14) {
|
count = nFindCount.getValue();
|
} else {
|
count = 14;
|
}
|
data = new Object[count][5];
|
table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName()));
|
table.getColumnModel().getColumn(0).setPreferredWidth(23);
|
table.getColumnModel().getColumn(1).setPreferredWidth(28);
|
table.getColumnModel().getColumn(2).setPreferredWidth(50);
|
|
if(nFindCount.getValue() == 0) {
|
return;
|
}
|
|
model = (DefaultTableModel)table.getModel();
|
|
for(int j = 0; j < nFindCount.getValue(); j++) {
|
model.setValueAt(String.valueOf(i), j, 0);
|
model.setValueAt(String.valueOf(stFileInfo[j].ch + 1), j, 1); // 设备返回的通道加1
|
model.setValueAt(Res.string().getRecordTypeStr(stFileInfo[j].nRecordFileType), j, 2);
|
model.setValueAt(stFileInfo[j].starttime.toStringTime(), j, 3);
|
model.setValueAt(stFileInfo[j].endtime.toStringTime(), j, 4);
|
|
i++;
|
}
|
}
|
}
|
});
|
|
downloadByFileBtn.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
int row = -1;
|
row = table.getSelectedRow(); //获得所选的单行
|
|
if(model == null) {
|
JOptionPane.showMessageDialog(null, Res.string().getQueryRecord(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
if(row < 0) {
|
JOptionPane.showMessageDialog(null, Res.string().getSelectRowWithData(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
for(int m = 1; m < 5; m++) {
|
if(model.getValueAt(row, m) == null || String.valueOf(model.getValueAt(row, m)).trim().equals("")) {
|
JOptionPane.showMessageDialog(null, Res.string().getSelectRowWithData(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
}
|
|
// 开始时间
|
String[] dateStart = String.valueOf(model.getValueAt(row, 3)).split(" ");
|
String[] dateStartByFile1 = dateStart[0].split("/");
|
String[] dateStartByFile2 = dateStart[1].split(":");
|
|
stTimeStart.dwYear = Integer.parseInt(dateStartByFile1[0]);
|
stTimeStart.dwMonth = Integer.parseInt(dateStartByFile1[1]);
|
stTimeStart.dwDay = Integer.parseInt(dateStartByFile1[2]);
|
|
stTimeStart.dwHour = Integer.parseInt(dateStartByFile2[0]);
|
stTimeStart.dwMinute = Integer.parseInt(dateStartByFile2[1]);
|
stTimeStart.dwSecond = Integer.parseInt(dateStartByFile2[2]);
|
|
// 结束时间
|
String[] dateEnd = String.valueOf(model.getValueAt(row, 4)).split(" ");
|
String[] dateEndByFile1 = dateEnd[0].split("/");
|
String[] dateEndByFile2 = dateEnd[1].split(":");
|
|
stTimeEnd.dwYear = Integer.parseInt(dateEndByFile1[0]);
|
stTimeEnd.dwMonth = Integer.parseInt(dateEndByFile1[1]);
|
stTimeEnd.dwDay = Integer.parseInt(dateEndByFile1[2]);
|
|
stTimeEnd.dwHour = Integer.parseInt(dateEndByFile2[0]);
|
stTimeEnd.dwMinute = Integer.parseInt(dateEndByFile2[1]);
|
stTimeEnd.dwSecond = Integer.parseInt(dateEndByFile2[2]);
|
|
if(!b_downloadByFile) {
|
System.out.println("ByFile" + String.valueOf(model.getValueAt(row, 3)) + "\n" + String.valueOf(model.getValueAt(row, 4)));
|
SwingUtilities.invokeLater(new Runnable() {
|
@Override
|
public void run() {
|
downloadByFileProgressBar.setValue(0);
|
}
|
});
|
m_hDownLoadByFileHandle = DownLoadRecordModule.downloadRecordFile(Integer.parseInt(String.valueOf(model.getValueAt(row, 1))) - 1,
|
Res.string().getRecordTypeInt(String.valueOf(model.getValueAt(row, 2))),
|
stTimeStart,
|
stTimeEnd,
|
SavePath.getSavePath().getSaveRecordFilePath(),
|
m_DownLoadPosByFile);
|
if(m_hDownLoadByFileHandle.longValue() != 0) {
|
b_downloadByFile = true;
|
downloadByFileBtn.setText(Res.string().getStopDownload());
|
} else {
|
JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
}
|
} else {
|
DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);
|
b_downloadByFile = false;
|
downloadByFileBtn.setText(Res.string().getDownload());
|
SwingUtilities.invokeLater(new Runnable() {
|
@Override
|
public void run() {
|
downloadByFileProgressBar.setValue(0);
|
}
|
});
|
}
|
}
|
});
|
}
|
}
|
|
/*
|
* 按时间下载面板
|
*/
|
private class DownLoadByTimePanel extends JPanel {
|
private static final long serialVersionUID = 1L;
|
|
public DownLoadByTimePanel() {
|
BorderEx.set(this, Res.string().getDownloadByTime(), 2);
|
setLayout(new BorderLayout());
|
|
downloadByTimeSetPanel = new JPanel(); // 设置
|
downByTimePanel = new JPanel(); // 下载
|
|
add(downloadByTimeSetPanel, BorderLayout.NORTH);
|
add(downByTimePanel, BorderLayout.CENTER);
|
|
/******** 设置面板***********/
|
JPanel startTimeByTime = new JPanel();
|
JPanel endTimeByTime = new JPanel();
|
JPanel chnByTime = new JPanel();
|
JPanel streamByTime = new JPanel();
|
|
downloadByTimeSetPanel.setLayout(new GridLayout(2, 2));
|
|
downloadByTimeSetPanel.add(startTimeByTime);
|
downloadByTimeSetPanel.add(endTimeByTime);
|
downloadByTimeSetPanel.add(chnByTime);
|
downloadByTimeSetPanel.add(streamByTime);
|
|
// 开始时间设置
|
startTimeByTime.setBorder(new EmptyBorder(5, 5, 5, 20));
|
startTimeByTime.setLayout(new GridLayout(2, 1));
|
JLabel startLabel = new JLabel(Res.string().getStartTime());
|
dateChooserStartByTime = new DateChooserJButton();
|
Dimension dimension = new Dimension();
|
dimension.height = 20;
|
dateChooserStartByTime.setPreferredSize(dimension);
|
|
startTimeByTime.add(startLabel);
|
startTimeByTime.add(dateChooserStartByTime);
|
|
// 结束时间设置
|
endTimeByTime.setBorder(new EmptyBorder(5, 20, 5, 5));
|
endTimeByTime.setLayout(new GridLayout(2, 1));
|
JLabel endLabel = new JLabel(Res.string().getEndTime());
|
dateChooserEndByTime = new DateChooserJButton();
|
dateChooserEndByTime.setPreferredSize(dimension);
|
|
endTimeByTime.add(endLabel);
|
endTimeByTime.add(dateChooserEndByTime);
|
|
// 通道设置
|
chnByTime.setBorder(new EmptyBorder(5, 10, 0, 5));
|
chnByTime.setLayout(new FlowLayout());
|
chnlabel = new JLabel(Res.string().getChannel());
|
chnComboBoxByTime = new JComboBox();
|
chnComboBoxByTime.setPreferredSize(new Dimension(115, 20));
|
chnByTime.add(chnlabel);
|
chnByTime.add(chnComboBoxByTime);
|
|
// 码流设置
|
streamByTime.setBorder(new EmptyBorder(5, 10, 0, 5));
|
streamByTime.setLayout(new FlowLayout());
|
streamLabel = new JLabel(Res.string().getStreamType());
|
String[] stream = {Res.string().getMasterAndSub(), Res.string().getMasterStream(), Res.string().getSubStream()};
|
streamComboBoxByTime = new JComboBox();
|
streamComboBoxByTime.setModel(new DefaultComboBoxModel(stream));
|
streamComboBoxByTime.setPreferredSize(new Dimension(115, 20));
|
streamByTime.add(streamLabel);
|
streamByTime.add(streamComboBoxByTime);
|
|
/******** 下载面板***********/
|
downByTimePanel.setLayout(new FlowLayout());
|
downByTimePanel.setBorder(new EmptyBorder(0, 5, 0, 5));
|
|
JPanel btnPanel2 = new JPanel();
|
downloadByTimeProgressBar = new JProgressBar(0, 100);
|
|
downloadByTimeProgressBar.setPreferredSize(new Dimension(355, 20));
|
downloadByTimeProgressBar.setStringPainted(true);
|
|
downByTimePanel.add(btnPanel2);
|
downByTimePanel.add(downloadByTimeProgressBar);
|
|
// 下载按钮
|
downloadByTimeBtn = new JButton(Res.string().getDownload());
|
JLabel nullLabel = new JLabel();
|
nullLabel.setPreferredSize(new Dimension(180, 20));
|
downloadByTimeBtn.setPreferredSize(new Dimension(170, 20));
|
|
btnPanel2.setLayout(new FlowLayout());
|
btnPanel2.add(downloadByTimeBtn);
|
btnPanel2.add(nullLabel);
|
|
downloadByTimeBtn.setEnabled(false);
|
downloadByTimeProgressBar.setEnabled(false);
|
chnComboBoxByTime.setEnabled(false);
|
streamComboBoxByTime.setEnabled(false);
|
dateChooserStartByTime.setEnabled(false);
|
dateChooserEndByTime.setEnabled(false);
|
|
streamComboBoxByTime.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
DownLoadRecordModule.setStreamType(streamComboBoxByTime.getSelectedIndex());
|
}
|
});
|
|
downloadByTimeBtn.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
int time = 0;
|
// 开始时间
|
String[] dateStartByTime = dateChooserStartByTime.getText().split(" ");
|
String[] dateStart1 = dateStartByTime[0].split("-");
|
String[] dateStart2 = dateStartByTime[1].split(":");
|
|
stTimeStart.dwYear = Integer.parseInt(dateStart1[0]);
|
stTimeStart.dwMonth = Integer.parseInt(dateStart1[1]);
|
stTimeStart.dwDay = Integer.parseInt(dateStart1[2]);
|
|
stTimeStart.dwHour = Integer.parseInt(dateStart2[0]);
|
stTimeStart.dwMinute = Integer.parseInt(dateStart2[1]);
|
stTimeStart.dwSecond = Integer.parseInt(dateStart2[2]);
|
|
// 结束时间
|
String[] dateEndByTime = dateChooserEndByTime.getText().split(" ");
|
String[] dateEnd1 = dateEndByTime[0].split("-");
|
String[] dateEnd2 = dateEndByTime[1].split(":");
|
|
stTimeEnd.dwYear = Integer.parseInt(dateEnd1[0]);
|
stTimeEnd.dwMonth = Integer.parseInt(dateEnd1[1]);
|
stTimeEnd.dwDay = Integer.parseInt(dateEnd1[2]);
|
|
stTimeEnd.dwHour = Integer.parseInt(dateEnd2[0]);
|
stTimeEnd.dwMinute = Integer.parseInt(dateEnd2[1]);
|
stTimeEnd.dwSecond = Integer.parseInt(dateEnd2[2]);
|
|
if(stTimeStart.dwYear != stTimeEnd.dwYear
|
|| stTimeStart.dwMonth != stTimeEnd.dwMonth
|
|| (stTimeEnd.dwDay - stTimeStart.dwDay) > 1) {
|
JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
if(stTimeEnd.dwDay - stTimeStart.dwDay == 1) {
|
time = (24 + stTimeEnd.dwHour)*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond -
|
stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond;
|
} else {
|
time = stTimeEnd.dwHour*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond -
|
stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond;
|
}
|
System.out.println("time :" + time);
|
if(time > 6 * 60 * 60
|
|| time <= 0) {
|
JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
if(!b_downloadByTime) {
|
System.out.println("ByTime" + dateChooserStartByTime.getText() + "\n" + dateChooserEndByTime.getText());
|
SwingUtilities.invokeLater(new Runnable() {
|
@Override
|
public void run() {
|
downloadByTimeProgressBar.setValue(0);
|
}
|
});
|
m_hDownLoadByTimeHandle = DownLoadRecordModule.downloadRecordFile(chnComboBoxByTime.getSelectedIndex(),
|
0,
|
stTimeStart,
|
stTimeEnd,
|
SavePath.getSavePath().getSaveRecordFilePath(),
|
m_DownLoadPosByTime);
|
if(m_hDownLoadByTimeHandle.longValue() != 0) {
|
b_downloadByTime = true;
|
downloadByTimeBtn.setText(Res.string().getStopDownload());
|
chnComboBoxByTime.setEnabled(false);
|
streamComboBoxByTime.setEnabled(false);
|
dateChooserStartByTime.setEnabled(false);
|
dateChooserEndByTime.setEnabled(false);
|
} else {
|
JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
}
|
} else {
|
DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
|
b_downloadByTime = false;
|
downloadByTimeBtn.setText(Res.string().getDownload());
|
chnComboBoxByTime.setEnabled(true);
|
streamComboBoxByTime.setEnabled(true);
|
dateChooserStartByTime.setEnabled(true);
|
dateChooserEndByTime.setEnabled(true);
|
|
SwingUtilities.invokeLater(new Runnable() {
|
@Override
|
public void run() {
|
downloadByTimeProgressBar.setValue(0);
|
}
|
});
|
}
|
}
|
});
|
}
|
}
|
|
/*
|
* 按文件下载回调
|
*/
|
private DownLoadPosCallBackByFile m_DownLoadPosByFile = new DownLoadPosCallBackByFile(); // 录像下载进度
|
class DownLoadPosCallBackByFile implements NetSDKLib.fTimeDownLoadPosCallBack{
|
public void invoke(LLong lLoginID, final int dwTotalSize, final int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) {
|
SwingUtilities.invokeLater(new Runnable() {
|
@Override
|
public void run() {
|
// System.out.println("ByFile " + dwDownLoadSize + " / " + dwTotalSize);
|
downloadByFileProgressBar.setValue(dwDownLoadSize*100 / dwTotalSize);
|
if(dwDownLoadSize == -1) {
|
downloadByFileProgressBar.setValue(100);
|
DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);
|
b_downloadByFile = false;
|
downloadByFileBtn.setText(Res.string().getDownload());
|
JOptionPane.showMessageDialog(null, Res.string().getDownloadCompleted(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
|
}
|
}
|
});
|
}
|
}
|
|
/*
|
* 按时间下载回调
|
*/
|
private DownLoadPosCallBackByTime m_DownLoadPosByTime = new DownLoadPosCallBackByTime(); // 录像下载进度
|
class DownLoadPosCallBackByTime implements NetSDKLib.fTimeDownLoadPosCallBack{
|
public void invoke(LLong lLoginID, final int dwTotalSize, final int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) {
|
SwingUtilities.invokeLater(new Runnable() {
|
@Override
|
public void run() {
|
// System.out.println("ByTime " + dwDownLoadSize + " / " + dwTotalSize);
|
downloadByTimeProgressBar.setValue(dwDownLoadSize*100 / dwTotalSize);
|
if(dwDownLoadSize == -1) {
|
downloadByTimeProgressBar.setValue(100);
|
DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
|
b_downloadByTime = false;
|
downloadByTimeBtn.setText(Res.string().getDownload());
|
chnComboBoxByTime.setEnabled(true);
|
streamComboBoxByTime.setEnabled(true);
|
dateChooserStartByTime.setEnabled(true);
|
dateChooserEndByTime.setEnabled(true);
|
JOptionPane.showMessageDialog(null, Res.string().getDownloadCompleted(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
|
}
|
}
|
});
|
}
|
}
|
|
private void setButtonEnable(boolean bln) {
|
queryRecordBtn.setEnabled(bln);
|
downloadByFileBtn.setEnabled(bln);
|
downloadByFileProgressBar.setValue(0);
|
downloadByFileProgressBar.setEnabled(bln);
|
downloadByTimeBtn.setEnabled(bln);
|
downloadByTimeProgressBar.setValue(0);
|
downloadByTimeProgressBar.setEnabled(bln);
|
chnComboBoxByFile.setEnabled(bln);
|
streamComboBoxByFile.setEnabled(bln);
|
chnComboBoxByTime.setEnabled(bln);
|
streamComboBoxByTime.setEnabled(bln);
|
dateChooserStartByFile.setEnabled(bln);
|
dateChooserEndByFile.setEnabled(bln);
|
dateChooserStartByTime.setEnabled(bln);
|
dateChooserEndByTime.setEnabled(bln);
|
}
|
|
//登录组件
|
private LoginPanel loginPanel;
|
// 下载
|
private DownLoadRecordPanel downloadRecordPanel;
|
|
// 按文件下载
|
private DownLoadByTimePanel downloadByTimePanel;
|
private JPanel downloadByFileSetPanel;
|
private JPanel queryPanel;
|
private JPanel downByFilePanel;
|
private JButton queryRecordBtn;
|
private JButton downloadByFileBtn;
|
private JProgressBar downloadByFileProgressBar;
|
private JButton downloadByTimeBtn;
|
private JProgressBar downloadByTimeProgressBar;
|
private JTable table;
|
private DefaultTableModel defaultmodel;
|
private JLabel chnlabel;
|
private JComboBox chnComboBoxByFile;
|
private JComboBox chnComboBoxByTime;
|
private JLabel streamLabel;
|
private JComboBox streamComboBoxByFile;
|
private JComboBox streamComboBoxByTime;
|
|
private DateChooserJButton dateChooserStartByFile;
|
private DateChooserJButton dateChooserEndByFile;
|
|
// 按文件下载
|
private DownLoadByFilePanel downloadByFilePanel;
|
private JPanel downloadByTimeSetPanel;
|
private JPanel downByTimePanel;
|
|
private DateChooserJButton dateChooserStartByTime;
|
private DateChooserJButton dateChooserEndByTime;
|
}
|
|
public class DownLoadRecord {
|
public static void main(String[] args) {
|
SwingUtilities.invokeLater(new Runnable() {
|
public void run() {
|
DownLoadRecordFrame demo = new DownLoadRecordFrame();
|
demo.setVisible(true);
|
}
|
});
|
}
|
};
|