WICKET-5819 Support for HTML 5 media tags (audio / video)
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/ac7cf808 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ac7cf808 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ac7cf808 Branch: refs/heads/pr-86-media_tags Commit: ac7cf808d07440a039d9b0c70d5903109ee16303 Parents: 154b5d1 Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Authored: Sun Feb 15 19:28:44 2015 +0200 Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Committed: Sun Feb 15 19:28:44 2015 +0200 ---------------------------------------------------------------------- .../markup/html/media/MediaComponent.java | 165 ++++++++++--------- .../media/MediaStreamingResourceReference.java | 52 +++--- .../wicket/markup/html/media/MediaUtils.java | 49 ------ .../markup/html/media/PartWriterCallback.java | 55 +++---- .../apache/wicket/markup/html/media/Source.java | 66 +++----- .../apache/wicket/markup/html/media/Track.java | 74 ++++----- .../wicket/markup/html/media/audio/Audio.java | 12 -- .../wicket/markup/html/media/video/Video.java | 26 +-- .../wicket/markup/html/media/Application.java | 37 ----- .../html/media/MediaTagsExtendedTestPage.java | 2 - .../wicket/markup/html/media/MediaTagsTest.java | 75 ++++----- .../markup/html/media/MediaTagsTestPage.java | 3 +- 12 files changed, 235 insertions(+), 381 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaComponent.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaComponent.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaComponent.java index 4131439..20f39ec 100755 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaComponent.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaComponent.java @@ -23,7 +23,7 @@ import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.mapper.parameter.PageParameters; /** - * The media component is used to provide basic functionality to the video and audo component. The + * The media component is used to provide basic functionality to the video and audio component. The * given media streaming resource reference supports Content-Ranges and other stuff to make the * audio and video playback smooth. * @@ -32,11 +32,10 @@ import org.apache.wicket.request.mapper.parameter.PageParameters; */ public abstract class MediaComponent extends WebMarkupContainer { - private static final long serialVersionUID = 1L; /** - * To be used for the crossorigin attribute + * To be used for the <em>crossorigin</em> attribute * * @see {@link #setCrossOrigin(Cors)} */ @@ -44,7 +43,7 @@ public abstract class MediaComponent extends WebMarkupContainer { ANONYMOUS("anonymous"), USER_CREDENTIALS("user-credentials"), NO_CORS(""); - private String realName; + private final String realName; private Cors(String realName) { @@ -58,7 +57,7 @@ public abstract class MediaComponent extends WebMarkupContainer } /** - * To be used for the preload attribute + * To be used for the <em>preload</em> attribute * * @see {@link #setPreload(Preload)} */ @@ -66,7 +65,7 @@ public abstract class MediaComponent extends WebMarkupContainer { NONE("none"), METADATA("metadata"), AUTO("auto"); - public String realName; + public final String realName; private Preload(String realname) { @@ -79,14 +78,13 @@ public abstract class MediaComponent extends WebMarkupContainer } } - // use Boolean instead of elementary data types to get a lightweight component - private Boolean autoplay; + private boolean autoplay; - private Boolean loop; + private boolean loop; - private Boolean muted; + private boolean muted; - private Boolean controls; + private boolean controls = true; private Preload preload; @@ -98,138 +96,147 @@ public abstract class MediaComponent extends WebMarkupContainer private Cors crossOrigin; - private PageParameters pageParameters; + private final PageParameters pageParameters; - private MediaStreamingResourceReference mediaStreamingResourceReference; + private final MediaStreamingResourceReference mediaStreamingResourceReference; - private String url; + private final String url; + /** + * Constructor. + * + * @param id + * The component id + */ public MediaComponent(String id) { - super(id); + this(id, null, null, null, null); } + /** + * Constructor. + * + * @param id + * The component id + * @param model + * The component model + */ public MediaComponent(String id, IModel<?> model) { - super(id, model); + this(id, model, null, null, null); } + /** + * Constructor. + * + * @param id + * The component id + * @param mediaStreamingResourceReference + */ public MediaComponent(String id, MediaStreamingResourceReference mediaStreamingResourceReference) { - this(id); - this.mediaStreamingResourceReference = mediaStreamingResourceReference; + this(id, null, null, null,mediaStreamingResourceReference); } public MediaComponent(String id, IModel<?> model, MediaStreamingResourceReference mediaStreamingResourceReference) { - this(id, model); - this.mediaStreamingResourceReference = mediaStreamingResourceReference; + this(id, model, null, null, mediaStreamingResourceReference); } public MediaComponent(String id, MediaStreamingResourceReference mediaStreamingResourceReference, PageParameters pageParameters) { - this(id); - this.mediaStreamingResourceReference = mediaStreamingResourceReference; - this.pageParameters = pageParameters; + this(id, null, null, pageParameters, mediaStreamingResourceReference); } public MediaComponent(String id, IModel<?> model, MediaStreamingResourceReference mediaStreamingResourceReference, PageParameters pageParameters) { - this(id, model); - this.mediaStreamingResourceReference = mediaStreamingResourceReference; - this.pageParameters = pageParameters; + this(id, model, null, pageParameters, mediaStreamingResourceReference); } public MediaComponent(String id, String url) { - this(id); - this.url = url; + this(id, null, url, null, null); } public MediaComponent(String id, IModel<?> model, String url) { - this(id, model); - this.url = url; - } - - public MediaComponent(String id, String url, PageParameters pageParameters) - { - this(id); - this.url = url; - this.pageParameters = pageParameters; + this(id, model, url, null, null); } - public MediaComponent(String id, IModel<?> model, String url, PageParameters pageParameters) + private MediaComponent(String id, IModel<?> model, String url, PageParameters pageParameters, + MediaStreamingResourceReference mediaStreamingResourceReference) { - this(id, model); + super(id, model); this.url = url; this.pageParameters = pageParameters; + this.mediaStreamingResourceReference = mediaStreamingResourceReference; } @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); + // The time management is used to set the start / stop // time in seconds of the movie to be played back String timeManagement = ""; if (startTime != null) { - timeManagement = timeManagement += "#t=" + startTime + + timeManagement += "#t=" + startTime + (endTime != null ? "," + endTime : ""); } if (mediaStreamingResourceReference != null) { - tag.put("src", - RequestCycle.get().urlFor(mediaStreamingResourceReference, pageParameters) + - timeManagement); + CharSequence urlToMediaReference = RequestCycle.get().urlFor(mediaStreamingResourceReference, pageParameters); + tag.put("src", urlToMediaReference + timeManagement); } - - if (url != null) + else if (url != null) { tag.put("src", url + timeManagement); } - if (mediaGroup != null) + String mg = getMediaGroup(); + if (mg != null) { - tag.put("mediagroup", mediaGroup); + tag.put("mediagroup", mg); } - if (autoplay != null && autoplay) + if (isAutoplay()) { tag.put("autoplay", "autoplay"); } - if (loop != null && loop) + if (isLooping()) { tag.put("loop", "loop"); } - if (muted != null && muted) + if (isMuted()) { tag.put("muted", "muted"); } - // Use getter here because controls should be visible by default - if (getControls()) + if (hasControls()) { tag.put("controls", "controls"); } - if (preload != null) + Preload _preload = getPreload(); + if (_preload != null) { - tag.put("preload", preload.getRealName()); + tag.put("preload", _preload.getRealName()); } - if (crossOrigin != null) + Cors cors = getCrossOrigin(); + if (cors != null) { - tag.put("crossorigin", crossOrigin.getRealName()); + tag.put("crossorigin", cors.getRealName()); } } @@ -238,9 +245,9 @@ public abstract class MediaComponent extends WebMarkupContainer * * @return If the playback is autoplayed on load */ - public Boolean getAutoplay() + public boolean isAutoplay() { - return autoplay != null ? autoplay : false; + return autoplay; } /** @@ -249,7 +256,7 @@ public abstract class MediaComponent extends WebMarkupContainer * @param autoplay * If the playback is autoplayed on load */ - public void setAutoplay(Boolean autoplay) + public void setAutoplay(boolean autoplay) { this.autoplay = autoplay; } @@ -259,9 +266,9 @@ public abstract class MediaComponent extends WebMarkupContainer * * @return If the playback is looped */ - public Boolean getLoop() + public boolean isLooping() { - return loop != null ? loop : false; + return loop; } /** @@ -270,7 +277,7 @@ public abstract class MediaComponent extends WebMarkupContainer * @param loop * If the playback is looped */ - public void setLoop(Boolean loop) + public void setLooping(boolean loop) { this.loop = loop; } @@ -280,9 +287,9 @@ public abstract class MediaComponent extends WebMarkupContainer * * @return If the playback is muted initially */ - public Boolean getMuted() + public boolean isMuted() { - return muted != null ? muted : false; + return muted; } /** @@ -291,7 +298,7 @@ public abstract class MediaComponent extends WebMarkupContainer * @param muted * If the playback is muted initially */ - public void setMuted(Boolean muted) + public void setMuted(boolean muted) { this.muted = muted; } @@ -301,9 +308,9 @@ public abstract class MediaComponent extends WebMarkupContainer * * @return if the controls are going to displayed */ - public Boolean getControls() + public boolean hasControls() { - return controls != null ? controls : true; + return controls; } /** @@ -330,21 +337,23 @@ public abstract class MediaComponent extends WebMarkupContainer } /** - * Sets the type of preload <br> - * <br> - * <b>none</b>: Hints to the user agent that either the author does not expect the user to need - * the media resource, or that the server wants to minimise unnecessary traffic.<br> - * <br> - * <b>metadata</b>: Hints to the user agent that the author does not expect the user to need the + * Sets the type of preload. + * <ul> + * <li><b>none</b>: Hints to the user agent that either the author does not expect the user to need + * the media resource, or that the server wants to minimise unnecessary traffic.</li> + * + * <li><b>metadata</b>: Hints to the user agent that the author does not expect the user to need the * media resource, but that fetching the resource metadata (dimensions, first frame, track list, - * duration, etc) is reasonable.<br> - * <br> - * <b>auto</b>: Hints to the user agent that the user agent can put the user's needs first + * duration, etc) is reasonable.</li> + * + * <li><b>auto</b>: Hints to the user agent that the user agent can put the user's needs first * without risk to the server, up to and including optimistically downloading the entire - * resource. + * resource.</li> + * </ul> + * </p> * * @param preload - * the preload + * the type of the preload */ public void setPreload(Preload preload) { http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaStreamingResourceReference.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaStreamingResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaStreamingResourceReference.java index 54d9442..6231eed 100755 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaStreamingResourceReference.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaStreamingResourceReference.java @@ -21,16 +21,15 @@ import java.util.Locale; import org.apache.wicket.Application; import org.apache.wicket.WicketRuntimeException; -import org.apache.wicket.core.util.resource.PackageResourceStream; import org.apache.wicket.request.Request; import org.apache.wicket.request.Response; -import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.http.WebRequest; import org.apache.wicket.request.http.WebResponse; -import org.apache.wicket.request.resource.AbstractResource; import org.apache.wicket.request.resource.ContentDisposition; -import org.apache.wicket.request.resource.IResource; -import org.apache.wicket.request.resource.ResourceReference; +import org.apache.wicket.request.resource.PackageResource; +import org.apache.wicket.request.resource.PackageResourceReference; +import org.apache.wicket.util.resource.IResourceStream; +import org.apache.wicket.util.string.Strings; /** * The media streaming resource reference is used to provided streamed data based on bytes requested @@ -38,9 +37,8 @@ import org.apache.wicket.request.resource.ResourceReference; * * @author Tobias Soloschenko */ -public class MediaStreamingResourceReference extends ResourceReference +public class MediaStreamingResourceReference extends PackageResourceReference { - private static final long serialVersionUID = 1L; public MediaStreamingResourceReference(Class<?> scope, String name, Locale locale, @@ -51,7 +49,7 @@ public class MediaStreamingResourceReference extends ResourceReference public MediaStreamingResourceReference(Class<?> scope, String name) { - super(scope, name, RequestCycle.get().getRequest().getLocale(), null, null); + this(scope, name, null, null, null); } public MediaStreamingResourceReference(Key key) @@ -65,16 +63,16 @@ public class MediaStreamingResourceReference extends ResourceReference } @Override - public IResource getResource() + public PackageResource getResource() { - AbstractResource mediaStreamingResource = new AbstractResource() + return new PackageResource(getScope(), getName(), getLocale(), getStyle(), getVariation()) { private static final long serialVersionUID = 1L; @Override protected ResourceResponse newResourceResponse(Attributes attributes) { - PackageResourceStream packageResourceStream = null; + IResourceStream packageResourceStream = getResourceStream(); Long startbyte = null; Long endbyte = null; try @@ -85,20 +83,12 @@ public class MediaStreamingResourceReference extends ResourceReference if (!(request instanceof WebRequest) || !(response instanceof WebResponse)) { throw new IllegalStateException( - "Either the request is no web request or the response is no web response"); + "Web request/response are required! Request: " + request + ", response: " + response); } WebRequest webRequest = (WebRequest)request; WebResponse webResponse = (WebResponse)response; - packageResourceStream = new PackageResourceStream( - MediaStreamingResourceReference.this.getScope(), - MediaStreamingResourceReference.this.getName(), - MediaStreamingResourceReference.this.getLocale(), - MediaStreamingResourceReference.this.getStyle(), - MediaStreamingResourceReference.this.getVariation()); - - long length = packageResourceStream.length().bytes(); ResourceResponse resourceResponse = new ResourceResponse(); @@ -107,13 +97,13 @@ public class MediaStreamingResourceReference extends ResourceReference resourceResponse.setContentDisposition(ContentDisposition.ATTACHMENT); resourceResponse.setLastModified(packageResourceStream.lastModifiedTime()); - // We accept ranges, so that the player can + // accept ranges, so that the player can // load and play content from a specific byte position webResponse.setHeader("Accept-Range", "bytes"); // Calculating the response code and the byte range to be played String rangeHeader = webRequest.getHeader("range"); - if (rangeHeader == null || "".equals(rangeHeader)) + if (Strings.isEmpty(rangeHeader)) { resourceResponse.setStatusCode(200); resourceResponse.setContentLength(length); @@ -121,7 +111,6 @@ public class MediaStreamingResourceReference extends ResourceReference else { rangeHeader = rangeHeader.replaceAll(" ", ""); - // If the range header is filled 206 for // partial content has to be returned resourceResponse.setStatusCode(206); @@ -131,11 +120,11 @@ public class MediaStreamingResourceReference extends ResourceReference // http://stackoverflow.com/questions/8293687/sample-http-range-request-session String range = rangeHeader.substring(rangeHeader.indexOf('=') + 1, rangeHeader.length()); - String[] rangeParts = range.split("-"); - if (rangeParts[0].equals("0")) + String[] rangeParts = Strings.split(range, '-'); + if ("0".equals(rangeParts[0])) { - webResponse.setHeader("Content-Range", "bytes 0-" + (length - 1) + "/" + - length); + webResponse.setHeader("Content-Range", + "bytes 0-" + (length - 1) + "/" + length); resourceResponse.setContentLength(length); } else @@ -149,8 +138,8 @@ public class MediaStreamingResourceReference extends ResourceReference { endbyte = length - 1; } - webResponse.setHeader("Content-Range", "bytes " + startbyte + "-" + - endbyte + "/" + length); + webResponse.setHeader("Content-Range", + "bytes " + startbyte + '-' + endbyte + '/' + length); resourceResponse.setContentLength((endbyte - startbyte) + 1); } } @@ -183,14 +172,13 @@ public class MediaStreamingResourceReference extends ResourceReference } } }; - return mediaStreamingResource; } /** - * Gets the type of the media this resource reference belongs to + * Returns the mime type of the media this resource reference belongs to * - * @return the type of this media + * @return the mime type of this media */ public String getType() { http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaUtils.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaUtils.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaUtils.java deleted file mode 100755 index d06a704..0000000 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/MediaUtils.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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 org.apache.wicket.markup.html.media; - -import org.apache.wicket.Application; -import org.apache.wicket.markup.html.IPackageResourceGuard; -import org.apache.wicket.markup.html.SecurePackageResourceGuard; - -/** - * Helper method to provide access to basic media files like subtitles - * - * @author Tobias Soloschenko - * - */ -public class MediaUtils -{ - - /** - * Method that has to be called within the init method of the web application to make - * translation files accessible - */ - public static void init() - { - IPackageResourceGuard packageResourceGuard = Application.get() - .getResourceSettings() - .getPackageResourceGuard(); - if (packageResourceGuard instanceof SecurePackageResourceGuard) - { - SecurePackageResourceGuard securePackageResourceGuard = (SecurePackageResourceGuard)packageResourceGuard; - securePackageResourceGuard.addPattern("+*.vtt"); - securePackageResourceGuard.addPattern("+*.srt"); - } - } - -} http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/main/java/org/apache/wicket/markup/html/media/PartWriterCallback.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/PartWriterCallback.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/PartWriterCallback.java index 694544d..b5467ff 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/PartWriterCallback.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/PartWriterCallback.java @@ -21,10 +21,10 @@ import java.io.InputStream; import java.io.OutputStream; import org.apache.wicket.WicketRuntimeException; -import org.apache.wicket.core.util.resource.PackageResourceStream; import org.apache.wicket.protocol.http.servlet.ResponseIOException; import org.apache.wicket.request.resource.AbstractResource.WriteCallback; import org.apache.wicket.request.resource.IResource.Attributes; +import org.apache.wicket.util.resource.IResourceStream; /** * Used to read a part of the package resource stream and write it to the output stream of the @@ -35,24 +35,24 @@ import org.apache.wicket.request.resource.IResource.Attributes; */ public class PartWriterCallback extends WriteCallback { - private PackageResourceStream packageResourceStream; + private final IResourceStream resourceStream; - private Long startbyte; + private final Long startbyte; private Long endbyte; - private Integer buffer; + private int bufferSize; /** * Creates a part writer callback.<br> * <br> - * Reads a part of the given package resource stream. If the startbyte parameter is not null the + * Reads a part of the given resource stream. If the startbyte parameter is not null the * number of bytes are skipped till the stream is read. If the endbyte is not null the stream is * read till endbyte, else to the end of the whole stream. If startbyte and endbyte is null the * whole stream is read. * - * @param packageResourceStream - * the package resource stream to be read + * @param resourceStream + * the resource stream to read * @param startbyte * the start position to read from (if not null the number of bytes are skipped till * the stream is read) @@ -60,10 +60,10 @@ public class PartWriterCallback extends WriteCallback * the end position to read to (if not null the stream is going to be read till * endbyte, else to the end of the whole stream) */ - public PartWriterCallback(PackageResourceStream packageResourceStream, Long startbyte, + public PartWriterCallback(IResourceStream resourceStream, Long startbyte, Long endbyte) { - this.packageResourceStream = packageResourceStream; + this.resourceStream = resourceStream; this.startbyte = startbyte; this.endbyte = endbyte; } @@ -71,7 +71,7 @@ public class PartWriterCallback extends WriteCallback /** * Writes the data * - * @param Attributes + * @param attributes * the attributes to get the output stream of the response */ @Override @@ -79,9 +79,9 @@ public class PartWriterCallback extends WriteCallback { try { - InputStream inputStream = packageResourceStream.getInputStream(); + InputStream inputStream = resourceStream.getInputStream(); OutputStream outputStream = attributes.getResponse().getOutputStream(); - byte[] buffer = new byte[getBuffer()]; + byte[] buffer = new byte[getBufferSize()]; if (startbyte != null || endbyte != null) { @@ -95,11 +95,11 @@ public class PartWriterCallback extends WriteCallback // If there are no end bytes given read the whole stream till the end if (endbyte == null) { - endbyte = packageResourceStream.length().bytes(); + endbyte = resourceStream.length().bytes(); } long totalBytes = 0; - int actualReadBytes = 0; + int actualReadBytes; while ((actualReadBytes = inputStream.read(buffer)) != -1) { @@ -107,7 +107,7 @@ public class PartWriterCallback extends WriteCallback long lowerBuffer = endbyte - totalBytes; if (lowerBuffer <= 0) { - buffer = (byte[])resizeArray(buffer, actualReadBytes); + buffer = resizeArray(buffer, actualReadBytes); outputStream.write(buffer); break; } @@ -151,15 +151,14 @@ public class PartWriterCallback extends WriteCallback * @return A new array with the same contents. */ @SuppressWarnings("rawtypes") - private static Object resizeArray(Object oldArray, int newSize) + private static byte[] resizeArray(byte[] oldArray, int newSize) { - int oldSize = java.lang.reflect.Array.getLength(oldArray); - Class elementType = oldArray.getClass().getComponentType(); - Object newArray = java.lang.reflect.Array.newInstance(elementType, newSize); - int preserveLength = Math.min(oldSize, newSize); - if (preserveLength > 0) + int oldSize = oldArray.length; + byte[] newArray = new byte[newSize]; + int minLength = Math.min(oldSize, newSize); + if (minLength > 0) { - System.arraycopy(oldArray, 0, newArray, 0, preserveLength); + System.arraycopy(oldArray, 0, newArray, 0, minLength); } return newArray; } @@ -167,22 +166,22 @@ public class PartWriterCallback extends WriteCallback /** * Sets the buffer size used to send the data to the client * - * @return the buffer size used to send the data to the client (default is 4048) + * @return the buffer size used to send the data to the client (default is 4096) */ - public Integer getBuffer() + public int getBufferSize() { - return buffer != null ? buffer : 4048; + return bufferSize > 0 ? bufferSize : 4096; } /** * Sets the buffer size used to send the data to the client * - * @param buffer + * @param bufferSize * the buffer size used to send the data to the client */ - public void setBuffer(Integer buffer) + public void setBufferSize(int bufferSize) { - this.buffer = buffer; + this.bufferSize = bufferSize; } } http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Source.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Source.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Source.java index 8926609..c3fc50f 100755 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Source.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Source.java @@ -27,89 +27,74 @@ import org.apache.wicket.request.mapper.parameter.PageParameters; * * @author Tobias Soloschenko * @author Andrew Lombardi - * */ public class Source extends WebMarkupContainer { - private static final long serialVersionUID = 1L; - private Boolean displayType; + private boolean displayType; private String type; private String media; - private MediaStreamingResourceReference mediaStreamingResourceReference; + private final MediaStreamingResourceReference mediaStreamingResourceReference; - private PageParameters pageParameters; + private final PageParameters pageParameters; - private String url; + private final String url; public Source(String id) { - super(id); + this(id, null, null, null, null); } public Source(String id, IModel<?> model) { - super(id, model); + this(id, model, null, null, null); } public Source(String id, MediaStreamingResourceReference mediaStreamingResourceReference) { - this(id); - this.mediaStreamingResourceReference = mediaStreamingResourceReference; + this(id, null, null, null, mediaStreamingResourceReference); } public Source(String id, IModel<?> model, MediaStreamingResourceReference mediaStreamingResourceReference) { - this(id, model); - this.mediaStreamingResourceReference = mediaStreamingResourceReference; + this(id, model, null, null, mediaStreamingResourceReference); } public Source(String id, MediaStreamingResourceReference mediaStreamingResourceReference, PageParameters pageParameters) { - this(id); - this.mediaStreamingResourceReference = mediaStreamingResourceReference; - this.pageParameters = pageParameters; + this(id, null, null, pageParameters, mediaStreamingResourceReference); } public Source(String id, IModel<?> model, MediaStreamingResourceReference mediaStreamingResourceReference, PageParameters pageParameters) { - this(id, model); - this.mediaStreamingResourceReference = mediaStreamingResourceReference; - this.pageParameters = pageParameters; + this(id, model, null, pageParameters, mediaStreamingResourceReference); } public Source(String id, String url) { - this(id); - this.url = url; + this(id, null, url, null, null); } public Source(String id, IModel<?> model, String url) { - this(id, model); - this.url = url; + this(id, model, url, null, null); } - public Source(String id, String url, PageParameters pageParameters) + private Source(String id, IModel<?> model, String url, PageParameters pageParameters, + MediaStreamingResourceReference mediaStreamingResourceReference) { - this(id); - this.url = url; - this.pageParameters = pageParameters; - } - - public Source(String id, IModel<?> model, String url, PageParameters pageParameters) - { - this(id, model); + super(id, model); this.url = url; this.pageParameters = pageParameters; + this.mediaStreamingResourceReference = mediaStreamingResourceReference; } @Override @@ -120,11 +105,9 @@ public class Source extends WebMarkupContainer if (mediaStreamingResourceReference != null) { - tag.put("src", - RequestCycle.get().urlFor(mediaStreamingResourceReference, pageParameters)); - } - - if (url != null) + CharSequence url = RequestCycle.get().urlFor(mediaStreamingResourceReference, pageParameters); + tag.put("src", url); + } else if (url != null) { tag.put("src", url); } @@ -141,9 +124,10 @@ public class Source extends WebMarkupContainer } } - if (media != null) + String _media = getMedia(); + if (_media != null) { - tag.put("media", media); + tag.put("media", _media); } } @@ -153,9 +137,9 @@ public class Source extends WebMarkupContainer * * @return If the type is going to be displayed */ - public Boolean getDisplayType() + public boolean getDisplayType() { - return displayType != null ? displayType : false; + return displayType; } /** @@ -164,7 +148,7 @@ public class Source extends WebMarkupContainer * @param displayType * if the type is going to be displayed */ - public void setDisplayType(Boolean displayType) + public void setDisplayType(boolean displayType) { this.displayType = displayType; } http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Track.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Track.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Track.java index 8871b23..1dc5b52 100755 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Track.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/Track.java @@ -30,88 +30,72 @@ import org.apache.wicket.request.resource.ResourceReference; * media component * * @author Tobias Soloschenko - * */ public class Track extends WebMarkupContainer { - private static final long serialVersionUID = 1L; private Kind kind; private String label; - private Boolean defaultTrack; + private boolean defaultTrack; private Locale srclang; - private ResourceReference resourceReference; + private final ResourceReference resourceReference; - private String url; + private final String url; - private PageParameters pageParameters; + private final PageParameters pageParameters; public Track(String id) { - super(id); + this(id, null, null, null, null); } public Track(String id, IModel<?> model) { - super(id, model); + this(id, model, null, null, null); } public Track(String id, ResourceReference resourceReference) { - this(id); - this.resourceReference = resourceReference; + this(id, null, null, null, resourceReference); } public Track(String id, IModel<?> model, ResourceReference resourceReference) { - this(id, model); - this.resourceReference = resourceReference; + this(id, model, null, null, resourceReference); } public Track(String id, ResourceReference resourceReference, PageParameters pageParameters) { - this(id); - this.resourceReference = resourceReference; - this.pageParameters = pageParameters; + this(id, null, null, pageParameters, resourceReference); } public Track(String id, IModel<?> model, ResourceReference resourceReference, PageParameters pageParameters) { - this(id, model); - this.resourceReference = resourceReference; - this.pageParameters = pageParameters; + this(id, model, null, pageParameters, resourceReference); } public Track(String id, String url) { - this(id); - this.url = url; + this(id, null, url, null, null); } public Track(String id, IModel<?> model, String url) { - this(id, model); - this.url = url; + this(id, model, url, null, null); } - public Track(String id, String url, PageParameters pageParameters) + private Track(String id, IModel<?> model, String url, PageParameters pageParameters, ResourceReference resourceReference) { - this(id); - this.url = url; - this.pageParameters = pageParameters; - } - - public Track(String id, IModel<?> model, String url, PageParameters pageParameters) - { - this(id, model); + super(id, model); this.url = url; this.pageParameters = pageParameters; + this.resourceReference = resourceReference; } @Override @@ -124,23 +108,24 @@ public class Track extends WebMarkupContainer { tag.put("src", RequestCycle.get().urlFor(resourceReference, pageParameters)); } - - if (url != null) + else if (url != null) { tag.put("src", url); } - if (kind != null) + Kind _kind = getKind(); + if (_kind != null) { - tag.put("kind", kind.name()); + tag.put("kind", _kind.name()); } - if (label != null) + String _label = getLabel(); + if (_label != null) { - tag.put("label", label); + tag.put("label", _label); } - if (defaultTrack != null && defaultTrack) + if (defaultTrack) { tag.put("default", "default"); } @@ -148,9 +133,10 @@ public class Track extends WebMarkupContainer // if the srclang field is set use this, else if the // resource reference provides a locale use the language // of the resource reference - if (srclang != null) + Locale _srclang = getSrclang(); + if (_srclang != null) { - tag.put("srclang", srclang.getLanguage()); + tag.put("srclang", _srclang.getLanguage()); } else if (resourceReference != null && resourceReference.getLocale() != null) { @@ -193,8 +179,8 @@ public class Track extends WebMarkupContainer * <b>metadata</b>: Tracks intended for use from script. Not displayed by the user agent.<br> * <br> * - * @param the - * kind + * @param kind + * the kind */ public void setKind(Kind kind) { @@ -227,9 +213,9 @@ public class Track extends WebMarkupContainer * * @return if the track is the default track */ - public Boolean getDefaultTrack() + public boolean isDefaultTrack() { - return defaultTrack != null ? defaultTrack : false; + return defaultTrack; } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/main/java/org/apache/wicket/markup/html/media/audio/Audio.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/audio/Audio.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/audio/Audio.java index 0bcef1c..3ab9615 100755 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/audio/Audio.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/audio/Audio.java @@ -27,11 +27,9 @@ import org.apache.wicket.request.mapper.parameter.PageParameters; * * @author Tobias Soloschenko * @author Andrew Lombardi - * */ public class Audio extends MediaComponent { - private static final long serialVersionUID = 1L; public Audio(String id) @@ -78,16 +76,6 @@ public class Audio extends MediaComponent super(id, model, url); } - public Audio(String id, String url, PageParameters pageParameters) - { - super(id, url, pageParameters); - } - - public Audio(String id, IModel<?> model, String url, PageParameters pageParameters) - { - super(id, model, url, pageParameters); - } - @Override protected void onComponentTag(ComponentTag tag) { http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/main/java/org/apache/wicket/markup/html/media/video/Video.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/video/Video.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/video/Video.java index 79a8d7e..5a8b167 100755 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/media/video/Video.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/media/video/Video.java @@ -32,7 +32,6 @@ import org.apache.wicket.request.resource.ResourceReference; */ public class Video extends MediaComponent { - private static final long serialVersionUID = 1L; private Integer width; @@ -87,35 +86,28 @@ public class Video extends MediaComponent super(id, model, url); } - public Video(String id, String url, PageParameters pageParameters) - { - super(id, url, pageParameters); - } - - public Video(String id, IModel<?> model, String url, PageParameters pageParameters) - { - super(id, model, url, pageParameters); - } - @Override protected void onComponentTag(ComponentTag tag) { checkComponentTag(tag, "video"); super.onComponentTag(tag); - if (width != null) + Integer _width = getWidth(); + if (_width != null) { - tag.put("width", width); + tag.put("width", _width); } - if (height != null) + Integer _height = getHeight(); + if (_height != null) { - tag.put("height", height); + tag.put("height", _height); } - if (poster != null) + ResourceReference _poster = getPoster(); + if (_poster != null) { - tag.put("poster", RequestCycle.get().urlFor(poster, posterPageParameters)); + tag.put("poster", RequestCycle.get().urlFor(_poster, getPosterPageParameters())); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/test/java/org/apache/wicket/markup/html/media/Application.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/media/Application.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/media/Application.java deleted file mode 100755 index 7a15513..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/media/Application.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 org.apache.wicket.markup.html.media; - -import org.apache.wicket.Page; -import org.apache.wicket.protocol.http.WebApplication; - -public class Application extends WebApplication -{ - - @Override - public Class<? extends Page> getHomePage() - { - return MediaTagsTestPage.class; - } - - @Override - protected void init() - { - super.init(); - MediaUtils.init(); - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsExtendedTestPage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsExtendedTestPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsExtendedTestPage.java index 3f17ad7..b21b4bb 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsExtendedTestPage.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsExtendedTestPage.java @@ -25,12 +25,10 @@ import org.apache.wicket.request.resource.PackageResourceReference; public class MediaTagsExtendedTestPage extends WebPage { - private static final long serialVersionUID = 1L; public MediaTagsExtendedTestPage() { - Video video = new Video("video", new MediaStreamingResourceReference( MediaTagsTestPage.class, "dummyVideo.m4a")); http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTest.java index 0863365..7c50031 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTest.java @@ -16,80 +16,77 @@ */ package org.apache.wicket.markup.html.media; +import org.apache.wicket.WicketTestCase; +import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.tester.TagTester; -import org.apache.wicket.util.tester.WicketTester; -import org.junit.Assert; -import org.junit.Before; import org.junit.Test; -public class MediaTagsTest +public class MediaTagsTest extends WicketTestCase { - private WicketTester wicketTester; - - @Before - public void setup() + @Override + protected WebApplication newApplication() { - wicketTester = new WicketTester(new Application()); + return new MediaComponentsApplication(); } @Test - public void testAudioTagIsRenderedRight() + public void audioTagIsRenderedRight() { - wicketTester.startPage(MediaTagsTestPage.class); - String lastResponseAsString = wicketTester.getLastResponse().getDocument(); + tester.startPage(MediaTagsTestPage.class); + String lastResponseAsString = tester.getLastResponse().getDocument(); TagTester createTagByAttribute = TagTester.createTagByAttribute(lastResponseAsString, "audio"); - Assert.assertTrue(createTagByAttribute.hasAttribute("autoplay")); - Assert.assertTrue(createTagByAttribute.hasAttribute("controls")); - Assert.assertTrue(createTagByAttribute.hasAttribute("loop")); - Assert.assertTrue(createTagByAttribute.hasAttribute("muted")); - Assert.assertEquals("user-credentials", createTagByAttribute.getAttribute("crossorigin")); + assertTrue(createTagByAttribute.hasAttribute("autoplay")); + assertTrue(createTagByAttribute.hasAttribute("controls")); + assertTrue(createTagByAttribute.hasAttribute("loop")); + assertTrue(createTagByAttribute.hasAttribute("muted")); + assertEquals("user-credentials", createTagByAttribute.getAttribute("crossorigin")); String attribute = createTagByAttribute.getAttribute("src"); - Assert.assertTrue("The time period is set right in the src attribute", + assertTrue("The time period is set right in the src attribute", attribute.contains("#t=5,10")); - Assert.assertTrue("page parameter is in the url of the src attribute", + assertTrue("page parameter is in the url of the src attribute", attribute.contains("test=test")); } @Test - public void testVideoTagIsRenderedRight() + public void videoTagIsRenderedRight() { - wicketTester.startPage(MediaTagsTestPage.class); - String lastResponseAsString = wicketTester.getLastResponse().getDocument(); + tester.startPage(MediaTagsTestPage.class); + String lastResponseAsString = tester.getLastResponse().getDocument(); TagTester createTagByAttribute = TagTester.createTagByAttribute(lastResponseAsString, "video"); String attribute = createTagByAttribute.getAttribute("poster"); - Assert.assertTrue("page parameter is in the url of the poster", + assertTrue("page parameter is in the url of the poster", attribute.contains("test2=test2")); String attributesrc = createTagByAttribute.getAttribute("src"); - Assert.assertTrue("video url is in the src attribute", + assertTrue("video url is in the src attribute", attributesrc.contains("dummyVideo.m4a")); - Assert.assertEquals("500", createTagByAttribute.getAttribute("width")); - Assert.assertEquals("400", createTagByAttribute.getAttribute("height")); + assertEquals("500", createTagByAttribute.getAttribute("width")); + assertEquals("400", createTagByAttribute.getAttribute("height")); } @Test - public void testextendedVideoTagIsRenderedRight() + public void extendedVideoTagIsRenderedRight() { - wicketTester.startPage(MediaTagsExtendedTestPage.class); - String lastResponseAsString = wicketTester.getLastResponse().getDocument(); + tester.startPage(MediaTagsExtendedTestPage.class); + String lastResponseAsString = tester.getLastResponse().getDocument(); TagTester createTagByAttribute = TagTester.createTagByAttribute(lastResponseAsString, "video"); - Assert.assertTrue(createTagByAttribute.hasChildTag("source")); - Assert.assertTrue(createTagByAttribute.hasChildTag("track")); + assertTrue(createTagByAttribute.hasChildTag("source")); + assertTrue(createTagByAttribute.hasChildTag("track")); TagTester sourceTag = TagTester.createTagByAttribute(lastResponseAsString, "source"); - Assert.assertEquals("video/mp4", sourceTag.getAttribute("type")); - Assert.assertEquals("screen and (device-width:500px)", sourceTag.getAttribute("media")); - Assert.assertEquals("http://www.mytestpage.xc/video.m4a", sourceTag.getAttribute("src")); + assertEquals("video/mp4", sourceTag.getAttribute("type")); + assertEquals("screen and (device-width:500px)", sourceTag.getAttribute("media")); + assertEquals("http://www.mytestpage.xc/video.m4a", sourceTag.getAttribute("src")); TagTester trackTag = TagTester.createTagByAttribute(lastResponseAsString, "track"); - Assert.assertTrue(trackTag.getAttribute("src").contains("dummySubtitles")); - Assert.assertEquals("subtitles", trackTag.getAttribute("kind")); - Assert.assertEquals("Subtitles of video", trackTag.getAttribute("label")); - Assert.assertEquals("default", trackTag.getAttribute("default")); - Assert.assertEquals("de", trackTag.getAttribute("srclang")); + assertTrue(trackTag.getAttribute("src").contains("dummySubtitles")); + assertEquals("subtitles", trackTag.getAttribute("kind")); + assertEquals("Subtitles of video", trackTag.getAttribute("label")); + assertEquals("default", trackTag.getAttribute("default")); + assertEquals("de", trackTag.getAttribute("srclang")); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/ac7cf808/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTestPage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTestPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTestPage.java index 6bb6619..e8dbdd8 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTestPage.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/media/MediaTagsTestPage.java @@ -25,7 +25,6 @@ import org.apache.wicket.request.resource.PackageResourceReference; public class MediaTagsTestPage extends WebPage { - private static final long serialVersionUID = 1L; public MediaTagsTestPage() @@ -37,7 +36,7 @@ public class MediaTagsTestPage extends WebPage audio.setAutoplay(true); audio.setControls(true); audio.setCrossOrigin(Cors.USER_CREDENTIALS); - audio.setLoop(true); + audio.setLooping(true); audio.setMuted(true); audio.setStartTime("5"); audio.setEndTime("10");