diff options
author | Artur Signell <artur@vaadin.com> | 2012-08-13 18:34:33 +0300 |
---|---|---|
committer | Artur Signell <artur@vaadin.com> | 2012-08-13 19:18:33 +0300 |
commit | e85d933b25cc3c5cc85eb7eb4b13b950fd8e1569 (patch) | |
tree | 9ab6f13f7188cab44bbd979b1cf620f15328a03f /server/src/com/vaadin/service | |
parent | 14dd4d0b28c76eb994b181a4570f3adec53342e6 (diff) | |
download | vaadin-framework-e85d933b25cc3c5cc85eb7eb4b13b950fd8e1569.tar.gz vaadin-framework-e85d933b25cc3c5cc85eb7eb4b13b950fd8e1569.zip |
Moved server files to a server src folder (#9299)
Diffstat (limited to 'server/src/com/vaadin/service')
-rw-r--r-- | server/src/com/vaadin/service/ApplicationContext.java | 165 | ||||
-rw-r--r-- | server/src/com/vaadin/service/FileTypeResolver.java | 385 | ||||
-rw-r--r-- | server/src/com/vaadin/service/package.html | 20 |
3 files changed, 570 insertions, 0 deletions
diff --git a/server/src/com/vaadin/service/ApplicationContext.java b/server/src/com/vaadin/service/ApplicationContext.java new file mode 100644 index 0000000000..71bff7b865 --- /dev/null +++ b/server/src/com/vaadin/service/ApplicationContext.java @@ -0,0 +1,165 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.service; + +import java.io.File; +import java.io.Serializable; +import java.net.URL; +import java.util.Collection; + +import com.vaadin.Application; +import com.vaadin.terminal.ApplicationResource; +import com.vaadin.terminal.gwt.server.AbstractCommunicationManager; + +/** + * <code>ApplicationContext</code> provides information about the running + * context of the application. Each context is shared by all applications that + * are open for one user. In a web-environment this corresponds to a + * HttpSession. + * + * @author Vaadin Ltd. + * @version + * @VERSION@ + * @since 3.1 + */ +public interface ApplicationContext extends Serializable { + + /** + * Returns application context base directory. + * + * Typically an application is deployed in a such way that is has an + * application directory. For web applications this directory is the root + * directory of the web applications. In some cases applications might not + * have an application directory (for example web applications running + * inside a war). + * + * @return The application base directory or null if the application has no + * base directory. + */ + public File getBaseDirectory(); + + /** + * Returns a collection of all the applications in this context. + * + * Each application context contains all active applications for one user. + * + * @return A collection containing all the applications in this context. + */ + public Collection<Application> getApplications(); + + /** + * Adds a transaction listener to this context. The transaction listener is + * called before and after each each request related to this session except + * when serving static resources. + * + * The transaction listener must not be null. + * + * @see com.vaadin.service.ApplicationContext#addTransactionListener(com.vaadin.service.ApplicationContext.TransactionListener) + */ + public void addTransactionListener(TransactionListener listener); + + /** + * Removes a transaction listener from this context. + * + * @param listener + * the listener to be removed. + * @see TransactionListener + */ + public void removeTransactionListener(TransactionListener listener); + + /** + * Generate a URL that can be used as the relative location of e.g. an + * {@link ApplicationResource}. + * + * This method should only be called from the processing of a UIDL request, + * not from a background thread. The return value is null if used outside a + * suitable request. + * + * @deprecated this method is intended for terminal implementation only and + * is subject to change/removal from the interface (to + * {@link AbstractCommunicationManager}) + * + * @param resource + * @param urlKey + * a key for the resource that can later be extracted from a URL + * with {@link #getURLKey(URL, String)} + */ + @Deprecated + public String generateApplicationResourceURL(ApplicationResource resource, + String urlKey); + + /** + * Tests if a URL is for an application resource (APP/...). + * + * @deprecated this method is intended for terminal implementation only and + * is subject to change/removal from the interface (to + * {@link AbstractCommunicationManager}) + * + * @param context + * @param relativeUri + * @return + */ + @Deprecated + public boolean isApplicationResourceURL(URL context, String relativeUri); + + /** + * Gets the identifier (key) from an application resource URL. This key is + * the one that was given to + * {@link #generateApplicationResourceURL(ApplicationResource, String)} when + * creating the URL. + * + * @deprecated this method is intended for terminal implementation only and + * is subject to change/removal from the interface (to + * {@link AbstractCommunicationManager}) + * + * + * @param context + * @param relativeUri + * @return + */ + @Deprecated + public String getURLKey(URL context, String relativeUri); + + /** + * Interface for listening to transaction events. Implement this interface + * to listen to all transactions between the client and the application. + * + */ + public interface TransactionListener extends Serializable { + + /** + * Invoked at the beginning of every transaction. + * + * The transaction is linked to the context, not the application so if + * you have multiple applications running in the same context you need + * to check that the request is associated with the application you are + * interested in. This can be done looking at the application parameter. + * + * @param application + * the Application object. + * @param transactionData + * the Data identifying the transaction. + */ + public void transactionStart(Application application, + Object transactionData); + + /** + * Invoked at the end of every transaction. + * + * The transaction is linked to the context, not the application so if + * you have multiple applications running in the same context you need + * to check that the request is associated with the application you are + * interested in. This can be done looking at the application parameter. + * + * @param applcation + * the Application object. + * @param transactionData + * the Data identifying the transaction. + */ + public void transactionEnd(Application application, + Object transactionData); + + } +} diff --git a/server/src/com/vaadin/service/FileTypeResolver.java b/server/src/com/vaadin/service/FileTypeResolver.java new file mode 100644 index 0000000000..c457c16eb4 --- /dev/null +++ b/server/src/com/vaadin/service/FileTypeResolver.java @@ -0,0 +1,385 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.service; + +import java.io.File; +import java.io.Serializable; +import java.util.Collections; +import java.util.Hashtable; +import java.util.Map; +import java.util.StringTokenizer; + +import com.vaadin.terminal.Resource; +import com.vaadin.terminal.ThemeResource; + +/** + * Utility class that can figure out mime-types and icons related to files. + * <p> + * Note : The icons are associated purely to mime-types, so a file may not have + * a custom icon accessible with this class. + * </p> + * + * @author Vaadin Ltd. + * @version + * @VERSION@ + * @since 3.0 + */ +@SuppressWarnings("serial") +public class FileTypeResolver implements Serializable { + + /** + * Default icon given if no icon is specified for a mime-type. + */ + static public Resource DEFAULT_ICON = new ThemeResource( + "../runo/icons/16/document.png"); + + /** + * Default mime-type. + */ + static public String DEFAULT_MIME_TYPE = "application/octet-stream"; + + /** + * Initial file extension to mime-type mapping. + */ + static private String initialExtToMIMEMap = "application/cu-seeme csm cu," + + "application/dsptype tsp," + + "application/futuresplash spl," + + "application/mac-binhex40 hqx," + + "application/msaccess mdb," + + "application/msword doc dot," + + "application/octet-stream bin," + + "application/oda oda," + + "application/pdf pdf," + + "application/pgp-signature pgp," + + "application/postscript ps ai eps," + + "application/rtf rtf," + + "application/vnd.ms-excel xls xlb," + + "application/vnd.ms-powerpoint ppt pps pot," + + "application/vnd.wap.wmlc wmlc," + + "application/vnd.wap.wmlscriptc wmlsc," + + "application/wordperfect5.1 wp5," + + "application/zip zip," + + "application/x-123 wk," + + "application/x-bcpio bcpio," + + "application/x-chess-pgn pgn," + + "application/x-cpio cpio," + + "application/x-debian-package deb," + + "application/x-director dcr dir dxr," + + "application/x-dms dms," + + "application/x-dvi dvi," + + "application/x-xfig fig," + + "application/x-font pfa pfb gsf pcf pcf.Z," + + "application/x-gnumeric gnumeric," + + "application/x-gtar gtar tgz taz," + + "application/x-hdf hdf," + + "application/x-httpd-php phtml pht php," + + "application/x-httpd-php3 php3," + + "application/x-httpd-php3-source phps," + + "application/x-httpd-php3-preprocessed php3p," + + "application/x-httpd-php4 php4," + + "application/x-ica ica," + + "application/x-java-archive jar," + + "application/x-java-serialized-object ser," + + "application/x-java-vm class," + + "application/x-javascript js," + + "application/x-kchart chrt," + + "application/x-killustrator kil," + + "application/x-kpresenter kpr kpt," + + "application/x-kspread ksp," + + "application/x-kword kwd kwt," + + "application/x-latex latex," + + "application/x-lha lha," + + "application/x-lzh lzh," + + "application/x-lzx lzx," + + "application/x-maker frm maker frame fm fb book fbdoc," + + "application/x-mif mif," + + "application/x-msdos-program com exe bat dll," + + "application/x-msi msi," + + "application/x-netcdf nc cdf," + + "application/x-ns-proxy-autoconfig pac," + + "application/x-object o," + + "application/x-ogg ogg," + + "application/x-oz-application oza," + + "application/x-perl pl pm," + + "application/x-pkcs7-crl crl," + + "application/x-redhat-package-manager rpm," + + "application/x-shar shar," + + "application/x-shockwave-flash swf swfl," + + "application/x-star-office sdd sda," + + "application/x-stuffit sit," + + "application/x-sv4cpio sv4cpio," + + "application/x-sv4crc sv4crc," + + "application/x-tar tar," + + "application/x-tex-gf gf," + + "application/x-tex-pk pk PK," + + "application/x-texinfo texinfo texi," + + "application/x-trash ~ % bak old sik," + + "application/x-troff t tr roff," + + "application/x-troff-man man," + + "application/x-troff-me me," + + "application/x-troff-ms ms," + + "application/x-ustar ustar," + + "application/x-wais-source src," + + "application/x-wingz wz," + + "application/x-x509-ca-cert crt," + + "audio/basic au snd," + + "audio/midi mid midi," + + "audio/mpeg mpga mpega mp2 mp3," + + "audio/mpegurl m3u," + + "audio/prs.sid sid," + + "audio/x-aiff aif aiff aifc," + + "audio/x-gsm gsm," + + "audio/x-pn-realaudio ra rm ram," + + "audio/x-scpls pls," + + "audio/x-wav wav," + + "audio/ogg ogg," + + "audio/mp4 m4a," + + "audio/x-aac aac," + + "image/bitmap bmp," + + "image/gif gif," + + "image/ief ief," + + "image/jpeg jpeg jpg jpe," + + "image/pcx pcx," + + "image/png png," + + "image/svg+xml svg svgz," + + "image/tiff tiff tif," + + "image/vnd.wap.wbmp wbmp," + + "image/x-cmu-raster ras," + + "image/x-coreldraw cdr," + + "image/x-coreldrawpattern pat," + + "image/x-coreldrawtemplate cdt," + + "image/x-corelphotopaint cpt," + + "image/x-jng jng," + + "image/x-portable-anymap pnm," + + "image/x-portable-bitmap pbm," + + "image/x-portable-graymap pgm," + + "image/x-portable-pixmap ppm," + + "image/x-rgb rgb," + + "image/x-xbitmap xbm," + + "image/x-xpixmap xpm," + + "image/x-xwindowdump xwd," + + "text/comma-separated-values csv," + + "text/css css," + + "text/html htm html xhtml," + + "text/mathml mml," + + "text/plain txt text diff," + + "text/richtext rtx," + + "text/tab-separated-values tsv," + + "text/vnd.wap.wml wml," + + "text/vnd.wap.wmlscript wmls," + + "text/xml xml," + + "text/x-c++hdr h++ hpp hxx hh," + + "text/x-c++src c++ cpp cxx cc," + + "text/x-chdr h," + + "text/x-csh csh," + + "text/x-csrc c," + + "text/x-java java," + + "text/x-moc moc," + + "text/x-pascal p pas," + + "text/x-setext etx," + + "text/x-sh sh," + + "text/x-tcl tcl tk," + + "text/x-tex tex ltx sty cls," + + "text/x-vcalendar vcs," + + "text/x-vcard vcf," + + "video/dl dl," + + "video/fli fli," + + "video/gl gl," + + "video/mpeg mpeg mpg mpe," + + "video/quicktime qt mov," + + "video/x-mng mng," + + "video/x-ms-asf asf asx," + + "video/x-msvideo avi," + + "video/x-sgi-movie movie," + + "video/ogg ogv," + + "video/mp4 mp4," + + "x-world/x-vrml vrm vrml wrl"; + + /** + * File extension to MIME type mapping. All extensions are in lower case. + */ + static private Hashtable<String, String> extToMIMEMap = new Hashtable<String, String>(); + + /** + * MIME type to Icon mapping. + */ + static private Hashtable<String, Resource> MIMEToIconMap = new Hashtable<String, Resource>(); + + static { + + // Initialize extension to MIME map + final StringTokenizer lines = new StringTokenizer(initialExtToMIMEMap, + ","); + while (lines.hasMoreTokens()) { + final String line = lines.nextToken(); + final StringTokenizer exts = new StringTokenizer(line); + final String type = exts.nextToken(); + while (exts.hasMoreTokens()) { + final String ext = exts.nextToken(); + addExtension(ext, type); + } + } + + // Initialize Icons + ThemeResource folder = new ThemeResource("../runo/icons/16/folder.png"); + addIcon("inode/drive", folder); + addIcon("inode/directory", folder); + } + + /** + * Gets the mime-type of a file. Currently the mime-type is resolved based + * only on the file name extension. + * + * @param fileName + * the name of the file whose mime-type is requested. + * @return mime-type <code>String</code> for the given filename + */ + public static String getMIMEType(String fileName) { + + // Checks for nulls + if (fileName == null) { + throw new NullPointerException("Filename can not be null"); + } + + // Calculates the extension of the file + int dotIndex = fileName.indexOf("."); + while (dotIndex >= 0 && fileName.indexOf(".", dotIndex + 1) >= 0) { + dotIndex = fileName.indexOf(".", dotIndex + 1); + } + dotIndex++; + + if (fileName.length() > dotIndex) { + String ext = fileName.substring(dotIndex); + + // Ignore any query parameters + int queryStringStart = ext.indexOf('?'); + if (queryStringStart > 0) { + ext = ext.substring(0, queryStringStart); + } + + // Return type from extension map, if found + final String type = extToMIMEMap.get(ext.toLowerCase()); + if (type != null) { + return type; + } + } + + return DEFAULT_MIME_TYPE; + } + + /** + * Gets the descriptive icon representing file, based on the filename. First + * the mime-type for the given filename is resolved, and then the + * corresponding icon is fetched from the internal icon storage. If it is + * not found the default icon is returned. + * + * @param fileName + * the name of the file whose icon is requested. + * @return the icon corresponding to the given file + */ + public static Resource getIcon(String fileName) { + return getIconByMimeType(getMIMEType(fileName)); + } + + private static Resource getIconByMimeType(String mimeType) { + final Resource icon = MIMEToIconMap.get(mimeType); + if (icon != null) { + return icon; + } + + // If nothing is known about the file-type, general file + // icon is used + return DEFAULT_ICON; + } + + /** + * Gets the descriptive icon representing a file. First the mime-type for + * the given file name is resolved, and then the corresponding icon is + * fetched from the internal icon storage. If it is not found the default + * icon is returned. + * + * @param file + * the file whose icon is requested. + * @return the icon corresponding to the given file + */ + public static Resource getIcon(File file) { + return getIconByMimeType(getMIMEType(file)); + } + + /** + * Gets the mime-type for a file. Currently the returned file type is + * resolved by the filename extension only. + * + * @param file + * the file whose mime-type is requested. + * @return the files mime-type <code>String</code> + */ + public static String getMIMEType(File file) { + + // Checks for nulls + if (file == null) { + throw new NullPointerException("File can not be null"); + } + + // Directories + if (file.isDirectory()) { + // Drives + if (file.getParentFile() == null) { + return "inode/drive"; + } else { + return "inode/directory"; + } + } + + // Return type from extension + return getMIMEType(file.getName()); + } + + /** + * Adds a mime-type mapping for the given filename extension. If the + * extension is already in the internal mapping it is overwritten. + * + * @param extension + * the filename extension to be associated with + * <code>MIMEType</code>. + * @param MIMEType + * the new mime-type for <code>extension</code>. + */ + public static void addExtension(String extension, String MIMEType) { + extToMIMEMap.put(extension.toLowerCase(), MIMEType); + } + + /** + * Adds a icon for the given mime-type. If the mime-type also has a + * corresponding icon, it is replaced with the new icon. + * + * @param MIMEType + * the mime-type whose icon is to be changed. + * @param icon + * the new icon to be associated with <code>MIMEType</code>. + */ + public static void addIcon(String MIMEType, Resource icon) { + MIMEToIconMap.put(MIMEType, icon); + } + + /** + * Gets the internal file extension to mime-type mapping. + * + * @return unmodifiable map containing the current file extension to + * mime-type mapping + */ + public static Map<String, String> getExtensionToMIMETypeMapping() { + return Collections.unmodifiableMap(extToMIMEMap); + } + + /** + * Gets the internal mime-type to icon mapping. + * + * @return unmodifiable map containing the current mime-type to icon mapping + */ + public static Map<String, Resource> getMIMETypeToIconMapping() { + return Collections.unmodifiableMap(MIMEToIconMap); + } +} diff --git a/server/src/com/vaadin/service/package.html b/server/src/com/vaadin/service/package.html new file mode 100644 index 0000000000..ea21139b91 --- /dev/null +++ b/server/src/com/vaadin/service/package.html @@ -0,0 +1,20 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> +<head> +</head> + +<body bgcolor="white"> + +<!-- Package summary here --> + +<p>Provides some general service classes used throughout Vaadin +based applications.</p> + +<!-- <h2>Package Specification</h2> --> + +<!-- Package spec here --> + +<!-- Put @see and @since tags down here. --> + +</body> +</html> |