Example usage for org.apache.wicket.protocol.http.request WebClientInfo getProperties

List of usage examples for org.apache.wicket.protocol.http.request WebClientInfo getProperties

Introduction

In this page you can find the example usage for org.apache.wicket.protocol.http.request WebClientInfo getProperties.

Prototype

public final ClientProperties getProperties() 

Source Link

Document

Gets the client properties object.

Usage

From source file:at.molindo.wicketutils.utils.WicketUtils.java

License:Apache License

/**
 * @return true if cookies are disabled, false if unknown
 *///from   w  w w  .  j a  v  a2s . co m
public static boolean isCookiesDisabled() {
    final WebClientInfo info = getClientInfo();
    return info == null || info.getProperties() == null ? false : !info.getProperties().isCookiesEnabled();

}

From source file:at.molindo.wicketutils.utils.WicketUtils.java

License:Apache License

public static String getClientInfoString() {
    final WebClientInfo info = getClientInfo();
    return info == null ? null : info.getUserAgent() + " (" + info.getProperties().getRemoteAddress() + ")";
}

From source file:com.przemo.projectmanagementweb.controls.LoginPanel.java

public LoginPanel(String id) {
    super(id);/* ww  w.  ja  va 2  s . co m*/
    Form form = new Form("loginPanel") {
        @Override
        protected void onSubmit() {
            WebClientInfo info = (WebClientInfo) Session.get().getClientInfo();
            if (loginService.login(username, password, info.getProperties().getRemoteAddress(),
                    info.getUserAgent())) {
                setResponsePage(SprintsListPage.class);
            }
        }
    };
    form.add(new TextField("username", new PropertyModel(this, "username")));
    form.add(new PasswordTextField("password", new PropertyModel<>(this, "password")));
    add(form);
}

From source file:com.servoy.j2db.server.headlessclient.dataui.WebBaseButton.java

License:Open Source License

@SuppressWarnings("nls")
protected static String instrumentBodyText(CharSequence bodyText, int halign, int valign,
        boolean hasHtmlOrImage, Border border, Insets margin, String cssid, char mnemonic, String elementID,
        String imgURL, Dimension size, boolean isButton, Cursor bodyCursor, boolean isAnchored, int anchors,
        String cssClass, int rotation, boolean isEnabled, ComponentTag openTag) {
    boolean isElementAnchored = anchors != IAnchorConstants.DEFAULT;
    Insets padding = null;/*from  w  ww .  j a v  a 2  s. co m*/
    Insets borderMargin = null;
    boolean usePadding = false;
    if (border == null) {
        padding = margin;
    }
    // empty border gets handled as margin
    else if (border instanceof EmptyBorder && !(border instanceof MatteBorder)) {
        usePadding = true;
        padding = ComponentFactoryHelper.getBorderInsetsForNoComponent(border);
    }
    // empty border inside compound border gets handled as margin
    else if (border instanceof CompoundBorder) {
        Border inside = ((CompoundBorder) border).getInsideBorder();
        if (inside instanceof EmptyBorder && !(border instanceof MatteBorder)) {
            usePadding = true;
            padding = ComponentFactoryHelper.getBorderInsetsForNoComponent(inside);
        }
        Border outside = ((CompoundBorder) border).getOutsideBorder();
        if (outside != null) {
            borderMargin = ComponentFactoryHelper.getBorderInsetsForNoComponent(outside);
        }
    } else if (!(border instanceof BevelBorder) && !(border instanceof EtchedBorder)) {
        if (border instanceof TitledBorder) {
            usePadding = true;
            padding = new Insets(5, 7, 5, 7); // margin + border + padding, see beneath
            padding.top += ComponentFactoryHelper.getTitledBorderHeight(border); // add the legend height
        } else {
            padding = ComponentFactoryHelper.getBorderInsetsForNoComponent(border);
        }
    }

    // In order to vertically align the text inside the <button>, we wrap the text inside a <span>, and we absolutely
    // position the <span> in the <button>. However, for centering vertically we drop this absolute positioning and
    // rely on the fact that by default the <button> tag vertically centers its content.
    StringBuffer instrumentedBodyText = new StringBuffer();
    String onFocus = "onfocus=\"this.parentNode.focus()\"";
    if (openTag.getAttribute("onfocus") != null && openTag.getAttribute("onfocus").length() > 0
            && openTag.getName().equals("label"))
        onFocus = "onclick=" + "\"" + openTag.getAttribute("onfocus").replaceFirst("this", "this.parentNode")
                + "\"";
    // the latest browsers (except for IE), do not trigger an onfocus neither on the span nor on the parent label element
    // as a workaround, an onclick is added in the span of label elements that does what the parent onfocus does
    instrumentedBodyText.append("<span " + onFocus + " style='" + //$NON-NLS-1$
            (bodyCursor == null ? ""
                    : "cursor: " + (bodyCursor.getType() == Cursor.HAND_CURSOR ? "pointer" : "default") + "; ")
            + "display: block;");
    int top = 0;
    int bottom = 0;
    int left = 0;
    int right = 0;
    if (padding != null && usePadding) {
        top = padding.top;
        bottom = padding.bottom;
        left = padding.left;
        right = padding.right;
    }

    if (rotation == 0 || size.width >= size.height) {
        // Horizontal alignment and anchoring.
        instrumentedBodyText.append(" left: " + left + "px;"); //$NON-NLS-1$ //$NON-NLS-2$
        instrumentedBodyText.append(" right: " + right + "px;"); //$NON-NLS-1$ //$NON-NLS-2$

        // Vertical alignment and anchoring.
        if (cssid == null) {
            if (valign == ISupportTextSetup.TOP)
                instrumentedBodyText.append(" top: " + top + "px;"); //$NON-NLS-1$ //$NON-NLS-2$
            else if (valign == ISupportTextSetup.BOTTOM)
                instrumentedBodyText.append(" bottom: " + bottom + "px;"); //$NON-NLS-1$ //$NON-NLS-2$
        }

        // Full height.
        if (hasHtmlOrImage && valign != ISupportTextSetup.CENTER && cssid == null)
            instrumentedBodyText.append(" height: 100%;"); //$NON-NLS-1$
        else if ((cssid != null) || (valign != ISupportTextSetup.CENTER))
            instrumentedBodyText.append(" position: absolute;"); //$NON-NLS-1$
        else if (!isButton && !hasHtmlOrImage && imgURL == null) {
            int innerHeight = size.height;
            if (padding != null)
                innerHeight -= padding.top + padding.bottom;
            if (borderMargin != null)
                innerHeight -= borderMargin.top + borderMargin.bottom;
            instrumentedBodyText.append("height: " + innerHeight + "px;line-height: " + innerHeight + "px;");
        }

        if (isAnchored) {
            instrumentedBodyText.append(" position: relative;"); //$NON-NLS-1$
        }
    } else {
        // this is a special case, invert width and height so that text is fully visible when rotated
        int innerWidth = size.height;
        if (padding != null)
            innerWidth -= padding.top + padding.bottom;
        if (borderMargin != null)
            innerWidth -= borderMargin.top + borderMargin.bottom;

        int innerHeight = size.width;
        if (padding != null)
            innerHeight -= padding.left + padding.right;
        if (borderMargin != null)
            innerHeight -= borderMargin.left + borderMargin.right;

        int rotationOffset = (innerWidth - innerHeight) / 2;
        instrumentedBodyText.append(" left: -" + rotationOffset + "px;"); //$NON-NLS-1$ //$NON-NLS-2$
        instrumentedBodyText.append(" top: " + rotationOffset + "px;"); //$NON-NLS-1$ //$NON-NLS-2$
        instrumentedBodyText.append(" position: absolute;");
        instrumentedBodyText.append(" height: " + innerHeight + "px;");
        instrumentedBodyText.append(" width: " + innerWidth + "px;");
        instrumentedBodyText.append("line-height: " + innerHeight + "px;");
    }

    if (!hasHtmlOrImage)
        instrumentedBodyText.append(" overflow: hidden;");

    if (halign == ISupportTextSetup.LEFT)
        instrumentedBodyText.append(" text-align: left;"); //$NON-NLS-1$
    else if (halign == ISupportTextSetup.RIGHT)
        instrumentedBodyText.append(" text-align: right;"); //$NON-NLS-1$
    else
        instrumentedBodyText.append(" text-align: center;"); //$NON-NLS-1$

    if (rotation > 0) {
        String rotationCss = "rotate(" + rotation + "deg)";
        instrumentedBodyText.append(" -ms-transform: " + rotationCss + ";" + " -moz-transform: " + rotationCss //$NON-NLS-1$
                + ";" + " -webkit-transform: " + rotationCss + ";" + " -o-transform: " + rotationCss + ";" + " transform: " + rotationCss + ";");
    }

    if (cssid != null && cssClass == null)
        instrumentedBodyText.append(" visibility: hidden;"); //$NON-NLS-1$

    instrumentedBodyText.append("'"); //$NON-NLS-1$

    if (cssClass != null) {
        instrumentedBodyText.append(" class='"); //$NON-NLS-1$
        instrumentedBodyText.append(cssClass);
        instrumentedBodyText.append("'"); //$NON-NLS-1$
    }

    if (cssid != null) {
        instrumentedBodyText.append(" id='"); //$NON-NLS-1$
        instrumentedBodyText.append(cssid);
        instrumentedBodyText.append("'"); //$NON-NLS-1$
    }

    instrumentedBodyText.append(">"); //$NON-NLS-1$

    //in ie<8 the filter:alpha(opacity=50) applied on the <button> element is not applied to the <img> element
    String IE8filterFIx = "";
    if (!isEnabled) {
        WebClientInfo webClientInfo = new WebClientInfo((WebRequestCycle) RequestCycle.get());
        ClientProperties cp = webClientInfo.getProperties();
        if (cp.isBrowserInternetExplorer() && cp.getBrowserVersionMajor() != -1
                && cp.getBrowserVersionMajor() < 9) {
            IE8filterFIx = "filter:alpha(opacity=50);";
        }
    }
    if (!Strings.isEmpty(bodyText)) {
        CharSequence bodyTextValue = bodyText;
        if (mnemonic > 0 && !hasHtmlOrImage) {
            StringBuffer sbBodyText = new StringBuffer(bodyTextValue);
            int mnemonicIdx = sbBodyText.indexOf(Character.toString(mnemonic));
            if (mnemonicIdx != -1) {
                sbBodyText.insert(mnemonicIdx + 1, "</u>");
                sbBodyText.insert(mnemonicIdx, "<u>");
                bodyTextValue = sbBodyText.toString();
            }
        }

        if (imgURL != null) {

            String onLoadCall = isElementAnchored
                    ? " onload=\"Servoy.Utils.setLabelChildHeight('" + elementID + "', " + valign + ");\""
                    : "";
            StringBuffer sb = new StringBuffer("<img id=\"").append(elementID).append("_img")
                    .append("\" src=\"").append(imgURL)
                    .append("\" style=\"vertical-align: middle;" + IE8filterFIx
                            + (isElementAnchored && (cssClass == null) ? "visibility:hidden;" : "") + "\"")
                    .append(onLoadCall).append("/>");
            sb.append("<span style=\"vertical-align:middle;\">&nbsp;").append(bodyTextValue);
            bodyTextValue = sb.toString();
        }

        instrumentedBodyText.append(bodyTextValue);

        if (imgURL != null) {
            instrumentedBodyText.append("</span>");
        }
    } else if (imgURL != null) {
        instrumentedBodyText.append("<img id=\"");
        instrumentedBodyText.append(elementID).append("_img\"");
        instrumentedBodyText.append("style=\""
                + (isElementAnchored && (cssClass == null) ? " visibility:hidden;" : "") + IE8filterFIx + "\""); // hide it until setLabelChildHeight is calculated
        instrumentedBodyText.append(" src=\"");
        instrumentedBodyText.append(imgURL);
        String onLoadCall = isElementAnchored
                ? " onload=\"Servoy.Utils.setLabelChildHeight('" + elementID + "', " + valign + ");\""
                : "";
        instrumentedBodyText.append("\" align=\"middle\"").append(onLoadCall).append("/>");
    }

    instrumentedBodyText.append("</span>"); //$NON-NLS-1$

    if (border instanceof TitledBorder) {
        instrumentedBodyText = new StringBuffer(getTitledBorderOpenMarkup((TitledBorder) border)
                + instrumentedBodyText.toString() + getTitledBorderCloseMarkup());
    }
    if (border instanceof CompoundBorder) {
        Border outside = ((CompoundBorder) border).getOutsideBorder();
        if (outside != null && outside instanceof TitledBorder) {
            instrumentedBodyText = new StringBuffer(getTitledBorderOpenMarkup((TitledBorder) outside)
                    + instrumentedBodyText.toString() + getTitledBorderCloseMarkup());
        }
    }
    return instrumentedBodyText.toString();
}

From source file:com.servoy.j2db.server.headlessclient.ServoyRequestCycle.java

License:Open Source License

/**
 * @see org.apache.wicket.protocol.http.WebRequestCycle#newClientInfo()
 *//*from   w  w  w  . j  ava  2 s .co m*/
@Override
protected ClientInfo newClientInfo() {
    // We will always do a redirect here. The servoy browser info has to make one.
    WebClientInfo webClientInfo = new WebClientInfo(this);
    ClientProperties cp = webClientInfo.getProperties();
    if (cp.isBrowserInternetExplorer() || cp.isBrowserMozilla() || cp.isBrowserKonqueror()
            || cp.isBrowserOpera() || cp.isBrowserSafari() || cp.isBrowserChrome()) {
        if (cp.isBrowserInternetExplorer() && cp.getBrowserVersionMajor() != -1
                && cp.getBrowserVersionMajor() < 7) {
            // IE6 is no longer supported when anchoring is enabled.
            boolean enableAnchoring = Utils.getAsBoolean(Settings.getInstance()
                    .getProperty("servoy.webclient.enableAnchors", Boolean.TRUE.toString())); //$NON-NLS-1$ 
            if (enableAnchoring) {
                throw new RestartResponseException(new UnsupportedBrowserPage("Internet Explorer 6")); //$NON-NLS-1$
            }
        }
        Page page = getResponsePage();
        if (page != null) {
            throw new RestartResponseAtInterceptPageException(
                    new ServoyBrowserInfoPage(urlFor(page).toString().replaceAll("../", ""))); //$NON-NLS-1$ //$NON-NLS-2$
        } else {
            throw new RestartResponseAtInterceptPageException(new ServoyBrowserInfoPage(getRequest().getURL()));
        }
    }
    return webClientInfo;
}

From source file:com.servoy.j2db.server.headlessclient.WebClient.java

License:Open Source License

@SuppressWarnings("nls")
@Override//from   ww w . jav a  2  s  . c  o m
public URL getServerURL() {
    if (Session.exists()) {
        Session webClientSession = Session.get();
        if (webClientSession != null) {
            WebClientInfo clientInfo = (WebClientInfo) webClientSession.getClientInfo();
            if (clientInfo != null && clientInfo.getProperties() != null
                    && clientInfo.getProperties().getHostname() != null) {
                String hostname = clientInfo.getProperties().getHostname();
                try {
                    if (hostname.startsWith("http")) {
                        // first try to find the wicket servlet
                        int index = hostname.indexOf("/servoy-webclient", 8); //8 is to skip http:// or https://
                        // if that fails then just try to find the first /
                        if (index == -1)
                            index = hostname.indexOf('/', 8); //8 is to skip http:// or https://
                        if (index == -1) {
                            return new URL(hostname);
                        } else {
                            return new URL(hostname.substring(0, index));
                        }
                    } else {
                        return new URL("http", hostname, "");
                    }
                } catch (MalformedURLException e) {
                    Debug.error(e);
                }
            }
        }
    }
    return super.getServerURL();
}

From source file:com.servoy.j2db.server.headlessclient.WebClient.java

License:Open Source License

@Override
@SuppressWarnings("nls")
public String getClientOSName() {
    if (Session.exists()) {
        Session webClientSession = Session.get();
        if (webClientSession != null) {
            WebClientInfo clientInfo = (WebClientInfo) webClientSession.getClientInfo();
            if (clientInfo != null && clientInfo.getProperties() != null) {
                String userAgent = clientInfo.getUserAgent();
                if (userAgent != null) {
                    if (userAgent.indexOf("NT 6.1") != -1)
                        return "Windows 7";
                    if (userAgent.indexOf("NT 6.0") != -1)
                        return "Windows Vista";
                    if (userAgent.indexOf("NT 5.1") != -1 || userAgent.indexOf("Windows XP") != -1)
                        return "Windows XP";
                    if (userAgent.indexOf("Linux") != -1)
                        return "Linux";
                    if (userAgent.indexOf("Mac") != -1)
                        return "Mac OS";
                }/*from   w  w  w. j  av  a2s .  c  om*/
                return clientInfo.getProperties().getNavigatorPlatform();
            }
        }
    }
    return System.getProperty("os.name");
}

From source file:com.servoy.j2db.server.headlessclient.WebClient.java

License:Open Source License

@Override
public int getClientPlatform() {
    if (Session.exists()) {
        Session webClientSession = Session.get();
        if (webClientSession != null) {
            try {
                WebClientInfo clientInfo = (WebClientInfo) webClientSession.getClientInfo();
                if (clientInfo != null) {
                    ClientProperties properties = clientInfo.getProperties();
                    if (properties != null) {
                        return Utils.getPlatform(properties.getNavigatorPlatform());
                    }//  w w w. ja v  a 2s . c  o m
                }
            } catch (Exception e) {
                Debug.trace(
                        "trying to get the client platform of a session, when destroying the client in a none request thread",
                        e);
            }
        }
    }
    return super.getClientPlatform();
}

From source file:de.inren.frontend.application.InRenApplication.java

License:Apache License

@Override
public void init() {
    super.init();

    /* Spring injection. */
    this.getComponentInstantiationListeners().add(new SpringComponentInjector(this));

    /* Performance measurement */
    if (false) {//w  w w.j  a  va 2 s . c  om
        getComponentInstantiationListeners().add(new RenderPerformanceListener());
    }

    configureBootstrap();

    initializeServices();

    getSecuritySettings().setAuthorizationStrategy(new MetaDataRoleAuthorizationStrategy(this));

    initializeFailSafeLocalize();
    new AnnotatedMountScanner().scanPackage("de.inren").mount(this);

    mountResource("/" + PictureResource.PICTURE_RESOURCE + "/${" + PictureResource.ID + "}/${"
            + PictureResource.SIZE + "}", PictureResource.asReference());

    // Access to Images by url
    // mount(createImageURIRequestTargetUrlCodingStrategy());
    // mount(createLayoutURIRequestTargetUrlCodingStrategy());
    // mount(createThumbnailURIRequestTargetUrlCodingStrategy());

    // Render hints in html to navigate from firebug to eclipse
    // WicketSource.configure(this);

    // TODO gehrt ins codeflower package. => Init fr Wicket
    // module/packages machen.
    final IPackageResourceGuard packageResourceGuard = getResourceSettings().getPackageResourceGuard();
    if (packageResourceGuard instanceof SecurePackageResourceGuard) {
        ((SecurePackageResourceGuard) packageResourceGuard).addPattern("+*.json");
        ((SecurePackageResourceGuard) packageResourceGuard).addPattern("+**.ttf");
    }

    /** for ajax progressbar on upload */
    getApplicationSettings().setUploadProgressUpdatesEnabled(true);

    // I don't like messy html code.
    this.getMarkupSettings().setStripWicketTags(true);
    this.getMarkupSettings().setStripComments(true);

    // This application can be reached from internet, but you must know the
    // right port.
    // So I like to know who else besides me tries to connect.

    getRequestCycleListeners().add(new AbstractRequestCycleListener() {
        @Override
        public void onBeginRequest(RequestCycle cycle) {
            WebClientInfo ci = new WebClientInfo(cycle);
            log.debug("Request info: " + ci.getProperties().getRemoteAddress() + ", "
                    + ("".equals(DnsUtil.lookup(ci.getProperties().getRemoteAddress())) ? ""
                            : DnsUtil.lookup(ci.getProperties().getRemoteAddress()) + ", ")
                    + (cycle.getRequest().getUrl().getPath() == null
                            || "".equals(cycle.getRequest().getUrl().getPath()) ? ""
                                    : cycle.getRequest().getUrl().getPath() + ", ")
                    + ci.getUserAgent());
        }
    });

    getSecuritySettings().setAuthorizationStrategy(new InRenAuthorizationStrategy());

    // MetaDataRoleAuthorizationStrategy.authorize(AdminOnlyPage.class,
    // Roles.ADMIN);
    // mountPage("admin", AdminOnlyPage.class);

    // TODO das funzzt nur auf Class

    // LIST<COMPONENTACCESS> COMPONENTACCESS =
    // COMPONENTACCESSSERVICE.GETCOMPONENTACCESSLIST();
    // FOR (COMPONENTACCESS CA : COMPONENTACCESS) {
    // COLLECTION<ROLE> ROLES = CA.GETGRANTEDROLES();
    // STRINGBUFFER ROLESTRING = NEW STRINGBUFFER();
    // FOR (ROLE ROLE : ROLES) {
    // ROLESTRING.APPEND(ROLE);
    // }
    // METADATAROLEAUTHORIZATIONSTRATEGY.AUTHORIZE(CA.GETNAME(),
    // ROLESTRING.TOSTRING());
    // }
}

From source file:de.tudarmstadt.ukp.clarin.webanno.webapp.home.page.ApplicationPageBase.java

License:Apache License

@SuppressWarnings({ "serial" })
private void commonInit() {
    //        getSession().setLocale(Locale.ENGLISH);

    logoutPanel = new LogoutPanel("logoutPanel");
    feedbackPanel = new FeedbackPanel("feedbackPanel");
    feedbackPanel.setOutputMarkupId(true);
    feedbackPanel.add(new AttributeModifier("class", "error"));
    feedbackPanel.setFilter(new IFeedbackMessageFilter() {
        @Override/*from  ww  w  . j av  a 2s . c  om*/
        public boolean accept(FeedbackMessage aMessage) {
            Authentication auth = SecurityContextHolder.getContext().getAuthentication();
            String username = auth != null ? auth.getName() : "SYSTEM";
            if (aMessage.isFatal()) {
                LOG.fatal(username + ": " + aMessage.getMessage());
            } else if (aMessage.isError()) {
                LOG.error(username + ": " + aMessage.getMessage());
            } else if (aMessage.isWarning()) {
                LOG.warn(username + ": " + aMessage.getMessage());
            } else if (aMessage.isInfo()) {
                LOG.info(username + ": " + aMessage.getMessage());
            } else if (aMessage.isDebug()) {
                LOG.debug(username + ": " + aMessage.getMessage());
            }
            return true;
        }
    });

    versionLabel = new Label("version", SettingsUtil.getVersionString());

    embeddedDbWarning = new Label("embeddedDbWarning", "USE THIS INSTALLATION FOR TESTING ONLY -- "
            + "AN EMBEDDED DATABASE IS NOT RECOMMENDED FOR PRODUCTION USE");
    embeddedDbWarning.setVisible(false);
    try {
        String driver = repository.getDatabaseDriverName();
        embeddedDbWarning.setVisible(StringUtils.contains(driver.toLowerCase(Locale.US), "hsql"));
    } catch (Throwable e) {
        LOG.warn("Unable to determine which database is being used", e);
    }

    // Override warning about embedded database.
    Properties settings = SettingsUtil.getSettings();
    if ("false".equalsIgnoreCase(settings.getProperty("warnings.embeddedDatabase"))) {
        embeddedDbWarning.setVisible(false);
    }

    // Display a warning when using an unsupported browser
    RequestCycle requestCycle = RequestCycle.get();
    WebClientInfo clientInfo;
    if (Session.exists()) {
        WebSession session = WebSession.get();
        clientInfo = session.getClientInfo();
    } else {
        clientInfo = new WebClientInfo(requestCycle);
    }
    ClientProperties clientProperties = clientInfo.getProperties();

    browserWarning = new Label("browserWarning",
            "THIS BROWSER IS NOT SUPPORTED -- " + "PLEASE USE CHROME OR SAFARI");
    browserWarning.setVisible(!clientProperties.isBrowserSafari() && !clientProperties.isBrowserChrome());

    // Override warning about browser.
    if ("false".equalsIgnoreCase(settings.getProperty("warnings.unsupportedBrowser"))) {
        browserWarning.setVisible(false);
    }

    boolean helpAvailable;
    try {
        Application.get().getResourceSettings().getLocalizer().getString("page.help.link", this);
        Application.get().getResourceSettings().getLocalizer().getString("page.help", this);
        helpAvailable = true;
    } catch (MissingResourceException e) {
        helpAvailable = false;
    }

    add(helpLink = new ExternalLink("helpLink", new ResourceModel("page.help.link", ""),
            new ResourceModel("page.help", "")));
    helpLink.setPopupSettings(new PopupSettings("_blank"));
    helpLink.setVisible(helpAvailable);

    add(logoutPanel);
    add(feedbackPanel);
    add(versionLabel);
    add(embeddedDbWarning);
    add(browserWarning);
}