diff options
Diffstat (limited to 'src/main/java/com/gitblit/wicket/panels/ObjectContainer.java')
-rw-r--r-- | src/main/java/com/gitblit/wicket/panels/ObjectContainer.java | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java b/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java new file mode 100644 index 00000000..d7f1f789 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java @@ -0,0 +1,158 @@ +/*
+ * 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);
+ }
+
+ 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);
+ }
+ }
+
+ 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);
+ }
+}
\ No newline at end of file |