Package com.gitblit.wicket.panels

Source Code of com.gitblit.wicket.panels.ObjectContainer

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gitblit.wicket.panels;

import java.util.List;

import org.apache.wicket.Component;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.Response;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.protocol.http.ClientProperties;
import org.apache.wicket.protocol.http.WebRequestCycle;
import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.protocol.http.request.WebClientInfo;
import org.apache.wicket.request.ClientInfo;
import org.apache.wicket.util.value.IValueMap;

/**
* https://cwiki.apache.org/WICKET/object-container-adding-flash-to-a-wicket-application.html
*/
public abstract class ObjectContainer extends WebMarkupContainer {

  private static final long serialVersionUID = 1L;

  // Some general attributes for the object tag:
  private static final String ATTRIBUTE_CONTENTTYPE = "type";
  private static final String ATTRIBUTE_CLASSID = "classid";
  private static final String ATTRIBUTE_CODEBASE = "codebase";

  // This is used for browser specific adjustments
  private ClientProperties clientProperties = null;

  public ObjectContainer(String id) {
    super(id);
  }

  // Set an attribute/property
  public abstract void setValue(String name, String value);

  // Get an attribute/property
  public abstract String getValue(String name);

  // Set the object's content type
  protected abstract String getContentType();

  // Set the object's clsid (for IE)
  protected abstract String getClsid();

  // Where to get the browser plugin (for IE)
  protected abstract String getCodebase();

  // Object's valid attribute names
  protected abstract List<String> getAttributeNames();

  // Object's valid parameter names
  protected abstract List<String> getParameterNames();

  // Utility function to get the URL for the object's data
  protected String resolveResource(String src) {
    // if it's an absolute path, return it:
    if (src.startsWith("/") || src.startsWith("http://") || src.startsWith("https://"))
      return (src);

    // use the parent container class to resolve the resource reference
    Component parent = getParent();
    if (parent instanceof Fragment) {
      // must check for fragment, otherwise we end up in Wicket namespace
      parent = parent.getParent();
    }
    if (parent != null) {
      ResourceReference resRef = new ResourceReference(parent.getClass(), src, false);
      return (urlFor(resRef).toString());
    }

    return (src);
  }

  @Override
  public void onComponentTag(ComponentTag tag) {
    super.onComponentTag(tag);

    // get the attributes from the html-source
    IValueMap attributeMap = tag.getAttributes();

    // set the content type
    String contentType = getContentType();
    if (contentType != null && !"".equals(contentType))
      attributeMap.put(ATTRIBUTE_CONTENTTYPE, contentType);

    // set clsid and codebase for IE
    if (getClientProperties().isBrowserInternetExplorer()) {
      String clsid = getClsid();
      String codeBase = getCodebase();

      if (clsid != null && !"".equals(clsid))
        attributeMap.put(ATTRIBUTE_CLASSID, clsid);
      if (codeBase != null && !"".equals(codeBase))
        attributeMap.put(ATTRIBUTE_CODEBASE, codeBase);
    }

    // add all attributes
    for (String name : getAttributeNames()) {
      String value = getValue(name);
      if (value != null)
        attributeMap.put(name, value);
    }
  }

  @Override
  public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
    Response response = getResponse();
    response.write("\n");

    // add all object's parameters:
    for (String name : getParameterNames()) {
      String value = getValue(name);
      if (value != null) {
        response.write("<param name=\"");
        response.write(name);
        response.write("\" value=\"");
        response.write(value);
        response.write("\"/>\n");
      }
    }

    super.onComponentTagBody(markupStream, openTag);
  }

  // shortcut to the client properties:
  protected ClientProperties getClientProperties() {
    if (clientProperties == null) {
      ClientInfo clientInfo = WebSession.get().getClientInfo();

      if (clientInfo == null || !(clientInfo instanceof WebClientInfo)) {
        clientInfo = new WebClientInfo((WebRequestCycle) getRequestCycle());
        WebSession.get().setClientInfo(clientInfo);
      }

      clientProperties = ((WebClientInfo) clientInfo).getProperties();
    }
    return (clientProperties);
  }
}
TOP

Related Classes of com.gitblit.wicket.panels.ObjectContainer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.