Java tutorial
/** * OpenKM, Open Document Management System (http://www.openkm.com) * Copyright (c) 2006-2015 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.util; import java.util.List; import java.util.Map; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.http.client.URL; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.RootPanel; import com.openkm.frontend.client.Main; import com.openkm.frontend.client.constants.service.RPCService; import com.openkm.frontend.client.service.OKMGeneralService; import com.openkm.frontend.client.service.OKMGeneralServiceAsync; /** * Util * * @author jllort * */ public class Util { private static final OKMGeneralServiceAsync generalService = (OKMGeneralServiceAsync) GWT .create(OKMGeneralService.class); /** * Generates HTML for item with an attached icon. * * @param imageUrl the url of the icon image * @param title the title of the item * @return the resultant HTML */ public static String imageItemHTML(String imageUrl, String title) { return "<span style='text-align:left; margin-right:4px;'><img align=\"absmidle\" style='margin-right:4px; white-space:nowrap;' src='" + imageUrl.toLowerCase() + "'>" + title + "</span>"; } /** * Generates HTML for item with an attached icon. * * @param imageUrl the url of the icon image * @param title the title of the item * @return the resultant HTML */ public static String imageItemHTML(String imageUrl, String title, String align) { return "<span style='text-align:left; margin-right:4px;'><img align=\"" + align + "\" style='margin-right:4px; white-space:nowrap;' src='" + imageUrl.toLowerCase() + "'>" + title + "</span>"; } /** * Generates HTML for item with an attached icon. * * @param imageUrl the url of the icon image * @return the resultant HTML */ public static String imageItemHTML(String imageUrl) { return "<img align=\"absmidle\" style='margin-right:4px' src='" + imageUrl.toLowerCase() + "'>"; } /** * Generates HTML image code with style. * * @param imageUrl the url of the icon image * @param alt image alt * @param style the style of the image * @return the resultant HTML */ public static String imageHTML(String imageUrl, String alt, String style) { if (!style.equals("")) { return "<img align=\"absmidle\"" + style + " src='" + imageUrl.toLowerCase() + "'>"; } else { return imageHTML(imageUrl, alt); } } /** * Generates HTML image code with style. * * @param imageUrl the url of the icon image * @param alt the image alt * @return the resultant HTML */ public static String imageHTML(String imageUrl, String alt) { return "<img border=\"0\" align=\"absmidle\" alt=\"" + alt + "\" title=\"" + alt + "\" src='" + imageUrl.toLowerCase() + "'>"; } /** * Generates HTML image code with style. * * @param imageUrl the url of the icon image * @return the resultant HTML */ public static String imageHTML(String imageUrl) { return imageHTML(imageUrl, ""); } /** * Generate HTML icon for mime-type document * * @param mime The document mime-type * @return the html image of mime-type file */ public static String mimeImageHTML(String mime) { return "<img align=\"absmidle\" style=\"margin-right:4px\" src=\"" + Main.CONTEXT + "/mime/" + mime + "\"'>"; } /** * Return the menu html value * * @param imageUrl The image url * @param text The text value */ public static String flagMenuHTML(String flag, String text) { return "<img style='margin-right:8px; margin-left:2px; vertical-align:middle;' " + "src=\"" + Main.CONTEXT + "/flag/" + flag + "\"'>" + text; } /** * Return the menu html value * * @param imageUrl The image url * @param text The text value */ public static String menuHTML(String imageUrl, String text) { return "<img style='margin-right:8px; margin-left:2px; vertical-align:middle;' src='" + imageUrl + "'>" + text; } /** * Creates an HTML fragment that places an image & caption together, for use * in a group header. * * @param imageUrl the url of the icon image to be used * @param caption the group caption * @return the header HTML fragment */ public static String createHeaderHTML(String imageUrl, String caption) { return "<table align='left'><tr>" + "<td><img src='" + imageUrl + "'></td>" + "<td style='vertical-align:middle'><b style='white-space:nowrap; cursor:default;'>" + caption + "</b></td>" + "</tr></table>"; } /** * Creates an horizontal spacer * * @param width The desired width space * @return an HTML element meaning the with */ public static HTML hSpace(String width) { HTML spacer = new HTML(""); spacer.setWidth(width); return spacer; } /** * Creates an vertical spacer * * @param height The desired height space * @return an HTML element meaning the height */ public static HTML vSpace(String height) { HTML spacer = new HTML(""); spacer.setHeight(height); return spacer; } /** * Creates an square spacer * * @param width The desired width space * @param height The desired height space * @return an HTML element meaning the with and height */ public static HTML space(String width, String height) { HTML spacer = new HTML(""); spacer.setWidth(width); spacer.setHeight(height); return spacer; } /** * Creates an HTML to opens a url with text on a new window * * @param text The text url description * @param uri The url to open */ public static String windowOpen(String text, String uri) { return "<span onclick=\"javascript:window.open('" + uri + "')\">" + text + "</span>"; } /** * isJREInstalled */ public static boolean isJREInstalled() { if (GWT.isProdMode()) { String[] jreList = getJREs(); if (jreList != null && jreList.length > 0) { return true; } else { return false; } } else { return false; } } /** * Download file by UUID */ public static void downloadFileByUUID(String uuid, String params) { if (!params.equals("") && !params.endsWith("&")) { params += "&"; } final Element downloadIframe = RootPanel.get("__download").getElement(); String url = RPCService.DownloadServlet + "?" + params + "uuid=" + URL.encodeQueryString(uuid); DOM.setElementAttribute(downloadIframe, "src", url); } /** * Download file by path */ @Deprecated public static void downloadFile(String path, String params) { if (!params.equals("") && !params.endsWith("&")) { params += "&"; } final Element downloadIframe = RootPanel.get("__download").getElement(); String url = RPCService.DownloadServlet + "?" + params + "path=" + URL.encodeQueryString(path); DOM.setElementAttribute(downloadIframe, "src", url); } /** * downloadFilesByUUID */ public static void downloadFilesByUUID(List<String> uuidList, String params) { if (!params.equals("")) { params = "&" + params; } final Element downloadIframe = RootPanel.get("__download").getElement(); String url = RPCService.DownloadServlet + "?export" + params; for (String uuid : uuidList) { url += "&uuidList=" + URL.encodeQueryString(uuid); } DOM.setElementAttribute(downloadIframe, "src", url); } /** * Download files exported as zip * * @author danilo */ @Deprecated public static void downloadFiles(List<String> path, String params) { if (!params.equals("")) { params = "&" + params; } final Element downloadIframe = RootPanel.get("__download").getElement(); String url = RPCService.DownloadServlet + "?export" + params; for (String p : path) { url += "&pathList=" + URL.encodeQueryString(p); } DOM.setElementAttribute(downloadIframe, "src", url); } /** * Download file */ public static void downloadFilePdf(String uuid) { final Element downloadIframe = RootPanel.get("__download").getElement(); String url = RPCService.ConverterServlet + "?inline=false&toPdf=true&uuid=" + URL.encodeQueryString(uuid); DOM.setElementAttribute(downloadIframe, "src", url); Main.get().conversionStatus.getStatus(); } /** * executeReport */ public static void executeReport(long id, Map<String, String> params) { String parameters = ""; if (!params.isEmpty()) { for (String key : params.keySet()) { parameters += "&" + key + "=" + params.get(key); } } final Element downloadIframe = RootPanel.get("__download").getElement(); String url = RPCService.ReportServlet + "?" + "id=" + id + parameters; DOM.setElementAttribute(downloadIframe, "src", url); } /** * print file */ public static void print(String uuid) { final Element printIframe = RootPanel.get("__print").getElement(); String url = RPCService.ConverterServlet + "?inline=true&print=true&toPdf=true&uuid=" + URL.encodeQueryString(uuid); DOM.setElementAttribute(printIframe, "src", url); } /** * Download CSV file */ public static void downloadCSVFile(String params) { final Element downloadIframe = RootPanel.get("__download").getElement(); String url = RPCService.CSVExporterServlet + "?" + params; DOM.setElementAttribute(downloadIframe, "src", url); } /** * markHTMLTextAsBold */ public static String getTextAsBoldHTML(String text, boolean mark) { if (mark) { return "<b>" + text + "</b>"; } else { return text; } } /** * Get parent item path from path. * * @param path The complete item path. * @return The parent item path. */ public static String getParent(String path) { int lastSlash = path.lastIndexOf('/'); String ret = (lastSlash > 0) ? path.substring(0, lastSlash) : ""; return ret; } /** * Get item name from path. * * @param path The complete item path. * @return The name of the item. */ public static String getName(String path) { String ret = path.substring(path.lastIndexOf('/') + 1); return ret; } /** * Encode path elements */ public static String encodePathElements(String path) { String[] eltos = path.split("\\/"); String ret = ""; for (int i = 1; i < eltos.length; i++) { ret = ret.concat("/").concat(URL.encodePathSegment(eltos[i])); } return ret; } /** * Generate selectable widget text */ public static HTML createSelectable(String html) { HTML widget = new HTML(html); widget.addStyleName("okm-EnableSelect"); return widget; } /** * isRoot */ public static boolean isRoot(String fldPath) { boolean isRoot = false; if (Main.get().workspaceUserProperties.getWorkspace().isStackTaxonomy()) { isRoot = isRoot || Main.get().taxonomyRootFolder.getPath().equals(fldPath); } if (Main.get().workspaceUserProperties.getWorkspace().isStackCategoriesVisible()) { isRoot = isRoot || Main.get().categoriesRootFolder.getPath().equals(fldPath); } if (Main.get().workspaceUserProperties.getWorkspace().isStackThesaurusVisible()) { isRoot = isRoot || Main.get().thesaurusRootFolder.getPath().equals(fldPath); } if (Main.get().workspaceUserProperties.getWorkspace().isStackTemplatesVisible()) { isRoot = isRoot || Main.get().templatesRootFolder.getPath().equals(fldPath); } if (Main.get().workspaceUserProperties.getWorkspace().isStackPersonalVisible()) { isRoot = isRoot || Main.get().personalRootFolder.getPath().equals(fldPath); } if (Main.get().workspaceUserProperties.getWorkspace().isStackMailVisible()) { isRoot = isRoot || Main.get().mailRootFolder.getPath().equals(fldPath); } if (Main.get().workspaceUserProperties.getWorkspace().isStackTrashVisible()) { isRoot = isRoot || Main.get().trashRootFolder.getPath().equals(fldPath); } return isRoot; } /** * isSearchableKey */ public static boolean isSearchableKey(KeyUpEvent event) { return (!EventUtils.isNavigationKey(event.getNativeKeyCode()) && !EventUtils.isModifierKey(event.getNativeKeyCode()) && !EventUtils.isArrowKey(event.getNativeKeyCode())); } /** * Change on fly the actual css * * @param title The css name */ public static void changeCss(String title) { if (title.equals("bigfont")) { Main.get().mainPanel.desktop.navigator.setSkinExtrStackSize(1); Main.get().mainPanel.search.historySearch.setSkinExtrStackSize(1); } else { Main.get().mainPanel.desktop.navigator.setSkinExtrStackSize(0); Main.get().mainPanel.search.historySearch.setSkinExtrStackSize(0); } browserChangeCss(title); Main.get().mainPanel.stylesChanged(); } /** * Change on fly the actual css * * @param title The css name */ public static native void browserChangeCss(String title) /*-{ new $wnd.changeCss(title); }-*/; /** * printFile */ public static native void printFile() /*-{ new $wnd.printFile(); }-*/; /** * Format file size in Bytes, KBytes or MBytes. * * @param size The file size in bytes. * @return The formated file size. */ public static native String formatSize(double size) /*-{ if (size / 1024 < 1) { str = size + " Bytes"; } else if (size / 1048576 < 1) { str = (size / 1024).toFixed(1) + " KB"; } else if (size / 1073741824 < 1) { str = (size / 1048576).toFixed(1) + " MB"; } else if (size / 1099511627776 < 1) { str = (size / 1073741824).toFixed(1) + " GB"; } else { str = "BIG"; } return str; }-*/; /** * Get browser language * * @return The language in ISO 639 format. */ public static native String getBrowserLanguage() /*-{ var lang = navigator.language? navigator.language : navigator.userLanguage; if (lang) { return lang; } else { return "en"; } }-*/; /** * returns 'opera', 'safari', 'ie6', 'ie7', 'ie8', 'ie9', 'gecko' or 'unknown'. */ public static native String getUserAgent() /*-{ try { if ( window.opera ) return 'opera'; var ua = navigator.userAgent.toLowerCase(); if ( ua.indexOf('chrome') != -1 ) return 'chrome'; if ( ua.indexOf('webkit' ) != -1 ) return 'safari'; if ( ua.indexOf('msie 6.0') != -1 ) return 'ie6'; if ( ua.indexOf('msie 7.0') != -1 ) return 'ie7'; if ( ua.indexOf('msie 8.0') != -1 ) return 'ie8'; if ( ua.indexOf('msie 9.0') != -1 ) return 'ie9'; if ( ua.indexOf('gecko') != -1 ) return 'gecko'; if ( ua.indexOf('opera') != -1 ) return 'opera'; return 'unknown'; } catch ( e ) { return 'unknown' } }-*/; public static native void removeMediaPlayer() /*-{ $wnd.swfobject.removeSWF("jsmediaplayer"); }-*/; public static native void createMediaPlayer(String mediaUrl, String mediaProvider, String width, String height) /*-{ $wnd.swfobject.embedSWF("../js/mediaplayer/player.swf", "mediaplayercontainer", width, height, "9.0.0", "../js/mediaplayer/expressinstall.swf", {file:mediaUrl,provider:mediaProvider,autostart:"true",width:width,height:height}, {allowscriptaccess:"always",allowfullscreen: "true"}, {id:"jsmediaplayer",name:"jsmediaplayer"}); }-*/; public static native void resizeMediaPlayer(String width, String height) /*-{ obj = $wnd.swfobject.getObjectById('jsmediaplayer'); obj.width = width; obj.height = height; }-*/; public static native void createSwfViewer(String swfUrl, String width, String height) /*-{ $wnd.swfobject.embedSWF(swfUrl, "swfviewercontainer", width, height, "9.0.0", "../js/mediaplayer/expressinstall.swf", {width:width,height:height}, {}, {id:"jswfviewer",name:"jswfviewer"}); }-*/; public static native void resizeSwfViewer(String width, String height) /*-{ obj = $wnd.swfobject.getObjectById('jswfviewer'); obj.width = width; obj.height = height; }-*/; public static native void createPDFViewerZviewer(String pdfUrl, String width, String height) /*-{ pdfUrl = encodeURIComponent(pdfUrl); $wnd.swfobject.embedSWF("../js/zviewer/zviewer.swf", "pdfviewercontainer", width, height, "9.0.0", "../js/mediaplayer/expressinstall.swf", {doc_url:pdfUrl}, {allowFullScreen:"true",menu:"false",bgcolor:"#efefef"}, {id:"jspdfviewer",name:"jspdfviewer"}); }-*/; public static native void resizePDFViewerZviewer(String width, String height) /*-{ obj = $wnd.swfobject.getObjectById('jspdfviewer'); obj.width = width; obj.height = height; }-*/; public static native void createPDFViewerFlexPaper(String pdfUrl, String width, String height) /*-{ fpViewer = "../js/flexpaper/FlexPaperViewer.swf"; pdfUrl = encodeURIComponent(pdfUrl); $wnd.swfobject.embedSWF(fpViewer, "pdfviewercontainer", width, height, "10.0.0", "playerProductInstall.swf", { SwfFile : pdfUrl, Scale : 0.6, ZoomTransition : "easeOut", ZoomTime : 0.5, ZoomInterval : 0.1, FitPageOnLoad : false, FitWidthOnLoad : true, FullScreenAsMaxWindow : false, ProgressiveLoading : true, ViewModeToolsVisible : true, ZoomToolsVisible : true, FullScreenVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: "en_US" }, { quality : "high", bgcolor : "#ffffff", allowscriptaccess : "sameDomain", allowfullscreen : "true" }, { id : "FlexPaperViewer", name : "FlexPaperViewer" }); }-*/; public static native void resizePDFViewerFlexPaper(String width, String height) /*-{ obj = $wnd.swfobject.getObjectById('FlexPaperViewer'); obj.width = width; obj.height = height; }-*/; public static native void resizeEmbededPDF(String width, String height, String pdfId) /*-{ obj = $wnd.document.getElementById(pdfId); obj.width = width; obj.height = height; }-*/; public static native String[] getJREs() /*-{ return $wnd.deployJava.getJREs(); }-*/; public static native void createClipboardButton(String divId, String textToCopy) /*-{ $wnd.swfobject.embedSWF("../clippy.swf", divId, 14, 14, "9.0.0", "../clippy.swf", {text:textToCopy}, {quality:"high",scale:"noscale",bgcolor:"#FFFFFF"}, {id:"clippy",name:"clippy"}); }-*/; public static native String escape(String text) /*-{ return escape(text); }-*/; }