package org.gcube.portlets.user.workspace.client.view.tree; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.user.workspace.client.AppControllerExplorer; import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.client.event.ExpandFolderEvent; import org.gcube.portlets.user.workspace.client.event.MoveItemEvent; import org.gcube.portlets.user.workspace.client.event.SelectedItemEvent; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.model.FolderModel; import org.gcube.portlets.user.workspace.client.resources.Resources; import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxAlert; import com.extjs.gxt.ui.client.Style.SelectionMode; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.data.ModelIconProvider; import com.extjs.gxt.ui.client.dnd.DND.Feedback; import com.extjs.gxt.ui.client.dnd.Insert; import com.extjs.gxt.ui.client.dnd.TreePanelDragSource; import com.extjs.gxt.ui.client.dnd.TreePanelDropTarget; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.DNDEvent; import com.extjs.gxt.ui.client.event.DNDListener; import com.extjs.gxt.ui.client.event.EventType; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MenuEvent; import com.extjs.gxt.ui.client.event.SelectionChangedEvent; import com.extjs.gxt.ui.client.event.SelectionChangedListener; import com.extjs.gxt.ui.client.event.TreePanelEvent; import com.extjs.gxt.ui.client.store.Record; import com.extjs.gxt.ui.client.store.Store; import com.extjs.gxt.ui.client.store.StoreSorter; import com.extjs.gxt.ui.client.store.TreeStore; import com.extjs.gxt.ui.client.store.TreeStoreModel; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.treepanel.TreePanel; import com.extjs.gxt.ui.client.widget.treepanel.TreePanel.TreeNode; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; /** * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * */ public class AsyncTreePanel extends LayoutContainer { // private TreeLoader loader; private TreePanel treePanel; private TreeStore store; private ContextMenuTree contextMenuTree; private HandlerManager eventBus = AppControllerExplorer.getEventBus(); private ContentPanel cp = new ContentPanel(); private boolean isSubTreeLoaded = false; private boolean isSearch = false; private String scopeId = null; private enum DragType {INSERT, APPEND}; // private int contextMenuPosX = -1; // private int contextMenuPosY = -1; private boolean rightClick = false; public AsyncTreePanel() { //Init Store store = new TreeStore(); //Load Root Item // this.loadRootItem(); treePanel = new TreePanel(store){ @Override public boolean hasChildren(FileModel parent) { if (parent instanceof FolderModel) { return true; } return super.hasChildren(parent); } @Override @SuppressWarnings({"unchecked", "rawtypes"}) public void onComponentEvent(ComponentEvent ce) { super.onComponentEvent(ce); TreePanelEvent tpe = (TreePanelEvent) ce; EventType typeEvent = tpe.getType(); rightClick = false; if (typeEvent == Events.OnMouseDown) { if (ce.isRightClick()){ rightClick = true; } } int type = ce.getEventTypeInt(); switch (type) { case Event.ONCLICK: onClick(tpe); break; case Event.ONDBLCLICK: onDoubleClick(tpe); break; case Event.ONSCROLL: onScroll(tpe); break; case Event.ONFOCUS: onFocus(ce); break; } view.onEvent(tpe); } }; treePanel.setStateful(false); treePanel.setDisplayProperty(ConstantsExplorer.NAME); // statefull components need a defined id treePanel.setId("treeMessagePanelAsync"); // SET icons in tree panel treePanel.setIconProvider(new ModelIconProvider() { public AbstractImagePrototype getIcon(FileModel model) { // if (!(model instanceof FolderModel)) { if (!model.isDirectory()) { // String ext = model.getName().substring(model.getName().lastIndexOf(".") + 1); if(model.getType()!=null) // System.out.println("Mime Type:" + model.getMimeType()); return Resources.getIconByType(model.getType()); return Resources.getIconByFolderItemType(model.getGXTFolderItemType()); } if(model.getStatus() == ConstantsExplorer.FOLDERNOTLOAD) return Resources.getIconLoading2(); //SHARE ICON if(model.isShared()){ if(model.isShareable()) return Resources.getIconSharedFolder(); else return null; //Set default folder icon } // return Resources.getIconFolder(); return null; //Set default folder icon } }); contextMenuTree = new ContextMenuTree(); treePanel.setContextMenu(contextMenuTree.getContextMenu()); //Single selection Mode treePanel.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); this.addListners(); this.addDragAndDrop(); this.setAlphanumericStoreSorter(); cp.setHeading(ConstantsExplorer.TREEVIEW); cp.setHeaderVisible(false); // //BULK // Header headerCp = cp.getHeader(); // buttBulk.setIcon(Resources.getIconBulkUpdate()); // headerCp.addTool(buttBulk); cp.setBodyBorder(false); cp.setBodyStyle("padding: 5px"); cp.setLayout(new FitLayout()); //***For Debug the store Button butt = new Button(); butt.setText("Print Store"); butt.setVisible(false); butt.addListener(Events.OnClick, new Listener() { @Override public void handleEvent(ButtonEvent be) { List listFileModel = treePanel.getStore().getRootItems(); System.out.println("\n\nStore by root"); for (FileModel item : listFileModel) { System.out.println(item.getName() + " ID " + item.getIdentifier() + " isDirectory " + item.isDirectory()); // eventBus.fireEvent(new SelectedItemEvent(treePanel.getStore().getRootItems().get(0))); printingTreeLevel(item); } } }); // cp.add(butt); //***End Debug the store cp.add(treePanel); add(cp); } /** * * * Status values * ConstantsExplorer.FOLDERNOTLOAD = "notload"; * ConstantsExplorer.FOLDERLOADED = "loaded"; * * @param itemIdentifier * @param status */ public void changeFolderIconStatus(String itemIdentifier, String status){ FileModel fileModel = getFileModelByIdentifier(itemIdentifier); fileModel.setStatus(status); } public void loadRootItem(String scopeId, final boolean selectRoot){ this.scopeId = scopeId; System.out.println("***Start Root load with scopeid: " + scopeId); if(this.scopeId !=null){ //Load Root with specific scope id AppControllerExplorer.rpcWorkspaceService.getRootForTree(scopeId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting root item. " +ConstantsExplorer.TRY_AGAIN, null); } @Override public void onSuccess(FolderModel result) { loadRootInStore(result, selectRoot); } }); } else{ //Load Root without filtering on scope id AppControllerExplorer.rpcWorkspaceService.getRootForTree(new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting root item. " +ConstantsExplorer.TRY_AGAIN, null); } @Override public void onSuccess(FolderModel result) { loadRootInStore(result, selectRoot); } }); } } private void loadRootInStore(FolderModel root, boolean selectRootOnLoad){ if(root!=null){ store.removeAll(); store.insert(root, 0, false); System.out.println("Root Name: " + store.getRootItems().get(0).get(ConstantsExplorer.NAME)); treePanel.setExpanded(store.getRootItems().get(0),true); //expand level 1 if(selectRootOnLoad) selectRootItem(); //select root item System.out.println("***End Root load "); } else new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting root item. Root item is null " +ConstantsExplorer.TRY_AGAIN, null); } private void addDragAndDrop() { //Drag & Drop Event TreePanelDragSource source = new TreePanelDragSource(treePanel); source.addDNDListener(new DNDListener() { @Override public void dragStart(DNDEvent event) { System.out.println("***Event Start drag"); FileModel sel = treePanel.getSelectionModel().getSelectedItem(); if (sel != null && sel == treePanel.getStore().getRootItems().get(0)) { event.setCancelled(true); event.getStatus().setStatus(false); return; } if(sel != null && sel.getName()!= null) System.out.println("Start drag of " + sel.getName()); super.dragStart(event); } }); TreePanelDropTarget targetTreePanel = new TreePanelDropTarget(treePanel){ // @Override // protected void onDragDrop(DNDEvent event) { // System.out.println("on Drop"); // super.onDragDrop(event); // } // @Override // protected void showFeedback(DNDEvent event) { // // TODO Auto-generated method stub // super.showFeedback(event); // // } @Override protected void showFeedback(DNDEvent event) { if (!isValidDropTarget(event)) { Insert.get().hide(); event.getStatus().setStatus(false); return; } super.showFeedback(event); } @SuppressWarnings("unchecked") private boolean isValidDropTarget(DNDEvent event) { TreePanel target = (TreePanel) event.getDropTarget().getComponent(); TreePanel.TreeNode zone = target.findNode(event.getTarget()); if (zone == null) { return true; // let it check from super-class } TreePanel source = (TreePanel) event.getDragSource().getComponent(); List selection = source.getSelectionModel().getSelection(); for (FileModel model : selection) { // check the "model" against "zone" and return false // if "zone" is not a valid drop target for "model", otherwise check the next "model" // example: if (source.getStore().getParent(model) == zone.getModel()) return false; // if(source.getStore().getParent(model) == target.getModel()) // return false; } return true; } //Called when drop on folder @Override protected void handleAppendDrop(DNDEvent event, @SuppressWarnings("rawtypes") TreeNode item) { super.handleAppendDrop(event, item); System.out.println("***Event move handleAppendDrop"); List listFileModel = getDragSource(event); if(listFileModel.size() == 1){ FileModel destination = getDragDestination(item, DragType.APPEND); if(destination != null){ eventBus.fireEvent(new MoveItemEvent(listFileModel.get(0), (FolderModel) destination)); System.out.println("Destination: " +destination.getName() + " id "+ destination.getIdentifier()); } } else{ //MULTIDRAG } // } System.out.println("***End Event move handleAppendDrop"); } // @Override // protected void onDragMove(DNDEvent event){ //// System.out.println("on Drag Move"); // super.onDragMove(event); // } //Called when drop between files @Override protected void handleInsertDrop(DNDEvent event, @SuppressWarnings("rawtypes") TreeNode item, int index) { super.handleInsertDrop(event, item, index); System.out.println("***Event move handleInsertDrop"); // System.out.println("on handleInsertDrop"); List listFileModel = getDragSource(event); if(listFileModel.size() == 1){ //one element dragged FileModel destination = getDragDestination(item, DragType.INSERT); if(destination != null){ System.out.println("Destination: " +destination.getName() + " id "+ destination.getIdentifier()); eventBus.fireEvent(new MoveItemEvent(listFileModel.get(0), (FolderModel) destination)); } } else{ //multi drag } System.out.println("***End Event move handleInsertDrop"); } private FileModel getDragDestination(@SuppressWarnings("rawtypes") TreeNode item, DragType insertType){ FileModel destination = null; if(item!=null){ destination = (FileModel) item.getModel(); if(destination != null){ if(insertType.equals(DragType.APPEND)) return destination; //APPEND ON FOLDER else return destination.getParentFileModel(); //INSERT BETWEEN FILE - RETUR FOLDER PARENT } } return destination; } private List getDragSource(DNDEvent event){ List listDraggedFile = new ArrayList(); if(event.getData() != null){ List listItemsSource = event.getData(); System.out.println("Number of move " + listItemsSource.size()); FileModel sourceFileModel = null; //for print for(TreeStoreModel itemSource : listItemsSource){ listDraggedFile.add((FileModel) itemSource.getModel()); sourceFileModel = (FileModel) itemSource.getModel(); if(sourceFileModel.getParentFileModel()!=null) System.out.println("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag " + " Parent Name: " + sourceFileModel.getParentFileModel().getName() + "id " + sourceFileModel.getParentFileModel().getIdentifier()); else System.out.println("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag "); System.out.println("Child count: " + itemSource.getChildCount()); } } return listDraggedFile; } // @Override // protected void handleInsert(DNDEvent event, TreeNode treeNode){ // super.handleAppend(event, treeNode); //// System.out.println("in handle insert"); // } }; targetTreePanel.setAllowSelfAsSource(true); targetTreePanel.setFeedback(Feedback.APPEND); targetTreePanel.setScrollElementId(cp.getId()); // targetTreePanel.setAllowDropOnLeaf(true); } private void addListners() { treePanel.getSelectionModel().addSelectionChangedListener(new SelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent objEvent) { FileModel fileModel = objEvent.getSelectedItem(); if(rightClick){ // treePanel.disableEvents(true); // deselectItem(fileModel); // treePanel.enableEvents(true); return; } System.out.println("***Event selection change"); if(fileModel != null && !isSearch){ //is null on drag & drop event //For printing String type; if(fileModel.getType()!=null) type = fileModel.getType(); else type = "null"; String folderItemType; if(fileModel.getGXTFolderItemType()!=null) folderItemType = fileModel.getGXTFolderItemType().toString(); else folderItemType = null; //DEBUG if(fileModel.getParentFileModel()!=null) System.out.println("Item selected " + fileModel.getName() + " Id " + fileModel.getIdentifier() + " Parent " + fileModel.getParentFileModel().getName() + " with id " + fileModel.getParentFileModel().getIdentifier() + " IsDirectory " + ""+fileModel.isDirectory() + " type "+ type + " HLFolderItemType "+folderItemType); else System.out.println("Item selected " + fileModel.getName() + " Id " + fileModel.getIdentifier() + " Parent null " + " IsDirectory " + ""+fileModel.isDirectory()+ " type "+ type +" HLFolderItemType "+folderItemType ); System.out.println("Item selected" + fileModel); eventBus.fireEvent(new SelectedItemEvent(fileModel)); // treePanel.findNode(getFileModelByIdentifier(fileModel.getIdentifier())); // cp.setVScrollPosition(treePanel.findNode(objEvent.getSelectedItem().)) } System.out.println("***End Event selection change"); } }); // // Listner on Click treePanel.addListener(Events.OnClick, new Listener>() { public void handleEvent(TreePanelEvent be) { if(be != null){ if(isSearch){ //TODO WORK AROUND - used after search setSearch(false); // FileModel fileModel = (FileModel) be.getNode().getModel(); // reSelectItem(fileModel.getIdentifier()); TreeNode node = be.getNode(); if(node!=null){ FileModel fileModel = (FileModel) be.getNode().getModel(); reSelectItem(fileModel.getIdentifier()); } } } }; }); // // Listner on Menu Hide treePanel.getContextMenu().addListener(Events.Hide, new Listener() { @Override public void handleEvent(MenuEvent be) { if(be!=null) deselectItem(treePanel.getSelectionModel().getSelectedItem()); } }); treePanel.addListener(Events.BeforeExpand, new Listener>() { public void handleEvent(final TreePanelEvent be) { if(be != null && !isSubTreeLoaded){ System.out.println("***Event beforeExpand Node"); System.out.println("Expand Folder Model: " + be.getNode().getModel().get(ConstantsExplorer.NAME)); final FolderModel folder = (FolderModel) be.getNode().getModel(); int numChildrenFolder = store.getChildCount(folder); if (folder!=null){ eventBus.fireEvent(new ExpandFolderEvent(folder)); if (numChildrenFolder==0) { treePanel.mask(ConstantsExplorer.LOADING,ConstantsExplorer.LOADINGSTYLE); loadTreeLevelFromWorkspace(folder); } } System.out.println("***End Event beforeExpand Node"); } } }); // Add lister to context menu treePanel.addListener(Events.ContextMenu, new Listener>() { public void handleEvent(TreePanelEvent be) { System.out.println("***Event Context Menu open"); @SuppressWarnings("rawtypes") TreeNode node = be.getNode(); // FileModel file = treePanel.getSelectionModel().getSelectedItem(); // // @SuppressWarnings("rawtypes") // treePanel.TreeNode nodes = (TreeNode) treePanel.getSelectionModel().getSelectedItem(); // // be.setItem(treePanel.getSelectionModel().getSelectedItem()); if(node!=null){ System.out.println("Menu on: " + node.getModel().get(ConstantsExplorer.NAME)); System.out.println("node "+ treePanel.findNode(be.getTarget())); }else{ System.out.println("Menu on: null"); System.out.println("node "+ treePanel.findNode(be.getTarget())); } List listSelected = treePanel.getSelectionModel().getSelectedItems(); // if (listSelected != null && listSelected.size() > 0) { // FileModel selectedItem = listSelected.get(0); //get first element manageContextMenu(); } // } }); } private void manageContextMenu(){ System.out.println("***Event Context Menu open"); contextMenuTree.setListSelectedItems(treePanel.getSelectionModel().getSelectedItems()); //Set items list selected in context menu tree FileModel selectedItem = treePanel.getSelectionModel().getSelectedItems().get(0); //get first element if (store.getRootItems().get(0).equals(selectedItem)) {//selected root item? setVisibleRenameAndRemoveContextMenu(false); setVisibileGetWebDavUrl(true); } else{ setVisibleRenameAndRemoveContextMenu(true); setVisibileGetWebDavUrl(false); } contextMenuTree.contextMenuSwitch(selectedItem); System.out.println("***End Event Context Menu open"); } public void reloadTreeLevelAndExpandFolder(String folderIdentifier){ final FolderModel folder = (FolderModel) getFileModelByIdentifier(folderIdentifier); reloadTreeLevelAndExpandFolder(folder); } private void reloadTreeLevelAndExpandFolder(final FolderModel folder){ treePanel.mask(ConstantsExplorer.VALIDATINGOPERATION,ConstantsExplorer.LOADINGSTYLE); System.out.println("Start RPC - getFolderChildren for uplaod/move"); AppControllerExplorer.rpcWorkspaceService.getFolderChildren(folder, new AsyncCallback>(){ @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting folder children items. Reload root" +ConstantsExplorer.TRY_AGAIN, null); removeAllAndRecoveryRoot(); } @Override public void onSuccess(List result) { treePanel.unmask(); store.removeAll(folder); addChildrenToFolder(folder.getIdentifier(), result); setExpandTreeLevel(folder, true); System.out.println("End RPC - getFolderChildren for uplaod/move"); } }); } private void loadTreeLevelFromWorkspace(final FolderModel folder){ System.out.println("Start RPC - getFolderChildren"); // Log.info("Start RPC - getFolderChildren"); // final CountTimer count = new CountTimer(1000); AppControllerExplorer.rpcWorkspaceService.getFolderChildren(folder, new AsyncCallback>(){ @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting folder children items. Reload root" +ConstantsExplorer.TRY_AGAIN, null); removeAllAndRecoveryRoot(); } @Override public void onSuccess(List result) { // // be.getTargetEl().setIconStyle(""); // be.getNode().getModel().set("icon", Resources.getIconAudio()); // be.getNode().getModel().set("overlayIconUrl", Resources.getIconAudio()); // Log.info("End RPC - getFolderChildren time " + count.getTime()); if(treePanel.isMasked()) treePanel.unmask(); store.removeAll(folder); addChildrenToFolder(folder, result); System.out.println("End RPC - getFolderChildren"); } }); } public void addChildrenToFolder(String idParent, List children){ FileModel parent = getFileModelByIdentifier(idParent); if(parent!=null) store.add(parent,children,false); } private void addChildrenToFolder(FolderModel parent, List children){ if(parent!=null){ store.add(parent,children,false); System.out.println("Added children in store"); } } private void setVisibleRenameAndRemoveContextMenu(boolean bool){ treePanel.getContextMenu().getItemByItemId(ConstantsExplorer.REM).setVisible(bool); treePanel.getContextMenu().getItemByItemId(ConstantsExplorer.RNM).setVisible(bool); } private void setVisibileGetWebDavUrl(boolean bool){ treePanel.getContextMenu().getItemByItemId(ConstantsExplorer.WDV).setVisible(bool); } private void setAlphanumericStoreSorter(){ // Sorting files store.setStoreSorter(new StoreSorter() { @Override public int compare(Store store, FileModel m1, FileModel m2, String property) { boolean m1Folder = m1 instanceof FolderModel; boolean m2Folder = m2 instanceof FolderModel; if (m1Folder && !m2Folder) { return -1; } else if (!m1Folder && m2Folder) { return 1; } return m1.getName().compareToIgnoreCase(m2.getName()); } }); } //TODO for debug private void printingTreeLevel(FileModel item){ List children = treePanel.getStore().getChildren(item); if (children != null) { for (FileModel item2 : children) { System.out.println(" " + item2.getName() + " ID " + item2.getIdentifier() + " isDirectory " + item.isDirectory()); printingTreeLevel(item2); } System.out.println(" "); } } /** * * @param identifier * @return */ public FileModel getFileModelByIdentifier(String identifier){ return treePanel.getStore().findModel(ConstantsExplorer.IDENTIFIER, identifier); } public int getChildrenNumber(String identifier){ // FileModel fileModel = treePanel.getStore().findModel(ConstantsExplorer.IDENTIFIER, identifier); FolderModel fileModel = (FolderModel) getFileModelByIdentifier(identifier); return getChildrenNumber(fileModel); } private int getChildrenNumber(FolderModel folder){ return store.getChildCount(folder); } /** * * @param identifier (MANDATORY) * @return */ public boolean deleteItem(String identifier) { FileModel fileTarget = getFileModelByIdentifier(identifier); if(fileTarget!=null){ return deleteItem(fileTarget); } else System.out.println("Delete Error: file target with " + identifier + " identifier not exist in store" ); return false; } /** * * @param fileTarget (MANDATORY) * @param newName (MANDATORY) * @param extension OPTIONAL - string or null */ private boolean renameItem(FileModel fileTarget, String newName, String extension) { if(fileTarget!=null){ Record record = treePanel.getStore().getRecord(fileTarget); if(record!=null){ if(extension!= null) record.set(ConstantsExplorer.NAME, newName+extension); else record.set(ConstantsExplorer.NAME, newName); return true; } else System.out.println("Record Error: file target with " + fileTarget.getIdentifier() + " identifier not exist in store" ); } else System.out.println("Rename Error: file target not exist in store" ); return false; } /** * * @param fileTarget (MANDATORY) * @param newName (MANDATORY) * @param extension OPTIONAL - string or null */ public boolean renameItem(String identifier, String newName, String extension) { // FileModel fileTarget = treePanel.getStore().findModel(ConstantsExplorer.IDENTIFIER, identifier); FileModel fileTarget = getFileModelByIdentifier(identifier); return renameItem(fileTarget,newName,extension); } /** * * @param fileTarget (MANDATORY) * @return */ private boolean deleteItem(FileModel fileTarget) { Record record = treePanel.getStore().getRecord(fileTarget); if (record != null) { FileModel item = (FileModel) record.getModel(); // FolderModel parent = (FolderModel) treePanel.getStore().getParent(item); treePanel.getStore().remove(item); // treePanel.getStore().getParent((FileModel) record.getModel()); // treePanel.getSelectionModel().select(parent, true); //Select the parent of the item deleted return true; } else System.out.println("Record Error: file target with " + fileTarget.getIdentifier() + " identifier not exist in store"); return false; } public void addItem(String parentId, FileModel child, boolean bool) { FileModel parent = getFileModelByIdentifier(parentId); if(parent!=null) addItem(parent,child,bool); } private void addItem(FileModel parent, FileModel child, boolean bool) { store.add(parent, child, bool); } /** * * @param parent * @param bool expand true/false */ private void setExpandTreeLevel(FileModel parent, boolean bool) { treePanel.setExpanded(parent, bool); } public void setExpandTreeLevel(String identifier, boolean bool) { FileModel item = getFileModelByIdentifier(identifier); if(item!=null) treePanel.setExpanded(item, bool); } public boolean selectItem(String identifier){ FileModel fileTarget = getFileModelByIdentifier(identifier); if(fileTarget!=null){ treePanel.getSelectionModel().select(fileTarget, true); //Select the item return true; } return false; } public boolean reSelectItem(String identifier){ FileModel fileTarget = getFileModelByIdentifier(identifier); if(fileTarget!=null){ treePanel.getSelectionModel().deselect(fileTarget); treePanel.getSelectionModel().select(fileTarget, true); //Select the item return true; } return false; } @SuppressWarnings("unused") private boolean selectItem(FileModel fileTarget){ if(fileTarget!=null){ treePanel.getSelectionModel().select(fileTarget, true); //Select the item return true; } return false; } public boolean isSubTreeLoaded() { return isSubTreeLoaded; } public void setSubTreeLoaded(boolean isSubTreeLoaded) { this.isSubTreeLoaded = isSubTreeLoaded; } public void removeAllAndRecoveryRoot(){ store.removeAll(); loadRootItem(scopeId,true); } public void selectRootItem(){ FileModel selectedItem = treePanel.getSelectionModel().getSelectedItem(); if(selectedItem!=null) treePanel.getSelectionModel().deselect(selectedItem); treePanel.getSelectionModel().select(store.getRootItems().get(0), true); //select root item } public void deselectItem(String identifier){ FileModel fileTarget = getFileModelByIdentifier(identifier); if(fileTarget!=null) treePanel.getSelectionModel().deselect(fileTarget); } public void deselectItem(FileModel fileTarget){ if(fileTarget!=null) treePanel.getSelectionModel().deselect(fileTarget); } public FileModel getSelectedFileModelItem(){ FileModel selectedItem = treePanel.getSelectionModel().getSelectedItem(); if(selectedItem!=null) return selectedItem; return store.getRootItems().get(0); //return root item } public boolean isSearch() { return isSearch; } public void setSearch(boolean isSearch) { System.out.println("***Set Search: " + isSearch); this.isSearch = isSearch; } public void setSizeTreePanel(int width, int height){ treePanel.setSize(width, height); } public ContextMenuTree getContextMenuTree() { return contextMenuTree; } public void setHeaderTreeVisible(boolean bool){ cp.setHeaderVisible(bool); } public FileModel getRootItem(){ return treePanel.getStore().getRootItems().get(0); } }