aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/terminal/web/ThemeFunctionLibrary.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/itmill/toolkit/terminal/web/ThemeFunctionLibrary.java')
-rw-r--r--src/com/itmill/toolkit/terminal/web/ThemeFunctionLibrary.java606
1 files changed, 0 insertions, 606 deletions
diff --git a/src/com/itmill/toolkit/terminal/web/ThemeFunctionLibrary.java b/src/com/itmill/toolkit/terminal/web/ThemeFunctionLibrary.java
deleted file mode 100644
index e03f6b3d91..0000000000
--- a/src/com/itmill/toolkit/terminal/web/ThemeFunctionLibrary.java
+++ /dev/null
@@ -1,606 +0,0 @@
-/* *************************************************************************
-
- IT Mill Toolkit
-
- Development of Browser User Interfaces Made Easy
-
- Copyright (C) 2000-2006 IT Mill Ltd
-
- *************************************************************************
-
- This product is distributed under commercial license that can be found
- from the product package on license.pdf. Use of this product might
- require purchasing a commercial license from IT Mill Ltd. For guidelines
- on usage, see licensing-guidelines.html
-
- *************************************************************************
-
- For more information, contact:
-
- IT Mill Ltd phone: +358 2 4802 7180
- Ruukinkatu 2-4 fax: +358 2 4802 7181
- 20540, Turku email: info@itmill.com
- Finland company www: www.itmill.com
-
- Primary source for information and releases: www.itmill.com
-
- ********************************************************************** */
-
-package com.itmill.toolkit.terminal.web;
-
-import com.itmill.toolkit.Application;
-import com.itmill.toolkit.terminal.ThemeResource;
-import com.itmill.toolkit.ui.FrameWindow;
-import com.itmill.toolkit.ui.Window;
-
-import java.text.DateFormatSymbols;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.GregorianCalendar;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.servlet.http.HttpSession;
-
-/**
- * This a function library that can be used from the theme XSL-files. It
- * provides easy access to current application, window, theme, webbrowser and
- * session. The internal threadlocal state must be maintained by the webadapter
- * in order to guarantee that it works.
- *
- * @author IT Mill Ltd.
- * @version
- * @VERSION@
- * @since 3.0
- */
-
-public class ThemeFunctionLibrary {
-
- static private final int APPLICATION = 0;
-
- static private final int WINDOW = 1;
-
- static private final int WEBBROWSER = 2;
-
- static private final int SESSION = 3;
-
- static private final int WEBADAPTERSERVLET = 4;
-
- static private final int THEME = 5;
-
- static private ThreadLocal state = new ThreadLocal();
-
- /**
- *
- * @param application
- * @param window
- * @param webBrowser
- * @param session
- * @param webAdapterServlet
- * @param theme
- */
- static protected void setState(Application application, Window window,
- WebBrowser webBrowser, HttpSession session,
- ApplicationServlet webAdapterServlet, String theme) {
- state.set(new Object[] { application, window, webBrowser, session,
- webAdapterServlet, theme });
- }
-
- static protected void cleanState() {
- state.set(null);
- }
-
- /**
- * Returns a reference to the application object associated with the session
- * that the call came from.
- */
- static public Application application() {
- try {
- return (Application) ((Object[]) state.get())[APPLICATION];
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Returns a reference to the current window object associated with the
- * session that the call came from.
- */
- static public Window window() {
- try {
- return (Window) ((Object[]) state.get())[WINDOW];
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Returns a reference to the browser object associated with the session
- * that the call came from.
- */
- static public WebBrowser browser() {
- try {
- return (WebBrowser) ((Object[]) state.get())[WEBBROWSER];
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Returns a reference to the current servlet http session object that is
- * associated with the session that the call came from.
- */
- static public HttpSession session() {
- try {
- return (HttpSession) ((Object[]) state.get())[SESSION];
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Returns a reference to the current theme name that is associated with the
- * session that the call came from.
- */
- static public String theme() {
- try {
- return (String) ((Object[]) state.get())[THEME];
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Returns an URI to the named resource from the named theme.
- *
- * @param resource
- * @param theme
- */
- static public String resource(String resource, String theme) {
- try {
- return ((ApplicationServlet) ((Object[]) state.get())[WEBADAPTERSERVLET])
- .getResourceLocation(theme, new ThemeResource(resource));
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Returns an URI to the named resource.
- *
- * @param resource
- */
- static public String resource(String resource) {
- try {
- return ((ApplicationServlet) ((Object[]) state.get())[WEBADAPTERSERVLET])
- .getResourceLocation(theme(), new ThemeResource(resource));
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Generates the JavaScript for page that performs client-side combility
- * checks.
- */
- static public boolean probeClient() {
- return (browser().performClientCheck() && !browser()
- .isClientSideChecked());
- }
-
- /**
- * Generates the JavaScript for page header that handles window refreshing,
- * opening and closing.
- *
- * Generates script that:
- * <ul>
- * <li>Requests that all windows that need repaint be reloaded</li>
- * <li>Sets the window name</li>
- * <li>Closes window if it is set to be closed </li>
- * <ul>
- *
- * @return
- */
- static public String windowScript() {
- return generateWindowScript(
- window(),
- application(),
- (ApplicationServlet) ((Object[]) state.get())[WEBADAPTERSERVLET],
- browser());
- }
-
- /**
- *
- * @param window
- * @param app
- * @param wa
- * @param browser
- * @return
- */
- static protected String generateWindowScript(Window window,
- Application app, ApplicationServlet wa, WebBrowser browser) {
-
- StringBuffer script = new StringBuffer();
- LinkedList update = new LinkedList();
-
- // Adds all the windows needto update list
- Map dirtyWindows = wa != null ? wa.getDirtyWindows(app) : null;
- if (dirtyWindows != null)
- for (Iterator i = dirtyWindows.keySet().iterator(); i.hasNext();) {
- Window w = (Window) i.next();
- if (w != window) {
- if (w instanceof FrameWindow)
- update.addFirst(w);
- else
- update.addLast(w);
- }
- }
-
- // Removes all windows that are in frames, of such frame windows that
- // will be updated anyway
- Object[] u = update.toArray();
- if (u.length > 0 && (window != null && window instanceof FrameWindow))
- u[u.length - 1] = window;
- for (int i = 0; i < u.length; i++) {
- try {
- FrameWindow w = (FrameWindow) u[i];
- LinkedList framesets = new LinkedList();
- framesets.add(w.getFrameset());
- while (!framesets.isEmpty()) {
- FrameWindow.Frameset fs = (FrameWindow.Frameset) framesets
- .removeFirst();
- for (Iterator j = fs.getFrames().iterator(); j.hasNext();) {
- FrameWindow.Frame f = (FrameWindow.Frame) j.next();
- if (f instanceof FrameWindow.Frameset)
- framesets.add(f);
- else if (f.getWindow() != null) {
- update.remove(f.getWindow());
- wa.removeDirtyWindow(app, f.getWindow());
- }
- }
- }
- } catch (ClassCastException ignored) {
- }
- }
-
- // Sets window name
- if (window != null) {
- script.append("window.name = \"" + getWindowTargetName(app, window)
- + "\";\n");
- }
-
- // Generates window updatescript
- for (Iterator i = update.iterator(); i.hasNext();) {
- Window w = (Window) i.next();
- script.append(getWindowRefreshScript(app, w, browser));
-
- wa.removeDirtyWindow(app, w);
-
- // Windows that are closed immediately are "painted" now
- if (w.getApplication() == null || !w.isVisible())
- w.requestRepaintRequests();
- }
-
- // Closes current window if it is not visible
- if (window == null || !window.isVisible())
- script.append("window.close();\n");
-
- return script.toString();
- }
-
- /**
- * Returns an unique target name for a given window name.
- *
- * @param application
- * @param window
- * the Name of the window.
- * @return An unique ID for window target.
- */
- static public String getWindowTargetName(Application application,
- Window window) {
- try {
- return "" + application.hashCode() + "_" + window.getName();
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Returns an unique target name for current window.
- *
- * @return An unique ID for window target.
- */
- static public String getWindowTargetName() {
- return getWindowTargetName(application(), window());
- }
-
- /**
- * Returns an unique target name for current window.
- *
- * @param name
- * the name of the window.
- * @return An unique ID for window target.
- */
- static public String getWindowTargetName(String name) {
- Window w = application().getWindow(name);
- if (w != null)
- return getWindowTargetName(application(), w);
- else
- return name;
- }
-
- /* Static mapping for 0 to be sunday. */
- private static int[] weekdays = new int[] { Calendar.SUNDAY,
- Calendar.MONDAY, Calendar.TUESDAY, Calendar.WEDNESDAY,
- Calendar.THURSDAY, Calendar.FRIDAY, Calendar.SATURDAY };
-
- /**
- * Returns the country and region code for current application locale.
- *
- * @return the language Country code of the current application locale.
- * @see Locale#getCountry()
- */
- static public String getLocaleCountryId() {
- try {
- Application app = (Application) ((Object[]) state.get())[APPLICATION];
- return app.getLocale().getCountry();
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Returns the language code for current application locale.
- *
- * @return the Language code for current application locale.
- * @see Locale#getLanguage()
- */
- static public String getLocaleLanguageId() {
- try {
- Application app = (Application) ((Object[]) state.get())[APPLICATION];
- return app.getLocale().getLanguage();
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Gets the name of first day of the week.
- *
- * @return
- */
- static public int getFirstDayOfWeek() {
- try {
- Application app = (Application) ((Object[]) state.get())[APPLICATION];
- Calendar cal = new GregorianCalendar(app.getLocale());
- int first = cal.getFirstDayOfWeek();
- for (int i = 0; i < 7; i++) {
- if (first == weekdays[i])
- return i;
- }
- return 0; // default to sunday
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Gets the name for week day.
- *
- * @param dayOfWeek
- * the Number of week day. 0 sunday, 1 monday, ...
- * @return the Name of week day in applications current locale.
- */
- static public String getShortWeekday(int dayOfWeek) {
- try {
- Application app = (Application) ((Object[]) state.get())[APPLICATION];
- DateFormatSymbols df = new DateFormatSymbols(app.getLocale());
- return df.getShortWeekdays()[weekdays[dayOfWeek]];
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Gets the short name for month.
- *
- * @param month
- * the Number of month. 0 is January, 1 is February, and so on.
- * @return the Name of month in applications current locale.
- */
- static public String getShortMonth(int month) {
- try {
- Application app = (Application) ((Object[]) state.get())[APPLICATION];
- DateFormatSymbols df = new DateFormatSymbols(app.getLocale());
- String monthName = df.getShortMonths()[month];
- return monthName;
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Gets the name for month.
- *
- * @param month
- * the Number of month. 0 is January, 1 is February, and so on.
- * @return the Name of month in applications current locale.
- */
- static public String getMonth(int month) {
- try {
- Application app = (Application) ((Object[]) state.get())[APPLICATION];
- DateFormatSymbols df = new DateFormatSymbols(app.getLocale());
- String monthName = df.getMonths()[month];
- return monthName;
- } catch (NullPointerException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * Gets Form Action URL for the requested window.
- *
- * <p>
- * This returns the action for the window main form. This action can be set
- * through WebApplicationContect setWindowFormAction method..
- * </p>
- *
- * @return the Form action for the current window.
- */
- static public String getFormAction() {
-
- Window win = window();
- Application app = application();
-
- return ((WebApplicationContext) app.getContext())
- .getWindowFormAction(win);
- }
-
- /**
- * Generates the links for CSS files to be included in html head.
- *
- * @return
- */
- static public String getCssLinksForHead() {
- ApplicationServlet as = (ApplicationServlet) ((Object[]) state.get())[WEBADAPTERSERVLET];
- Theme t = as.getThemeSource().getThemeByName(theme());
-
- // Also iterate parent themes
- Vector themes = new Vector();
- themes.add(t);
- while (t.getParent() != null) {
- String parentName = t.getParent();
- t = as.getThemeSource().getThemeByName(parentName);
- themes.add(t);
- }
-
- // Generates links
- StringBuffer links = new StringBuffer();
- for (int k = themes.size() - 1; k >= 0; k--) {
- Collection allFiles = ((Theme) themes.get(k)).getFileNames(
- browser(), Theme.MODE_HTML);
- for (Iterator i = allFiles.iterator(); i.hasNext();) {
- String file = (String) i.next();
- if (file.endsWith(".css")) {
- links
- .append("<LINK REL=\"STYLESHEET\" TYPE=\"text/css\" HREF=\""
- + resource(file) + "\"/>\n");
- }
- }
- }
-
- return links.toString();
- }
-
- /**
- * Generates the links for JavaScript files to be included in html head.
- *
- * @return
- */
- static public String getJavaScriptLinksForHead() {
- ApplicationServlet as = (ApplicationServlet) ((Object[]) state.get())[WEBADAPTERSERVLET];
- Theme t = as.getThemeSource().getThemeByName(theme());
-
- // Also iterate parent themes
- Vector themes = new Vector();
- themes.add(t);
- while (t.getParent() != null) {
- String parentName = t.getParent();
- t = as.getThemeSource().getThemeByName(parentName);
- themes.add(t);
- }
-
- // Generates links
- StringBuffer links = new StringBuffer();
- for (int k = themes.size() - 1; k >= 0; k--) {
- Collection allFiles = ((Theme) themes.get(k)).getFileNames(
- browser(), Theme.MODE_HTML);
- for (Iterator i = allFiles.iterator(); i.hasNext();) {
- String file = (String) i.next();
- if (file.endsWith(".js")) {
- links.append("<SCRIPT LANGUAGE=\"Javascript\" SRC=\""
- + resource(file) + "\"></SCRIPT>\n");
- }
- }
- }
-
- return links.toString();
- }
-
- /**
- * Generates the JavaScript for updating given window.
- *
- * @param application
- * @param window
- * @param browser
- * @return
- */
- static protected String getWindowRefreshScript(Application application,
- Window window, WebBrowser browser) {
-
- if (application == null)
- return "";
-
- if (window == null)
- return "";
-
- if (window == null)
- return "";
-
- // If window is closed or hidden
- if (window.getApplication() == null || !window.isVisible())
- return "win = window.open(\"\",\""
- + getWindowTargetName(application, window) + "\");\n "
- + "if (win != null) { win.close(); }\n";
-
- String url = window.getURL().toString();
-
- String features = "dependent=yes,";
- int width = window.getWidth();
- int height = window.getHeight();
- if (width >= 0)
- features += "width=" + width;
- if (height >= 0)
- features += ((features.length() > 0) ? "," : "") + "height="
- + height;
- switch (window.getBorder()) {
- case Window.BORDER_NONE:
- features += ((features.length() > 0) ? "," : "")
- + "toolbar=0,location=0,menubar=0,status=0,resizable=1,scrollbars="
- + (window.isScrollable() ? "1" : "0");
- break;
- case Window.BORDER_MINIMAL:
- features += ((features.length() > 0) ? "," : "")
- + "toolbar=1,location=0,menubar=0,status=1,resizable=1,scrollbars="
- + (window.isScrollable() ? "1" : "0");
- break;
- case Window.BORDER_DEFAULT:
- features += ((features.length() > 0) ? "," : "")
- + "toolbar=1,location=1,menubar=1,status=1,resizable=1,scrollbars="
- + (window.isScrollable() ? "1" : "0");
- break;
- }
-
- String script = "win = window.open(\"\",\""
- + getWindowTargetName(application, window) + "\",\"" + features
- + "\");\n" + "if (win != null) {" + "var form = null;";
-
- if (browser != null
- && (browser.getJavaScriptVersion().supports(
- WebBrowser.JAVASCRIPT_1_5) || browser
- .getJavaScriptVersion()
- .supports(WebBrowser.JSCRIPT_1_0))) {
- script += "try { form = win.document.forms[\"itmill\"]; if (typeof form == 'undefined') form = win.document.forms[\"millstone\"];"
- + "} catch (e) { form = null;}";
- } else {
- script += "form = win.document.forms[\"itmill\"]; if (typeof form == 'undefined') form = win.document.forms[\"millstone\"];";
- }
-
- script += "if (form != null) {" + "form.submit();"
- + "} else {win.location.href = \"" + url + "\";}}";
-
- return script;
- }
-}