diff options
Diffstat (limited to 'src/com/itmill/toolkit/terminal/web/DebugWindow.java')
-rw-r--r-- | src/com/itmill/toolkit/terminal/web/DebugWindow.java | 446 |
1 files changed, 0 insertions, 446 deletions
diff --git a/src/com/itmill/toolkit/terminal/web/DebugWindow.java b/src/com/itmill/toolkit/terminal/web/DebugWindow.java deleted file mode 100644 index 42d9f11fe5..0000000000 --- a/src/com/itmill/toolkit/terminal/web/DebugWindow.java +++ /dev/null @@ -1,446 +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 java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; - -import javax.servlet.http.HttpSession; - -import com.itmill.toolkit.Application; -import com.itmill.toolkit.data.util.BeanItem; -import com.itmill.toolkit.data.util.MethodProperty; -import com.itmill.toolkit.terminal.FileResource; -import com.itmill.toolkit.ui.*; - -/** - * This class provides a debugging window where one may view the UIDL of the - * current window, or in a tabset the UIDL of an active frameset. - * - * It is primarily intended for creating and debugging themes. - * - * @author IT Mill Ltd. - * @version - * @VERSION@ - * @since 3.0 - */ -public class DebugWindow extends Window { - - protected static String WINDOW_NAME = "debug"; - - private Application debuggedApplication; - - private HashMap rawUIDL = new HashMap(); - - private ApplicationServlet servlet; - - private HttpSession session; - - private TabSheet tabs = new TabSheet(); - - private Select themeSelector; - - private Label applicationInfo = new Label("", Label.CONTENT_XHTML); - - /** - * Creates a new debug window for an application. - * - * @param debuggedApplication - * the Application to be debugged. - * @param session - * the Session to be debugged. - * @param servlet - * the Servlet to be debugged. - */ - protected DebugWindow(Application debuggedApplication, HttpSession session, - ApplicationServlet servlet) { - - super("Debug window"); - setName(WINDOW_NAME); - setServlet(servlet); - setSession(session); - setBorder(Window.BORDER_NONE); - - // Creates control buttons - OrderedLayout controls = new OrderedLayout( - OrderedLayout.ORIENTATION_HORIZONTAL); - controls.addComponent(new Button("Restart Application", this, - "restartApplication")); - controls - .addComponent(new Button("Clear Session", this, "clearSession")); - Collection themes = servlet.getThemeSource().getThemes(); - Collection names = new LinkedList(); - for (Iterator i = themes.iterator(); i.hasNext();) { - names.add(((Theme) i.next()).getName()); - } - - // Creates theme selector - themeSelector = new Select("Application Theme", names); - themeSelector.setWriteThrough(false); - - // Terminal type editor - Label terminal = new Label("<h2>Terminal Information</h2> ", - Label.CONTENT_XHTML); - Form browser = new Form(); - browser.setItemDataSource(new BeanItem(WebBrowserProbe - .getTerminalType(session))); - browser.removeItemProperty("class"); - browser.replaceWithSelect("javaScriptVersion", - WebBrowser.JAVASCRIPT_VERSIONS, WebBrowser.JAVASCRIPT_VERSIONS); - browser.replaceWithSelect("markupVersion", WebBrowser.MARKUP_VERSIONS, - WebBrowser.MARKUP_VERSIONS); - browser.setWriteThrough(false); - Button setbrowser = new Button("Set terminal information", browser, - "commit"); - setbrowser.dependsOn(browser); - - // Arrange the UI in tabsheet - TabSheet infoTabs = new TabSheet(); - addComponent(infoTabs); - - OrderedLayout appInfo = new OrderedLayout(); - infoTabs.addTab(appInfo, "Application", null); - appInfo.addComponent(applicationInfo); - appInfo.addComponent(controls); - appInfo.addComponent(themeSelector); - appInfo.addComponent(new Button("Change theme", this, "commitTheme")); - - OrderedLayout winInfo = new OrderedLayout(); - infoTabs.addTab(winInfo, "Windows", null); - winInfo.addComponent(tabs); - winInfo.addComponent(new Button("Save UIDL", this, "saveUIDL")); - - OrderedLayout termInfo = new OrderedLayout(); - infoTabs.addTab(termInfo, "Terminal", null); - termInfo.addComponent(terminal); - termInfo.addComponent(browser); - termInfo.addComponent(setbrowser); - - // Sets the debugged application - setDebuggedApplication(debuggedApplication); - - } - - /** - * - * @param caption - * @param keys - * @param names - * @return - */ - protected Select createSelect(String caption, Object[] keys, String[] names) { - Select s = new Select(caption); - s.addContainerProperty("name", String.class, ""); - for (int i = 0; i < keys.length; i++) { - s.addItem(keys[i]).getItemProperty("name").setValue(names[i]); - } - s.setItemCaptionPropertyId("name"); - return s; - } - - /** - * Saves the UIDL. - */ - public void saveUIDL() { - - synchronized (rawUIDL) { - - String currentUIDL = (String) rawUIDL.get(tabs.getSelectedTab()); - - if (currentUIDL == null) - return; - - DateFormat df = new SimpleDateFormat("yyyyMMdd-HHmmss"); - File file = new File("/uidl-debug" - + df.format(new Date(System.currentTimeMillis())) + ".xml"); - try { - BufferedWriter out = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(file))); - out.write(currentUIDL); - out.close(); - - // Open the UIDL also - open(new FileResource(file, this.getApplication())); - Log.info("UIDL written to file " + file); - } catch (FileNotFoundException e) { - Log.info("Failed to write debug to " + file + ": " + e); - } catch (IOException e) { - Log.info("Failed to write debug to " + file + ": " + e); - } - } - } - - /** - * Commits the theme. - * - */ - public void commitTheme() { - themeSelector.commit(); - } - - /** - * Clears the session. - */ - public void clearSession() { - session.invalidate(); - } - - /** - * Restarts the Application. - * - */ - public void restartApplication() { - if (debuggedApplication != null) - debuggedApplication.close(); - } - - /** - * - * @param window - * @param uidl - */ - protected void setWindowUIDL(Window window, String uidl) { - String caption = "UIDL:" + window.getName(); - synchronized (tabs) { - for (Iterator i = tabs.getComponentIterator(); i.hasNext();) { - Component c = (Component) i.next(); - if (tabs.getTabCaption(c).equals(caption)) { - ((Label) c).setValue(getHTMLFormattedUIDL(caption, uidl)); - ((Label) c).setContentMode(Label.CONTENT_XHTML); - rawUIDL.put(c, uidl); - caption = null; - } - } - - // Add new tab - if (caption != null) { - Label l = new Label(getHTMLFormattedUIDL(caption, uidl)); - l.setContentMode(Label.CONTENT_XHTML); - rawUIDL.put(l, uidl); - tabs.addTab(l, caption, null); - } - } - } - - /** - * - * @param caption - * @param uidl - * @return - */ - protected String getHTMLFormattedUIDL(String caption, String uidl) { - StringBuffer sb = new StringBuffer(); - - // Print formatted UIDL with errors embedded - // Perl5Util util = new Perl5Util(); - - int row = 0; - int prev = 0; - int index = 0; - boolean lastLineWasEmpty = false; - - sb - .append("<TABLE WIDTH=\"100%\" STYLE=\"border-left: 1px solid black; " - + "border-right: 1px solid black; border-bottom: " - + "1px solid black; border-top: 1px solid black\"" - + " cellpadding=\"0\" cellspacing=\"0\" BORDER=\"0\">"); - - if (caption != null) - sb.append("<TR><TH BGCOLOR=\"#ddddff\" COLSPAN=\"2\">" - + "<FONT SIZE=\"+2\">" + caption + "</FONT></TH></TR>\n"); - - boolean unfinished = true; - while (unfinished) { - row++; - - // Get individual line - index = uidl.indexOf('\n', prev); - String line; - if (index < 0) { - unfinished = false; - line = uidl.substring(prev); - } else { - line = uidl.substring(prev, index); - prev = index + 1; - } - - // Escape the XML - line = WebPaintTarget.escapeXML(line); - - // Code beautification : Comment lines - line = replaceAll(line, "<!--", - "<SPAN STYLE = \"color: #00dd00\"><!--"); - line = replaceAll(line, "-->", "--></SPAN>"); - - while (line.length() > 0 && line.charAt(0) == ' ') { - line = line.substring(1); - } - boolean isEmpty = (line.length() == 0 || line.equals("\r")); - line = " " + line; - - if (!(isEmpty && lastLineWasEmpty)) - sb - .append("<TR" - + ((row % 10) > 4 ? " BGCOLOR=\"#eeeeff\"" : "") - + ">" - + "<TD VALIGN=\"top\" ALIGN=\"rigth\" STYLE=\"border-right: 1px solid gray\"> " - + String.valueOf(row) + " </TD><TD>" + line - + "</TD></TR>\n"); - - lastLineWasEmpty = isEmpty; - - } - - sb.append("</TABLE>\n"); - - return sb.toString(); - } - - /** - * Replaces the characters in a substring of this <code>String</code> with - * characters in the specified <code>String</code>. The substring begins - * at the specified <code>start</code> and extends to the character at - * index <code>end - 1</code> or to the end of the <code>String</code> - * if no such character exists. - * <p> - * First the characters in the substring are removed and then the specified - * <code>String</code> is inserted at <code>start</code>. (The - * <code>StringBuffer</code> will be lengthened to accommodate the - * specified String if necessary.) - * </p> - * <p> - * NOTE: This operation is slow. - * </p> - * - * @param text - * @param start - * the beginning index, inclusive. - * @param end - * the ending index, exclusive. - * @param str - * the String that will replace previous contents. - * @return This string buffer. - */ - protected static String replace(String text, int start, int end, String str) { - return new StringBuffer(text).replace(start, end, str).toString(); - } - - /** - * - * @param text - * @param oldStr - * @param newStr - * @return - */ - protected static String replaceAll(String text, String oldStr, String newStr) { - StringBuffer sb = new StringBuffer(text); - - int newStrLen = newStr.length(); - int oldStrLen = oldStr.length(); - if (oldStrLen <= 0) - return text; - - int i = 0; - while (i <= sb.length() - oldStrLen) { - if (sb.substring(i, i + oldStrLen).equals(oldStr)) { - sb.replace(i, i + oldStrLen, newStr); - i += newStrLen; - } else { - i++; - } - } - return sb.toString(); - } - - /** - * Sets the application. - * - * @param application - * the application to set. - */ - protected void setDebuggedApplication(Application application) { - this.debuggedApplication = application; - if (application != null) { - applicationInfo.setValue("<h2>Application Class</h2> " - + application.getClass().getName()); - themeSelector.setPropertyDataSource(new MethodProperty(application, - "theme")); - } - } - - /** - * Returns the servlet. - * - * @return the WebAdapterServlet. - */ - protected ApplicationServlet getServlet() { - return servlet; - } - - /** - * Returns the session. - * - * @return the HttpSession. - */ - protected HttpSession getSession() { - return session; - } - - /** - * Sets the servlet. - * - * @param servlet - * the servlet to set. - */ - protected void setServlet(ApplicationServlet servlet) { - this.servlet = servlet; - } - - /** - * Sets the session. - * - * @param session - * the session to set. - */ - protected void setSession(HttpSession session) { - this.session = session; - } - -} |