summaryrefslogtreecommitdiffstats
path: root/server/src/com/vaadin/service
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2012-08-13 18:34:33 +0300
committerArtur Signell <artur@vaadin.com>2012-08-13 19:18:33 +0300
commite85d933b25cc3c5cc85eb7eb4b13b950fd8e1569 (patch)
tree9ab6f13f7188cab44bbd979b1cf620f15328a03f /server/src/com/vaadin/service
parent14dd4d0b28c76eb994b181a4570f3adec53342e6 (diff)
downloadvaadin-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.java165
-rw-r--r--server/src/com/vaadin/service/FileTypeResolver.java385
-rw-r--r--server/src/com/vaadin/service/package.html20
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>