/** * OpenKM, Open Document Management System (http://www.openkm.com) * Copyright (c) 2006-2011 Paco Avila & Josep Llort * * No bytes were intentionally harmed during the development of this application. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.openkm.frontend.client.widget.filebrowser; import java.util.HashMap; import java.util.Map; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.gen2.table.client.FixedWidthFlexTable; import com.google.gwt.gen2.table.client.FixedWidthGrid; import com.google.gwt.gen2.table.client.ScrollTable; import com.google.gwt.gen2.table.client.SelectionGrid; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.Hyperlink; import com.openkm.frontend.client.Main; import com.openkm.frontend.client.bean.GWTDocument; import com.openkm.frontend.client.bean.GWTFolder; import com.openkm.frontend.client.bean.GWTMail; import com.openkm.frontend.client.bean.GWTPermission; import com.openkm.frontend.client.contants.ui.UIDesktopConstants; import com.openkm.frontend.client.util.Util; import com.openkm.frontend.client.widget.OriginPanel; /** * Extends ExtendedScrollTable functionalities * * @author jllort * */ public class ExtendedScrollTable extends ScrollTable implements OriginPanel { // Actions on rows public static final int ACTION_NONE = 0; public static final int ACTION_RENAMING = 1; // Special event case private static final int EVENT_ONMOUSEDOWN_RIGHT = -2; // Holds the data rows of the table this is a list of RowData Object public Map<Integer, Object> data = new HashMap<Integer, Object>(); private FixedWidthGrid dataTable; private FixedWidthFlexTable headerTable; private int selectedRow = -1; private int mouseX = 0; private int mouseY = 0; private int dataIndexValue = 0; private int rowAction = ACTION_NONE; private boolean dragged = false; /** * @param dataTable * @param headerTable * @param scrollTableImages */ public ExtendedScrollTable(FixedWidthGrid dataTable, FixedWidthFlexTable headerTable, ScrollTableImages scrollTableImages) { super(dataTable, headerTable, scrollTableImages); this.dataTable = dataTable; this.headerTable = headerTable; // Table data SortableFixedWidthGrid.HOVERING_POLICY_CELL dataTable.setSelectionPolicy(SelectionGrid.SelectionPolicy.ONE_ROW); setResizePolicy(ResizePolicy.UNCONSTRAINED); setScrollPolicy(ScrollPolicy.BOTH); dataTable.setColumnSorter(new ExtendedColumnSorter()); // Sets some events DOM.sinkEvents(getDataWrapper(), Event.ONCLICK | Event.ONDBLCLICK | Event.ONMOUSEDOWN | Event.ONMOUSEUP | Event.ONMOUSEMOVE | Event.ONMOUSEUP); } /** * Resets the values */ public void reset() { selectedRow = -1; mouseX = 0; mouseY = 0; dataIndexValue = 0; // Reset rowAction rowAction = ACTION_NONE; // Only resets rows table the header is never reset data = new HashMap<Integer, Object>(); } /** * Sets the selected row * * @param row The row number */ public void setSelectedRow(int row) { Log.debug("ExtendedScrollPanel setSelectedRow:"+row); dataTable.selectRow(row,true); selectedRow = row; } /** * Sets the values in specifed row/column * Expects a Comparable Object for sorting * * @param rows The actual table row * @param GWTFolder The folder */ public void addRow(GWTFolder folder) { int row = dataTable.getRowCount(); dataTable.insertRow(row); // Sets folder object data.put(new Integer(dataIndexValue),folder); // Subscribed is a special case, must add icon with others if (folder.isSubscribed()) { dataTable.setHTML(row, 0, Util.imageItemHTML("img/icon/subscribed.gif")); } else { dataTable.setHTML(row, 0, " "); } if (folder.isHasNotes()) { dataTable.setHTML(row, 0, dataTable.getHTML(row,0) + Util.imageItemHTML("img/icon/note.gif")); } // Looks if must change icon on parent if now has no childs and properties with user security atention if ( (folder.getPermissions() & GWTPermission.WRITE) == GWTPermission.WRITE) { if (folder.getHasChilds()) { dataTable.setHTML(row, 1, Util.imageItemHTML("img/menuitem_childs.gif")); } else { dataTable.setHTML(row, 1, Util.imageItemHTML("img/menuitem_empty.gif")); } } else { if (folder.getHasChilds()) { dataTable.setHTML(row, 1, Util.imageItemHTML("img/menuitem_childs_ro.gif")); } else { dataTable.setHTML(row, 1, Util.imageItemHTML("img/menuitem_empty_ro.gif")); } } dataTable.setHTML(row, 2, folder.getName()); dataTable.setHTML(row, 3, " "); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.date.pattern")); dataTable.setHTML(row, 4, dtf.format(folder.getCreated())); dataTable.setHTML(row, 5, folder.getAuthor()); dataTable.setHTML(row, 6, " "); dataTable.setHTML(row, 7, ""+(dataIndexValue++)); // Format dataTable.getCellFormatter().setHorizontalAlignment(row, 0, HasHorizontalAlignment.ALIGN_RIGHT); dataTable.getCellFormatter().setHorizontalAlignment(row, 1, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 2, HasHorizontalAlignment.ALIGN_LEFT); dataTable.getCellFormatter().setHorizontalAlignment(row, 3, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 4, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 5, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 6, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setVisible(row,7,false); for (int i=0; i<7; i++) { dataTable.getCellFormatter().addStyleName(row, i, "okm-DisableSelect"); } } /** * addNoteIconToSelectedRow */ public void addNoteIconToSelectedRow() { dataTable.setHTML(selectedRow, 0, dataTable.getHTML(selectedRow,0) + Util.imageItemHTML("img/icon/note.gif")); } /** * deleteNoteIconToSelectedRow */ public void deleteNoteIconToSelectedRow() { String htmlValue = dataTable.getHTML(selectedRow,0); String newHtmlIcons = ""; if (htmlValue.indexOf("edit.gif")>=0) { newHtmlIcons = Util.imageItemHTML("img/icon/edit.gif"); } else if (htmlValue.indexOf("lock.gif")>0) { newHtmlIcons = Util.imageItemHTML("img/icon/lock.gif"); } else { newHtmlIcons = " "; } if (htmlValue.indexOf("subscribed.gif")>=0) { newHtmlIcons += Util.imageItemHTML("img/icon/subscribed.gif"); } dataTable.setHTML(selectedRow, 0, newHtmlIcons); } /** * Sets the document to the row * * @param rows The table row * @param doc The document */ public void addRow(GWTDocument doc) { int row = dataTable.getRowCount(); dataTable.insertRow(row); // Sets document object data.put(new Integer(dataIndexValue),doc); if (doc.isCheckedOut()) { dataTable.setHTML(row, 0, Util.imageItemHTML("img/icon/edit.gif")); } else if (doc.isLocked()) { dataTable.setHTML(row, 0, Util.imageItemHTML("img/icon/lock.gif")); } else { dataTable.setHTML(row, 0, " "); } // Subscribed is a special case, must add icon with others if (doc.isSubscribed()) { dataTable.setHTML(row, 0, dataTable.getHTML(row,0) + Util.imageItemHTML("img/icon/subscribed.gif")); } // Document has notes if (doc.isHasNotes()) { dataTable.setHTML(row, 0, dataTable.getHTML(row,0) + Util.imageItemHTML("img/icon/note.gif")); } // Document encrypted if (doc.getCipherName()!=null && !doc.getCipherName().equals("")) { dataTable.setHTML(row, 0, dataTable.getHTML(row,0) + Util.imageItemHTML("img/icon/actions/crypt.png")); } dataTable.setHTML(row, 1, Util.mimeImageHTML(doc.getMimeType())); dataTable.setHTML(row, 2, doc.getName()); dataTable.setHTML(row, 3, Util.formatSize(doc.getActualVersion().getSize())); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.date.pattern")); dataTable.setHTML(row, 4, dtf.format(doc.getLastModified())); dataTable.setHTML(row, 5, doc.getActualVersion().getAuthor()); Hyperlink hLink = new Hyperlink(); hLink.setText(doc.getActualVersion().getName()); hLink.setTitle(doc.getActualVersion().getComment()); dataTable.setWidget(row, 6, hLink); dataTable.setHTML(row, 7, ""+(dataIndexValue++)); // Format dataTable.getCellFormatter().setHorizontalAlignment(row, 0, HasHorizontalAlignment.ALIGN_RIGHT); dataTable.getCellFormatter().setHorizontalAlignment(row, 1, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 2, HasHorizontalAlignment.ALIGN_LEFT); dataTable.getCellFormatter().setHorizontalAlignment(row, 3, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 4, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 5, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 6, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setVisible(row,7,false); for (int i=0; i<7; i++) { dataTable.getCellFormatter().addStyleName(row, i, "okm-DisableSelect"); } } /** * Sets the mail to the row * * @param rows The table row * @param doc The document */ public void addRow(GWTMail mail) { int row = dataTable.getRowCount(); dataTable.insertRow(row); // Sets document object data.put(new Integer(dataIndexValue),mail); // Mail is never checkout or subscribed ( because can not be changed ) dataTable.setHTML(row, 0, " "); if (mail.getAttachments().size()>0) { dataTable.setHTML(row, 1, Util.imageItemHTML("img/email_attach.gif")); } else { dataTable.setHTML(row, 1, Util.imageItemHTML("img/email.gif")); } dataTable.setHTML(row, 2, mail.getSubject()); dataTable.setHTML(row, 3, Util.formatSize(mail.getSize())); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.date.pattern")); dataTable.setHTML(row, 4, dtf.format(mail.getReceivedDate())); dataTable.setHTML(row, 5, mail.getFrom()); dataTable.setHTML(row, 6, " "); dataTable.setHTML(row, 7, ""+(dataIndexValue++)); // Format dataTable.getCellFormatter().setHorizontalAlignment(row, 0, HasHorizontalAlignment.ALIGN_RIGHT); dataTable.getCellFormatter().setHorizontalAlignment(row, 1, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 2, HasHorizontalAlignment.ALIGN_LEFT); dataTable.getCellFormatter().setHorizontalAlignment(row, 3, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 4, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 5, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setHorizontalAlignment(row, 6, HasHorizontalAlignment.ALIGN_CENTER); dataTable.getCellFormatter().setVisible(row,7,false); for (int i=0; i<7; i++) { dataTable.getCellFormatter().addStyleName(row, i, "okm-DisableSelect"); } } /** * Deselects the selected row */ public void deselecSelectedRow() { if(!dataTable.getSelectedRows().isEmpty()) { int selectedRow = ((Integer) dataTable.getSelectedRows().iterator().next()).intValue(); dataTable.deselectRow(selectedRow); } selectedRow = -1; } /* (non-Javadoc) * @see com.google.gwt.user.client.EventListener#onBrowserEvent(com.google.gwt.user.client.Event) */ public void onBrowserEvent(Event event) { boolean headerFired = false; // Controls when event is fired by header // Case targe event is header must disable drag & drop if (headerTable.getEventTargetCell(event)!=null) { dragged=false; headerFired = true; } boolean enableOpen = true; // If some action is on course must do speacil actions, this must be made before selected row // is changed switch(rowAction) { case ACTION_RENAMING : enableOpen = false; break; } // When de button mouse is released mouseX = DOM.eventGetClientX(event); mouseY = DOM.eventGetClientY(event); int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN && DOM.eventGetButton(event)==Event.BUTTON_RIGHT) { type = EVENT_ONMOUSEDOWN_RIGHT; // Special case, that must be so much similar to click event } switch (type) { case Event.ONCLICK: case EVENT_ONMOUSEDOWN_RIGHT: // Only for right mouuse button if (!headerFired && type==EVENT_ONMOUSEDOWN_RIGHT) { Main.get().mainPanel.desktop.browser.fileBrowser.showMenu(); DOM.eventPreventDefault(event); // Prevent to fire event to browser } if (dataTable.getEventTargetCell(event)!=null) { // Mark panel as selected and disables tree navigator panel if (getSelectedRow()>=0 && !Main.get().mainPanel.desktop.browser.fileBrowser.isPanelSelected()) { Main.get().mainPanel.desktop.browser.fileBrowser.setSelectedPanel(true); } // And row must be other than the selected one if (getSelectedRow()>= 0 && getSelectedRow() != selectedRow) { // If some action is on course must do speacil actions, this must be made before selected row // is changed switch (rowAction) { case ACTION_RENAMING : if (getSelectedRow() != selectedRow) { Main.get().mainPanel.desktop.browser.fileBrowser.hideRename(selectedRow); } break; } selectedRow = getSelectedRow(); if (isFolderSelected()) { Main.get().mainPanel.desktop.browser.tabMultiple.enableTabFolder(); GWTFolder folder = getFolder(); Main.get().mainPanel.desktop.browser.tabMultiple.tabFolder.setProperties(folder); Main.get().mainPanel.topPanel.toolBar.checkToolButtonPermissions(folder, Main.get().activeFolderTree.getFolder(), FILE_BROWSER); } else if (isMailSelected()) { Main.get().mainPanel.desktop.browser.tabMultiple.enableTabMail(); GWTMail mail = getMail(); Main.get().mainPanel.desktop.browser.tabMultiple.tabMail.setProperties(mail); Main.get().mainPanel.topPanel.toolBar.checkToolButtonPermissions(mail, Main.get().activeFolderTree.getFolder()); } else { Main.get().mainPanel.desktop.browser.tabMultiple.enableTabDocument(); GWTDocument doc = getDocument(); Main.get().mainPanel.desktop.browser.tabMultiple.tabDocument.setProperties(doc); Main.get().mainPanel.topPanel.toolBar.checkToolButtonPermissions(doc,Main.get().activeFolderTree.getFolder()); } } } break; case Event.ONDBLCLICK: // On double click not sends event to onCellClicked across super.onBrowserEvent(); // Disables the event propagation the sequence is: // Two time entry onCellClicked before entry on onBrowserEvent and disables the // Tree onCellClicked that produces inconsistence error refreshing DOM.eventCancelBubble(event, true); if (!headerFired && getSelectedRow() >= 0) { if (isFolderSelected()) { Main.get().mainPanel.desktop.browser.tabMultiple.enableTabFolder(); if (getSelectedRow() != selectedRow) { // Must not refresh properties on double click if row is yet selected Main.get().mainPanel.desktop.browser.tabMultiple.tabFolder.setProperties(getFolder()); } Main.get().activeFolderTree.setActiveNode(getFolder().getPath(),true); } else if (isMailSelected()) { Main.get().mainPanel.desktop.browser.tabMultiple.enableTabMail(); GWTMail mail = getMail(); if (getSelectedRow() != selectedRow) { // Must not refresh properties on double click if row is yet selected Main.get().mainPanel.desktop.browser.tabMultiple.tabMail.setProperties(mail); } Main.get().mainPanel.topPanel.toolBar.checkToolButtonPermissions(mail, Main.get().activeFolderTree.getFolder()); } else { Main.get().mainPanel.desktop.browser.tabMultiple.enableTabDocument(); GWTDocument doc = getDocument(); Main.get().mainPanel.topPanel.toolBar.checkToolButtonPermissions(doc,Main.get().activeFolderTree.getFolder()); // We come here before executing click ( click is always executed ) if (enableOpen) { if (Main.get().workspaceUserProperties.getWorkspace().getAvailableOption().isDownloadOption()) { downloadDocument(false); } } } } break; case Event.ONMOUSEMOVE: if (isDragged()) { // Implements drag & drop int noAction = FileBrowser.ACTION_NONE; // On trash drag is disabled if (isSelectedRow() && Main.get().mainPanel.desktop.browser.fileBrowser.fileBrowserAction==noAction && Main.get().mainPanel.desktop.navigator.getStackIndex()!=UIDesktopConstants.NAVIGATOR_CATEGORIES && Main.get().mainPanel.desktop.navigator.getStackIndex()!=UIDesktopConstants.NAVIGATOR_THESAURUS && Main.get().mainPanel.desktop.navigator.getStackIndex()!=UIDesktopConstants.NAVIGATOR_TRASH){ Main.get().dragable.show(dataTable.getHTML(getSelectedRow(),1)+dataTable.getHTML(getSelectedRow(),2), OriginPanel.FILE_BROWSER); } unsetDraged(); } break; case Event.ONMOUSEOUT: unsetDraged(); break; case Event.ONMOUSEDOWN: dragged = true; break; case Event.ONMOUSEUP: unsetDraged(); break; } super.onBrowserEvent(event); } /** * Gets the path of the selected document or folder * * @return The id */ public String getSelectedId() { String id = ""; if (getSelectedRow() >= 0) { if (isFolderSelected()) { id = getFolder().getPath(); } else if (isMailSelected()) { id = getMail().getPath(); } else if (isDocumentSelected()) { id = getDocument().getPath(); } } return id; } /** * Finds row by id document or folder * * @param id The id * @return The selected row */ public int findSelectedRowById(String id) { int selected = 0; int rowIndex = 0; boolean found = false; // Looking for id on directories while (!found && rowIndex < data.size()) { if (data.get(rowIndex) instanceof GWTFolder) { if (((GWTFolder) data.get(rowIndex)).getPath().equals(id)) { selected = rowIndex; found = true; } } else if (data.get(rowIndex) instanceof GWTMail) { if (((GWTMail)data.get(rowIndex)).getPath().equals(id)) { selected = rowIndex; found = true; } } else if (data.get(rowIndex) instanceof GWTDocument) { if (((GWTDocument)data.get(rowIndex)).getPath().equals(id)) { selected = rowIndex; found = true; } } rowIndex++; } if (found) { found = false; rowIndex = 0; int tmpSelected = selected; selected = 0; while(!found && rowIndex < dataTable.getRowCount()) { if(dataTable.getText(rowIndex,7).equals(String.valueOf(tmpSelected))) { found=true; selected = rowIndex; } rowIndex++; } } else { selected = -1; } return selected; } /** * Gets the selected row * * @return The selected row */ public int getSelectedRow() { int selectedRow = -1; if (!dataTable.getSelectedRows().isEmpty()) { selectedRow = ((Integer) dataTable.getSelectedRows().iterator().next()).intValue(); } Log.debug("ExtendedScrollPanel selectedRow:"+selectedRow); return selectedRow; } /** * Reset selected rows */ public void resetSelectedRows() { if (!dataTable.getSelectedRows().isEmpty()) { dataTable.getSelectedRows().clear(); } } /** * Restores the selected row value * * @param selectedRow The selected row */ public void restoreSelectedRow(int selectedRow){ Log.debug("ExtendedScrollTable restoreSelectedRow:"+selectedRow); this.selectedRow = selectedRow; } /** * Gets the X position on mouse click * * @return The x position on mouse click */ public int getMouseX() { return mouseX; } /** * Gets the Y position on mouse click * * @return The y position on mouse click */ public int getMouseY() { return mouseY; } /** * Gets a actual document object row * * @return */ public GWTDocument getDocument() { if (isDocumentSelected()) { return (GWTDocument) data.get(Integer.parseInt(dataTable.getText(getSelectedRow(),7))); } else { return null; } } /** * Sets the document object to actual row * * @param doc The document */ public void setDocument(GWTDocument doc) { if (isDocumentSelected()) { int row = getSelectedRow(); data.put(new Integer(dataTable.getText(getSelectedRow(),7)),doc); if (doc.isCheckedOut()) { dataTable.setHTML(row, 0, Util.imageItemHTML("img/icon/edit.gif")); } else if (doc.isLocked()) { dataTable.setHTML(row, 0, Util.imageItemHTML("img/icon/lock.gif")); } else { dataTable.setHTML(row, 0, ""); } // Subscribed is a special case, must add icon with others if (doc.isSubscribed()) { dataTable.setHTML(row, 0, dataTable.getHTML(row,0) + Util.imageItemHTML("img/icon/subscribed.gif")); } // Document has notes if (doc.isHasNotes()) { dataTable.setHTML(row, 0, dataTable.getHTML(row,0) + Util.imageItemHTML("img/icon/note.gif")); } // Document encrypted if (doc.getCipherName()!=null && !doc.getCipherName().equals("")) { dataTable.setHTML(row, 0, dataTable.getHTML(row,0) + Util.imageItemHTML("img/icon/actions/crypt.png")); } dataTable.setHTML(row, 1, Util.mimeImageHTML(doc.getMimeType())); dataTable.setHTML(row, 2, doc.getName()); dataTable.setHTML(row, 3, Util.formatSize(doc.getActualVersion().getSize())); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.date.pattern")); dataTable.setHTML(row, 4, dtf.format(doc.getLastModified())); dataTable.setHTML(row, 5, doc.getActualVersion().getAuthor()); dataTable.setHTML(row, 6, doc.getActualVersion().getName()); } } /** * Deletes document row */ public void delete() { if (isSelectedRow()) { Log.debug("ExtendedScrollPanel delete:"); data.remove(Integer.parseInt(dataTable.getText(getSelectedRow(),7))); dataTable.removeRow(getSelectedRow()); selectPrevRow(); } } /** * After deletes document or folder selects a row */ public void selectPrevRow() { Log.debug("ExtendedScrollTable selectPrevRow"); Log.debug("ExtendedScrollTable selectPrevRow -> dataTable.getRowCount():"+ dataTable.getRowCount()); Log.debug("ExtendedScrollTable selectPrevRow -> selectedRow:"+selectedRow); if (dataTable.getRowCount()>0) { if (dataTable.getRowCount()>selectedRow) { Log.debug("selectPrevRow:"+selectedRow); dataTable.selectRow(selectedRow,true); } else { Log.debug("selectPrevRow-1:"+(selectedRow-1)); dataTable.selectRow(selectedRow-1,true); } } } /** * Gets a actual Folder object row * * @return */ public GWTFolder getFolder() { // Row selected must be on table folder if (isFolderSelected()) { return (GWTFolder) data.get(Integer.parseInt(dataTable.getText(getSelectedRow(),7))); } else { return null; } } /** * Gets a actual Mail object row * * @return */ public GWTMail getMail() { // Row selected must be on table mail if (isMailSelected()) { return (GWTMail) data.get(Integer.parseInt(dataTable.getText(getSelectedRow(),7))); } else { return null; } } /** * Sets the mail to the row * * @param rows The table row * @param doc The document */ public void setMail(GWTMail mail) { if (isMailSelected()) { int row = getSelectedRow(); data.put(new Integer(dataTable.getText(getSelectedRow(),7)),mail); if (mail.getAttachments().size()>0) { dataTable.setHTML(row, 1, Util.imageItemHTML("img/email_attach.gif")); } else { dataTable.setHTML(row, 1, Util.imageItemHTML("img/email.gif")); } // Mail is never checkout or subscribed ( because can not be changed ) dataTable.setHTML(row, 2, mail.getSubject()); dataTable.setHTML(row, 3, Util.formatSize(mail.getSize())); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.date.pattern")); dataTable.setHTML(row, 4, dtf.format(mail.getReceivedDate())); dataTable.setHTML(row, 5, mail.getFrom()); } } /** * Sets the folder to the selected row * * @param folder The folder object */ public void setFolder(GWTFolder folder) { // Row selected must be on table folder if (isFolderSelected()) { int row = getSelectedRow(); data.put(new Integer(dataTable.getText(row,7)),folder); // Subscribed is a special case, must add icon with others if (folder.isSubscribed()) { dataTable.setHTML(row, 0, Util.imageItemHTML("img/icon/subscribed.gif")); } else { dataTable.setHTML(row, 0, ""); } // Looks if must change icon on parent if now has no childs and properties with user security atention if ( (folder.getPermissions() & GWTPermission.WRITE) == GWTPermission.WRITE) { if (folder.getHasChilds()) { dataTable.setHTML(row, 1, Util.imageItemHTML("img/menuitem_childs.gif")); } else { dataTable.setHTML(row, 1, Util.imageItemHTML("img/menuitem_empty.gif")); } } else { if (folder.getHasChilds()) { dataTable.setHTML(row, 1, Util.imageItemHTML("img/menuitem_childs_ro.gif")); } else { dataTable.setHTML(row, 1, Util.imageItemHTML("img/menuitem_empty_ro.gif")); } } dataTable.setHTML(row, 2, folder.getName()); dataTable.setHTML(row, 3, ""); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.date.pattern")); dataTable.setHTML(row, 4, dtf.format(folder.getCreated())); dataTable.setHTML(row, 5, folder.getAuthor()); dataTable.setHTML(row, 6, ""); } } /** * Return true or false if actual selected row is document * * @return True or False if actual row is document type */ public boolean isDocumentSelected() { if (!dataTable.getSelectedRows().isEmpty()) { if (data.get(Integer.parseInt(dataTable.getText(getSelectedRow(),7))) instanceof GWTDocument) { return true; } else { return false; } } else { return false; } } /** * Return true or false if actual selected row is folder * * @return True or False if actual row is folder type */ public boolean isFolderSelected() { if (!dataTable.getSelectedRows().isEmpty()) { Log.debug("ExtendedScrollTable isFolderSelected: key " + dataTable.getText(getSelectedRow(),7)); Log.debug("ExtendedScrollTable isFolderSelected: data size" + data.size()); if (data.get(Integer.parseInt(dataTable.getText(getSelectedRow(),7))) instanceof GWTFolder) { return true; } else { return false; } } else { return false; } } /** * Return true or false if actual selected row is mail * * @return True or False if actual row is mail type */ public boolean isMailSelected() { if (!dataTable.getSelectedRows().isEmpty()) { Log.debug("ExtendedScrollTable isFolderSelected: key " + dataTable.getText(getSelectedRow(),7)); Log.debug("ExtendedScrollTable isFolderSelected: data size" + data.size()); if (data.get(Integer.parseInt(dataTable.getText(getSelectedRow(),7))) instanceof GWTMail) { return true; } else { return false; } } else { return false; } } /** * Return true or false if it's a selected row * * @return True or false selected row */ public boolean isSelectedRow(){ Log.debug("isSelectedRow:"); if (!dataTable.getSelectedRows().isEmpty() ){ Log.debug("isSelectedRow: true"); return true; } else { Log.debug("isSelectedRow: false"); return false; } } /** * Download document */ public void downloadDocument(boolean checkout) { Log.debug("downloadDocument()"); if (isDocumentSelected()) { Log.debug("jump to download"); Util.downloadFile(getDocument().getPath(), (checkout?"checkout":"")); } Log.debug("downloadDocument: void"); } /** * Download document as PDF */ public void downloadDocumentPdf() { Log.debug("downloadDocumentPdf()"); if (isDocumentSelected()) { Log.debug("jump to download"); Util.downloadFilePdf(getDocument().getUuid()); } Log.debug("downloadDocumentPdf: void"); } /** * Gets the checkout flag * * @return Checkout state */ public boolean isCheckout() { // Row selected must be on table documents only this can be checkout if (isDocumentSelected()) { return getDocument().isCheckedOut(); } else { return false; } } /** * Gets the locked flag * * @return locked state */ public boolean isLocked() { // Row selected must be on table documents only this can be checkout if (isDocumentSelected()) { return getDocument().isLocked(); } else { return false; } } /** * Sets the actual action on rows * * @param action The action */ public void setAction(int action) { rowAction = action; } /** * Resets the row action */ public void resetAction() { rowAction = ACTION_NONE; } /** * isDragged Returns true or false if is dragged * * @return Return dragged value */ public boolean isDragged() { return dragged; } /** * unsetDraged * * Sets dragged flag to false; */ public void unsetDraged() { this.dragged = false; } /** * hasRows * * @return has rows */ public boolean hasRows() { return dataTable.getRowCount()>0; } }