package myfirstapp.ui;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.Collator;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.Document;
import lucene_3_tika.IndexFile;
import lucene_3_tika.SearchFiles;
import myfirstapp.eventListener.Plugin;
import myfirstapp.sys.App;
import myfirstapp.sysdeal.CopiedFileSentents;
import myfirstapp.sysdeal.CopiedFilesTool;
import myfirstapp.sysdeal.CopiedSentent;
import myfirstapp.sysdeal.FromInfo;
import myfirstapp.sysdeal.PropertiesReader;
import myfirstapp.sysdeal.Tool;
import org.apache.lucene.analysis.Analyzer;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.eclipse.wb.swt.SWTResourceManager;
public class MultiFileCompare extends ViewPart {
Text destDirectoryPathText;
Button openDirectoryButton;
Button btnCheckButton;
Button startButton;
String destDirectoryStr;
Table resultTable;// 检查结果Table
Table fromTable;// 出处Table
TableItem item;
int tableIndex = 0;
String resultStr;
Path directoryPath;
Composite composite;
DecimalFormat df = new DecimalFormat("0.0");// 格式化小数,不足的补0
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdfFileNameDate = new SimpleDateFormat("MM-dd HH-mm");
SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY/MM/dd");
JTextPane editorPane;// 实例化一个文本编辑的控件
Button addToLibraryButton;// 添加入库按钮
Button exportReportButton;// 导出报告按钮
ArrayList myListeners = new ArrayList();
Tool tool = new Tool();
List<Map> resultMapList = new LinkedList<>();
List sumInfonList = new LinkedList<>();
List<FromInfo> fromInfoList = new LinkedList<>();
int srcDocNum = 0;
public MultiFileCompare() {
// TODO Auto-generated constructor stub
}
@Override
public void createPartControl(Composite parent) {
composite = parent;
parent.setLayout(new GridLayout(1, false));
creatSelectDirectoryGroup();
creatMiddleGroup(parent);
creatOptionButtons();
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
/**
* 创建文件夹选择组件
*
* @param parent
*/
public void creatSelectDirectoryGroup() {
Group outerGroup = new Group(composite, SWT.NONE);
outerGroup.setLayout(new GridLayout(4, true));// 内层布局分为3列,宽度等分
outerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); // 本组件水平对齐,上下对齐,高度自适应,宽度填满父容器
outerGroup.setText("多文件检测");
destDirectoryPathText = new Text(outerGroup, SWT.BORDER | SWT.READ_ONLY);
destDirectoryPathText.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
false, true));// 本组件水平对齐,上下对齐,高度自适应,宽度填满父容器
openDirectoryButton = new Button(outerGroup, SWT.NONE);
openDirectoryButton.setImage(SWTResourceManager.getImage(
MultiFileCompare.class, "/img/folder.png"));
openDirectoryButton.setText(" 选择目录...");
openDirectoryButton.setLayoutData(new GridData(SWT.CENTER, SWT.FILL,
true, // 本组件靠左对齐,上下对齐,高度填满父容器,宽度填满父容器
true));
openDirectoryButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dd = new DirectoryDialog(composite.getShell());
dd.setText("Open");
dd.setFilterPath("C:/");
destDirectoryStr = dd.open();
// 显示文件名
if (destDirectoryStr != null) {
destDirectoryPathText.setText(destDirectoryStr);
startButton.setEnabled(true);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
btnCheckButton = new Button(outerGroup, SWT.CHECK);
btnCheckButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER,
false, false, 1, 1));
btnCheckButton.setText("自动入库");
btnCheckButton.setSelection(true);
btnCheckButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
if (btnCheckButton.getSelection()) {
addToLibraryButton.setVisible(false);
} else {
addToLibraryButton.setVisible(true);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
});
/***************************************************
* 开始按钮功能
***************************************************/
startButton = new Button(outerGroup, SWT.NONE);
startButton.setImage(SWTResourceManager.getImage(
MultiFileCompare.class, "/img/play_blue.png"));
startButton
.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, true)); // 本组件靠右对齐,上下对齐,高度填满父容器,宽度填满父容器
startButton.setText(" 开始 ");
startButton.setEnabled(false);
startButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
directoryPath = Paths.get(destDirectoryStr);
/*
* 遍历文件总数
*/
srcDocNum = tool.getDirectFileNum(directoryPath);
try {
tableIndex = 0; // 表格索引清0
resultTable.removeAll(); // 清除表格内容
Job job = new Job("多文件对比") {
@Override
protected IStatus run(IProgressMonitor monitor) {
// Set total number of work units
monitor.beginTask("正在进行多文件对:", srcDocNum);
List<File> list = new LinkedList<>();
tool.filesToList(directoryPath, list);
resultMapList.clear();
for (int