1 /* 2 * Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE 3 */ 4 package de.ilias.services.filemanager.events; 5 6 import de.ilias.services.filemanager.action.ActionHandler; 7 import de.ilias.services.filemanager.content.ListItem; 8 import de.ilias.services.filemanager.content.LocalListItem; 9 import de.ilias.services.filemanager.content.RemoteListItem; 10 import de.ilias.services.filemanager.controller.MainController; 11 import de.ilias.services.filemanager.dialog.DeleteDialog; 12 import de.ilias.services.filemanager.dialog.RenameDialog; 13 import de.ilias.services.filemanager.dialog.RevisionStateDialog; 14 import java.awt.Desktop; 15 import java.io.File; 16 import java.io.IOException; 17 import java.util.ArrayList; 18 import java.util.Iterator; 19 import java.util.logging.Logger; 20 import javafx.collections.ObservableList; 21 import javafx.scene.Cursor; 22 import javafx.scene.Node; 23 import javafx.scene.control.ListView; 24 import javafx.scene.input.Clipboard; 25 26 /** 27 * Class ListItemEventHandler 28 * 29 * @author Stefan Meyer <smeyer.ilias@gmx.de> 30 */ 31 public class ListItemEventHandler 32 { 33 34 protected static final Logger logger = Logger.getLogger(ListItemEventHandler.class.getName()); 35 36 private ListItem item = null; 37 ListItemEventHandler(ListItem item)38 public ListItemEventHandler(ListItem item) { 39 this.item = item; 40 } 41 42 /** 43 * set list item 44 * @param li 45 */ setListItem(ListItem li)46 public void setListItem(ListItem li) { 47 48 this.item = li; 49 } 50 51 /** 52 * set list item 53 * @return 54 */ getListItem()55 public ListItem getListItem() { 56 return this.item; 57 } 58 59 /** 60 * Handle open action (triggered by mouse event or action event or key event) 61 * @param openContainer 62 */ handleOpenAction(boolean openContainer)63 protected void handleOpenAction(boolean openContainer) { 64 65 // return if item is not readable 66 if(!getListItem().isReadable()) { 67 return; 68 } 69 70 // Check if container and switch directory or open using explorer 71 if (getListItem().isContainer()) { 72 73 if(openContainer && !(getListItem() instanceof RemoteListItem)) { 74 Desktop desktop; 75 try { 76 desktop = Desktop.getDesktop(); 77 desktop.open(new File(getListItem().getAbsolutePath())); 78 } 79 catch (IOException ex) { 80 logger.warning("Cannot open file " + getListItem().getTitle()); 81 } 82 } 83 else { 84 MainController.getInstance().getRoot().setCursor(Cursor.WAIT); 85 if(getListItem().isUpperLink()) { 86 MainController.getInstance().switchDirectory(getListItem().getParent()); 87 } 88 else { 89 MainController.getInstance().switchDirectory(getListItem()); 90 } 91 MainController.getInstance().getRoot().setCursor(Cursor.DEFAULT); 92 } 93 return; 94 } 95 else if (getListItem().isReadable() && !getListItem().getFileType().isEmpty()) { 96 97 // @todo check cursor settings 98 MainController.getInstance().getRoot().setCursor(Cursor.WAIT); 99 100 if (getListItem() instanceof RemoteListItem) { 101 MainController.getInstance().deliverRemoteItem(getListItem()); 102 } 103 if (getListItem() instanceof LocalListItem) { 104 Desktop desktop; 105 try { 106 desktop = Desktop.getDesktop(); 107 desktop.open(new File(getListItem().getAbsolutePath())); 108 } catch (IOException ex) { 109 logger.warning("Cannot open file " + getListItem().getTitle()); 110 } 111 } 112 MainController.getInstance().getRoot().setCursor(Cursor.DEFAULT); 113 } 114 } 115 116 /** 117 * Copy selected to clipboard 118 */ handleCopyToClipboard()119 protected void handleCopyToClipboard() { 120 121 if(getListItem() instanceof RemoteListItem) { 122 123 logger.info("Copy remote list item to clipboard"); 124 125 // First clear the clipboard 126 Clipboard clip = Clipboard.getSystemClipboard(); 127 clip.clear(); 128 129 Iterator selected = MainController.getInstance().getList(getListItem()). 130 getSelectionModel().getSelectedItems().iterator(); 131 ArrayList<ListItem> items = new ArrayList<ListItem>(); 132 while(selected.hasNext()) { 133 Node node = (Node) selected.next(); 134 ListItem selectedNode = (ListItem) node.getUserData(); 135 items.add(selectedNode); 136 } 137 ActionHandler.copyRemoteToClipboard(getListItem(),items); 138 } 139 } 140 141 /** 142 * Select all items 143 * @param view 144 */ selectAllItems(ListView view)145 protected void selectAllItems(ListView view) { 146 147 Iterator ite = view.getItems().iterator(); 148 int index = 0; 149 while(ite.hasNext()) { 150 ite.next(); 151 if(index > 0) { 152 view.getSelectionModel().select(index); 153 } 154 else { 155 view.getSelectionModel().clearSelection(index); 156 } 157 index++; 158 } 159 } 160 161 /** 162 * Select all items 163 * @param view 164 */ invertSelection(ListView view)165 protected void invertSelection(ListView view) { 166 167 Iterator ite = view.getItems().iterator(); 168 int index = 0; 169 while(ite.hasNext()) { 170 ite.next(); 171 if(view.getSelectionModel().isSelected(index)) { 172 view.getSelectionModel().clearSelection(index); 173 } 174 else { 175 view.getSelectionModel().select(index); 176 } 177 index++; 178 } 179 } 180 181 /** 182 * Handle paste action 183 */ handlePasteAction()184 protected void handlePasteAction() { 185 ActionHandler.pasteFromClipboard(getListItem(),Clipboard.getSystemClipboard().getFiles()); 186 Clipboard.getSystemClipboard().clear(); 187 } 188 189 /** 190 * Show rename dialog 191 */ handleRenameAction()192 protected void handleRenameAction() { 193 194 RenameDialog rename = new RenameDialog(getListItem()); 195 rename.parse(); 196 MainController.getInstance().showModalDialog(rename); 197 } 198 199 /** 200 * Show delete confirmation dialog 201 */ handleDeleteAction()202 protected void handleDeleteAction() { 203 204 if(!getListItem().isDeletable()) { 205 return; 206 } 207 208 DeleteDialog delete = new DeleteDialog(getListItem()); 209 delete.parse(); 210 MainController.getInstance().showModalDialog(delete); 211 } 212 213 /** 214 * handle revision state 215 */ handleRevisionStateEditingAction()216 protected void handleRevisionStateEditingAction() { 217 218 if(!getListItem().isWritable()) { 219 return; 220 } 221 if(!getListItem().getType().equals("file")) 222 { 223 return; 224 } 225 RevisionStateDialog rs = new RevisionStateDialog(getListItem()); 226 rs.parse(); 227 MainController.getInstance().showModalDialog(rs); 228 } 229 } 230