I'm having trouble figuring out how to sort a Linkedlist with a fileinfo, code below shows process of "building content",
private void ReloadScanFiles() {
if (gsfCurRow != null) {
ArrayList<FileInfo> newTreeFileInfoList = new ArrayList<FileInfo>();
ArrayList<FileInfo> addTreeFileInfoList = new ArrayList<FileInfo>();
ArrayList<String> delTreeFileNameList = new ArrayList<String>();
/////// linked list
LinkedList<FileInfo> newTreeFileInfoLinkedList = new LinkedList<FileInfo>();
LinkedList<FileInfo> addTreeFileInfoLinkedList = new LinkedList<FileInfo>();
LinkedList<String> delTreeFileNameLinkedList = new LinkedList<String>();
File folder = new File(gsfCurRow.DOC_SOURCE_PATH);
FileFilter fileFilter = new FileFilter() {
public boolean accept(File file) {
return !file.isDirectory() && !file.isHidden();
}
};
/*
FilenameFilter fileFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".pdf") ||
name.toLowerCase().endsWith(".jpeg") ||
name.toLowerCase().endsWith(".jpg") ||
name.toLowerCase().endsWith(".tiff") ||
name.toLowerCase().endsWith(".txt");
}
};
*/
File[] listOfFiles = folder.listFiles(fileFilter);
for (int i = 0; i < listOfFiles.length; i++){
FileInfo fileInfo = new FileInfo();
fileInfo.Name = listOfFiles[i].getName();
//fileInfo.Length = (long) listOfFiles[i].length();
fileInfo.LastModified = (long) listOfFiles[i].lastModified(); //Long.parseLong("473", 10);
//newTreeFileInfoLinkedList.add(fileInfo);
newTreeFileInfoLinkedList.add(fileInfo);
}
//add new items
for (FileInfo fileInfo: newTreeFileInfoLinkedList){
//for (FileInfo fileInfo: newTreeFileInfoLinkedList){
boolean existsItem = false;
if (actTreeFileInfoLinkdList != null){
for (FileInfo fileInfo1: actTreeFileInfoLinkdList){
if (fileInfo.Name.equals(fileInfo1.Name)) {
existsItem = true;
break;
}
}
}
if (!existsItem) {
//addTreeFileInfoLinkedList.add(fileInfo);
addTreeFileInfoLinkedList.add(fileInfo);
}
}
//delete non existing items
if (actTreeFileInfoLinkdList != null){
for (FileInfo fileInfo: actTreeFileInfoLinkdList){
boolean existsItem = false;
for (FileInfo fileInfo1: newTreeFileInfoLinkedList){
if (fileInfo.Name.equals(fileInfo1.Name)) {
existsItem = true;
break;
}
}
if (!existsItem) {
//delTreeFileNameLinkedList.add(fileInfo);
delTreeFileNameLinkedList.add(fileInfo.Name);
}
}
}
actTreeFileInfoLinkdList = newTreeFileInfoLinkedList;
//add items to tree
for (FileInfo fileInfo: addTreeFileInfoLinkedList){
TreeItem item = new TreeItem(tv, SWT.NONE);
//item.setText(new String[] {fileInfo.Name, Long.toString(fileInfo.Length), df.format(fileInfo.LastModified)});
item.setText(new String[] {fileInfo.Name, null, df.format(fileInfo.LastModified)});
fileCount ++;
}
//delete item from tree
//update locked by
TreeItem [] items = tv.getItems();
for (TreeItem item: items){
//delete
if (delTreeFileNameLinkedList.contains(item.getText())) {
if (item.getChecked()) {
checkedFileCount --;
}
fileCount --;
item.dispose();
}
//update
if (!item.isDisposed()){
Integer lock_idusr = null;
try {
lock_idusr = db.FileLockedBy(gsfCurRow.DOC_SOURCE_ID, item.getText());
} catch (SQLException e) {
e.printStackTrace();
}
if ((lock_idusr != null) && (!lock_idusr.equals(idusr))){
try {
item.setText(3, db.GetOpid(lock_idusr));
} catch (SQLException e) {
e.printStackTrace();
}
Color color = new Color(display,180, 0, 0);
item.setForeground(color);
item.setChecked(false);
}
else{
item.setText(3, "");
Color color = new Color(display,0, 0, 0);
item.setForeground(color);
}
}
}
//sort linked list files
//actTreeFileInfoLinkdList
BtnDocAssignEnabled();
GenerateTreeStatusText();
}
}
You can see output on the picture below:
I need to sort these items based on their name or date, i'm thinking putting listeners on both columns meno - means name, datum - means date. How do i achieve this? How can i sort linkedList?