You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
(39) |
Dec
(10) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(19) |
Feb
(150) |
Mar
(10) |
Apr
|
May
(8) |
Jun
(11) |
Jul
(27) |
Aug
(52) |
Sep
(35) |
Oct
(30) |
Nov
(18) |
Dec
(4) |
2008 |
Jan
(76) |
Feb
(121) |
Mar
(39) |
Apr
(55) |
May
(18) |
Jun
(49) |
Jul
(32) |
Aug
(4) |
Sep
(10) |
Oct
|
Nov
(3) |
Dec
(33) |
2009 |
Jan
(19) |
Feb
(87) |
Mar
(69) |
Apr
(38) |
May
(47) |
Jun
(20) |
Jul
(5) |
Aug
(76) |
Sep
(145) |
Oct
(34) |
Nov
(8) |
Dec
(68) |
2010 |
Jan
(150) |
Feb
(379) |
Mar
(191) |
Apr
(100) |
May
(525) |
Jun
(269) |
Jul
(127) |
Aug
(190) |
Sep
(190) |
Oct
(29) |
Nov
(147) |
Dec
(83) |
2011 |
Jan
(188) |
Feb
(81) |
Mar
(43) |
Apr
(97) |
May
(63) |
Jun
(129) |
Jul
(17) |
Aug
(124) |
Sep
(6) |
Oct
(20) |
Nov
(67) |
Dec
(23) |
2012 |
Jan
(6) |
Feb
(14) |
Mar
(181) |
Apr
(64) |
May
(102) |
Jun
(47) |
Jul
(26) |
Aug
(3) |
Sep
(1) |
Oct
(14) |
Nov
(13) |
Dec
(23) |
2013 |
Jan
(4) |
Feb
(14) |
Mar
(18) |
Apr
(14) |
May
(27) |
Jun
(27) |
Jul
(5) |
Aug
(2) |
Sep
(74) |
Oct
(79) |
Nov
(21) |
Dec
(97) |
2014 |
Jan
(6) |
Feb
(3) |
Mar
(8) |
Apr
|
May
(5) |
Jun
|
Jul
(9) |
Aug
(6) |
Sep
(3) |
Oct
(10) |
Nov
(6) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
(1) |
Apr
(25) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
(5) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <fg...@us...> - 2011-08-05 10:02:31
|
Revision: 3583 http://openutils.svn.sourceforge.net/openutils/?rev=3583&view=rev Author: fgiust Date: 2011-08-05 10:02:25 +0000 (Fri, 05 Aug 2011) Log Message: ----------- remove useless warning, we are going to use include, not forward Modified Paths: -------------- trunk/openutils-mgnlstripes/src/main/java/it/openutils/magnoliastripes/StripesRenderer.java Modified: trunk/openutils-mgnlstripes/src/main/java/it/openutils/magnoliastripes/StripesRenderer.java =================================================================== --- trunk/openutils-mgnlstripes/src/main/java/it/openutils/magnoliastripes/StripesRenderer.java 2011-08-02 15:21:38 UTC (rev 3582) +++ trunk/openutils-mgnlstripes/src/main/java/it/openutils/magnoliastripes/StripesRenderer.java 2011-08-05 10:02:25 UTC (rev 3583) @@ -109,12 +109,6 @@ throws RenderException { - HttpServletResponse response = ((WebContext) MgnlContext.getInstance()).getResponse(); - if (response.isCommitted()) - { - log.warn("Attempting to forward to {}, but response is already committed.", templatePath); - } - Map<String, String[]> templateDataMap = contentToMap(getTemplateContent()); Map<String, String[]> nodeDataMap = contentToMap( MgnlContext.getAggregationState().getCurrentContent(), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-08-02 15:21:43
|
Revision: 3582 http://openutils.svn.sourceforge.net/openutils/?rev=3582&view=rev Author: fgiust Date: 2011-08-02 15:21:38 +0000 (Tue, 02 Aug 2011) Log Message: ----------- update isoparser Modified Paths: -------------- trunk/openutils-mgnlmedia/pom.xml Modified: trunk/openutils-mgnlmedia/pom.xml =================================================================== --- trunk/openutils-mgnlmedia/pom.xml 2011-08-02 14:54:52 UTC (rev 3581) +++ trunk/openutils-mgnlmedia/pom.xml 2011-08-02 15:21:38 UTC (rev 3582) @@ -225,7 +225,7 @@ <dependency> <groupId>com.googlecode.mp4parser</groupId> <artifactId>isoparser</artifactId> - <version>1.0-beta-2</version> + <version>1.0-beta-3</version> </dependency> </dependencies> <properties> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 3581 http://openutils.svn.sourceforge.net/openutils/?rev=3581&view=rev Author: fgiust Date: 2011-08-02 14:54:52 +0000 (Tue, 02 Aug 2011) Log Message: ----------- MEDIA-249 Parsing of mp4 metadata only works for internal videos Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java 2011-07-11 15:03:12 UTC (rev 3580) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java 2011-08-02 14:54:52 UTC (rev 3581) @@ -31,6 +31,7 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; +import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -41,9 +42,9 @@ import javax.servlet.http.HttpServletRequest; import net.sourceforge.openutils.mgnlmedia.media.types.externals.ExternalVideoSupport; +import net.sourceforge.openutils.mgnlmedia.media.utils.RtmpMedatadaFetcher; import net.sourceforge.openutils.mgnlmedia.media.utils.VideoMedataUtils; import net.sourceforge.openutils.mgnlmedia.media.utils.VideoMedataUtils.VideoMetaData; -import net.sourceforge.openutils.mgnlmedia.media.utils.RtmpMedatadaFetcher; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ClassUtils; @@ -244,7 +245,21 @@ // handle spaces: note we can't encode the full url here downloadUrl = StringUtils.replace(downloadUrl, " ", "%20"); URL url = new URL(downloadUrl); - return VideoMedataUtils.parseFLVfromUrl(url); + String extension = StringUtils.contains(downloadUrl, ".flv") ? "flv" : "mp4"; + + URLConnection connection = url.openConnection(); + connection.setConnectTimeout(5000); + + InputStream fis = connection.getInputStream(); + try + { + return VideoMedataUtils.parsefromStream(extension, fis); + } + finally + { + IOUtils.closeQuietly(fis); + } + } else if (StringUtils.startsWith(downloadUrl, "rtmp")) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-07-11 15:03:23
|
Revision: 3580 http://openutils.svn.sourceforge.net/openutils/?rev=3580&view=rev Author: diego_schivo Date: 2011-07-11 15:03:12 +0000 (Mon, 11 Jul 2011) Log Message: ----------- MEDIA-246 /blank Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html 2011-07-11 14:38:04 UTC (rev 3579) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html 2011-07-11 15:03:12 UTC (rev 3580) @@ -33,7 +33,6 @@ { url += "&mediaType=" + encodeURIComponent(mediaType); } - alert(url); return url; } @@ -50,14 +49,14 @@ var centerPanel = viewport.getComponent('center-panel'); (selectMedia ? centerPanel : centerPanel.getComponent('center-center-panel')).setTitle("Search results for : "+ textToSearch); - var url = "${this.request.contextPath}/.magnolia/pages/mediaFolderView.html?search="+ textToSearch + "&mgnlCK=" + (new Date()).getTime(); + var url = "${this.request.contextPath}/.magnolia/pages/mediaFolderView.html?search=" + encodeURIComponent(textToSearch) + "&mgnlCK=" + (new Date()).getTime(); if (selectMedia) { - url += "&selectMedia=true&actMediaHandle="+ actMediaHandle; + url += "&selectMedia=true&actMediaHandle=" + encodeURIComponent(actMediaHandle); } if (mediaType != null && mediaType != 'null') { - url += "&mediaType=" + mediaType; + url += "&mediaType=" + encodeURIComponent(mediaType); } frames['mediaFolderView'].location.href = url; } @@ -138,7 +137,7 @@ setTimeout(function() { setTreeCollapsed(false); frames['mediaTreeView'].location.href = getTreeUrl(); - frames['advancedSearchView'].location.href = "${this.request.contextPath}/.magnolia/pages/media-advsearchform.html?selectMedia="+selectMedia+"&playlistHandle=${this.playlistHandle!''}&${this.playlistSearch!''}"; + frames['advancedSearchView'].location.href = "${this.request.contextPath}/.magnolia/pages/media-advsearchform.html?selectMedia="+encodeURIComponent(selectMedia)+"&playlistHandle=${this.playlistHandle!''}&${this.playlistSearch!''}"; if (openPath != null && openPath != "null" && openPath.length > 0) { reloadFolder(openPath); @@ -234,8 +233,8 @@ (selectMedia ? centerPanel : centerPanel.getComponent('center-center-panel')).setTitle("Media - "+ path); var url = frames['mediaFolderView'].location.pathname; - // fix 404 on Chromium - if (url == 'blank') url = ''; + // fix 404 on Chromium and IE8 + if (url == 'blank' || url == '/blank') url = ''; var querystringoriginal = frames['mediaFolderView'].location.search.substring(1).cleanQueryString().parseQueryString(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-07-11 14:38:10
|
Revision: 3579 http://openutils.svn.sourceforge.net/openutils/?rev=3579&view=rev Author: diego_schivo Date: 2011-07-11 14:38:04 +0000 (Mon, 11 Jul 2011) Log Message: ----------- MEDIA-246 encodeURIComponent Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html 2011-07-11 14:30:18 UTC (rev 3578) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html 2011-07-11 14:38:04 UTC (rev 3579) @@ -28,11 +28,12 @@ { url += "&selectMedia=true"; } - url += "&pathOpen="+ openPath +"&pathCurrent=" + openPath +"&pathSelected=" + openPath; + url += "&pathOpen="+ encodeURIComponent(openPath) +"&pathCurrent=" + encodeURIComponent(openPath) +"&pathSelected=" + encodeURIComponent(openPath); if (mediaType != null && mediaType != 'null') { - url += "&mediaType=" + mediaType; + url += "&mediaType=" + encodeURIComponent(mediaType); } + alert(url); return url; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-07-11 14:30:24
|
Revision: 3578 http://openutils.svn.sourceforge.net/openutils/?rev=3578&view=rev Author: diego_schivo Date: 2011-07-11 14:30:18 +0000 (Mon, 11 Jul 2011) Log Message: ----------- MEDIA-246 dependency version Modified Paths: -------------- trunk/magnolia-test-webapp/pom.xml Modified: trunk/magnolia-test-webapp/pom.xml =================================================================== --- trunk/magnolia-test-webapp/pom.xml 2011-07-11 14:25:27 UTC (rev 3577) +++ trunk/magnolia-test-webapp/pom.xml 2011-07-11 14:30:18 UTC (rev 3578) @@ -137,7 +137,7 @@ <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-mgnlmedia</artifactId> - <version>4.4.1-SNAPSHOT</version> + <version>4.4.2-SNAPSHOT</version> </dependency> <dependency> <groupId>net.sourceforge.openutils</groupId> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-07-11 14:25:33
|
Revision: 3577 http://openutils.svn.sourceforge.net/openutils/?rev=3577&view=rev Author: diego_schivo Date: 2011-07-11 14:25:27 +0000 (Mon, 11 Jul 2011) Log Message: ----------- MEDIA-246 log.debug Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.java 2011-07-03 15:51:05 UTC (rev 3576) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.java 2011-07-11 14:25:27 UTC (rev 3577) @@ -151,6 +151,7 @@ { if ("mediafolderpath".equals(cookie.getName())) { + log.debug("Found mediafolderpath cookie with value {}", cookie.getValue()); if (StringUtils.isEmpty(openPath)) { try @@ -162,6 +163,7 @@ // should never happen } } + log.debug("openPath={}", openPath); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-03 15:51:14
|
Revision: 3576 http://openutils.svn.sourceforge.net/openutils/?rev=3576&view=rev Author: fgiust Date: 2011-07-03 15:51:05 +0000 (Sun, 03 Jul 2011) Log Message: ----------- cleanup docs and deprecated functions Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-07-03 15:41:48 UTC (rev 3575) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-07-03 15:51:05 UTC (rev 3576) @@ -166,147 +166,6 @@ } /** - * Get localized description for a media. If the locale is "it", it searches for a nodedata called description-it, - * or (if not found) description-en or (if not found) description. - * @param media media - * @param locale language - * @return description - * @deprecated use the standard Magnolia i18nContentSupport for this. Please note that versions < 4.2 of the media - * module used PROPERTY-language instead of PROPERTY_languaga which is now the magnolia standard so you may need to - * adapt existing repositories - */ - @Deprecated - public static String descLoc(Content media, Locale locale) - { - log.warn("\"descLoc()\" has been deprecated, please check javadocs"); - - if (media == null) - { - return null; - } - if (locale != null) - { - MgnlContext.setLocale(locale); - } - MediaTypeConfiguration mtc = mcm.getMediaTypeConfigurationFromMedia(media); - if (mtc == null || mtc.getHandler() == null) - { - return null; - } - return mtc.getHandler().getDescription(media); - } - - /** - * Get localized title for a media. If the locale is "it", it searches for a nodedata called title-it, or (if not - * found) title-en or (if not found) title. - * @param media media - * @param locale language - * @return title - * @deprecated use the standard Magnolia i18nContentSupport for this. Please note that versions < 4.2 of the media - * module used PROPERTY-language instead of PROPERTY_languaga which is now the magnolia standard so you may need to - * adapt existing repositories - */ - @Deprecated - public static String titleLoc(Content media, Locale locale) - { - log.warn("\"titleLoc()\" has been deprecated, please check javadocs"); - - if (media == null) - { - return null; - } - if (locale != null) - { - MgnlContext.setLocale(locale); - } - MediaTypeConfiguration mtc = mcm.getMediaTypeConfigurationFromMedia(media); - if (mtc == null || mtc.getHandler() == null) - { - return null; - } - return mtc.getHandler().getTitle(media); - } - - /** - * Get localized tags for a media. If the locale is "it", it searches for a nodedata called tags-it, or (if not - * found) tags-en or (if not found) tags. - * @param media media - * @param locale language - * @return tags - * @deprecated use the standard Magnolia i18nContentSupport for this. Please note that versions < 4.2 of the media - * module used PROPERTY-language instead of PROPERTY_languaga which is now the magnolia standard so you may need to - * adapt existing repositories - */ - @Deprecated - public static String[] tagsLoc(Content media, Locale locale) - { - log.warn("\"tagsLoc()\" has been deprecated, please check javadocs"); - - if (media == null) - { - return null; - } - if (locale != null) - { - MgnlContext.setLocale(locale); - } - MediaTypeConfiguration mtc = mcm.getMediaTypeConfigurationFromMedia(media); - if (mtc == null || mtc.getHandler() == null) - { - return null; - } - String tags = mtc.getHandler().getTags(media); - if (tags == null) - { - return null; - - } - return StringUtils.split(tags, ","); - } - - /** - * Get description for a media for the current locale. - * @param media media - * @return description - * @deprecated use media.getNodeData("description") or ${media.description} - */ - @Deprecated - public static String desc(Content media) - { - log.warn("\"desc()\" has been deprecated, please check javadocs"); - - return descLoc(media, null); - } - - /** - * Get title for a media for the current locale. - * @param media media - * @return title - * @deprecated use media.getNodeData("title") or ${media.title} - */ - @Deprecated - public static String title(Content media) - { - log.warn("\"title()\" has been deprecated, please check javadocs"); - - return titleLoc(media, null); - } - - /** - * Get tags for a media - * @param media media - * @return tags - * @deprecated use media.getNodeData("tags") or ${media.tags} - */ - @Deprecated - public static String[] tags(Content media) - { - log.warn("\"tags()\" has been deprecated, please check javadocs"); - - return tagsLoc(media, null); - } - - /** * Get url for a media * @param media media * @return url @@ -318,7 +177,7 @@ /** * Get url for a media, passing some parameters - * @param media media + * @param mediaref media node or UUID * @param options optional parameters * @return url */ @@ -339,7 +198,7 @@ /** * Get url to thumbnail - * @param media media to get the url for + * @param mediaref media node or UUID * @return the thumbnail url for this media, null otherwise */ public static String thumbnail(Object mediaref) @@ -375,7 +234,7 @@ /** * Get all resolution strings (i.e. 'o200x350;background=45A97B') that generates cached resolutions - * @param media media to get the resolutions + * @param mediaref media node or UUID * @return all resolution strings */ public static String[] resolutions(Object mediaref) @@ -410,7 +269,7 @@ /** * Get url for a resolution - * @param media media + * @param mediaref media node or UUID * @param resolution resolution * @return url */ @@ -464,7 +323,7 @@ /** * Get size of an image - * @param media media + * @param mediaref media node or UUID * @param resolution resolution for witch calculate size * @return size of an image */ @@ -525,7 +384,7 @@ /** * Get url to media preview - * @param media media + * @param mediaref media node or UUID * @return the preview url for this media if existing, null otherwise */ public static String preview(Object mediaref) @@ -547,7 +406,7 @@ /** * Get an array of String(s) containing a list of web pages where this media is used, an empty array otherwise - * @param media media to search in web pages + * @param mediaref media node or UUID * @return an array of String(s) containing a list of web pages where this media is used, an empty array otherwise */ public static String[] usedInWebPages(Object mediaref) @@ -580,7 +439,7 @@ /** * Returns a property (nodeData) of the media Content. - * @param media media Content + * @param mediaref media node or UUID * @param property property name * @return the value of the given nodedata or null if not found */ @@ -668,6 +527,135 @@ } /** + * Returns the "resolutions" node, checking for existence + * @param media + * @return + */ + protected static Content getResolutionsNode(final Content media) + { + Content resolutions = null; + + try + { + if (media.hasContent("resolutions")) + { + resolutions = media.getContent("resolutions"); + } + } + catch (RepositoryException e) + { + // ignore, try to create it + } + return resolutions; + } + + /** + * Returns an interator on the playlist content, given the playlist node or UUID. Support both static and dynamic + * (search based) playlists + * @param obj playlist node or UUID + * @return Iterator of media nodes + */ + public static Iterator<Content> mediaNodesInPlaylist(Object obj) + { + // TODO use openutils-mgnlutils 1.0.8: + // Content playlistNode = it.openutils.mgnlutils.el.MgnlUtilsElFunctions.node(obj, PlaylistConstants.REPO); + Content playlistNode = null; + if (obj == null) + { + return null; + } + + if (obj instanceof String) + { + String identifier = (String) obj; + + if (StringUtils.isBlank(identifier)) + { + return null; + } + + HierarchyManager hm = MgnlContext.getHierarchyManager(PlaylistConstants.REPO); + try + { + if (identifier.startsWith("/")) + { + if (hm.isExist(identifier)) + { + playlistNode = hm.getContent(identifier); + } + } + else + { + playlistNode = hm.getContentByUUID(StringUtils.trim(identifier)); + } + } + catch (ItemNotFoundException e) + { + log.debug("Node \"" + identifier + "\" not found"); + } + catch (RepositoryException e) + { + log.error(e.getClass().getName() + " getting node \"" + identifier + "\"", e); + } + } + else if (obj instanceof Content) + { + playlistNode = (Content) obj; + } + + Iterator<Content> iter = Iterators.transform( + PlaylistIterateUtils.iterate(playlistNode), + new Function<MediaNodeAndEntryPath, Content>() + { + + /** + * {@inheritDoc} + */ + public Content apply(MediaNodeAndEntryPath from) + { + return from.getMediaNode(); + } + }); + return Iterators.filter(iter, Predicates.notNull()); + } + + /** + * Utility functions used to replace a param in the current URL, Used internally by the crop tag. + * @param param parm key + * @param newValue new value + * @return new URL + */ + public static String replaceParam(String param, String newValue) + { + HttpServletRequest req = MgnlContext.getWebContext().getRequest(); + String url = "?" + + (StringUtils.isNotBlank(req.getQueryString()) + ? MgnlContext.getWebContext().getRequest().getQueryString() + : StringUtils.EMPTY); + if (url.indexOf("?" + param + "=") >= 0 || url.indexOf("&" + param + "=") >= 0) + { + int index = 1; + if (url.indexOf("&" + param + "=") >= 0) + { + index = url.indexOf("&" + param + "="); + } + url = StringUtils.substring(url, 0, index) + + StringUtils.substringAfter(StringUtils.substring(url, index + 1), "&"); + } + if (StringUtils.isNotBlank(newValue)) + { + url += (url.endsWith("?") ? StringUtils.EMPTY : "&") + param + "=" + newValue; + } + return url; + } + + // + // + // DEPRECATED FUNCTION + // + // + + /** * @deprecated, use node(Object) */ @Deprecated @@ -808,117 +796,123 @@ } /** - * Returns the "resolutions" node, checking for existence - * @param media - * @return + * @deprecated, use ${media.description} in templates */ - protected static Content getResolutionsNode(final Content media) + @Deprecated + public static String descLoc(Content media, Locale locale) { - Content resolutions = null; + log.warn("\"descLoc()\" has been deprecated, please check javadocs"); - try + if (media == null) { - if (media.hasContent("resolutions")) - { - resolutions = media.getContent("resolutions"); - } + return null; } - catch (RepositoryException e) + if (locale != null) { - // ignore, try to create it + MgnlContext.setLocale(locale); } - return resolutions; + MediaTypeConfiguration mtc = mcm.getMediaTypeConfigurationFromMedia(media); + if (mtc == null || mtc.getHandler() == null) + { + return null; + } + return mtc.getHandler().getDescription(media); } /** - * @param obj - * @return + * @deprecated, use ${media.title} in templates */ - public static Iterator<Content> mediaNodesInPlaylist(Object obj) + @Deprecated + public static String titleLoc(Content media, Locale locale) { - // TODO use openutils-mgnlutils 1.0.8: - // Content playlistNode = it.openutils.mgnlutils.el.MgnlUtilsElFunctions.node(obj, PlaylistConstants.REPO); - Content playlistNode = null; - if (obj == null) + log.warn("\"titleLoc()\" has been deprecated, please check javadocs"); + + if (media == null) { return null; } - - if (obj instanceof String) + if (locale != null) { - String identifier = (String) obj; - - if (StringUtils.isBlank(identifier)) - { - return null; - } - - HierarchyManager hm = MgnlContext.getHierarchyManager(PlaylistConstants.REPO); - try - { - if (identifier.startsWith("/")) - { - if (hm.isExist(identifier)) - { - playlistNode = hm.getContent(identifier); - } - } - else - { - playlistNode = hm.getContentByUUID(StringUtils.trim(identifier)); - } - } - catch (ItemNotFoundException e) - { - log.debug("Node \"" + identifier + "\" not found"); - } - catch (RepositoryException e) - { - log.error(e.getClass().getName() + " getting node \"" + identifier + "\"", e); - } + MgnlContext.setLocale(locale); } - else if (obj instanceof Content) + MediaTypeConfiguration mtc = mcm.getMediaTypeConfigurationFromMedia(media); + if (mtc == null || mtc.getHandler() == null) { - playlistNode = (Content) obj; + return null; } - - Iterator<Content> iter = Iterators.transform( - PlaylistIterateUtils.iterate(playlistNode), - new Function<MediaNodeAndEntryPath, Content>() - { - - /** - * {@inheritDoc} - */ - public Content apply(MediaNodeAndEntryPath from) - { - return from.getMediaNode(); - } - }); - return Iterators.filter(iter, Predicates.notNull()); + return mtc.getHandler().getTitle(media); } - public static String replaceParam(String param, String newValue) + /** + * @deprecated, use ${media.tags} in templates + */ + @Deprecated + public static String[] tagsLoc(Content media, Locale locale) { - HttpServletRequest req = MgnlContext.getWebContext().getRequest(); - String url = "?" - + (StringUtils.isNotBlank(req.getQueryString()) - ? MgnlContext.getWebContext().getRequest().getQueryString() - : StringUtils.EMPTY); - if (url.indexOf("?" + param + "=") >= 0 || url.indexOf("&" + param + "=") >= 0) + log.warn("\"tagsLoc()\" has been deprecated, please check javadocs"); + + if (media == null) { - int index = 1; - if (url.indexOf("&" + param + "=") >= 0) - { - index = url.indexOf("&" + param + "="); - } - url = StringUtils.substring(url, 0, index) - + StringUtils.substringAfter(StringUtils.substring(url, index + 1), "&"); + return null; } - if (StringUtils.isNotBlank(newValue)) + if (locale != null) { - url += (url.endsWith("?") ? StringUtils.EMPTY : "&") + param + "=" + newValue; + MgnlContext.setLocale(locale); } - return url; + MediaTypeConfiguration mtc = mcm.getMediaTypeConfigurationFromMedia(media); + if (mtc == null || mtc.getHandler() == null) + { + return null; + } + String tags = mtc.getHandler().getTags(media); + if (tags == null) + { + return null; + + } + return StringUtils.split(tags, ","); } + + /** + * Get description for a media for the current locale. + * @param media media + * @return description + * @deprecated use media.getNodeData("description") or ${media.description} + */ + @Deprecated + public static String desc(Content media) + { + log.warn("\"desc()\" has been deprecated, please check javadocs"); + + return descLoc(media, null); + } + + /** + * Get title for a media for the current locale. + * @param media media + * @return title + * @deprecated use media.getNodeData("title") or ${media.title} + */ + @Deprecated + public static String title(Content media) + { + log.warn("\"title()\" has been deprecated, please check javadocs"); + + return titleLoc(media, null); + } + + /** + * Get tags for a media + * @param media media + * @return tags + * @deprecated use media.getNodeData("tags") or ${media.tags} + */ + @Deprecated + public static String[] tags(Content media) + { + log.warn("\"tags()\" has been deprecated, please check javadocs"); + + return tagsLoc(media, null); + } + } Modified: trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld 2011-07-03 15:41:48 UTC (rev 3575) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld 2011-07-03 15:51:05 UTC (rev 3576) @@ -339,14 +339,14 @@ <function-signature>java.lang.Object property(java.lang.Object, java.lang.String)</function-signature> </function> <function> - <description></description> + <description>Returns an interator on the playlist content, given the playlist node or UUID. Support both static and dynamic (search based) playlists</description> <display-name>mediaNodesInPlaylist</display-name> <name>mediaNodesInPlaylist</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> <function-signature>java.util.Iterator mediaNodesInPlaylist(java.lang.Object)</function-signature> </function> <function> - <description></description> + <description>Utility functions used to replace a param in the current URL, Used internally by the crop tag.</description> <display-name>replaceParam</display-name> <name>replaceParam</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-03 15:41:54
|
Revision: 3575 http://openutils.svn.sourceforge.net/openutils/?rev=3575&view=rev Author: fgiust Date: 2011-07-03 15:41:48 +0000 (Sun, 03 Jul 2011) Log Message: ----------- better variable name, for clarity Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-07-03 15:35:14 UTC (rev 3574) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-07-03 15:41:48 UTC (rev 3575) @@ -832,10 +832,10 @@ throw new ZeroSizeImageException(image.getHandle()); } - String extension = image.getAttribute(FileProperties.PROPERTY_EXTENSION); - if (!Arrays.asList(extensions).contains(extension)) + String outputextension = image.getAttribute(FileProperties.PROPERTY_EXTENSION); + if (!Arrays.asList(extensions).contains(outputextension)) { - extension = "jpg"; + outputextension = "jpg"; } BufferedImage original = createBufferedImage(image); @@ -876,7 +876,7 @@ forceProgressive = true; } - ImageUtils.saveResolution(img, node, resolutioNodeName, extension, quality, forceProgressive); + ImageUtils.saveResolution(img, node, resolutioNodeName, outputextension, quality, forceProgressive); } catch (RepositoryException e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-03 15:35:25
|
Revision: 3574 http://openutils.svn.sourceforge.net/openutils/?rev=3574&view=rev Author: fgiust Date: 2011-07-03 15:35:14 +0000 (Sun, 03 Jul 2011) Log Message: ----------- MEDIA-245 Remove private functions from MediaEL Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView-xspf.html Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-07-03 15:26:14 UTC (rev 3573) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-07-03 15:35:14 UTC (rev 3574) @@ -30,7 +30,6 @@ import info.magnolia.module.ModuleRegistry; import java.awt.Point; -import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -53,7 +52,6 @@ import net.sourceforge.openutils.mgnlmedia.media.types.impl.BaseTypeHandler; import net.sourceforge.openutils.mgnlmedia.media.utils.ImageUtils; import net.sourceforge.openutils.mgnlmedia.playlist.PlaylistConstants; -import net.sourceforge.openutils.mgnlmedia.playlist.pages.PlaylistTrackExtensionContributor; import net.sourceforge.openutils.mgnlmedia.playlist.utils.PlaylistIterateUtils; import net.sourceforge.openutils.mgnlmedia.playlist.utils.PlaylistIterateUtils.MediaNodeAndEntryPath; @@ -832,15 +830,6 @@ return resolutions; } - public static void writePlaylistTrackExtension(Content media, PrintWriter writer) - { - for (Object item : module().getPlaylistTrackExtensionContributors()) - { - PlaylistTrackExtensionContributor contributor = (PlaylistTrackExtensionContributor) item; - contributor.addMediaAttributes(media, writer); - } - } - /** * @param obj * @return Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java 2011-07-03 15:26:14 UTC (rev 3573) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java 2011-07-03 15:35:14 UTC (rev 3574) @@ -24,8 +24,10 @@ import info.magnolia.cms.util.ContentUtil; import info.magnolia.cms.util.NodeDataUtil; import info.magnolia.context.MgnlContext; +import info.magnolia.module.ModuleRegistry; import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -436,4 +438,14 @@ return metas; } + public void writePlaylistTrackExtension(Content media, PrintWriter writer) + { + MediaModule module = (MediaModule) ModuleRegistry.Factory.getInstance().getModuleInstance(MediaModule.NAME); + for (Object item : module.getPlaylistTrackExtensionContributors()) + { + PlaylistTrackExtensionContributor contributor = (PlaylistTrackExtensionContributor) item; + contributor.addMediaAttributes(media, writer); + } + } + } Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView-xspf.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView-xspf.html 2011-07-03 15:26:14 UTC (rev 3573) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView-xspf.html 2011-07-03 15:35:14 UTC (rev 3574) @@ -42,7 +42,7 @@ [/#if] <extension application="http://www.openmindlab.com/media"> <media:locale code="${mediaLocale}" /> - ${mediaEl.writePlaylistTrackExtension(mediaNode, freemarkerEnv.getCurrentEnvironment().out)} + ${this.writePlaylistTrackExtension(mediaNode, freemarkerEnv.getCurrentEnvironment().out)} </extension> </track> [/#if] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-03 15:26:25
|
Revision: 3573 http://openutils.svn.sourceforge.net/openutils/?rev=3573&view=rev Author: fgiust Date: 2011-07-03 15:26:14 +0000 (Sun, 03 Jul 2011) Log Message: ----------- MEDIA-244 Make EL functions also accept a media UUID and not only a media node Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-07-03 14:46:43 UTC (rev 3572) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-07-03 15:26:14 UTC (rev 3573) @@ -313,9 +313,9 @@ * @param media media * @return url */ - public static String url(Content media) + public static String url(Object media) { - return urlParams(media, Collections.<String, String> emptyMap()); + return urlParams(node(media), Collections.<String, String> emptyMap()); } /** @@ -324,8 +324,9 @@ * @param options optional parameters * @return url */ - public static String urlParams(Content media, Map<String, String> options) + public static String urlParams(Object mediaref, Map<String, String> options) { + Content media = node(mediaref); if (media == null) { return null; @@ -343,8 +344,11 @@ * @param media media to get the url for * @return the thumbnail url for this media, null otherwise */ - public static String thumbnail(Content media) + public static String thumbnail(Object mediaref) { + + Content media = node(mediaref); + if (media == null) { return null; @@ -362,13 +366,13 @@ * @param media media to get the type * @return the type of this media if existing, null otherwise */ - public static String type(Content media) + public static String type(Object media) { if (media == null) { return null; } - return NodeDataUtil.getString(media, "type"); + return NodeDataUtil.getString(node(media), "type"); } /** @@ -376,9 +380,11 @@ * @param media media to get the resolutions * @return all resolution strings */ - public static String[] resolutions(Content media) + public static String[] resolutions(Object mediaref) { + Content media = node(mediaref); + List<String> res = new ArrayList<String>(); Content resolutions = getResolutionsNode(media); @@ -410,9 +416,11 @@ * @param resolution resolution * @return url */ - public static String urlres(Content media, String resolution) + public static String urlres(Object mediaref, String resolution) { + Content media = node(mediaref); + if (media == null) { return null; @@ -462,8 +470,11 @@ * @param resolution resolution for witch calculate size * @return size of an image */ - public static int[] size(Content media, String resolution) + public static int[] size(Object mediaref, String resolution) { + + Content media = node(mediaref); + if (media != null) { @@ -519,8 +530,11 @@ * @param media media * @return the preview url for this media if existing, null otherwise */ - public static String preview(Content media) + public static String preview(Object mediaref) { + + Content media = node(mediaref); + if (media == null) { return null; @@ -538,8 +552,11 @@ * @param media media to search in web pages * @return an array of String(s) containing a list of web pages where this media is used, an empty array otherwise */ - public static String[] usedInWebPages(Content media) + public static String[] usedInWebPages(Object mediaref) { + + Content media = node(mediaref); + if (media == null) { log.warn("findMediaUsedInWebPages called with a null media"); @@ -569,8 +586,11 @@ * @param property property name * @return the value of the given nodedata or null if not found */ - public static Object property(Content media, String property) + public static Object property(Object mediaref, String property) { + + Content media = node(mediaref); + try { if (media == null || !media.hasNodeData(property)) @@ -592,7 +612,7 @@ * @param media media Content * @return width of the original media, if available */ - public static Integer width(Content media) + public static Integer width(Object media) { Number longproperty = (Number) property(media, MediaTypeHandler.METADATA_WIDTH); if (longproperty != null) @@ -607,7 +627,7 @@ * @param media media Content * @return height of the original media, if available */ - public static Integer height(Content media) + public static Integer height(Object media) { Number longproperty = (Number) property(media, MediaTypeHandler.METADATA_HEIGHT); if (longproperty != null) Modified: trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld 2011-07-03 14:46:43 UTC (rev 3572) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld 2011-07-03 15:26:14 UTC (rev 3573) @@ -160,11 +160,11 @@ </example> </function> <function> - <description>Get the url to the media, given the media node itself</description> + <description>Get the url to the media, given the media node itself or its UUID</description> <display-name>url</display-name> <name>url</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.String url(info.magnolia.cms.core.Content)</function-signature> + <function-signature>java.lang.String url(java.lang.Object)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -180,11 +180,11 @@ <function-signature>java.lang.String getUrl2(info.magnolia.cms.core.Content, java.util.Map)</function-signature> </function> <function> - <description>Get the url to the media, given the media node itself and an options map</description> + <description>Get the url to the media, given the media node itself or its UUID and a Map of options</description> <display-name>url2</display-name> <name>urlParams</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.String urlParams(info.magnolia.cms.core.Content, java.util.Map)</function-signature> + <function-signature>java.lang.String urlParams(java.lang.Object, java.util.Map)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -223,7 +223,7 @@ <display-name>urlres</display-name> <name>urlres</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.String urlres(info.magnolia.cms.core.Content, java.lang.String)</function-signature> + <function-signature>java.lang.String urlres(java.lang.Object, java.lang.String)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -236,7 +236,7 @@ <display-name>resolutions</display-name> <name>resolutions</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.String[] resolutions(info.magnolia.cms.core.Content)</function-signature> + <function-signature>java.lang.String[] resolutions(java.lang.Object)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -251,7 +251,7 @@ <display-name>thumbnail</display-name> <name>thumbnail</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.String thumbnail(info.magnolia.cms.core.Content)</function-signature> + <function-signature>java.lang.String thumbnail(java.lang.Object)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -264,7 +264,7 @@ <display-name>preview</display-name> <name>preview</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.String preview(info.magnolia.cms.core.Content)</function-signature> + <function-signature>java.lang.String preview(java.lang.Object)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -277,7 +277,7 @@ <display-name>type</display-name> <name>type</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.String type(info.magnolia.cms.core.Content)</function-signature> + <function-signature>java.lang.String type(java.lang.Object)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -293,7 +293,7 @@ <display-name>size</display-name> <name>size</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>int[] size(info.magnolia.cms.core.Content, java.lang.String)</function-signature> + <function-signature>int[] size(java.lang.Object, java.lang.String)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -307,7 +307,7 @@ <display-name>usedInWebPages</display-name> <name>usedInWebPages</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.String[] usedInWebPages(info.magnolia.cms.core.Content)</function-signature> + <function-signature>java.lang.String[] usedInWebPages(java.lang.Object)</function-signature> <example> <![CDATA[ <c:set var="mediaNode" value="${media:node(content.image)}" /> @@ -322,21 +322,21 @@ <display-name>width</display-name> <name>width</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.Integer width(info.magnolia.cms.core.Content)</function-signature> + <function-signature>java.lang.Integer width(java.lang.Object)</function-signature> </function> <function> <description>Returns the height of the *original* media, if available</description> <display-name>height</display-name> <name>height</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.Integer height(info.magnolia.cms.core.Content)</function-signature> + <function-signature>java.lang.Integer height(java.lang.Object)</function-signature> </function> <function> <description>Returns a property (nodeData) of the media, given the media Content and the property name</description> <display-name>property</display-name> <name>property</name> <function-class>net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl</function-class> - <function-signature>java.lang.Object property(info.magnolia.cms.core.Content, java.lang.String)</function-signature> + <function-signature>java.lang.Object property(java.lang.Object, java.lang.String)</function-signature> </function> <function> <description></description> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-03 14:46:49
|
Revision: 3572 http://openutils.svn.sourceforge.net/openutils/?rev=3572&view=rev Author: fgiust Date: 2011-07-03 14:46:43 +0000 (Sun, 03 Jul 2011) Log Message: ----------- [maven-release-plugin] prepare for next development iteration Modified Paths: -------------- trunk/openutils-mgnlmedia/pom.xml Modified: trunk/openutils-mgnlmedia/pom.xml =================================================================== --- trunk/openutils-mgnlmedia/pom.xml 2011-07-03 14:46:33 UTC (rev 3571) +++ trunk/openutils-mgnlmedia/pom.xml 2011-07-03 14:46:43 UTC (rev 3572) @@ -10,7 +10,7 @@ <artifactId>openutils-mgnlmedia</artifactId> <name>SimpleMedia Module for Magnolia CMS</name> <description>SimpleMedia Module for Magnolia CMS: a module for Magnolia CMS for easier management of multimedia assets.</description> - <version>4.4.1</version> + <version>4.4.2-SNAPSHOT</version> <inceptionYear>2008</inceptionYear> <licenses> <license> @@ -24,9 +24,9 @@ <url>http://jira.openmindlab.com/browse/MEDIA</url> </issueManagement> <scm> - <connection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/tags/openutils-mgnlmedia-4.4.1</connection> - <developerConnection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/tags/openutils-mgnlmedia-4.4.1</developerConnection> - <url>http://openutils.svn.sourceforge.net/viewcvs.cgi/openutils/tags/openutils-mgnlmedia-4.4.1</url> + <connection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/trunk/openutils-mgnlmedia</connection> + <developerConnection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/trunk/openutils-mgnlmedia</developerConnection> + <url>http://openutils.svn.sourceforge.net/viewcvs.cgi/openutils/trunk/openutils-mgnlmedia</url> </scm> <build> <resources> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-03 14:46:39
|
Revision: 3571 http://openutils.svn.sourceforge.net/openutils/?rev=3571&view=rev Author: fgiust Date: 2011-07-03 14:46:33 +0000 (Sun, 03 Jul 2011) Log Message: ----------- [maven-release-plugin] copy for tag openutils-mgnlmedia-4.4.1 Added Paths: ----------- tags/openutils-mgnlmedia-4.4.1/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-03 14:46:13
|
Revision: 3570 http://openutils.svn.sourceforge.net/openutils/?rev=3570&view=rev Author: fgiust Date: 2011-07-03 14:46:07 +0000 (Sun, 03 Jul 2011) Log Message: ----------- [maven-release-plugin] prepare release openutils-mgnlmedia-4.4.1 Modified Paths: -------------- trunk/openutils-mgnlmedia/pom.xml Modified: trunk/openutils-mgnlmedia/pom.xml =================================================================== --- trunk/openutils-mgnlmedia/pom.xml 2011-07-03 14:44:13 UTC (rev 3569) +++ trunk/openutils-mgnlmedia/pom.xml 2011-07-03 14:46:07 UTC (rev 3570) @@ -1,5 +1,4 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-parent</artifactId> @@ -11,7 +10,7 @@ <artifactId>openutils-mgnlmedia</artifactId> <name>SimpleMedia Module for Magnolia CMS</name> <description>SimpleMedia Module for Magnolia CMS: a module for Magnolia CMS for easier management of multimedia assets.</description> - <version>4.4.1-SNAPSHOT</version> + <version>4.4.1</version> <inceptionYear>2008</inceptionYear> <licenses> <license> @@ -25,9 +24,9 @@ <url>http://jira.openmindlab.com/browse/MEDIA</url> </issueManagement> <scm> - <connection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/trunk/openutils-mgnlmedia</connection> - <developerConnection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/trunk/openutils-mgnlmedia</developerConnection> - <url>http://openutils.svn.sourceforge.net/viewcvs.cgi/openutils/trunk/openutils-mgnlmedia</url> + <connection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/tags/openutils-mgnlmedia-4.4.1</connection> + <developerConnection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/tags/openutils-mgnlmedia-4.4.1</developerConnection> + <url>http://openutils.svn.sourceforge.net/viewcvs.cgi/openutils/tags/openutils-mgnlmedia-4.4.1</url> </scm> <build> <resources> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-03 14:44:21
|
Revision: 3569 http://openutils.svn.sourceforge.net/openutils/?rev=3569&view=rev Author: fgiust Date: 2011-07-03 14:44:13 +0000 (Sun, 03 Jul 2011) Log Message: ----------- MEDIA-243 File extension for ico files overwritten to "jpg" Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileImage.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap-samples/media/media.samples.xml Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileImage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileImage.java 2011-07-03 14:11:45 UTC (rev 3568) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogFileImage.java 2011-07-03 14:44:13 UTC (rev 3569) @@ -54,6 +54,7 @@ this.getImageExtensions().add("gif"); this.getImageExtensions().add("png"); this.getImageExtensions().add("bmp"); + this.getImageExtensions().add("ico"); } /** Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-07-03 14:11:45 UTC (rev 3568) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-07-03 14:44:13 UTC (rev 3569) @@ -119,7 +119,7 @@ */ public static String RESOLUTION_PROPERTY = "resolution"; - private static final String[] extensions = new String[]{"jpg", "jpeg", "gif", "png" }; + private static final String[] extensions = new String[]{"jpg", "jpeg", "gif", "png", "ico" }; static { @@ -835,14 +835,6 @@ String extension = image.getAttribute(FileProperties.PROPERTY_EXTENSION); if (!Arrays.asList(extensions).contains(extension)) { - try - { - image.setAttribute(FileProperties.PROPERTY_EXTENSION, "jpg"); - } - catch (RepositoryException e) - { - throw new RuntimeException(e); - } extension = "jpg"; } @@ -1087,6 +1079,8 @@ String ext = image.getAttribute(FileProperties.EXTENSION); + log.debug("processing {}, extension {}", image.getHandle(), ext); + try { Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap-samples/media/media.samples.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap-samples/media/media.samples.xml 2011-07-03 14:11:45 UTC (rev 3568) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap-samples/media/media.samples.xml 2011-07-03 14:44:13 UTC (rev 3569) @@ -144,9 +144,6 @@ <sv:property sv:name="jcr:mimeType" sv:type="String"> <sv:value>image/jpeg</sv:value> </sv:property> - <sv:property sv:name="nodeDataTemplate" sv:type="String"> - <sv:value/> - </sv:property> <sv:property sv:name="size" sv:type="String"> <sv:value>14369</sv:value> </sv:property> @@ -154,148 +151,6 @@ <sv:value>320</sv:value> </sv:property> </sv:node> - <sv:node sv:name="resolutions"> - <sv:property sv:name="jcr:primaryType" sv:type="Name"> - <sv:value>mgnl:resolutions</sv:value> - </sv:property> - <sv:property sv:name="jcr:mixinTypes" sv:type="Name" sv:multiple="true"> - <sv:value>mix:lockable</sv:value> - </sv:property> - <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>0ba3409a-286a-48a9-ae13-8dda1b7ad7eb</sv:value> - </sv:property> - <sv:property sv:name="jcr:createdBy" sv:type="String"> - <sv:value>admin</sv:value> - </sv:property> - <sv:node sv:name="MetaData"> - <sv:property sv:name="jcr:primaryType" sv:type="Name"> - <sv:value>mgnl:metaData</sv:value> - </sv:property> - <sv:property sv:name="jcr:createdBy" sv:type="String"> - <sv:value>admin</sv:value> - </sv:property> - <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2011-07-01T17:57:18.047+02:00</sv:value> - </sv:property> - <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> - <sv:value>2011-07-01T17:57:18.047+02:00</sv:value> - </sv:property> - </sv:node> - <sv:node sv:name="res-50x30"> - <sv:property sv:name="jcr:primaryType" sv:type="Name"> - <sv:value>mgnl:resource</sv:value> - </sv:property> - <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>ff1f15ef-27b2-41f6-bf6d-9fa7868f8721</sv:value> - </sv:property> - <sv:property sv:name="extension" sv:type="String"> - <sv:value>jpg</sv:value> - </sv:property> - <sv:property sv:name="fileName" sv:type="String"> - <sv:value>bliptv</sv:value> - </sv:property> - <sv:property sv:name="height" sv:type="String"> - <sv:value>30</sv:value> - </sv:property> - <sv:property sv:name="jcr:data" sv:type="Binary"> - <sv:value>/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAeADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2ewsrWDT4JI0mVFiV/LjVQMnqBxjrzWkLe1MgjYzZDFc+wHB+laelaayaIsRkBeRFIbngYHv9elTLpsoljdph8qKpwW5x360rBoYQj08JkxTg7N+0jn0x161aRreJj5SzoSwTcigZB7/StQadJhcSqSDknJ56+/vVpE+y2qJgMQMZJJz+fNMDHsAZ0fc9xICM4mOCvUY4HSmLBJBchIpHt4dnyq3K8enI9R+Vblu2+d2AAyi9Pq1NuokluYg4zhHI5x/dod+gHmWo2rf2hc4mUjzW6KfU+9FNu3f7VNz/ABt/OilcD0C0inisbHF3K29FBDAf3c+ntVtY5iwBuX59hVWe4W10iwmcEqoTgdfuEU6z1FLiJJkRgpPQ9euKYFi2sGt0CRXMgQdF2qAOc9hUrWzsCGuHIPYgU37aP7h/Ol+2D+4fzoAfaW32fdmR5CcDLY9/8aJf+PqP/rm/81qtd6rHaxh5I2IJx8p9s/0pYbpbmeJ1UqDEzDPvtoA8xu8/apv99v50Ut5/x9z/AO+386KQH//Z</sv:value> - </sv:property> - <sv:property sv:name="jcr:lastModified" sv:type="Date"> - <sv:value>2011-07-01T17:57:18.051+02:00</sv:value> - </sv:property> - <sv:property sv:name="jcr:lastModifiedBy" sv:type="String"> - <sv:value>admin</sv:value> - </sv:property> - <sv:property sv:name="jcr:mimeType" sv:type="String"> - <sv:value>image/jpeg</sv:value> - </sv:property> - <sv:property sv:name="resolution" sv:type="String"> - <sv:value>res-50x30</sv:value> - </sv:property> - <sv:property sv:name="size" sv:type="String"> - <sv:value>1029</sv:value> - </sv:property> - <sv:property sv:name="width" sv:type="String"> - <sv:value>50</sv:value> - </sv:property> - </sv:node> - <sv:node sv:name="res-640x460"> - <sv:property sv:name="jcr:primaryType" sv:type="Name"> - <sv:value>mgnl:resource</sv:value> - </sv:property> - <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>f44d4f07-c8b4-4d19-8952-5ad9b682e6e7</sv:value> - </sv:property> - <sv:property sv:name="extension" sv:type="String"> - <sv:value>jpg</sv:value> - </sv:property> - <sv:property sv:name="fileName" sv:type="String"> - <sv:value>bliptv</sv:value> - </sv:property> - <sv:property sv:name="height" sv:type="String"> - <sv:value>460</sv:value> - </sv:property> - <sv:property sv:name="jcr:data" sv:type="Binary"> - <sv:value>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</sv:value> - </sv:property> - <sv:property sv:name="jcr:lastModified" sv:type="Date"> - <sv:value>2011-07-01T17:57:18.271+02:00</sv:value> - </sv:property> - <sv:property sv:name="jcr:lastModifiedBy" sv:type="String"> - <sv:value>admin</sv:value> - </sv:property> - <sv:property sv:name="jcr:mimeType" sv:type="String"> - <sv:value>image/jpeg</sv:value> - </sv:property> - <sv:property sv:name="resolution" sv:type="String"> - <sv:value>res-640x460</sv:value> - </sv:property> - <sv:property sv:name="size" sv:type="String"> - <sv:value>35805</sv:value> - </sv:property> - <sv:property sv:name="width" sv:type="String"> - <sv:value>640</sv:value> - </sv:property> - </sv:node> - <sv:node sv:name="thumbnail"> - <sv:property sv:name="jcr:primaryType" sv:type="Name"> - <sv:value>mgnl:resource</sv:value> - </sv:property> - <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>c252cc32-9e75-4b9b-81f6-0d907feb38f6</sv:value> - </sv:property> - <sv:property sv:name="extension" sv:type="String"> - <sv:value>jpg</sv:value> - </sv:property> - <sv:property sv:name="fileName" sv:type="String"> - <sv:value>bliptv</sv:value> - </sv:property> - <sv:property sv:name="height" sv:type="String"> - <sv:value>75</sv:value> - </sv:property> - <sv:property sv:name="jcr:data" sv:type="Binary"> - <sv:value>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... [truncated message content] |
From: <fg...@us...> - 2011-07-03 14:11:53
|
Revision: 3568 http://openutils.svn.sourceforge.net/openutils/?rev=3568&view=rev Author: fgiust Date: 2011-07-03 14:11:45 +0000 (Sun, 03 Jul 2011) Log Message: ----------- MEDIA-230 process CMYK images also if not marked as CMYK - fixes "Color conversion error during thumbnail creation" Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/JpegUtils.java trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ZeroSizeImageException.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-07-01 18:55:18 UTC (rev 3567) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-07-03 14:11:45 UTC (rev 3568) @@ -829,10 +829,7 @@ if (image.getContentLength() == 0) { - throw new RuntimeException("Invalid image nodedata " - + image.getHandle() - + ", size " - + image.getContentLength()); + throw new ZeroSizeImageException(image.getHandle()); } String extension = image.getAttribute(FileProperties.PROPERTY_EXTENSION); @@ -937,6 +934,11 @@ } return false; } + catch (ZeroSizeImageException ex) + { + log.error(ex.getMessage()); + return false; + } catch (RuntimeException ex) { log.error(ClassUtils.getShortClassName(ex.getClass()) @@ -1141,6 +1143,26 @@ return result; } + catch (IllegalArgumentException e) + { + // java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do + // not match + // at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:460) + // at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1169) + // at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method) + // at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1137) + // at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:948) + BufferedImage result = JpegUtils.processNonStandardImage(image); + + if (result == null) + { + // throw the original exception back + throw new BadImageFormatException("Unable to handle " + image.getHandle(), e); + } + return result; + + } + finally { IOUtils.closeQuietly(is); Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/JpegUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/JpegUtils.java 2011-07-01 18:55:18 UTC (rev 3567) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/JpegUtils.java 2011-07-03 14:11:45 UTC (rev 3568) @@ -44,6 +44,7 @@ import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.imaging.jpeg.JpegSegmentReader; +import com.sun.image.codec.jpeg.ImageFormatException; /** @@ -147,6 +148,7 @@ */ public static BufferedImage processNonStandardImage(NodeData image) { + log.debug("Processing {}", image.getHandle()); InputStream is2 = image.getStream(); try { @@ -209,16 +211,24 @@ if (ycckProfile) { + // CMYK/YCCK image, need to process it manually return createJPEG4(raster, ycckProfile); } else { + // may be either an RGB or CMYK image, try and see if it's RGB first InputStream is4 = image.getStream(); try { // see MEDIA-72, we need the sun codec to make this work properly return com.sun.image.codec.jpeg.JPEGCodec.createJPEGDecoder(is4).decodeAsBufferedImage(); } + catch (ImageFormatException ife) + { + // ImageFormatException: Can't construct a BufferedImage for given COLOR_ID + // try also with CMYK? + return createJPEG4(raster, ycckProfile); + } finally { IOUtils.closeQuietly(is4); Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ZeroSizeImageException.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ZeroSizeImageException.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ZeroSizeImageException.java 2011-07-03 14:11:45 UTC (rev 3568) @@ -0,0 +1,43 @@ +/** + * + * SimpleMedia Module for Magnolia CMS (http://www.openmindlab.com/lab/products/media.html) + * Copyright(C) 2008-2011, Openmind S.r.l. http://www.openmindonline.it + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package net.sourceforge.openutils.mgnlmedia.media.utils; + +/** + * Exception for images with an empty content (0 bytes) + * @author fgiust + * @version $Id$ + */ +public class ZeroSizeImageException extends RuntimeException +{ + + /** + * Stable serialVersionUID. + */ + private static final long serialVersionUID = 42L; + + /** + * @param message + */ + public ZeroSizeImageException(String message) + { + super("Invalid image data (0 bytes) for " + message); + } + +} Property changes on: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ZeroSizeImageException.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2011-07-01 18:55:18 UTC (rev 3567) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2011-07-03 14:11:45 UTC (rev 3568) @@ -163,3 +163,5 @@ config.search.filters.modified=Modified since config.search.filters.path=Path config.search.filters.sorting=Sorting + +media.info.media_originalpath=Original path: {0} Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2011-07-01 18:55:18 UTC (rev 3567) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2011-07-03 14:11:45 UTC (rev 3568) @@ -166,3 +166,5 @@ config.search.filters.modified=Modificato dal config.search.filters.path=Percorso config.search.filters.sorting=Ordinamento + +media.info.media_originalpath=Posizione originale: {0} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-07-01 18:55:27
|
Revision: 3567 http://openutils.svn.sourceforge.net/openutils/?rev=3567&view=rev Author: fgiust Date: 2011-07-01 18:55:18 +0000 (Fri, 01 Jul 2011) Log Message: ----------- MEDIA-242 Update jwplayer 5 to latest version (5.7) and add html5 fallback Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/media.tag trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player.tag trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/swfobject.tag trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap-samples/media/media.samples.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer5/player.swf Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-genericswfobject.tag trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-jwplayer5.tag trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer4/ trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer4/player.swf trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer4/yt.swf trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer5/jwplayer.js trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer5/license.txt trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer5/readme.html trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer5/swfobject.js trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/players/jwplayer5/version.txt Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2011-07-01 15:07:53 UTC (rev 3566) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2011-07-01 18:55:18 UTC (rev 3567) @@ -97,7 +97,7 @@ ContentRepository.CONFIG, "/modules/media/config", "player", - "jwplayer4")); + "jwplayer5")); tasks.add(new CreateMissingPropertyTask( ContentRepository.CONFIG, Modified: trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld 2011-07-01 15:07:53 UTC (rev 3566) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld 2011-07-01 18:55:18 UTC (rev 3567) @@ -25,6 +25,18 @@ <path>/META-INF/tags/media/player.tag</path> </tag-file> <tag-file> + <description>generic flash player with swfobject</description> + <display-name>player: generic flash player with swfobject</display-name> + <name>player-genericswfobject</name> + <path>/META-INF/tags/media/player-genericswfobject.tag</path> + </tag-file> + <tag-file> + <description>jwplayer 5</description> + <display-name>jwplayer 5</display-name> + <name>player-jwplayer5</name> + <path>/META-INF/tags/media/player-jwplayer5.tag</path> + </tag-file> + <tag-file> <description>Renders the flash-content and the javascript for replacing it</description> <display-name>Swfobject Tag</display-name> <name>swfobject</name> Modified: trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/media.tag =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/media.tag 2011-07-01 15:07:53 UTC (rev 3566) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/media.tag 2011-07-01 18:55:18 UTC (rev 3567) @@ -141,19 +141,21 @@ <c:when test="${media.type eq 'video' or media.type eq 'audio' or media.type eq 'youtube' }"> <c:set var="url" value="${media:url(mediaNode)}"/> - <!-- - deprecated: starting from version 4.1 youtube preview images are imported in the media repository - when linking a new video. This is here only for backward compatibility - --> - <c:choose> - <c:when test="${media.type eq 'youtube' and fn:startsWith(url, 'http://www.youtube')}"> - <!-- automatically extract preview image for youtube videos from url --> - <c:set var="preview">http://img.youtube.com/vi/${su:substringAfterLast(url, 'v=')}/0.jpg</c:set> - </c:when> - </c:choose> - <media:player url="${url}" + + + + + + + <c:choose> + <c:when test="${su:endsWith(fn:toLowerCase(url), 'swf')}"> + <media:swfobject player="${url}" width="${width}" height="${height}" /> + </c:when> + <c:otherwise> + + <media:player url="${url}" preview="${preview}" player="${player}" share="${share}" @@ -166,6 +168,12 @@ noPlayIcon="${noPlayIcon}" controlbar="${controlbar}" skin="${skin}"/> + + </c:otherwise> + </c:choose> + + + </c:when> </c:choose> </c:when> Added: trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-genericswfobject.tag =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-genericswfobject.tag (rev 0) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-genericswfobject.tag 2011-07-01 18:55:18 UTC (rev 3567) @@ -0,0 +1,77 @@ +<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" + xmlns:cms="cms-taglib" xmlns:cmsfn="http://www.magnolia.info/tlds/cmsfn-taglib.tld" xmlns:cmsu="cms-util-taglib" + xmlns:fmt="http://java.sun.com/jsp/jstl/fmt" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:media="http://net.sourceforge.openutils/mgnlMedia" + xmlns:su="http://openutils.sf.net/openutils-stringutils"> + <jsp:directive.attribute name="url" required="true" rtexprvalue="true" type="java.lang.String" + description="Url for the flv that will be loaded by the player" /> + <jsp:directive.attribute name="preview" required="false" rtexprvalue="true" type="java.lang.String" + description="Preview image url" /> + <jsp:directive.attribute name="item" required="true" rtexprvalue="true" type="java.lang.Object" + description="media uuid or media content node " /> + <jsp:directive.attribute name="playerPath" required="true" rtexprvalue="true" type="java.lang.String" + description="the swf file of the player (examples: /.resources/media/players/someplayer/player.swf)" /> + <jsp:directive.attribute name="width" required="false" rtexprvalue="true" type="java.lang.Integer" + description="image or player width" /> + <jsp:directive.attribute name="height" required="false" rtexprvalue="true" type="java.lang.Integer" + description="image or player height" /> + <jsp:directive.attribute name="ignoreDim" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="if true the img element will be rendered without width and height attributes " /> + <jsp:directive.attribute name="autoPlay" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="auto starts the player without waiting for user play command" /> + <jsp:directive.attribute name="loop" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="loop video or audio" /> + <jsp:directive.attribute name="noPlayIcon" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="hide player icons" /> + <jsp:directive.attribute name="skin" required="false" rtexprvalue="true" description="set player skin" /> + <jsp:directive.attribute name="thumbnail" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="if set to true the preview of the player shows the thumbnail image" /> + <jsp:directive.attribute name="controlbar" required="false" rtexprvalue="true" type="java.lang.String" + description="defines controlbar position. Possible values are: 'none' (for hiding), 'over', 'bottom', 'top'. If not set, this value will be 'bottom' by default." /> + <jsp:directive.attribute name="share" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="Adds the share features to the player (copy page url and embed code)" /> + <c:set var="flashvars"> + <c:choose> + <c:when test="${fn:startsWith(url, 'rtmp:') or fn:startsWith(url, 'rtmpt:')}"> + <c:set var="file" value="${fn:split(url, '/')}" /> + <c:set var="file" value="${file[fn:length(file)-1]}" /> + <![CDATA[file=${file}&streamer=${fn:substring(url, 0, fn:length(url) - fn:length(file))}]]> + </c:when> + <c:otherwise> + <![CDATA[file=${fn:contains(url, '://')? '' : pageContext.request.contextPath}${url}]]> + </c:otherwise> + </c:choose> + <c:if test="${fn:startsWith(url, 'http://www.youtube')}"> + <![CDATA[&type=youtube]]> + </c:if> + <c:if test="${!empty controlbar}"> + <![CDATA[&controlbar=${controlbar}]]> + </c:if> + <c:if test="${autoPlay}"> + <![CDATA[&autostart=true]]> + </c:if> + <c:if test="${loop}"> + <![CDATA[&repeat=always]]> + </c:if> + <c:if test="${noPlayIcon}"> + <![CDATA[&icons=false]]> + </c:if> + <c:if test="${not empty skin}"> + <![CDATA[&skin=${skin}]]> + </c:if> + <c:if test="${thumbnail and !empty preview}"> + <![CDATA[&image=${preview}]]> + </c:if> + <c:if test="${share}"> + <c:set var="sharinglink">${baseUrl}${actpage.handle}.html</c:set> + <c:set var="sharingcode"> + <embed src="${playerPath}" flashvars="file=${fn:contains(url, '://')? '' : baseUrl}${url}" width="${width}" + height="${height}" /> + </c:set> + <![CDATA[&plugins=sharing-1]]> + <![CDATA[&sharing.link=${sharinglink}]]> + <![CDATA[&sharing.code=${fn:escapeXml(sharingcode)}]]> + </c:if> + </c:set> + <media:swfobject player="${playerPath}" width="${width}" height="${height}" allowfullscreen="true" + allowscriptaccess="always" wmode="opaque" flashvars="${flashvars}" /> +</jsp:root> \ No newline at end of file Property changes on: trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-genericswfobject.tag ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:eol-style + native Added: trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-jwplayer5.tag =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-jwplayer5.tag (rev 0) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-jwplayer5.tag 2011-07-01 18:55:18 UTC (rev 3567) @@ -0,0 +1,111 @@ +<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" + xmlns:cms="cms-taglib" xmlns:cmsfn="http://www.magnolia.info/tlds/cmsfn-taglib.tld" xmlns:cmsu="cms-util-taglib" + xmlns:fmt="http://java.sun.com/jsp/jstl/fmt" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:media="http://net.sourceforge.openutils/mgnlMedia" + xmlns:su="http://openutils.sf.net/openutils-stringutils"> + <jsp:directive.tag description="Renders the audio or video player" pageEncoding="UTF-8" /> + <jsp:directive.attribute name="url" required="true" rtexprvalue="true" type="java.lang.String" + description="Url for the flv that will be loaded by the player" /> + <jsp:directive.attribute name="preview" required="false" rtexprvalue="true" type="java.lang.String" + description="Preview image url" /> + <jsp:directive.attribute name="item" required="true" rtexprvalue="true" type="java.lang.Object" + description="media uuid or media content node " /> + <jsp:directive.attribute name="width" required="false" rtexprvalue="true" type="java.lang.Integer" + description="image or player width" /> + <jsp:directive.attribute name="height" required="false" rtexprvalue="true" type="java.lang.Integer" + description="image or player height" /> + <jsp:directive.attribute name="ignoreDim" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="if true the img element will be rendered without width and height attributes " /> + <jsp:directive.attribute name="autoPlay" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="auto starts the player without waiting for user play command" /> + <jsp:directive.attribute name="loop" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="loop video or audio" /> + <jsp:directive.attribute name="noPlayIcon" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="hide player icons" /> + <jsp:directive.attribute name="skin" required="false" rtexprvalue="true" description="set player skin" /> + <jsp:directive.attribute name="thumbnail" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="if set to true the preview of the player shows the thumbnail image" /> + <jsp:directive.attribute name="controlbar" required="false" rtexprvalue="true" type="java.lang.String" + description="defines controlbar position. Possible values are: 'none' (for hiding), 'over', 'bottom', 'top'. If not set, this value will be 'bottom' by default." /> + <jsp:directive.attribute name="share" required="false" rtexprvalue="true" type="java.lang.Boolean" + description="Adds the share features to the player (copy page url and embed code)" /> + <c:if test="${empty requestScope['mgnlmedia_jwplayer5_link_drawn']}"> + <script type="text/javascript" src="${pageContext.request.contextPath}/.resources/media/players/jwplayer5/jwplayer.js"><!-- --> + </script> + <c:set var="mgnlmedia_jwplayer5_link_drawn" scope="request" value="true" /> + </c:if> + + <c:set var="previewId" value="preview-${su:randomAlphanumeric(6)}" /> + <div id="${previewId}" class="preview"><!-- --> + </div> + <script type="text/javascript"> + <![CDATA[ +jwplayer("${previewId}").setup({ +autostart: ${autoPlay? 'true' : 'false'}, +controlbar: "${controlbar}", +repeat: "${loop? 'always': 'none'}", +icons: "${noPlayIcon? 'false': 'true'}", +width: ${width}, +height: ${height}, +]]> + <c:if test="${not empty skin}">skin:"${skin}",</c:if> + <c:if test="${thumbnail and !empty preview}"> image:"${preview}",</c:if> + <c:if test="${share}"> + <c:set var="sharinglink">${baseUrl}${actpage.handle}.html</c:set> + <c:set var="sharingcode"> + <embed src="${playerPath}" flashvars="file=${fn:contains(url, '://')? '' : baseUrl}${url}" width="${width}" + height="${height}" /> + </c:set> + <![CDATA[plugins: "sharing-2",']]> + <![CDATA[sharing.link: "${sharinglink}",]]> + <![CDATA[sharing.code: "${fn:escapeXml(sharingcode)",}]]> + </c:if> + <c:choose> + <c:when test="${fn:startsWith(url, 'rtmp:') or fn:startsWith(url, 'rtmpt:')}"> + <c:set var="file" value="${fn:split(url, '/')}" /> + <c:set var="file" value="${file[fn:length(file)-1]}" /> + <![CDATA[ + file:"${file}", + streamer: "${fn:substring(url, 0, fn:length(url) - fn:length(file))}", + ]]> + </c:when> + <c:otherwise> file:"${fn:contains(url, '://')? '' : pageContext.request.contextPath}${url}",</c:otherwise> + </c:choose> + + + <![CDATA[ +modes: [ + { type: "flash", + src: "${pageContext.request.contextPath}/.resources/media/players/jwplayer5/player.swf" + }, + { type: "html5" }, + { type: "download" } +] +}); +]]> + </script> + + + <!-- + + + + + + + + + + --> + <c:set var="flashvars"> + <c:choose> + <c:when test="${fn:startsWith(url, 'rtmp:') or fn:startsWith(url, 'rtmpt:')}"> + <c:set var="file" value="${fn:split(url, '/')}" /> + <c:set var="file" value="${file[fn:length(file)-1]}" /> + <![CDATA[file=${file}&streamer=${fn:substring(url, 0, fn:length(url) - fn:length(file))}]]> + </c:when> + <c:otherwise> + <![CDATA[file=${fn:contains(url, '://')? '' : pageContext.request.contextPath}${url}]]> + </c:otherwise> + </c:choose> + </c:set> +</jsp:root> \ No newline at end of file Property changes on: trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player-jwplayer5.tag ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:eol-style + native Modified: trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player.tag =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player.tag 2011-07-01 15:07:53 UTC (rev 3566) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/player.tag 2011-07-01 18:55:18 UTC (rev 3567) @@ -75,55 +75,25 @@ </c:if> <c:if test="${!empty(url)}"> <c:choose> - <c:when test="${su:endsWith(fn:toLowerCase(url), 'swf')}"> - <media:swfobject player="${url}" width="${width}" height="${height}" /> + <c:when test="${player eq 'jwplayer5' or player eq 'jwplayer'}"> + <media:player-jwplayer5 url="${url}" preview="${preview}" share="${share}" + item="${item}" width="${width}" height="${height}" autoPlay="${autoPlay}" loop="${loop}" thumbnail="${thumbnail}" + noPlayIcon="${noPlayIcon}" controlbar="${controlbar}" skin="${skin}" /> </c:when> <c:otherwise> - <c:set var="flashvars"> + <c:choose> + <c:when test="${player eq 'jwplayer4'}"> + <c:set var="player" value="jwplayer4/player.swf" /> + </c:when> + </c:choose> + <c:set var="playerPath"> <c:choose> - <c:when test="${fn:startsWith(url, 'rtmp:') or fn:startsWith(url, 'rtmpt:')}"> - <c:set var="file" value="${fn:split(url, '/')}" /> - <c:set var="file" value="${file[fn:length(file)-1]}" /> - <![CDATA[file=${file}&streamer=${fn:substring(url, 0, fn:length(url) - fn:length(file))}]]> - </c:when> - <c:otherwise> - <![CDATA[file=${fn:contains(url, '://')? '' : pageContext.request.contextPath}${url}]]> - </c:otherwise> + <c:when test="${!fn:startsWith(player, '/')}">${pageContext.request.contextPath}/.resources/media/players/${player}</c:when> </c:choose> - <c:if test="${fn:startsWith(url, 'http://www.youtube')}"> - <![CDATA[&type=youtube]]> - </c:if> - <c:if test="${!empty controlbar}"> - <![CDATA[&controlbar=${controlbar}]]> - </c:if> - <c:if test="${autoPlay}"> - <![CDATA[&autostart=true]]> - </c:if> - <c:if test="${loop}"> - <![CDATA[&repeat=always]]> - </c:if> - <c:if test="${noPlayIcon}"> - <![CDATA[&icons=false]]> - </c:if> - <c:if test="${not empty skin}"> - <![CDATA[&skin=${skin}]]> - </c:if> - <c:if test="${thumbnail and !empty preview}"> - <![CDATA[&image=${preview}]]> - </c:if> - <c:if test="${share}"> - <c:set var="sharinglink">${baseUrl}${actpage.handle}.html</c:set> - <c:set var="sharingcode"> - <embed src="${baseUrl}/.resources/media/players/player.swf" flashvars="file=${fn:contains(url, '://')? '' : baseUrl}${url}" - width="${width}" height="${height}" /> - </c:set> - <![CDATA[&plugins=sharing-1]]> - <![CDATA[&sharing.link=${sharinglink}]]> - <![CDATA[&sharing.code=${fn:escapeXml(sharingcode)}]]> - </c:if> </c:set> - <media:swfobject player="${player}" width="${width}" height="${height}" allowfullscreen="true" - allowscriptaccess="always" wmode="opaque" flashvars="${flashvars}" /> + <media:player-genericswfobject url="${url}" preview="${preview}" playerPath="${playerPath}" + share="${share}" item="${item}" width="${width}" height="${height}" autoPlay="${autoPlay}" loop="${loop}" + thumbnail="${thumbnail}" noPlayIcon="${noPlayIcon}" controlbar="${controlbar}" skin="${skin}" /> </c:otherwise> </c:choose> </c:if> Modified: trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/swfobject.tag =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/swfobject.tag 2011-07-01 15:07:53 UTC (rev 3566) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/tags/media/swfobject.tag 2011-07-01 18:55:18 UTC (rev 3567) @@ -19,23 +19,10 @@ </script> <c:set var="mgnlmedia_swfobject_link_drawn" scope="request" value="true" /> </c:if> - <c:choose> - <c:when test="${player eq 'jwplayer4'}"> - <c:set var="player" value="player.swf" /> - </c:when> - <c:when test="${player eq 'jwplayer5'}"> - <c:set var="player" value="jwplayer5/player.swf" /> - </c:when> - </c:choose> - <c:set var="playerPath"> - <c:choose> - <c:when test="${fn:startsWith(player, '/')}">${pageContext.request.contextPath}${player}</c:when> - <c:otherwise>${pageContext.request.contextPath}/.resources/media/players/${player}</c:otherwise> - </c:choose> - </c:set> + <script type='text/javascript'> <![CDATA[ - var swfobject = new SWFObject('${playerPath}','player','${width}','${height}','9','#ffffff');]]> + var swfobject = new SWFObject('${player}','player','${width}','${height}','9','#ffffff');]]> <c:forEach var="attr" items="${attrs}"> <c:if test="${!empty attr.value}"> <![CDATA[ @@ -51,7 +38,7 @@ <c:if test="${debug}"> <pre> <![CDATA[ - var swfobject = new SWFObject('${playerPath}','player','${width}','${height}','9','#ffffff');]]> + var swfobject = new SWFObject('${fn:startsWith(player, '/')? pageContext.request.contextPath:''}${player}','player','${width}','${height}','9','#ffffff');]]> <c:forEach var="attr" items="${attrs}"> <c:if test="${!empty attr.value}"> <![CDATA[ Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap-samples/media/media.samples.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap-samples/media/media.samples.xml 2011-07-01 15:07:53 UTC (rev 3566) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap-samples/media/media.samples.xml 2011-07-01 18:55:18 UTC (rev 3567) @@ -3,7 +3,7 @@ <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>mgnl:content</sv:value> </sv:property> - <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name" sv:multiple="true"> <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> @@ -42,7 +42,7 @@ <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>mgnl:media</sv:value> </sv:property> - <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name" sv:multiple="true"> <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> @@ -154,12 +154,154 @@ <sv:value>320</sv:value> </sv:property> </sv:node> + <sv:node sv:name="resolutions"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:resolutions</sv:value> + </sv:property> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name" sv:multiple="true"> + <sv:value>mix:lockable</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>0ba3409a-286a-48a9-ae13-8dda1b7ad7eb</sv:value> + </sv:property> + <sv:property sv:name="jcr:createdBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:node sv:name="MetaData"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:metaData</sv:value> + </sv:property> + <sv:property sv:name="jcr:createdBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:property sv:name="mgnl:creationdate" sv:type="Date"> + <sv:value>2011-07-01T17:57:18.047+02:00</sv:value> + </sv:property> + <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> + <sv:value>2011-07-01T17:57:18.047+02:00</sv:value> + </sv:property> + </sv:node> + <sv:node sv:name="res-50x30"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:resource</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>ff1f15ef-27b2-41f6-bf6d-9fa7868f8721</sv:value> + </sv:property> + <sv:property sv:name="extension" sv:type="String"> + <sv:value>jpg</sv:value> + </sv:property> + <sv:property sv:name="fileName" sv:type="String"> + <sv:value>bliptv</sv:value> + </sv:property> + <sv:property sv:name="height" sv:type="String"> + <sv:value>30</sv:value> + </sv:property> + <sv:property sv:name="jcr:data" sv:type="Binary"> + <sv:value>/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAeADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2ewsrWDT4JI0mVFiV/LjVQMnqBxjrzWkLe1MgjYzZDFc+wHB+laelaayaIsRkBeRFIbngYHv9elTLpsoljdph8qKpwW5x360rBoYQj08JkxTg7N+0jn0x161aRreJj5SzoSwTcigZB7/StQadJhcSqSDknJ56+/vVpE+y2qJgMQMZJJz+fNMDHsAZ0fc9xICM4mOCvUY4HSmLBJBchIpHt4dnyq3K8enI9R+Vblu2+d2AAyi9Pq1NuokluYg4zhHI5x/dod+gHmWo2rf2hc4mUjzW6KfU+9FNu3f7VNz/ABt/OilcD0C0inisbHF3K29FBDAf3c+ntVtY5iwBuX59hVWe4W10iwmcEqoTgdfuEU6z1FLiJJkRgpPQ9euKYFi2sGt0CRXMgQdF2qAOc9hUrWzsCGuHIPYgU37aP7h/Ol+2D+4fzoAfaW32fdmR5CcDLY9/8aJf+PqP/rm/81qtd6rHaxh5I2IJx8p9s/0pYbpbmeJ1UqDEzDPvtoA8xu8/apv99v50Ut5/x9z/AO+386KQH//Z</sv:value> + </sv:property> + <sv:property sv:name="jcr:lastModified" sv:type="Date"> + <sv:value>2011-07-01T17:57:18.051+02:00</sv:value> + </sv:property> + <sv:property sv:name="jcr:lastModifiedBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:property sv:name="jcr:mimeType" sv:type="String"> + <sv:value>image/jpeg</sv:value> + </sv:property> + <sv:property sv:name="resolution" sv:type="String"> + <sv:value>res-50x30</sv:value> + </sv:property> + <sv:property sv:name="size" sv:type="String"> + <sv:value>1029</sv:value> + </sv:property> + <sv:property sv:name="width" sv:type="String"> + <sv:value>50</sv:value> + </sv:property> + </sv:node> + <sv:node sv:name="res-640x460"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:resource</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>f44d4f07-c8b4-4d19-8952-5ad9b682e6e7</sv:value> + </sv:property> + <sv:property sv:name="extension" sv:type="String"> + <sv:value>jpg</sv:value> + </sv:property> + <sv:property sv:name="fileName" sv:type="String"> + <sv:value>bliptv</sv:value> + </sv:property> + <sv:property sv:name="height" sv:type="String"> + <sv:value>460</sv:value> + </sv:property> + <sv:property sv:name="jcr:data" sv:type="Binary"> + <sv:value>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... [truncated message content] |
From: <hu...@op...> - 2011-07-01 15:38:11
|
See <https://hudson.openmindonline.it/job/openutils-mgnlmedia/409/changes> |
From: <hu...@op...> - 2011-07-01 15:38:05
|
See <https://hudson.openmindonline.it/job/openutils-mgnlmedia/net.sourceforge.openutils$openutils-mgnlmedia/409/changes> |
From: <fg...@us...> - 2011-07-01 15:08:00
|
Revision: 3566 http://openutils.svn.sourceforge.net/openutils/?rev=3566&view=rev Author: fgiust Date: 2011-07-01 15:07:53 +0000 (Fri, 01 Jul 2011) Log Message: ----------- update tests Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-06-30 12:28:09 UTC (rev 3565) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-07-01 15:07:53 UTC (rev 3566) @@ -34,6 +34,7 @@ import java.awt.Point; import java.awt.RenderingHints; import java.awt.Transparency; +import java.awt.color.CMMException; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; @@ -583,11 +584,11 @@ * @param extension target file extension * @param quality image quality * @param forceProgressive true if image has to be saved as progressive mode - * @return inputstream + * @return byte count * @throws IOException */ public static long getStream(BufferedImage image, String extension, float quality, boolean forceProgressive, - PipedOutputStream outputstream) throws IOException + OutputStream outputstream) throws IOException { CountBytesBufferedOutputStream out = new CountBytesBufferedOutputStream(outputstream); @@ -1121,6 +1122,25 @@ return result; } + catch (CMMException e) + { + // CMMException is thrown for non-standard jpegs? + // Invalid image format + // java.awt.color.CMMException: Invalid image format + // at sun.awt.color.CMM.checkStatus(CMM.java:131) + // at sun.awt.color.ICC_Transform.<init>(ICC_Transform.java:89) + // at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:516) + // at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1169) + BufferedImage result = JpegUtils.processNonStandardImage(image); + + if (result == null) + { + // throw the original exception back + throw new BadImageFormatException("Unable to handle " + image.getHandle(), e); + } + return result; + + } finally { IOUtils.closeQuietly(is); Modified: trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java =================================================================== --- trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java 2011-06-30 12:28:09 UTC (rev 3565) +++ trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java 2011-07-01 15:07:53 UTC (rev 3566) @@ -26,7 +26,6 @@ import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; -import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; @@ -75,13 +74,11 @@ bufferedImage = ImageUtils.resizeImage(bufferedImage, 100, 100); - InputStream is = ImageUtils.getStream(bufferedImage, "jpg", 1.0F, false); - File tempFile = File.createTempFile("image", ".jpg"); OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); - IOUtils.copy(is, os); - IOUtils.closeQuietly(is); + ImageUtils.getStream(bufferedImage, "jpg", 1.0F, false, os); + IOUtils.closeQuietly(os); tempFile.delete(); @@ -102,13 +99,11 @@ bufferedImage = ImageUtils.resizeImage(bufferedImage, 100, 100); - InputStream is = ImageUtils.getStream(bufferedImage, "jpg", 1.0F, false); - File tempFile = File.createTempFile("image", ".jpg"); OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); - IOUtils.copy(is, os); - IOUtils.closeQuietly(is); + ImageUtils.getStream(bufferedImage, "jpg", 1.0F, false, os); + IOUtils.closeQuietly(os); tempFile.delete(); @@ -130,13 +125,10 @@ parameters.put("background", "FF0096"); bufferedImage = ImageUtils.getImageForResolution(bufferedImage, "O300x300;background=FF0096", parameters); - InputStream is = ImageUtils.getStream(bufferedImage, "png", 1.0F, false); - File tempFile = File.createTempFile("image", ".png"); OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); - IOUtils.copy(is, os); + ImageUtils.getStream(bufferedImage, "png", 1.0F, false, os); - IOUtils.closeQuietly(is); IOUtils.closeQuietly(os); tempFile.delete(); @@ -191,13 +183,11 @@ bufferedImage = ImageUtils.resizeImage(bufferedImage, 1, 1); - InputStream is = ImageUtils.getStream(bufferedImage, "gif", 0.8F, false); - File tempFile = File.createTempFile("image", ".gif"); OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); - IOUtils.copy(is, os); - IOUtils.closeQuietly(is); + ImageUtils.getStream(bufferedImage, "gif", 0.8F, false, os); + IOUtils.closeQuietly(os); tempFile.delete(); @@ -218,13 +208,11 @@ bufferedImage = ImageUtils.resizeImage(bufferedImage, 200, 200); - InputStream is = ImageUtils.getStream(bufferedImage, "gif", 0.8F, false); - File tempFile = File.createTempFile("image", ".gif"); OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); - IOUtils.copy(is, os); - IOUtils.closeQuietly(is); + ImageUtils.getStream(bufferedImage, "gif", 0.8F, false, os); + IOUtils.closeQuietly(os); tempFile.delete(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-06-30 12:28:15
|
Revision: 3565 http://openutils.svn.sourceforge.net/openutils/?rev=3565&view=rev Author: diego_schivo Date: 2011-06-30 12:28:09 +0000 (Thu, 30 Jun 2011) Log Message: ----------- update dependencies Modified Paths: -------------- trunk/magnolia-test-webapp/pom.xml Modified: trunk/magnolia-test-webapp/pom.xml =================================================================== --- trunk/magnolia-test-webapp/pom.xml 2011-06-25 11:42:08 UTC (rev 3564) +++ trunk/magnolia-test-webapp/pom.xml 2011-06-30 12:28:09 UTC (rev 3565) @@ -122,7 +122,7 @@ <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-mgnlcache</artifactId> - <version>1.0.2-SNAPSHOT</version> + <version>1.1.3-SNAPSHOT</version> </dependency> <dependency> <groupId>net.sourceforge.openutils</groupId> @@ -176,7 +176,7 @@ <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-mgnlutils</artifactId> - <version>1.0.8-SNAPSHOT</version> + <version>1.0.9-SNAPSHOT</version> </dependency> <dependency> <groupId>net.sourceforge.openutils</groupId> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hu...@op...> - 2011-06-25 12:38:23
|
See <https://hudson.openmindonline.it/job/openutils-mgnlmedia/changes> |
From: <hu...@op...> - 2011-06-25 12:38:17
|
See <https://hudson.openmindonline.it/job/openutils-mgnlmedia/net.sourceforge.openutils$openutils-mgnlmedia/changes> |
From: <fg...@us...> - 2011-06-25 11:42:14
|
Revision: 3564 http://openutils.svn.sourceforge.net/openutils/?rev=3564&view=rev Author: fgiust Date: 2011-06-25 11:42:08 +0000 (Sat, 25 Jun 2011) Log Message: ----------- better logging Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-06-23 12:22:43 UTC (rev 3563) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2011-06-25 11:42:08 UTC (rev 3564) @@ -505,7 +505,7 @@ final PipedInputStream stream = new PipedInputStream(); PipedOutputStream outputstream = new PipedOutputStream(stream); - log.info("setting value to {}", nd.getHandle()); + log.debug("setting value to {}", nd.getHandle()); Thread t = new Thread(new Runnable() { @@ -782,7 +782,7 @@ log.warn(e2.getMessage(), e2); } - final String finalNodeDataName = nodeDataName; + final String originalNodeDataName = nodeDataName; try { @@ -794,18 +794,26 @@ */ public void exec() { + long timestart = System.currentTimeMillis(); + HierarchyManager hm = MgnlContext.getHierarchyManager(MediaModule.REPO); - String resolution = resolutionTarget; + String resolutionstring = resolutionTarget; - if (RESOLUTION_THUMBNAIL.equals(resolution)) + if (RESOLUTION_THUMBNAIL.equals(resolutionstring)) { - resolution = RESOLUTION_THUMBNAIL_SIZE; + resolutionstring = RESOLUTION_THUMBNAIL_SIZE; } - if (RESOLUTION_PREVIEW.equals(resolution)) + if (RESOLUTION_PREVIEW.equals(resolutionstring)) { - resolution = RESOLUTION_PREVIEW_SIZE; + resolutionstring = RESOLUTION_PREVIEW_SIZE; } + String resolutioNodeName = "res-" + resolutionstring; + if (RESOLUTION_THUMBNAIL.equals(resolutionTarget) || RESOLUTION_PREVIEW.equals(resolutionTarget)) + { + resolutioNodeName = resolutionTarget; + } + Content node; try { @@ -816,7 +824,7 @@ throw new RuntimeException(e); } - NodeData image = node.getNodeData(finalNodeDataName); + NodeData image = node.getNodeData(originalNodeDataName); if (image.getContentLength() == 0) { @@ -842,16 +850,12 @@ BufferedImage original = createBufferedImage(image); - String resolutionName = "res-" + resolution; + Map<String, String> params = parseParameters(resolutionstring); - Map<String, String> params = parseParameters(resolution); - - long t = System.currentTimeMillis(); - BufferedImage img; try { - img = ImageUtils.getImageForResolution(original, resolution, params); + img = ImageUtils.getImageForResolution(original, resolutionstring, params); } catch (IllegalArgumentException e) { @@ -881,16 +885,8 @@ { forceProgressive = true; } - if (RESOLUTION_THUMBNAIL.equals(resolutionTarget) - || RESOLUTION_PREVIEW.equals(resolutionTarget)) - { - ImageUtils - .saveResolution(img, node, resolutionTarget, extension, quality, forceProgressive); - } - else - { - ImageUtils.saveResolution(img, node, resolutionName, extension, quality, forceProgressive); - } + + ImageUtils.saveResolution(img, node, resolutioNodeName, extension, quality, forceProgressive); } catch (RepositoryException e) { @@ -910,8 +906,10 @@ throw new RuntimeException(e); } - log.debug("Resized {} in: {}ms", finalNodeDataName, System.currentTimeMillis() - t); - + log.info("Generated {} for {} in {} milliseconds", new Object[]{ + resolutioNodeName, + node.getHandle(), + System.currentTimeMillis() - timestart }); } }); @@ -926,6 +924,16 @@ { log.warn("Unable to extract a valid image from " + media.getHandle() + " (no message)"); } + + try + { + media.setNodeData("bad_image_marker", media.getNodeData("bad_image_marker").getLong() + 1); + media.save(); + } + catch (RepositoryException e1) + { + // ignore + } return false; } catch (RuntimeException ex) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-06-23 12:22:49
|
Revision: 3563 http://openutils.svn.sourceforge.net/openutils/?rev=3563&view=rev Author: fgiust Date: 2011-06-23 12:22:43 +0000 (Thu, 23 Jun 2011) Log Message: ----------- [maven-release-plugin] prepare for next development iteration Modified Paths: -------------- trunk/openutils-mgnlmail/pom.xml Modified: trunk/openutils-mgnlmail/pom.xml =================================================================== --- trunk/openutils-mgnlmail/pom.xml 2011-06-23 12:22:30 UTC (rev 3562) +++ trunk/openutils-mgnlmail/pom.xml 2011-06-23 12:22:43 UTC (rev 3563) @@ -9,7 +9,7 @@ <packaging>jar</packaging> <artifactId>openutils-mgnlmail</artifactId> <name>simplemail module for Magnolia CMS</name> - <version>0.0.1</version> + <version>0.0.2-SNAPSHOT</version> <inceptionYear>2011</inceptionYear> <description>An extension to the mail module for Magnolia CMS</description> <url>http://www.openmindlab.com/lab/products/mgnlmail.html</url> @@ -24,9 +24,9 @@ </license> </licenses> <scm> - <connection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/tags/openutils-mgnlmail-0.0.1</connection> - <developerConnection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/tags/openutils-mgnlmail-0.0.1 </developerConnection> - <url>http://openutils.svn.sourceforge.net/viewcvs.cgi/openutils/tags/openutils-mgnlmail-0.0.1</url> + <connection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/trunk/openutils-mgnlmail</connection> + <developerConnection>scm:svn:https://openutils.svn.sourceforge.net/svnroot/openutils/trunk/openutils-mgnlmail </developerConnection> + <url>http://openutils.svn.sourceforge.net/viewcvs.cgi/openutils/trunk/openutils-mgnlmail</url> </scm> <build> <resources> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |