From: <die...@us...> - 2010-09-01 08:09:02
|
Revision: 2963 http://openutils.svn.sourceforge.net/openutils/?rev=2963&view=rev Author: diego_schivo Date: 2010-09-01 08:08:50 +0000 (Wed, 01 Sep 2010) Log Message: ----------- MEDIA-169 AdvancedSearch/playlist xml views should use the same freemarker template Modified Paths: -------------- 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/playlist/pages/PlaylistView.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java 2010-08-31 18:01:46 UTC (rev 2962) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java 2010-09-01 08:08:50 UTC (rev 2963) @@ -28,8 +28,10 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import javax.jcr.RepositoryException; import javax.servlet.http.HttpServletRequest; @@ -326,7 +328,9 @@ mediaBeans = new ArrayList<MediaBean>(nodes.size()); for (Content node : nodes) { - MediaTypeConfiguration mtc = MediaConfigurationManager.getInstance().getMediaTypeConfigurationFromMedia(node); + MediaTypeConfiguration mtc = MediaConfigurationManager + .getInstance() + .getMediaTypeConfigurationFromMedia(node); MediaBean bean = new MediaBeanBuilder(mtc).apply(node); mediaBeans.add(bean); } @@ -388,4 +392,17 @@ this.xml = xml; } + public String playlistLocation() + { + return "/playlists" + playlist.getHandle() + ".xspf?locale=" + locale; + } + + public Map<String, Object> playlistMetas() + { + Map<String, Object> metas = new LinkedHashMap<String, Object>(); + metas.put("media:locale", locale); + metas.put("media:playlist-id", playlist.getUuid()); + return metas; + } + } 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 2010-08-31 18:01:46 UTC (rev 2962) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView-xspf.html 2010-09-01 08:08:50 UTC (rev 2963) @@ -1,35 +1,41 @@ <?xml version="1.0" encoding="UTF-8"?> -<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:media="http://www.openmindlab.com/media"> +<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:media="http://www.openmindlab.com/media"> [#assign mgnlEl = this.getStatic("it.openutils.mgnlutils.el.MgnlUtilsElFunctions")] [#assign systemProperty = this.getStatic("info.magnolia.cms.core.SystemProperty")] [#assign dateUtils = this.getStatic("net.sourceforge.openutils.elfunctions.DateElUtils")] [#assign cal = this.getStatic("java.util.Calendar")] [#assign mediaEl = this.getStatic("net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl")] <title><![CDATA[${this.playlist.title}]]></title> - <meta rel="media:locale">${this.locale}</meta> - <meta rel="media:playlist-id">${this.playlist.uuid}</meta> - <location><![CDATA[${mgnlEl.baseUrl()}/playlists${this.playlist.handle}.xspf?locale=${this.locale}]]></location> + <location><![CDATA[${mgnlEl.baseUrl()}${this.playlistLocation()}]]></location> <date>${dateUtils.toXsdDate(cal.getInstance())}</date> - <trackList> + [#assign metas = this.playlistMetas()] + [#list metas?keys as key] + <meta rel="${key}">${metas[key]}</meta> + [/#list] + <trackList> [#list this.mediaContentList as mediaDetail] + [#assign mediaLocale = this.locale] [#assign mediaNode = mediaEl.node(mediaDetail.@uuid)] <track> - <location><![CDATA[${mgnlEl.toAbsoluteUrl(mediaEl.url(mediaNode))}]]></location> - <identifier>media:${mediaDetail.@uuid}</identifier> - [#if (mediaDetail['title_' + this.locale])?exists]<title><![CDATA[${mediaDetail['title_' + this.locale]}]]></title>[/#if] - [#assign resolution = systemProperty.getProperty("thumbresolution")!'l100x100' ] - [#if mediaEl.type(mediaNode) == 'image'] + [#assign mediaURL = mgnlEl.toAbsoluteUrl(mediaEl.url(mediaNode))] + <location>${mediaURL}</location> + <identifier>media:${mediaDetail.@uuid}</identifier> + [#if (mediaDetail['title_' + mediaLocale])?exists]<title><![CDATA[${mediaDetail['title_' + mediaLocale]}]]></title>[/#if] + [#assign resolution = systemProperty.getProperty("thumbresolution")!'l100x100' ] + [#if mediaEl.type(mediaNode) == 'image' || mediaDetail.image?exists] + [#assign imagePath = mediaEl.urlres(mediaNode, resolution)!''] + [#if imagePath?has_content] <image>${mgnlEl.baseUrl()}${mediaEl.urlres(mediaNode, resolution)}</image> - [#else] - [#if (mediaDetail.image)?exists]<image>${mgnlEl.baseUrl()}${mediaEl.urlres(mediaDetail, resolution)}</image>[/#if] + [/#if] [/#if] - [#if (mediaDetail['description_' + this.locale])?exists]<annotation><![CDATA[${mediaDetail['description_' + this.locale]}]]></annotation>[/#if] - [#if (mediaDetail.media_duration)?exists]<duration>${(mediaDetail.media_duration * 1000)?string.computer}</duration>[/#if] + [#if (mediaDetail['description_' + mediaLocale])?exists]<description>${mediaDetail['description_' + mediaLocale]}</description>[/#if] + [#if (mediaDetail['richContent_' + mediaLocale])?exists]<annotation><![CDATA[${mediaDetail['richContent_' + mediaLocale]}]]></annotation>[/#if] + [#if (mediaDetail.media_duration)?exists]<duration>${(mediaDetail.media_duration * 1000)?string.computer}</duration>[/#if] <extension application="http://www.openmindlab.com/media"> - <media:locale code="${this.locale}" /> - <media:type>${mediaDetail.type}</media:type> + <media:locale code="${mediaLocale}" /> + <media:type>${mediaDetail.type}</media:type> </extension> - </track> + </track> [/#list] </trackList> </playlist> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2010-09-01 09:42:16
|
Revision: 2971 http://openutils.svn.sourceforge.net/openutils/?rev=2971&view=rev Author: diego_schivo Date: 2010-09-01 09:42:10 +0000 (Wed, 01 Sep 2010) Log Message: ----------- MEDIA-169 AdvancedSearch/playlist xml views should use the same freemarker template Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/configuration/SearchMediaQueryConfiguration.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.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/advancedsearch/configuration/SearchMediaQueryConfiguration.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/configuration/SearchMediaQueryConfiguration.java 2010-09-01 08:46:49 UTC (rev 2970) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/configuration/SearchMediaQueryConfiguration.java 2010-09-01 09:42:10 UTC (rev 2971) @@ -109,22 +109,11 @@ Restrictions.eq("@jcr:primaryType", MediaConfigurationManager.MEDIA.getSystemName())); // base path - String basePath; - String suffix = '/' + (descendants ? "/" : StringUtils.EMPTY) + '*'; - if (path == null) - { - // use default - basePath = '/' + defaultBasePath + suffix; - } - else if (StringUtils.isEmpty(path) || path.equals("/")) - { - basePath = suffix; - } - else - { - basePath = '/' + path + suffix; - } - c.setBasePath(basePath); + String searchPath = StringUtils.removeEnd(StringUtils.defaultString(path, defaultBasePath), "/") + + "/" + + (descendants ? "/" : StringUtils.EMPTY) + + "*"; + c.setBasePath("/jcr:root/" + StringUtils.removeStart(searchPath, "/")); // media type if (!StringUtils.isEmpty(mediaType)) Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java 2010-09-01 08:46:49 UTC (rev 2970) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java 2010-09-01 09:42:10 UTC (rev 2971) @@ -19,25 +19,32 @@ package net.sourceforge.openutils.mgnlmedia.media.pages; +import info.magnolia.cms.core.Content; +import info.magnolia.context.MgnlContext; import info.magnolia.freemarker.FreemarkerUtil; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; +import javax.jcr.RepositoryException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult; import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResultItem; -import net.sourceforge.openutils.mgnlcriteria.jcr.query.ResultIterator; import net.sourceforge.openutils.mgnlmedia.media.advancedsearch.configuration.SearchMediaQueryConfiguration; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaTypeConfiguration; +import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule; import net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl; import net.sourceforge.openutils.mgnlmedia.playlist.pages.PlaylistView; import org.apache.commons.lang.StringUtils; +import com.google.common.base.Function; +import com.google.common.collect.Iterators; + /** * Page that renders the search results. * @author molaschi @@ -212,9 +219,26 @@ return metas; } - public ResultIterator<AdvancedResultItem> getMediaContentList() + public Iterator<Content> getMediaContentList() { - return searchResult.getItems(); + return Iterators.transform(searchResult.getItems(), new Function<AdvancedResultItem, Content>() + { + + /** + * {@inheritDoc} + */ + public Content apply(AdvancedResultItem from) + { + try + { + return MgnlContext.getHierarchyManager(MediaModule.REPO).getContentByUUID(from.getUUID()); + } + catch (RepositoryException e) + { + return null; + } + } + }); } } 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 2010-09-01 08:46:49 UTC (rev 2970) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView-xspf.html 2010-09-01 09:42:10 UTC (rev 2971) @@ -16,29 +16,30 @@ <meta rel="${key}">${metas[key]}</meta> [/#list] <trackList> - [#list this.mediaContentList as mediaDetail] - [#assign mediaLocale = this.locale] - [#assign mediaNode = mediaEl.node(mediaDetail.@uuid)] + [#list this.mediaContentList as mediaNode] + [#assign mediaLocale = this.locale!''] + [#if mediaNode?has_content] <track> [#assign mediaURL = mgnlEl.toAbsoluteUrl(mediaEl.url(mediaNode))] <location>${mediaURL}</location> - <identifier>media:${mediaDetail.@uuid}</identifier> - [#if (mediaDetail['title_' + mediaLocale])?exists]<title><![CDATA[${mediaDetail['title_' + mediaLocale]}]]></title>[/#if] + <identifier>media:${mediaNode.@uuid}</identifier> + [#if (mediaNode['title_' + mediaLocale])?exists]<title><![CDATA[${mediaNode['title_' + mediaLocale]}]]></title>[/#if] [#assign resolution = systemProperty.getProperty("thumbresolution")!'l100x100' ] - [#if mediaEl.type(mediaNode) == 'image' || mediaDetail.image?exists] + [#if mediaEl.type(mediaNode) == 'image' || mediaNode.image?exists] [#assign imagePath = mediaEl.urlres(mediaNode, resolution)!''] [#if imagePath?has_content] <image>${mgnlEl.baseUrl()}${mediaEl.urlres(mediaNode, resolution)}</image> [/#if] [/#if] - [#if (mediaDetail['description_' + mediaLocale])?exists]<description>${mediaDetail['description_' + mediaLocale]}</description>[/#if] - [#if (mediaDetail['richContent_' + mediaLocale])?exists]<annotation><![CDATA[${mediaDetail['richContent_' + mediaLocale]}]]></annotation>[/#if] - [#if (mediaDetail.media_duration)?exists]<duration>${(mediaDetail.media_duration * 1000)?string.computer}</duration>[/#if] + [#if (mediaNode['description_' + mediaLocale])?exists]<description>${mediaNode['description_' + mediaLocale]}</description>[/#if] + [#if (mediaNode['richContent_' + mediaLocale])?exists]<annotation><![CDATA[${mediaNode['richContent_' + mediaLocale]}]]></annotation>[/#if] + [#if (mediaNode.media_duration)?exists]<duration>${(mediaNode.media_duration * 1000)?string.computer}</duration>[/#if] <extension application="http://www.openmindlab.com/media"> <media:locale code="${mediaLocale}" /> - <media:type>${mediaDetail.type}</media:type> + <media:type>${mediaNode.type}</media:type> </extension> </track> + [/#if] [/#list] </trackList> </playlist> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2010-09-10 14:35:16
|
Revision: 3028 http://openutils.svn.sourceforge.net/openutils/?rev=3028&view=rev Author: diego_schivo Date: 2010-09-10 14:35:10 +0000 (Fri, 10 Sep 2010) Log Message: ----------- MEDIA-177 pagesize selection Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/folderView.css trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java 2010-09-10 14:20:15 UTC (rev 3027) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java 2010-09-10 14:35:10 UTC (rev 3028) @@ -206,7 +206,7 @@ } } bgSelector = StringUtils.defaultIfEmpty(bgSelector, "white"); - pagesizeSelector = StringUtils.defaultIfEmpty(pagesizeSelector, "1"); + pagesizeSelector = StringUtils.defaultIfEmpty(pagesizeSelector, "size1"); sorting = StringUtils.defaultIfEmpty(sorting, getDefaultSorting()); // for activation status handling Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/folderView.css =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/folderView.css 2010-09-10 14:20:15 UTC (rev 3027) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/folderView.css 2010-09-10 14:35:10 UTC (rev 3028) @@ -63,25 +63,25 @@ background-image: url(images/pagesize-selectors.png); } -#navigation .right a.white-active,#navigation .right a.pagesize1-active { +#navigation .right a.white-active,#navigation .right a.size1-active { font-weight: bold; background-position: 0 -16px; } -#navigation .right a.transparent,#navigation .right a.pagesize2 { +#navigation .right a.transparent,#navigation .right a.size2 { background-position: 0 -32px; } -#navigation .right a.transparent-active,#navigation .right a.pagesize2-active { +#navigation .right a.transparent-active,#navigation .right a.size2-active { font-weight: bold; background-position: 0 -48px; } -#navigation .right a.black,#navigation .right a.pagesize3 { +#navigation .right a.black,#navigation .right a.size3 { background-position: 0 -64px; } -#navigation .right a.black-active,#navigation .right a.pagesize3-active { +#navigation .right a.black-active,#navigation .right a.size3-active { font-weight: bold; background-position: 0 -80px; } Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2010-09-10 14:20:15 UTC (rev 3027) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2010-09-10 14:35:10 UTC (rev 3028) @@ -45,7 +45,7 @@ */ }); new MediaFolderView.BgSelectors('#navigation a.bg-selector'); - new MediaFolderView.PagesizeSelectors('#navigation a.pagesize-selector'); + new MediaFolderView.PagesizeSelectors('#navigation a.pagesize-selector', this.options); new MediaFolderView.Sorting('sorting', this.options); new MediaFolderView.EditMenus('li.media .menuitem'); new MediaFolderView.InfoTooltips('li.media .image'); @@ -101,24 +101,19 @@ MediaFolderView.PagesizeSelectors = new Class({ - initialize: function(selectors){ + Implements: Options, + + initialize: function(selectors, options){ this.selectors = $$(selectors).addEvent('click', this.handleClick.bindWithEvent(this)); - this.previousValue = document.body.className.match(/pagesize-(\w+)/)[1]; + this.setOptions(options); }, handleClick: function(e){ e.stop(); var selector = $(e.target); var value = selector.className.match(/pagesize-selector\s+(\w+)(-active)?/)[1]; - if (value == this.previousValue) return; - if (this.previousValue) $(document.body).removeClass('pagesize' + this.previousValue); - $(document.body).addClass('pagesize' + value); Cookie.write('pagesizeselector', value, {duration: 30}); - this.selectors.each(function(item){ - if (item == selector) item.addClass(value + '-active'); - else if (this.previousValue) item.removeClass(this.previousValue + '-active'); - }, this); - this.previousValue = value; + location.href = '?' + [this.options.queryString, 'type=${this.type}'].join('&'); } }); @@ -129,7 +124,7 @@ initialize: function(select, options){ this.select = $(select); - this.setOptions(options) + this.setOptions(options); this.select.addEvent('change', this.handleSelectChange.bind(this)); }, @@ -336,7 +331,7 @@ }); </script> </head> - <body id="mediafolderview" class="bg-${this.bgSelector} pagesize-${this.pagesizeSelector}"> + <body id="mediafolderview" class="bg-${this.bgSelector}"> <form action="" style="display:none" id="actionForm" method="post"> <input type="hidden" id="actionCmd" name="command" value="delete" /> <input type="hidden" id="actionPath" name="path" value="${this.path!""}" /> @@ -366,13 +361,13 @@ <a name="bg-white" href="#" class="bg-selector white [#if this.bgSelector == 'white']white-active[/#if]" title="${this.msgs.get('media.bgselector.white')}"><!-- --></a> </div> <div class="voice right" style="margin-right: 10px;"> - <a name="pagesize3" href="#" class="pagesize-selector pagesize3"><!-- --></a> + <a name="pagesize3" href="#" class="pagesize-selector size3 [#if this.pagesizeSelector == 'size3']size3-active[/#if]"><!-- --></a> </div> <div class="voice right"> - <a name="pagesize2" href="#" class="pagesize-selector pagesize2"><!-- --></a> + <a name="pagesize2" href="#" class="pagesize-selector size2 [#if this.pagesizeSelector == 'size2']size2-active[/#if]"><!-- --></a> </div> <div class="voice right"> - <a name="pagesize1" href="#" class="pagesize-selector pagesize1"><!-- --></a> + <a name="pagesize1" href="#" class="pagesize-selector size1 [#if this.pagesizeSelector == 'size1']size1-active[/#if]"><!-- --></a> </div> <div class="voice right" style="margin-right: 10px; padding-top: 3px;"> <select id="sorting" name="sorting"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2010-09-12 08:25:05
|
Revision: 3073 http://openutils.svn.sourceforge.net/openutils/?rev=3073&view=rev Author: fgiust Date: 2010-09-12 08:24:58 +0000 (Sun, 12 Sep 2010) Log Message: ----------- MEDIA-176 not so stateful... Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/media.js trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java 2010-09-12 08:04:57 UTC (rev 3072) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java 2010-09-12 08:24:58 UTC (rev 3073) @@ -230,7 +230,25 @@ { itemsPerPage = module.getFolderViewItemsPerPage(); } - return module.getSearch().search(request, type, path, false, SortMode.valueOf(sorting), itemsPerPage, page); + + AdvancedResult result = module.getSearch().search( + request, + type, + path, + false, + SortMode.valueOf(sorting), + itemsPerPage, + page); + + // back to page 1 if an invalid page number is selected + if (result.getTotalSize() > 0 && result.getNumberOfPages() < page) + { + page = 1; + } + + result = module.getSearch().search(request, type, path, false, SortMode.valueOf(sorting), itemsPerPage, page); + + return result; } /** Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/media.js =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/media.js 2010-09-12 08:04:57 UTC (rev 3072) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/media.js 2010-09-12 08:24:58 UTC (rev 3073) @@ -72,6 +72,6 @@ }); mgnlTree.prototype.openFolder = function(contextPath, handle, writable) { - if (parent.reloadFolder) parent.reloadFolder(handle); + if (parent.reloadFolder) parent.reloadFolder(handle, null, true); } 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 2010-09-12 08:04:57 UTC (rev 3072) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html 2010-09-12 08:24:58 UTC (rev 3073) @@ -226,8 +226,9 @@ } // reload folder content -function reloadFolder(path, type) +function reloadFolder(path, type, isbrowse) { + var centerPanel = viewport.getComponent('center-panel'); (selectMedia ? centerPanel : centerPanel.getComponent('center-center-panel')).setTitle("Media - "+ path); @@ -235,11 +236,12 @@ var querystring = frames['mediaFolderView'].location.search.substring(1).cleanQueryString().parseQueryString(); - if (url == "") { + if (isbrowse || url == "") { url = "${this.request.contextPath}/.magnolia/pages/mediaFolderView.html"; } querystring['path'] = path; + querystring['mgnlCK'] = (new Date()).getTime(); if (selectMedia) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-01-13 11:17:26
|
Revision: 3236 http://openutils.svn.sourceforge.net/openutils/?rev=3236&view=rev Author: diego_schivo Date: 2011-01-13 11:17:19 +0000 (Thu, 13 Jan 2011) Log Message: ----------- PIRMEDIA-202 base path search Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterAbstract.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/configuration/SearchMediaQueryConfiguration.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.config.search.xml 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/advancedsearch/SearchFilterBasePath.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterAbstract.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterAbstract.java 2011-01-13 11:09:27 UTC (rev 3235) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterAbstract.java 2011-01-13 11:17:19 UTC (rev 3236) @@ -28,6 +28,7 @@ import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Criterion; import org.apache.commons.collections.ListUtils; +import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,7 +70,7 @@ */ public String getBasePath(String parameter, HttpServletRequest request) { - return null; + return StringUtils.EMPTY; } /** Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterBasePath.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterBasePath.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterBasePath.java 2011-01-13 11:17:19 UTC (rev 3236) @@ -0,0 +1,54 @@ +/** + * + * Magnolia SimpleMedia Module (http://www.openmindlab.com/lab/products/media.html) + * Copyright (C)2008 - 2010, 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.advancedsearch; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang.StringUtils; + + +/** + * @author ADMIN + * @version $Id: $ + */ +public class SearchFilterBasePath extends SearchFilterAbstract +{ + + /** + * {@inheritDoc} + */ + @Override + public String getBasePath(String parameter, HttpServletRequest request) + { + String[] values = (String[]) request.getParameterMap().get(parameter); + + String basePath = super.getBasePath(parameter, request); + + if (values != null && values.length > 0) + { + String value = values[0]; + if (StringUtils.isNotBlank(value)) + { + basePath = value; + } + } + return basePath; + } +} Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/configuration/SearchMediaQueryConfiguration.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/configuration/SearchMediaQueryConfiguration.java 2011-01-13 11:09:27 UTC (rev 3235) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/configuration/SearchMediaQueryConfiguration.java 2011-01-13 11:17:19 UTC (rev 3236) @@ -127,7 +127,7 @@ continue; } SearchFilter filter = filters.get(key); - path = StringUtils.defaultString(filter.getBasePath(key, request), path); + path = StringUtils.defaultIfEmpty(filter.getBasePath(key, request), path); for (Criterion criterion : filter.getCriterionList(key, request)) { c.add(criterion); Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.config.search.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.config.search.xml 2011-01-13 11:09:27 UTC (rev 3235) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.config.search.xml 2011-01-13 11:17:19 UTC (rev 3236) @@ -724,5 +724,91 @@ </sv:property> </sv:node> </sv:node> + <sv:node sv:name="modified"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:contentNode</sv:value> + </sv:property> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> + <sv:value>mix:lockable</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>7bafbc22-e0b7-46f3-b511-bfb4f82e5f2d</sv:value> + </sv:property> + <sv:property sv:name="class" sv:type="String"> + <sv:value>net.sourceforge.openutils.mgnlmedia.media.advancedsearch.SearchFilterStatusModified</sv:value> + </sv:property> + <sv:property sv:name="control" sv:type="String"> + <sv:value>date</sv:value> + </sv:property> + <sv:property sv:name="jcr:createdBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:property sv:name="label" sv:type="String"> + <sv:value>config.search.filters.modified</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:activated" sv:type="Boolean"> + <sv:value>false</sv:value> + </sv:property> + <sv:property sv:name="mgnl:authorid" sv:type="String"> + <sv:value>superuser</sv:value> + </sv:property> + <sv:property sv:name="mgnl:creationdate" sv:type="Date"> + <sv:value>2010-02-15T17:07:44.717+01:00</sv:value> + </sv:property> + <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> + <sv:value>2011-01-13T11:40:20.066+01:00</sv:value> + </sv:property> + </sv:node> + </sv:node> + <sv:node sv:name="basePath"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:contentNode</sv:value> + </sv:property> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> + <sv:value>mix:lockable</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>83d5b5a1-a66f-4c25-a9ed-c83c0d3ad61c</sv:value> + </sv:property> + <sv:property sv:name="class" sv:type="String"> + <sv:value>net.sourceforge.openutils.mgnlmedia.media.advancedsearch.SearchFilterBasePath</sv:value> + </sv:property> + <sv:property sv:name="control" sv:type="String"> + <sv:value>input</sv:value> + </sv:property> + <sv:property sv:name="jcr:createdBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:property sv:name="label" sv:type="String"> + <sv:value>config.search.filters.basePath</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:activated" sv:type="Boolean"> + <sv:value>false</sv:value> + </sv:property> + <sv:property sv:name="mgnl:authorid" sv:type="String"> + <sv:value>superuser</sv:value> + </sv:property> + <sv:property sv:name="mgnl:creationdate" sv:type="Date"> + <sv:value>2010-02-15T17:07:44.717+01:00</sv:value> + </sv:property> + <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> + <sv:value>2011-01-13T12:15:37.701+01:00</sv:value> + </sv:property> + </sv:node> + </sv:node> </sv:node> </sv:node> 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-01-13 11:09:27 UTC (rev 3235) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2011-01-13 11:17:19 UTC (rev 3236) @@ -154,3 +154,4 @@ config.search.filters.options.notpublished=Not published config.search.filters.uuid=UUID config.search.filters.modified=Modified since +config.search.filters.basePath=Base path 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-01-13 11:09:27 UTC (rev 3235) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2011-01-13 11:17:19 UTC (rev 3236) @@ -157,3 +157,4 @@ config.search.filters.options.notpublished=Non pubblicati config.search.filters.uuid=UUID config.search.filters.modified=Modificato dal +config.search.filters.basePath=Path base This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-01-13 15:18:36
|
Revision: 3238 http://openutils.svn.sourceforge.net/openutils/?rev=3238&view=rev Author: diego_schivo Date: 2011-01-13 15:18:29 +0000 (Thu, 13 Jan 2011) Log Message: ----------- PIRMEDIA-202 path search Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.config.search.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/advancedSearch.css 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 trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.html Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterPath.java trunk/openutils-mgnlmedia/src/main/resources/search/freemarker/controls/path.ftl Removed Paths: ------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterBasePath.java Deleted: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterBasePath.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterBasePath.java 2011-01-13 11:58:42 UTC (rev 3237) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterBasePath.java 2011-01-13 15:18:29 UTC (rev 3238) @@ -1,54 +0,0 @@ -/** - * - * Magnolia SimpleMedia Module (http://www.openmindlab.com/lab/products/media.html) - * Copyright (C)2008 - 2010, 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.advancedsearch; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.lang.StringUtils; - - -/** - * @author ADMIN - * @version $Id: $ - */ -public class SearchFilterBasePath extends SearchFilterAbstract -{ - - /** - * {@inheritDoc} - */ - @Override - public String getBasePath(String parameter, HttpServletRequest request) - { - String[] values = (String[]) request.getParameterMap().get(parameter); - - String basePath = super.getBasePath(parameter, request); - - if (values != null && values.length > 0) - { - String value = values[0]; - if (StringUtils.isNotBlank(value)) - { - basePath = value; - } - } - return basePath; - } -} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterPath.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterPath.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/advancedsearch/SearchFilterPath.java 2011-01-13 15:18:29 UTC (rev 3238) @@ -0,0 +1,54 @@ +/** + * + * Magnolia SimpleMedia Module (http://www.openmindlab.com/lab/products/media.html) + * Copyright (C)2008 - 2010, 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.advancedsearch; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang.StringUtils; + + +/** + * @author ADMIN + * @version $Id: $ + */ +public class SearchFilterPath extends SearchFilterAbstract +{ + + /** + * {@inheritDoc} + */ + @Override + public String getBasePath(String parameter, HttpServletRequest request) + { + String[] values = (String[]) request.getParameterMap().get(parameter); + + String basePath = super.getBasePath(parameter, request); + + if (values != null && values.length > 0) + { + String value = values[0]; + if (StringUtils.isNotBlank(value)) + { + basePath = value; + } + } + return basePath; + } +} Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.config.search.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.config.search.xml 2011-01-13 11:58:42 UTC (rev 3237) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.config.search.xml 2011-01-13 15:18:29 UTC (rev 3238) @@ -767,7 +767,7 @@ </sv:property> </sv:node> </sv:node> - <sv:node sv:name="basePath"> + <sv:node sv:name="path"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>mgnl:contentNode</sv:value> </sv:property> @@ -778,7 +778,7 @@ <sv:value>83d5b5a1-a66f-4c25-a9ed-c83c0d3ad61c</sv:value> </sv:property> <sv:property sv:name="class" sv:type="String"> - <sv:value>net.sourceforge.openutils.mgnlmedia.media.advancedsearch.SearchFilterBasePath</sv:value> + <sv:value>net.sourceforge.openutils.mgnlmedia.media.advancedsearch.SearchFilterPath</sv:value> </sv:property> <sv:property sv:name="control" sv:type="String"> <sv:value>input</sv:value> Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/advancedSearch.css =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/advancedSearch.css 2011-01-13 11:58:42 UTC (rev 3237) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/advancedSearch.css 2011-01-13 15:18:29 UTC (rev 3238) @@ -4,7 +4,7 @@ line-height: 14px; } -input.text,input.input-date,select { +input.text,input.input-date,input.input-path,select { padding: 2px; border: solid 1px #999; width: 97%; @@ -45,6 +45,10 @@ width: 70%; } +.row .input-path { + width: 60%; +} + .row .inner-row input { float: left; display: inline; 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-01-13 11:58:42 UTC (rev 3237) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2011-01-13 15:18:29 UTC (rev 3238) @@ -82,6 +82,7 @@ buttons.cancel=Cancel buttons.date=Date buttons.search=Search +buttons.select=Select dialog.filenopreview.extensions=Valid file extensions: dialog.filenopreview.error.extension=File extension for field {0} not valid 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-01-13 11:58:42 UTC (rev 3237) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2011-01-13 15:18:29 UTC (rev 3238) @@ -83,6 +83,7 @@ buttons.cancel=Annulla buttons.date=Data buttons.search=Cerca +buttons.select=Seleziona dialog.filenopreview.extensions=Estensioni valide: dialog.filenopreview.error.extension=Estensione del file per il campo {0} non valida Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.html 2011-01-13 11:58:42 UTC (rev 3237) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.html 2011-01-13 15:18:29 UTC (rev 3238) @@ -4,6 +4,8 @@ <link href="${this.request.contextPath}/.resources/admin-css/admin-all.css" type="text/css" rel="stylesheet" /> <link title="Aqua" href="${this.request.contextPath}/.resources/calendar/skins/aqua/theme.css" media="all" type="text/css" rel="stylesheet" /> <link rel="stylesheet" type="text/css" href="${this.request.contextPath}/.resources/media/css/advancedSearch.css" /> + <script type="text/javascript" src="${this.request.contextPath}/.magnolia/pages/javascript.js"></script> + <script type="text/javascript" src="${this.request.contextPath}/.resources/admin-js/dialogs/dialogs.js"></script> <script type="text/javascript" src="${this.request.contextPath}/.resources/calendar/calendar.js"></script> <script src="${this.request.contextPath}/.resources/calendar/lang/calendar-en.js" type="text/javascript"></script> <script src="${this.request.contextPath}/.resources/calendar/calendar-setup.js" type="text/javascript"></script> Added: trunk/openutils-mgnlmedia/src/main/resources/search/freemarker/controls/path.ftl =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/search/freemarker/controls/path.ftl (rev 0) +++ trunk/openutils-mgnlmedia/src/main/resources/search/freemarker/controls/path.ftl 2011-01-13 15:18:29 UTC (rev 3238) @@ -0,0 +1,10 @@ +<div class="row"> + [#if filter.label??] + <label for="${filterKey}">[@msgIfAvail filter.label /]</label> + [/#if] + + <input type="text" name="${filterKey}" id="${filterKey}" value="" class="input-path" /> + <span class="mgnlControlButton" id="butt_${filterKey}" onclick="mgnlDialogLinkOpenBrowser('${filterKey}', 'media', '')">${this.msgs['buttons.select']}</span> + + [@rendersFilter filter.subfilters /] +</div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-01-13 18:10:14
|
Revision: 3242 http://openutils.svn.sourceforge.net/openutils/?rev=3242&view=rev Author: diego_schivo Date: 2011-01-13 18:10:08 +0000 (Thu, 13 Jan 2011) Log Message: ----------- PIRMEDIA-207 show media handle in dialog Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogSelectMedia.java trunk/openutils-mgnlmedia/src/main/resources/dialog/selectMedia.ftl Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogSelectMedia.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogSelectMedia.java 2011-01-13 17:57:33 UTC (rev 3241) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DialogSelectMedia.java 2011-01-13 18:10:08 UTC (rev 3242) @@ -151,6 +151,7 @@ parameters.put("thumbnailUrl", this.getThumbnailUrl(media, nd)); parameters.put("msgs", this.getMessages()); parameters.put("filename", this.getFilename(media, nd)); + parameters.put("handle", media != null ? media.getHandle() : null); if ("true".equals(this.getConfigValue("resizing"))) { Modified: trunk/openutils-mgnlmedia/src/main/resources/dialog/selectMedia.ftl =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/dialog/selectMedia.ftl 2011-01-13 17:57:33 UTC (rev 3241) +++ trunk/openutils-mgnlmedia/src/main/resources/dialog/selectMedia.ftl 2011-01-13 18:10:08 UTC (rev 3242) @@ -108,7 +108,7 @@ <div> - <div id="dispRem${name}Txt" style="height: 18px; overflow: hidden">${filename!''}</div> + <div id="dispRem${name}Txt" style="height: 18px; overflow: hidden">${filename!''}[#if handle?exists && handle?length > 0] (${handle})[/#if]</div> <div id="dispResize${name}" style="display:${dispResize}"> <table> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-01-14 16:10:24
|
Revision: 3247 http://openutils.svn.sourceforge.net/openutils/?rev=3247&view=rev Author: diego_schivo Date: 2011-01-14 16:10:16 +0000 (Fri, 14 Jan 2011) Log Message: ----------- MEDIA-203 i18n Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/AbstractPlaylistLink.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/MessageFormatPlaylistLink.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.config.playlistLinks.xspf.xml trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/AbstractPlaylistLink.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/AbstractPlaylistLink.java 2011-01-14 15:57:20 UTC (rev 3246) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/AbstractPlaylistLink.java 2011-01-14 16:10:16 UTC (rev 3247) @@ -1,6 +1,5 @@ package net.sourceforge.openutils.mgnlmedia.playlist.pages; -import info.magnolia.cms.core.Content; /** Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/MessageFormatPlaylistLink.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/MessageFormatPlaylistLink.java 2011-01-14 15:57:20 UTC (rev 3246) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/MessageFormatPlaylistLink.java 2011-01-14 16:10:16 UTC (rev 3247) @@ -1,7 +1,5 @@ package net.sourceforge.openutils.mgnlmedia.playlist.pages; -import info.magnolia.cms.core.Content; - import java.text.MessageFormat; import org.slf4j.Logger; Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.config.playlistLinks.xspf.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.config.playlistLinks.xspf.xml 2011-01-14 15:57:20 UTC (rev 3246) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.config.playlistLinks.xspf.xml 2011-01-14 16:10:16 UTC (rev 3247) @@ -12,9 +12,6 @@ <sv:property sv:name="class" sv:type="String"> <sv:value>net.sourceforge.openutils.mgnlmedia.playlist.pages.MessageFormatPlaylistLink</sv:value> </sv:property> - <sv:property sv:name="i18nBasename" sv:type="String"> - <sv:value>net.sourceforge.openutils.mgnlmedia.media.lang.messages</sv:value> - </sv:property> <sv:property sv:name="icon" sv:type="String"> <sv:value>/.resources/media/icons/16/xspf.png</sv:value> </sv:property> Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html 2011-01-14 15:57:20 UTC (rev 3246) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html 2011-01-14 16:10:16 UTC (rev 3247) @@ -192,11 +192,13 @@ var detailItems = [ playlistForm [#list mediaEl.module().playlistLinks as item] + [#assign itemText = this.msgs.get(item.text)] + [#if itemText?starts_with('???')][#assign itemText = item.text][/#if] , { xtype: 'panel', bodyStyle: 'padding:0 35px;', - html: '<a id="playlistLink${item_index}" href="#" class="x-form-item playlistLink" [#if item.icon?exists]style="background-image: url(\'${this.request.contextPath}${item.icon}\')"[/#if]>${item.text}</a>' + html: '<a id="playlistLink${item_index}" href="#" class="x-form-item playlistLink" [#if item.icon?exists]style="background-image: url(\'${this.request.contextPath}${item.icon}\')"[/#if]>${itemText}</a>' }, { xtype: 'panel', This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-02-06 21:05:53
|
Revision: 3304 http://openutils.svn.sourceforge.net/openutils/?rev=3304&view=rev Author: fgiust Date: 2011-02-06 21:05:47 +0000 (Sun, 06 Feb 2011) Log Message: ----------- MEDIA-210 fix package names (remove info.magnolia) Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tree/MediaModuleTree.java trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/controls/MediaTreeFooter.ftl Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/controls/ Removed Paths: ------------- trunk/openutils-mgnlmedia/src/main/resources/info/magnolia/cms/gui/control/ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/controls/MediaTreeAddress.ftl Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tree/MediaModuleTree.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tree/MediaModuleTree.java 2011-02-04 16:25:13 UTC (rev 3303) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tree/MediaModuleTree.java 2011-02-06 21:05:47 UTC (rev 3304) @@ -94,7 +94,7 @@ params.put("selectMedia", this.getRequest().getParameter("selectMedia") != null); // include the tree footer / menu divs - html.append(FreemarkerUtil.process("info/magnolia/cms/gui/control/MediaTreeFooter.ftl", params)); + html.append(FreemarkerUtil.process("net/sourceforge/openutils/mgnlmedia/controls/MediaTreeFooter.ftl", params)); return html.toString(); } Deleted: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/controls/MediaTreeAddress.ftl =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/info/magnolia/cms/gui/control/MediaTreeAddress.ftl 2011-02-04 16:25:13 UTC (rev 3303) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/controls/MediaTreeAddress.ftl 2011-02-06 21:05:47 UTC (rev 3304) @@ -1,2 +0,0 @@ -<img src="${contextPath}/.resources/0.gif" height="3px"/> -<input id="${tree.javascriptTree}SearchBar" type="text" onkeydown="if (mgnlIsKeyEnter(event)) parent.search(this.value);" class="mgnlDialogControlEdit" style="width:100%;" value="" /> \ No newline at end of file Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/controls/MediaTreeFooter.ftl =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/info/magnolia/cms/gui/control/MediaTreeFooter.ftl 2011-02-04 16:25:13 UTC (rev 3303) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/controls/MediaTreeFooter.ftl 2011-02-06 21:05:47 UTC (rev 3304) @@ -20,11 +20,6 @@ <#if menu?exists && (menu.menuItems?size >0)> ${menu.html} </#if> -<!-- -<#if selectMedia?exists && selectMedia> - <#include "MediaTreeAddress.ftl"/> -</#if> - --> <#if tree.browseMode> <#include "TreeAddressBar.ftl"/> <#else> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-08 10:12:49
|
Revision: 3311 http://openutils.svn.sourceforge.net/openutils/?rev=3311&view=rev Author: diego_schivo Date: 2011-02-08 10:12:42 +0000 (Tue, 08 Feb 2011) Log Message: ----------- MEDIA-214 playlist save Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.search-playlist.xml Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/SearchPlaylistSaveHandler.java Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/SearchPlaylistSaveHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/SearchPlaylistSaveHandler.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/SearchPlaylistSaveHandler.java 2011-02-08 10:12:42 UTC (rev 3311) @@ -0,0 +1,26 @@ +package net.sourceforge.openutils.mgnlmedia.playlist.dialog; + +import info.magnolia.cms.core.Content; +import info.magnolia.cms.security.AccessDeniedException; +import info.magnolia.module.admininterface.UUIDSaveHandler; + +import javax.jcr.PathNotFoundException; +import javax.jcr.RepositoryException; + + +/** + * @author ADMIN + * @version $Id: $ + */ +public class SearchPlaylistSaveHandler extends UUIDSaveHandler +{ + + /** + * {@inheritDoc} + */ + @Override + protected void processSaveInfo(Content node, String saveInfo) throws PathNotFoundException, RepositoryException, + AccessDeniedException + { + } +} Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.search-playlist.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.search-playlist.xml 2011-02-08 09:59:24 UTC (rev 3310) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.search-playlist.xml 2011-02-08 10:12:42 UTC (rev 3311) @@ -18,6 +18,9 @@ <sv:property sv:name="label" sv:type="String"> <sv:value>Playlist</sv:value> </sv:property> + <sv:property sv:name="saveHandler" sv:type="String"> + <sv:value>net.sourceforge.openutils.mgnlmedia.playlist.dialog.SearchPlaylistSaveHandler</sv:value> + </sv:property> <sv:node sv:name="MetaData"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>mgnl:metaData</sv:value> @@ -35,7 +38,7 @@ <sv:value>2010-02-04T16:31:25.515+01:00</sv:value> </sv:property> <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> - <sv:value>2011-02-07T20:47:25.314+01:00</sv:value> + <sv:value>2011-02-08T11:08:14.971+01:00</sv:value> </sv:property> </sv:node> <sv:node sv:name="tabGeneral"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-08 10:30:15
|
Revision: 3312 http://openutils.svn.sourceforge.net/openutils/?rev=3312&view=rev Author: diego_schivo Date: 2011-02-08 10:30:09 +0000 (Tue, 08 Feb 2011) Log Message: ----------- MEDIA-214 playlist save Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.html trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java 2011-02-08 10:12:42 UTC (rev 3311) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java 2011-02-08 10:30:09 UTC (rev 3312) @@ -249,43 +249,46 @@ public String saveAsPlaylist() { - Set<String> excludeParamNames = new HashSet<String>(); - excludeParamNames.add("saveAsPlaylist"); - excludeParamNames.add("command"); - try + if (false) { - HierarchyManager hm = MgnlContext.getSystemContext().getHierarchyManager(PlaylistConstants.REPO); - ValueFactory valueFactory = hm.getWorkspace().getSession().getValueFactory(); + Set<String> excludeParamNames = new HashSet<String>(); + excludeParamNames.add("saveAsPlaylist"); + excludeParamNames.add("command"); + try + { + HierarchyManager hm = MgnlContext.getSystemContext().getHierarchyManager(PlaylistConstants.REPO); + ValueFactory valueFactory = hm.getWorkspace().getSession().getValueFactory(); - Content playlistNode = hm.createContent("/samples", "hello", PlaylistConstants.PLAYLIST.getSystemName()); - Content requestNode = playlistNode.createContent("request", ItemType.CONTENTNODE); - for (Enumeration paramNames = request.getParameterNames(); paramNames.hasMoreElements();) - { - String paramName = (String) paramNames.nextElement(); - if (excludeParamNames.contains(paramName)) + Content playlistNode = hm.createContent("/samples", "hello", PlaylistConstants.PLAYLIST.getSystemName()); + Content requestNode = playlistNode.createContent("request", ItemType.CONTENTNODE); + for (Enumeration paramNames = request.getParameterNames(); paramNames.hasMoreElements();) { - continue; - } - String[] paramValues = request.getParameterValues(paramName); + String paramName = (String) paramNames.nextElement(); + if (excludeParamNames.contains(paramName)) + { + continue; + } + String[] paramValues = request.getParameterValues(paramName); - Content paramNode = requestNode.createContent( - Path.getUniqueLabel(requestNode, "0"), - ItemType.CONTENTNODE); - paramNode.setNodeData("name", paramName); - Value[] jcrValues = new Value[paramValues.length]; - for (int i = 0; i < paramValues.length; i++) - { - jcrValues[i] = NodeDataUtil.createValue(paramValues[i], PropertyType.STRING, valueFactory); + Content paramNode = requestNode.createContent( + Path.getUniqueLabel(requestNode, "0"), + ItemType.CONTENTNODE); + paramNode.setNodeData("name", paramName); + Value[] jcrValues = new Value[paramValues.length]; + for (int i = 0; i < paramValues.length; i++) + { + jcrValues[i] = NodeDataUtil.createValue(paramValues[i], PropertyType.STRING, valueFactory); + } + paramNode.setNodeData("value", jcrValues); } - paramNode.setNodeData("value", jcrValues); + playlistNode.getParent().save(); } - playlistNode.getParent().save(); + catch (RepositoryException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } } - catch (RepositoryException e) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } return show(); } } Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.html 2011-02-08 10:12:42 UTC (rev 3311) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.html 2011-02-08 10:30:09 UTC (rev 3312) @@ -31,11 +31,11 @@ <input type="hidden" name="selectMedia" value="${this.selectMedia?string('true', 'false')}" /> <div class="row"> - <input type="submit" name="submit" value="${this.msgs['buttons.search']}" class="button-submit"/> + <input type="submit" name="submit" value="${this.msgs['buttons.search']}" class="button-submit" onclick="this.form.command.value = ''"/> + <input type="submit" name="saveAsPlaylist" value="${this.msgs['buttons.saveAsPlaylist']}" class="button-submit" onclick="this.form.command.value = 'saveAsPlaylist'"/> <!-- - <input type="submit" name="saveAsPlaylist" value="${this.msgs['buttons.saveAsPlaylist']}" class="button-submit" onclick="this.form.command.value = 'saveAsPlaylist'"/> + <input type="submit" name="saveAsPlaylist" value="${this.msgs['buttons.saveAsPlaylist']}" class="button-submit" onclick="parent.openWindow('.magnolia/dialogs/search-playlist.html?mgnlPath=&mgnlRepository=playlists&mgnlCK=' + (new Date()).getTime()); return false;"/> --> - <input type="submit" name="saveAsPlaylist" value="${this.msgs['buttons.saveAsPlaylist']}" class="button-submit" onclick="parent.openWindow('.magnolia/dialogs/search-playlist.html?mgnlPath=&mgnlRepository=playlists&mgnlCK=' + (new Date()).getTime()); return false;"/> <input type="hidden" name="command" value="" /> </div> </form> Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2011-02-08 10:12:42 UTC (rev 3311) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2011-02-08 10:30:09 UTC (rev 3312) @@ -38,10 +38,17 @@ new MediaFolderView.Sorting('sorting', this.options); new MediaFolderView.EditMenus('li.media .menuitem'); new MediaFolderView.InfoTooltips('li.media .image'); + [#if (this.request.getParameter('command')!'') == 'saveAsPlaylist'] + this.openSearchPlaylistDialog(); + [/#if] }, layout: function(){ $('scrollablecontent').setStyle('height', window.getSize().y - 58 + 'px'); + }, + + openSearchPlaylistDialog: function(){ + parent.openWindow('.magnolia/dialogs/search-playlist.html?mgnlPath=&mgnlRepository=playlists&mgnlCK=' + (new Date()).getTime()); } }); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-08 13:41:23
|
Revision: 3318 http://openutils.svn.sourceforge.net/openutils/?rev=3318&view=rev Author: diego_schivo Date: 2011-02-08 13:41:16 +0000 (Tue, 08 Feb 2011) Log Message: ----------- MEDIA-214 playlist save Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/HiddenParametersSaveHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.search-playlist.xml trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/HiddenParametersSaveHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/HiddenParametersSaveHandler.java 2011-02-08 11:48:48 UTC (rev 3317) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/HiddenParametersSaveHandler.java 2011-02-08 13:41:16 UTC (rev 3318) @@ -67,7 +67,7 @@ String[] paramValues = form.getParameterValues(paramName); Content paramNode = node.createContent(Path.getUniqueLabel(node, "0"), ItemType.CONTENTNODE); - paramNode.setNodeData("name", paramName); + paramNode.setNodeData("name", StringUtils.removeStart(paramName, name + "_")); Value[] jcrValues = new Value[paramValues.length]; for (int i = 0; i < paramValues.length; i++) { 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-02-08 11:48:48 UTC (rev 3317) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java 2011-02-08 13:41:16 UTC (rev 3318) @@ -227,7 +227,7 @@ } } - String requestNodeName = "request"; + String requestNodeName = "search"; try { if (node.hasContent(requestNodeName)) Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.search-playlist.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.search-playlist.xml 2011-02-08 11:48:48 UTC (rev 3317) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.search-playlist.xml 2011-02-08 13:41:16 UTC (rev 3318) @@ -163,7 +163,7 @@ </sv:property> </sv:node> </sv:node> - <sv:node sv:name="request"> + <sv:node sv:name="search"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>mgnl:contentNode</sv:value> </sv:property> Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2011-02-08 11:48:48 UTC (rev 3317) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2011-02-08 13:41:16 UTC (rev 3318) @@ -48,7 +48,7 @@ }, openSearchPlaylistDialog: function(){ - parent.openWindow('.magnolia/dialogs/search-playlist.html?mgnlCK=' + (new Date()).getTime() + '[#list this.request.parameterNames as name][#list this.request.getParameterValues(name) as value]&request_${name?js_string}=${value?js_string}[/#list][/#list]'); + parent.openWindow('.magnolia/dialogs/search-playlist.html?mgnlCK=' + (new Date()).getTime() + '[#list this.request.parameterNames as name][#list this.request.getParameterValues(name) as value]&search_${name?js_string}=${value?js_string}[/#list][/#list]'); } }); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-08 17:58:22
|
Revision: 3323 http://openutils.svn.sourceforge.net/openutils/?rev=3323&view=rev Author: diego_schivo Date: 2011-02-08 17:58:15 +0000 (Tue, 08 Feb 2011) Log Message: ----------- MEDIA-214 playlist from search Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.playlistAsSearch.xml trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html Removed Paths: ------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/PlaylistFromSearchSaveHandler.java Deleted: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/PlaylistFromSearchSaveHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/PlaylistFromSearchSaveHandler.java 2011-02-08 17:48:33 UTC (rev 3322) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/PlaylistFromSearchSaveHandler.java 2011-02-08 17:58:15 UTC (rev 3323) @@ -1,47 +0,0 @@ -/** - * - * 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.save; - -import info.magnolia.cms.core.Content; -import info.magnolia.cms.security.AccessDeniedException; -import info.magnolia.module.admininterface.UUIDSaveHandler; - -import javax.jcr.PathNotFoundException; -import javax.jcr.RepositoryException; - - -/** - * @author ADMIN - * @version $Id: $ - */ -public class PlaylistFromSearchSaveHandler extends UUIDSaveHandler -{ - - /** - * {@inheritDoc} - */ - @Override - protected void processSaveInfo(Content node, String saveInfo) throws PathNotFoundException, RepositoryException, - AccessDeniedException - { - // TODO Auto-generated method stub - super.processSaveInfo(node, saveInfo); - } -} Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.playlistAsSearch.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.playlistAsSearch.xml 2011-02-08 17:48:33 UTC (rev 3322) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.playlistAsSearch.xml 2011-02-08 17:58:15 UTC (rev 3323) @@ -18,9 +18,6 @@ <sv:property sv:name="label" sv:type="String"> <sv:value>Playlist</sv:value> </sv:property> - <sv:property sv:name="saveHandler" sv:type="String"> - <sv:value>net.sourceforge.openutils.mgnlmedia.media.save.PlaylistFromSearchSaveHandler</sv:value> - </sv:property> <sv:node sv:name="MetaData"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>mgnl:metaData</sv:value> Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html 2011-02-08 17:48:33 UTC (rev 3322) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html 2011-02-08 17:58:15 UTC (rev 3323) @@ -250,7 +250,7 @@ enableColLock: false, tbar: tbar, stripeRows: true, - plugins: [dd] + plugins: !playlist.readOnly ? [dd] : [] } },{ columnWidth: 0.4, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-08 18:09:37
|
Revision: 3324 http://openutils.svn.sourceforge.net/openutils/?rev=3324&view=rev Author: diego_schivo Date: 2011-02-08 18:09:30 +0000 (Tue, 08 Feb 2011) Log Message: ----------- MEDIA-214 required fields Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.playlistAsSearch.xml Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java 2011-02-08 17:58:15 UTC (rev 3323) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchPage.java 2011-02-08 18:09:30 UTC (rev 3324) @@ -249,46 +249,6 @@ public String saveAsPlaylist() { - if (false) - { - Set<String> excludeParamNames = new HashSet<String>(); - excludeParamNames.add("saveAsPlaylist"); - excludeParamNames.add("command"); - try - { - HierarchyManager hm = MgnlContext.getSystemContext().getHierarchyManager(PlaylistConstants.REPO); - ValueFactory valueFactory = hm.getWorkspace().getSession().getValueFactory(); - - Content playlistNode = hm.createContent("/samples", "hello", PlaylistConstants.PLAYLIST.getSystemName()); - Content requestNode = playlistNode.createContent("request", ItemType.CONTENTNODE); - for (Enumeration paramNames = request.getParameterNames(); paramNames.hasMoreElements();) - { - String paramName = (String) paramNames.nextElement(); - if (excludeParamNames.contains(paramName)) - { - continue; - } - String[] paramValues = request.getParameterValues(paramName); - - Content paramNode = requestNode.createContent( - Path.getUniqueLabel(requestNode, "0"), - ItemType.CONTENTNODE); - paramNode.setNodeData("name", paramName); - Value[] jcrValues = new Value[paramValues.length]; - for (int i = 0; i < paramValues.length; i++) - { - jcrValues[i] = NodeDataUtil.createValue(paramValues[i], PropertyType.STRING, valueFactory); - } - paramNode.setNodeData("value", jcrValues); - } - playlistNode.getParent().save(); - } - catch (RepositoryException e) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } return show(); } } Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.playlistAsSearch.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.playlistAsSearch.xml 2011-02-08 17:58:15 UTC (rev 3323) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.playlistAsSearch.xml 2011-02-08 18:09:30 UTC (rev 3324) @@ -96,6 +96,9 @@ <sv:property sv:name="label" sv:type="String"> <sv:value>Parent folder</sv:value> </sv:property> + <sv:property sv:name="required" sv:type="String"> + <sv:value>true</sv:value> + </sv:property> <sv:property sv:name="saveInfo" sv:type="String"> <sv:value>false</sv:value> </sv:property> @@ -119,7 +122,7 @@ <sv:value>2010-02-04T16:32:31.109+01:00</sv:value> </sv:property> <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> - <sv:value>2011-02-08T14:47:19.599+01:00</sv:value> + <sv:value>2011-02-08T19:07:23.860+01:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -142,6 +145,9 @@ <sv:property sv:name="label" sv:type="String"> <sv:value>Playlist name</sv:value> </sv:property> + <sv:property sv:name="required" sv:type="String"> + <sv:value>true</sv:value> + </sv:property> <sv:property sv:name="saveInfo" sv:type="String"> <sv:value>false</sv:value> </sv:property> @@ -162,7 +168,7 @@ <sv:value>2010-02-04T16:32:31.109+01:00</sv:value> </sv:property> <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> - <sv:value>2011-02-08T14:47:30.384+01:00</sv:value> + <sv:value>2011-02-08T19:07:33.464+01:00</sv:value> </sv:property> </sv:node> </sv:node> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-09 10:14:57
|
Revision: 3327 http://openutils.svn.sourceforge.net/openutils/?rev=3327&view=rev Author: diego_schivo Date: 2011-02-09 10:14:51 +0000 (Wed, 09 Feb 2011) Log Message: ----------- MEDIA-216 EL function mediaNodesInPlaylist 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/META-INF/media.tld trunk/openutils-mgnlmedia/src/main/resources/mgnl-files/templates/samples-media/paragraph-playlist.jsp Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/utils/ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/utils/PlaylistIterateUtils.java 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-02-09 08:02:05 UTC (rev 3326) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/tags/el/MediaEl.java 2011-02-09 10:14:51 UTC (rev 3327) @@ -34,6 +34,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; @@ -50,7 +51,10 @@ import net.sourceforge.openutils.mgnlmedia.media.types.MediaTypeHandler; 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; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; @@ -58,7 +62,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Function; +import com.google.common.collect.Iterators; + /** * Class that holds media el functions methods * @author molaschi @@ -94,6 +101,9 @@ */ public static Content node(Object obj) { + // TODO use openutils-mgnlutils 1.0.8: + // return it.openutils.mgnlutils.el.MgnlUtilsElFunctions.node(obj, MediaModule.REPO); + if (obj == null) { return null; @@ -794,4 +804,68 @@ } } + /** + * @param obj + * @return + */ + 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; + } + + return Iterators.transform(PlaylistIterateUtils.iterate(playlistNode), new Function<MediaNodeAndEntryPath, Content>() + { + + /** + * {@inheritDoc} + */ + public Content apply(MediaNodeAndEntryPath from) + { + return from.getMediaNode(); + } + }); + } } 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-02-09 08:02:05 UTC (rev 3326) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.java 2011-02-09 10:14:51 UTC (rev 3327) @@ -20,18 +20,14 @@ package net.sourceforge.openutils.mgnlmedia.playlist.pages; import info.magnolia.cms.core.Content; -import info.magnolia.cms.core.ItemType; import info.magnolia.cms.i18n.I18nContentSupportFactory; import info.magnolia.cms.util.ContentUtil; import info.magnolia.cms.util.NodeDataUtil; import info.magnolia.context.MgnlContext; import java.io.IOException; -import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; -import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -41,23 +37,19 @@ import java.util.Map.Entry; import javax.jcr.RepositoryException; -import javax.jcr.Value; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; -import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult; -import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResultItem; -import net.sourceforge.openutils.mgnlcriteria.jcr.query.ResultIterator; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaTypeConfiguration; import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule; import net.sourceforge.openutils.mgnlmedia.media.pages.MediaBean; import net.sourceforge.openutils.mgnlmedia.media.pages.MediaBeanBuilder; import net.sourceforge.openutils.mgnlmedia.media.pages.MessagesTemplatedMVCHandler; -import net.sourceforge.openutils.mgnlmedia.media.pages.SortMode; import net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl; import net.sourceforge.openutils.mgnlmedia.playlist.PlaylistConstants; +import net.sourceforge.openutils.mgnlmedia.playlist.utils.PlaylistIterateUtils; +import net.sourceforge.openutils.mgnlmedia.playlist.utils.PlaylistIterateUtils.MediaNodeAndEntryPath; import org.apache.commons.lang.LocaleUtils; import org.apache.commons.lang.StringUtils; @@ -208,74 +200,41 @@ playlist.setDescription(NodeDataUtil.getString(node, propNames.get("description"))); List<PlaylistEntryBean> entries = new ArrayList<PlaylistEntryBean>(); - Collection<Content> children = node.getChildren(PlaylistConstants.PLAYLIST_ENTRY); - for (Content subNode : children) + for (Iterator<MediaNodeAndEntryPath> iterator = PlaylistIterateUtils.iterate(node); iterator.hasNext();) { - String mediaUUID = NodeDataUtil.getString(subNode, "media"); - Content media = ContentUtil.getContentByUUID(MediaModule.REPO, mediaUUID); - if (media != null) + MediaNodeAndEntryPath item = iterator.next(); + Content media = item.getMediaNode(); + if (media == null) { - PlaylistEntryBean entry = playlistEntryBean(media, propNames); - entry.setHandle(subNode.getHandle()); - entries.add(entry); + continue; } - else + PlaylistEntryBean entry = new PlaylistEntryBean(); + entry.setHandle(item.getPlaylistEntryPath()); + entry.setMedia(media.getUUID()); + entry.setMediaHandle(media.getHandle()); + MediaTypeConfiguration typeConf = MediaConfigurationManager + .getInstance() + .getMediaTypeConfigurationFromMedia(media); + if (typeConf != null) { - log.warn( - "Node {} referenced by entry {} of playlist {} does not exist in media repository", - new Object[]{mediaUUID, subNode.getName(), playlist.getHandle() }); + entry.setMediaDialog(typeConf.getDialog()); } + entry.setThumbnail(MediaEl.thumbnail(media)); + entry.setType(NodeDataUtil.getString(media, "type")); + entry.setTitle(I18nContentSupportFactory + .getI18nSupport() + .getNodeData(media, propNames.get("title")) + .getString()); + entry.setDescription(I18nContentSupportFactory + .getI18nSupport() + .getNodeData(media, propNames.get("description")) + .getString()); + entry.setTags(I18nContentSupportFactory + .getI18nSupport() + .getNodeData(media, propNames.get("tags")) + .getString()); + entries.add(entry); } - - try - { - if (node.hasContent("search")) - { - Content requestNode = node.getContent("search"); - Collection<Content> paramNodes = requestNode.getChildren(ItemType.CONTENTNODE); - final Map<String, Object> map = new HashMap<String, Object>(); - for (Content paramNode : paramNodes) - { - String paramName = NodeDataUtil.getString(paramNode, "name"); - Value[] jcrValues = paramNode.getNodeData("value").getValues(); - String[] paramValues = new String[jcrValues.length]; - for (int i = 0; i < jcrValues.length; i++) - { - paramValues[i] = jcrValues[i].getString(); - } - if (paramValues.length == 1) - { - map.put(paramName, paramValues[0]); - } - else if (paramValues.length > 1) - { - map.put(paramName, paramValues); - } - } - AdvancedResult searchResult = MediaEl - .module() - .getSearch() - .search( - new CustomParamsRequest(request, map, false), - null, - "/", - true, - SortMode.SCORE, - (int) NodeDataUtil.getLong(node, "maxResults", 0), - 1); - ResultIterator<AdvancedResultItem> items = searchResult.getItems(); - while (items.hasNext()) - { - AdvancedResultItem item = items.next(); - PlaylistEntryBean entry = playlistEntryBean(item, propNames); - entries.add(entry); - } - } - } - catch (RepositoryException e) - { - // should never happen - } playlist.setEntries(entries); try @@ -477,139 +436,4 @@ return metas; } - private PlaylistEntryBean playlistEntryBean(Content media, Map<String, String> propNames) - { - PlaylistEntryBean entry = new PlaylistEntryBean(); - entry.setMedia(media.getUUID()); - entry.setMediaHandle(media.getHandle()); - MediaTypeConfiguration typeConf = MediaConfigurationManager.getInstance().getMediaTypeConfigurationFromMedia( - media); - if (typeConf != null) - { - entry.setMediaDialog(typeConf.getDialog()); - } - entry.setThumbnail(MediaEl.thumbnail(media)); - entry.setType(NodeDataUtil.getString(media, "type")); - entry.setTitle(I18nContentSupportFactory - .getI18nSupport() - .getNodeData(media, propNames.get("title")) - .getString()); - entry.setDescription(I18nContentSupportFactory - .getI18nSupport() - .getNodeData(media, propNames.get("description")) - .getString()); - entry.setTags(I18nContentSupportFactory.getI18nSupport().getNodeData(media, propNames.get("tags")).getString()); - return entry; - - } - - // freemarker.ext.servlet.IncludePage.CustomParamsRequest - private static final class CustomParamsRequest extends HttpServletRequestWrapper - { - - private final HashMap paramsMap; - - private CustomParamsRequest(HttpServletRequest request, Map paramMap, boolean inheritParams) - { - super(request); - paramsMap = inheritParams ? new HashMap(request.getParameterMap()) : new HashMap(); - for (Iterator it = paramMap.entrySet().iterator(); it.hasNext();) - { - Map.Entry entry = (Map.Entry) it.next(); - String name = String.valueOf(entry.getKey()); - Object value = entry.getValue(); - final String[] valueArray; - if (value == null) - { - // Null values are explicitly added (so, among other - // things, we can hide inherited param values). - valueArray = new String[]{null }; - } - else if (value instanceof String[]) - { - // String[] arrays are just passed through - valueArray = (String[]) value; - } - else if (value instanceof Collection) - { - // Collections are converted to String[], with - // String.valueOf() used on elements - Collection col = (Collection) value; - valueArray = new String[col.size()]; - int i = 0; - for (Iterator it2 = col.iterator(); it2.hasNext();) - { - valueArray[i++] = String.valueOf(it2.next()); - } - } - else if (value.getClass().isArray()) - { - // Other array types are too converted to String[], with - // String.valueOf() used on elements - int len = Array.getLength(value); - valueArray = new String[len]; - for (int i = 0; i < len; ++i) - { - valueArray[i] = String.valueOf(Array.get(value, i)); - } - } - else - { - // All other values (including strings) are converted to a - // single-element String[], with String.valueOf applied to - // the value. - valueArray = new String[]{String.valueOf(value) }; - } - String[] existingParams = (String[]) paramsMap.get(name); - int el = existingParams == null ? 0 : existingParams.length; - if (el == 0) - { - // No original params, just put our array - paramsMap.put(name, valueArray); - } - else - { - int vl = valueArray.length; - if (vl > 0) - { - // Both original params and new params, prepend our - // params to original params - String[] newValueArray = new String[el + vl]; - System.arraycopy(valueArray, 0, newValueArray, 0, vl); - System.arraycopy(existingParams, 0, newValueArray, vl, el); - paramsMap.put(name, newValueArray); - } - } - } - } - - public String[] getParameterValues(String name) - { - String[] value = ((String[]) paramsMap.get(name)); - return value != null ? (String[]) value.clone() : null; - } - - public String getParameter(String name) - { - String[] values = (String[]) paramsMap.get(name); - return values != null && values.length > 0 ? values[0] : null; - } - - public Enumeration getParameterNames() - { - return Collections.enumeration(paramsMap.keySet()); - } - - public Map getParameterMap() - { - HashMap clone = (HashMap) paramsMap.clone(); - for (Iterator it = clone.entrySet().iterator(); it.hasNext();) - { - Map.Entry entry = (Map.Entry) it.next(); - entry.setValue(((String[]) entry.getValue()).clone()); - } - return Collections.unmodifiableMap(clone); - } - } - } Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/utils/PlaylistIterateUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/utils/PlaylistIterateUtils.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/utils/PlaylistIterateUtils.java 2011-02-09 10:14:51 UTC (rev 3327) @@ -0,0 +1,284 @@ +package net.sourceforge.openutils.mgnlmedia.playlist.utils; + +import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.ItemType; +import info.magnolia.cms.util.NodeDataUtil; +import info.magnolia.context.MgnlContext; + +import java.lang.reflect.Array; +import java.util.Collection; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import javax.jcr.RepositoryException; +import javax.jcr.Value; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult; +import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResultItem; +import net.sourceforge.openutils.mgnlmedia.media.pages.SortMode; +import net.sourceforge.openutils.mgnlmedia.media.tags.el.MediaEl; +import net.sourceforge.openutils.mgnlmedia.playlist.PlaylistConstants; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Function; +import com.google.common.collect.Iterators; + + +/** + * @author ADMIN + * @version $Id: $ + */ +public final class PlaylistIterateUtils +{ + + /** + * Logger. + */ + private static Logger log = LoggerFactory.getLogger(PlaylistIterateUtils.class); + + /** + * + */ + private PlaylistIterateUtils() + { + } + + /** + * @param obj + * @return + */ + @SuppressWarnings("unchecked") + public static Iterator<MediaNodeAndEntryPath> iterate(final Content playlistNode) + { + try + { + if (playlistNode.hasContent("search")) + { + Content searchNode = playlistNode.getContent("search"); + Collection<Content> paramNodes = searchNode.getChildren(ItemType.CONTENTNODE); + final Map<String, Object> map = new HashMap<String, Object>(); + for (Content paramNode : paramNodes) + { + String paramName = NodeDataUtil.getString(paramNode, "name"); + Value[] jcrValues = paramNode.getNodeData("value").getValues(); + String[] paramValues = new String[jcrValues.length]; + for (int i = 0; i < jcrValues.length; i++) + { + paramValues[i] = jcrValues[i].getString(); + } + if (paramValues.length == 1) + { + map.put(paramName, paramValues[0]); + } + else if (paramValues.length > 1) + { + map.put(paramName, paramValues); + } + } + AdvancedResult searchResult = MediaEl + .module() + .getSearch() + .search( + new CustomParamsRequest(MgnlContext.getWebContext().getRequest(), map, false), + null, + "/", + true, + SortMode.SCORE, + (int) NodeDataUtil.getLong(playlistNode, "maxResults", 0), + 1); + return Iterators.transform(searchResult.getItems(), new Function<AdvancedResultItem, MediaNodeAndEntryPath>() + { + + /** + * {@inheritDoc} + */ + public MediaNodeAndEntryPath apply(AdvancedResultItem from) + { + return new MediaNodeAndEntryPath(from, null); + } + }); + } + else + { + return Iterators.transform( + playlistNode.getChildren(PlaylistConstants.PLAYLIST_ENTRY).iterator(), + new Function<Content, MediaNodeAndEntryPath>() + { + + /** + * {@inheritDoc} + */ + public MediaNodeAndEntryPath apply(Content playlistEntry) + { + String mediaUUID = NodeDataUtil.getString(playlistEntry, "media"); + Content mediaNode = MediaEl.node(mediaUUID); + if (mediaNode == null) + { + log.warn( + "Node {} referenced by entry {} of playlist {} does not exist in media repository", + new Object[]{mediaUUID, playlistEntry.getName(), playlistNode.getHandle() }); + } + + return new MediaNodeAndEntryPath(mediaNode, playlistEntry.getHandle()); + } + }); + } + } + catch (RepositoryException e) + { + // should never happen + return null; + } + } + + public static class MediaNodeAndEntryPath + { + + private final Content mediaNode; + + private final String playlistEntryPath; + + /** + * + */ + public MediaNodeAndEntryPath(Content mediaNode, String playlistEntryPath) + { + this.mediaNode = mediaNode; + this.playlistEntryPath = playlistEntryPath; + } + + /** + * Returns the mediaNode. + * @return the mediaNode + */ + public Content getMediaNode() + { + return mediaNode; + } + + /** + * Returns the playlistEntryPath. + * @return the playlistEntryPath + */ + public String getPlaylistEntryPath() + { + return playlistEntryPath; + } + } + + // freemarker.ext.servlet.IncludePage.CustomParamsRequest + private static final class CustomParamsRequest extends HttpServletRequestWrapper + { + + private final HashMap paramsMap; + + private CustomParamsRequest(HttpServletRequest request, Map paramMap, boolean inheritParams) + { + super(request); + paramsMap = inheritParams ? new HashMap(request.getParameterMap()) : new HashMap(); + for (Iterator it = paramMap.entrySet().iterator(); it.hasNext();) + { + Map.Entry entry = (Map.Entry) it.next(); + String name = String.valueOf(entry.getKey()); + Object value = entry.getValue(); + final String[] valueArray; + if (value == null) + { + // Null values are explicitly added (so, among other + // things, we can hide inherited param values). + valueArray = new String[]{null }; + } + else if (value instanceof String[]) + { + // String[] arrays are just passed through + valueArray = (String[]) value; + } + else if (value instanceof Collection) + { + // Collections are converted to String[], with + // String.valueOf() used on elements + Collection col = (Collection) value; + valueArray = new String[col.size()]; + int i = 0; + for (Iterator it2 = col.iterator(); it2.hasNext();) + { + valueArray[i++] = String.valueOf(it2.next()); + } + } + else if (value.getClass().isArray()) + { + // Other array types are too converted to String[], with + // String.valueOf() used on elements + int len = Array.getLength(value); + valueArray = new String[len]; + for (int i = 0; i < len; ++i) + { + valueArray[i] = String.valueOf(Array.get(value, i)); + } + } + else + { + // All other values (including strings) are converted to a + // single-element String[], with String.valueOf applied to + // the value. + valueArray = new String[]{String.valueOf(value) }; + } + String[] existingParams = (String[]) paramsMap.get(name); + int el = existingParams == null ? 0 : existingParams.length; + if (el == 0) + { + // No original params, just put our array + paramsMap.put(name, valueArray); + } + else + { + int vl = valueArray.length; + if (vl > 0) + { + // Both original params and new params, prepend our + // params to original params + String[] newValueArray = new String[el + vl]; + System.arraycopy(valueArray, 0, newValueArray, 0, vl); + System.arraycopy(existingParams, 0, newValueArray, vl, el); + paramsMap.put(name, newValueArray); + } + } + } + } + + public String[] getParameterValues(String name) + { + String[] value = ((String[]) paramsMap.get(name)); + return value != null ? (String[]) value.clone() : null; + } + + public String getParameter(String name) + { + String[] values = (String[]) paramsMap.get(name); + return values != null && values.length > 0 ? values[0] : null; + } + + public Enumeration getParameterNames() + { + return Collections.enumeration(paramsMap.keySet()); + } + + public Map getParameterMap() + { + HashMap clone = (HashMap) paramsMap.clone(); + for (Iterator it = clone.entrySet().iterator(); it.hasNext();) + { + Map.Entry entry = (Map.Entry) it.next(); + entry.setValue(((String[]) entry.getValue()).clone()); + } + return Collections.unmodifiableMap(clone); + } + } +} Modified: trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld 2011-02-09 08:02:05 UTC (rev 3326) +++ trunk/openutils-mgnlmedia/src/main/resources/META-INF/media.tld 2011-02-09 10:14:51 UTC (rev 3327) @@ -320,4 +320,11 @@ <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> + <function> + <description></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> </taglib> \ No newline at end of file Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-files/templates/samples-media/paragraph-playlist.jsp =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-files/templates/samples-media/paragraph-playlist.jsp 2011-02-09 08:02:05 UTC (rev 3326) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-files/templates/samples-media/paragraph-playlist.jsp 2011-02-09 10:14:51 UTC (rev 3327) @@ -8,10 +8,9 @@ <div> <h3>${playlistNode.title}</h3> <div> - <cms:contentNodeIterator items="${mu:contentChildrenOfType(playlistNode, 'mgnl:playlistentry')}"> - <cms:setNode var="entryNode" /> - <media:media node="${entryNode}" property="media" width="320" height="240" /> - </cms:contentNodeIterator> + <c:forEach var="mediaNode" items="${media:mediaNodesInPlaylist(playlistNode)}"> + <media:media item="${mediaNode}" width="320" height="240" /> + </c:forEach> </div> </div> </div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-16 17:59:34
|
Revision: 3341 http://openutils.svn.sourceforge.net/openutils/?rev=3341&view=rev Author: diego_schivo Date: 2011-02-16 17:59:28 +0000 (Wed, 16 Feb 2011) Log Message: ----------- MEDIA-218 from playlist to adv-search Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.java trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.java 2011-02-16 17:18:42 UTC (rev 3340) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaAdvancedSearchFormPage.java 2011-02-16 17:59:28 UTC (rev 3341) @@ -40,6 +40,8 @@ private Map<String, SearchFilter> filters; + private String playlistUUID; + /** * Returns the selectMedia. * @return the selectMedia @@ -77,4 +79,22 @@ { return filters; } + + /** + * Returns the playlistUUID. + * @return the playlistUUID + */ + public String getPlaylistUUID() + { + return playlistUUID; + } + + /** + * Sets the playlistUUID. + * @param playlistUUID the playlistUUID to set + */ + public void setPlaylistUUID(String playlistUUID) + { + this.playlistUUID = playlistUUID; + } } 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-02-16 17:18:42 UTC (rev 3340) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.java 2011-02-16 17:59:28 UTC (rev 3341) @@ -81,6 +81,8 @@ private Document zipFile; + private String playlistUUID; + /** * @param name command name * @param request @@ -325,6 +327,24 @@ } /** + * Returns the playlistUUID. + * @return the playlistUUID + */ + public String getPlaylistUUID() + { + return playlistUUID; + } + + /** + * Sets the playlistUUID. + * @param playlistUUID the playlistUUID to set + */ + public void setPlaylistUUID(String playlistUUID) + { + this.playlistUUID = playlistUUID; + } + + /** * {@inheritDoc} */ @Override 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-02-16 17:18:42 UTC (rev 3340) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html 2011-02-16 17:59:28 UTC (rev 3341) @@ -120,7 +120,7 @@ animFloat: false, stateful: true, deferredRender:false, - activeTab:0, + activeTab:[#if (this.playlistUUID?has_content)]1[#else]0[/#if], items:[{ contentEl:'mediaTreeView', title: 'Browse' @@ -137,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; + frames['advancedSearchView'].location.href = "${this.request.contextPath}/.magnolia/pages/media-advsearchform.html?selectMedia="+selectMedia+"&playlistUUID=${this.playlistUUID!''}"; if (openPath != null && openPath != "null" && openPath.length > 0) { reloadFolder(openPath); Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html 2011-02-16 17:18:42 UTC (rev 3340) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html 2011-02-16 17:59:28 UTC (rev 3341) @@ -48,10 +48,20 @@ ]); var tbar = [ -[#if (!this.playlist.searchBased)] +[#if (!this.playlist?exists)] +[#elseif (this.playlist.searchBased)] { text: playlist.msgs.addEntry, icon: contextPath + '/.resources/media/icons/ico16-add.png', + iconCls: 'button-search', + handler: function(){ + parent.location.href = '${this.request.contextPath}/.magnolia/pages/mediaBrowser.html?playlistUUID=${this.playlist.uuid}'; + } + }, +[#else] + { + text: playlist.msgs.addEntry, + icon: contextPath + '/.resources/media/icons/ico16-add.png', iconCls: 'button-add', handler: function(){ var mgnlWin = parent.parent; @@ -250,7 +260,7 @@ enableColLock: false, tbar: tbar, stripeRows: true -[#if (!this.playlist.searchBased)] +[#if (this.playlist?exists && !this.playlist.searchBased)] , plugins: [dd] [/#if] } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-17 11:47:29
|
Revision: 3354 http://openutils.svn.sourceforge.net/openutils/?rev=3354&view=rev Author: diego_schivo Date: 2011-02-17 11:47:22 +0000 (Thu, 17 Feb 2011) Log Message: ----------- MEDIA-218 avoid conflicts with search_saveHandler and search_configNode parameters Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/HiddenParametersSaveHandler.java trunk/openutils-mgnlmedia/src/main/resources/dialog/hiddenParameters.ftl trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/HiddenParametersSaveHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/HiddenParametersSaveHandler.java 2011-02-17 11:36:49 UTC (rev 3353) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/save/HiddenParametersSaveHandler.java 2011-02-17 11:47:22 UTC (rev 3354) @@ -64,14 +64,14 @@ for (Enumeration paramNames = form.getParameterNames(); paramNames.hasMoreElements();) { String paramName = (String) paramNames.nextElement(); - if (!StringUtils.startsWith(paramName, name + "_")) + if (!StringUtils.startsWith(paramName, name + ".")) { continue; } String[] paramValues = form.getParameterValues(paramName); Content paramNode = node.createContent(Path.getUniqueLabel(node, "0"), ItemType.CONTENTNODE); - paramNode.setNodeData("name", StringUtils.removeStart(paramName, name + "_")); + paramNode.setNodeData("name", StringUtils.removeStart(paramName, name + ".")); Value[] jcrValues = new Value[paramValues.length]; for (int i = 0; i < paramValues.length; i++) { Modified: trunk/openutils-mgnlmedia/src/main/resources/dialog/hiddenParameters.ftl =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/dialog/hiddenParameters.ftl 2011-02-17 11:36:49 UTC (rev 3353) +++ trunk/openutils-mgnlmedia/src/main/resources/dialog/hiddenParameters.ftl 2011-02-17 11:47:22 UTC (rev 3354) @@ -1,5 +1,5 @@ [#list request.parameterNames as pName] -[#if pName?starts_with('${name}_')] +[#if pName?starts_with('${name}.')] [#list request.getParameterValues(pName) as pValue] <input type="hidden" id="${pName}" name="${pName}" value="${pValue!''}" /> [/#list] Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2011-02-17 11:36:49 UTC (rev 3353) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.html 2011-02-17 11:47:22 UTC (rev 3354) @@ -49,7 +49,7 @@ openPlaylistFromSearchDialog: function(){ [#assign playlistHandle = this.request.getParameter('playlistHandle')!''] - parent.openWindow('.magnolia/dialogs/[#if playlistHandle?has_content]update[#else]save[/#if]SearchBasedPlaylist.html?mgnlRepository=playlists&mgnlPath=${playlistHandle}&mgnlCK=' + (new Date()).getTime() + '[#list this.request.parameterNames as name][#if !['selectMedia','saveAsPlaylist','command']?seq_contains(name)][#list this.request.getParameterValues(name) as value]&search_${name?js_string}=${value?js_string}[/#list][/#if][/#list]'); + parent.openWindow('.magnolia/dialogs/[#if playlistHandle?has_content]update[#else]save[/#if]SearchBasedPlaylist.html?mgnlRepository=playlists&mgnlPath=${playlistHandle}&mgnlCK=' + (new Date()).getTime() + '[#list this.request.parameterNames as name][#if !['selectMedia','saveAsPlaylist','command']?seq_contains(name)][#list this.request.getParameterValues(name) as value]&search.${name?js_string}=${value?js_string}[/#list][/#if][/#list]'); } }); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-02-17 13:21:08
|
Revision: 3357 http://openutils.svn.sourceforge.net/openutils/?rev=3357&view=rev Author: diego_schivo Date: 2011-02-17 13:21:00 +0000 (Thu, 17 Feb 2011) Log Message: ----------- MEDIA-219 LayerDialog Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.saveSearchBasedPlaylist.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.updateSearchBasedPlaylist.xml Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/SearchBasedPlaylistDialogMVC.java Removed Paths: ------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/PlaylistFromSearchDialogMVC.java Deleted: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/PlaylistFromSearchDialogMVC.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/PlaylistFromSearchDialogMVC.java 2011-02-17 11:56:26 UTC (rev 3356) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/PlaylistFromSearchDialogMVC.java 2011-02-17 13:21:00 UTC (rev 3357) @@ -1,127 +0,0 @@ -/** - * - * 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.playlist.dialog; - -import info.magnolia.cms.core.Content; -import info.magnolia.cms.gui.misc.Sources; -import info.magnolia.module.admininterface.SaveHandler; -import info.magnolia.module.admininterface.dialogs.ConfiguredDialog; - -import java.io.IOException; -import java.io.PrintWriter; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import net.sourceforge.openutils.mgnlmedia.playlist.PlaylistConstants; - -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -/** - * @author ADMIN - * @version $Id: $ - */ -public class PlaylistFromSearchDialogMVC extends ConfiguredDialog -{ - - /** - * Logger. - */ - private Logger log = LoggerFactory.getLogger(PlaylistFromSearchDialogMVC.class); - - /** - * - */ - public PlaylistFromSearchDialogMVC( - String name, - HttpServletRequest request, - HttpServletResponse response, - Content configNode) - { - super(name, request, response, configNode); - } - - /** - * {@inheritDoc} - */ - @Override - protected void configureSaveHandler(SaveHandler saveHandler) - { - super.configureSaveHandler(saveHandler); - if (!StringUtils.isEmpty(form.getParameter("parentFolder"))) - { - saveHandler.setPath(form.getParameter("parentFolder")); - } - if (!StringUtils.isEmpty(form.getParameter("playlistName"))) - { - saveHandler.setNodeName(form.getParameter("playlistName")); - } - saveHandler.setCreationItemType(PlaylistConstants.PLAYLIST); - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean onPreSave(SaveHandler control) - { - // TODO Auto-generated method stub - return super.onPreSave(control); - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean onPostSave(SaveHandler control) - { - // TODO Auto-generated method stub - return super.onPostSave(control); - } - - /** - * {@inheritDoc} - */ - @Override - public void renderHtml(String view) throws IOException - { - if (VIEW_CLOSE_WINDOW.equals(view)) - { - PrintWriter out = this.getResponse().getWriter(); - - out.println("<html>"); //$NON-NLS-1$ - out.println(new Sources(this.getRequest().getContextPath()).getHtmlJs()); - out.println("<script type=\"text/javascript\">"); //$NON-NLS-1$ - String path = StringUtils.defaultIfEmpty(form.getParameter("mgnlPath"), form.getParameter("parentFolder") - + "/" - + form.getParameter("playlistName")); - out - .println("parent.location.href = '" + getRequest().getContextPath() + "/.magnolia/pages/playlistsBrowser.html?openPath=" + path + "'"); //$NON-NLS-1$ - out.println("</script></html>"); //$NON-NLS-1$ - } - else - { - super.renderHtml(view); - } - } -} Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/SearchBasedPlaylistDialogMVC.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/SearchBasedPlaylistDialogMVC.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/dialog/SearchBasedPlaylistDialogMVC.java 2011-02-17 13:21:00 UTC (rev 3357) @@ -0,0 +1,121 @@ +/** + * + * 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.playlist.dialog; + +import info.magnolia.cms.core.Content; +import info.magnolia.cms.gui.dialog.Dialog; +import info.magnolia.cms.gui.misc.Sources; +import info.magnolia.module.admininterface.SaveHandler; +import info.magnolia.module.admininterface.dialogs.ConfiguredDialog; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.jcr.RepositoryException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import net.sourceforge.openutils.mgnlmedia.media.dialog.LayerDialog; +import net.sourceforge.openutils.mgnlmedia.playlist.PlaylistConstants; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author ADMIN + * @version $Id: $ + */ +public class SearchBasedPlaylistDialogMVC extends ConfiguredDialog +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(SearchBasedPlaylistDialogMVC.class); + + /** + * + */ + public SearchBasedPlaylistDialogMVC( + String name, + HttpServletRequest request, + HttpServletResponse response, + Content configNode) + { + super(name, request, response, configNode); + } + + /** + * {@inheritDoc} + */ + @Override + protected Dialog createDialog(Content configNode, Content storageNode) throws RepositoryException + { + Dialog dialog = new LayerDialog(); + dialog.init(request, response, storageNode, configNode); + return dialog; + } + + /** + * {@inheritDoc} + */ + @Override + protected void configureSaveHandler(SaveHandler saveHandler) + { + super.configureSaveHandler(saveHandler); + if (!StringUtils.isEmpty(form.getParameter("parentFolder"))) + { + saveHandler.setPath(form.getParameter("parentFolder")); + } + if (!StringUtils.isEmpty(form.getParameter("playlistName"))) + { + saveHandler.setNodeName(form.getParameter("playlistName")); + } + saveHandler.setCreationItemType(PlaylistConstants.PLAYLIST); + } + + /** + * {@inheritDoc} + */ + @Override + public void renderHtml(String view) throws IOException + { + if (VIEW_CLOSE_WINDOW.equals(view)) + { + PrintWriter out = this.getResponse().getWriter(); + + out.println("<html>"); //$NON-NLS-1$ + out.println(new Sources(this.getRequest().getContextPath()).getHtmlJs()); + out.println("<script type=\"text/javascript\">"); //$NON-NLS-1$ + String path = StringUtils.defaultIfEmpty(form.getParameter("mgnlPath"), form.getParameter("parentFolder") + + "/" + + form.getParameter("playlistName")); + out + .println("parent.location.href = '" + getRequest().getContextPath() + "/.magnolia/pages/playlistsBrowser.html?openPath=" + path + "'"); //$NON-NLS-1$ + out.println("</script></html>"); //$NON-NLS-1$ + } + else + { + super.renderHtml(view); + } + } +} Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.saveSearchBasedPlaylist.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.saveSearchBasedPlaylist.xml 2011-02-17 11:56:26 UTC (rev 3356) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.saveSearchBasedPlaylist.xml 2011-02-17 13:21:00 UTC (rev 3357) @@ -10,7 +10,7 @@ <sv:value>5ba32092-19e2-47cf-b3ad-19359c61412f</sv:value> </sv:property> <sv:property sv:name="class" sv:type="String"> - <sv:value>net.sourceforge.openutils.mgnlmedia.playlist.dialog.PlaylistFromSearchDialogMVC</sv:value> + <sv:value>net.sourceforge.openutils.mgnlmedia.playlist.dialog.SearchBasedPlaylistDialogMVC</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.updateSearchBasedPlaylist.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.updateSearchBasedPlaylist.xml 2011-02-17 11:56:26 UTC (rev 3356) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.media.dialogs.updateSearchBasedPlaylist.xml 2011-02-17 13:21:00 UTC (rev 3357) @@ -10,7 +10,7 @@ <sv:value>72b20e23-4e15-4e47-9a8b-dc8d0d834996</sv:value> </sv:property> <sv:property sv:name="class" sv:type="String"> - <sv:value>net.sourceforge.openutils.mgnlmedia.playlist.dialog.PlaylistFromSearchDialogMVC</sv:value> + <sv:value>net.sourceforge.openutils.mgnlmedia.playlist.dialog.SearchBasedPlaylistDialogMVC</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-03-13 09:50:34
|
Revision: 3381 http://openutils.svn.sourceforge.net/openutils/?rev=3381&view=rev Author: fgiust Date: 2011-03-13 09:50:28 +0000 (Sun, 13 Mar 2011) Log Message: ----------- MEDIA-221 Add the full path of the media to the "attributes" tab Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DisplayUUID.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.common.xml 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/dialog/DisplayHandle.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.controls.displayhandle.xml Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DisplayHandle.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DisplayHandle.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DisplayHandle.java 2011-03-13 09:50:28 UTC (rev 3381) @@ -0,0 +1,38 @@ +/** + * + * 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.dialog; + +import info.magnolia.cms.gui.dialog.DialogStatic; + + +/** + * @author fgiust + * @version $Id$ + */ +public class DisplayHandle extends DialogStatic +{ + + @Override + protected String readValue() + { + return this.getStorageNode().getHandle(); + } + +} Property changes on: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DisplayHandle.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/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DisplayUUID.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DisplayUUID.java 2011-03-13 09:32:51 UTC (rev 3380) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/dialog/DisplayUUID.java 2011-03-13 09:50:28 UTC (rev 3381) @@ -21,9 +21,7 @@ import info.magnolia.cms.gui.dialog.DialogStatic; -import org.apache.commons.lang.StringUtils; - /** * @author cstrappazzon * @version $Id$ @@ -34,12 +32,7 @@ @Override protected String readValue() { - if (StringUtils.equals(this.getName(), "displayUUID")) - { - return this.getStorageNode().getUUID(); - } - - return ""; + return this.getStorageNode().getUUID(); } } Added: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.controls.displayhandle.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.controls.displayhandle.xml (rev 0) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.controls.displayhandle.xml 2011-03-13 09:50:28 UTC (rev 3381) @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sv:node sv:name="displayhandle" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:contentNode</sv:value> + </sv:property> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> + <sv:value>mix:lockable</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>d2228600-7918-46b1-b460-fc462ee2a5c8</sv:value> + </sv:property> + <sv:property sv:name="class" sv:type="String"> + <sv:value>net.sourceforge.openutils.mgnlmedia.media.dialog.DisplayHandle</sv:value> + </sv:property> + <sv:property sv:name="i18nBasename" sv:type="String"> + <sv:value>net.sourceforge.openutils.mgnlmedia.media.lang.messages</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:activated" sv:type="Boolean"> + <sv:value>false</sv:value> + </sv:property> + <sv:property sv:name="mgnl:activatorid" sv:type="String"> + <sv:value>superuser</sv:value> + </sv:property> + <sv:property sv:name="mgnl:authorid" sv:type="String"> + <sv:value>superuser</sv:value> + </sv:property> + <sv:property sv:name="mgnl:creationdate" sv:type="Date"> + <sv:value>2008-06-26T16:13:12.696Z</sv:value> + </sv:property> + <sv:property sv:name="mgnl:lastaction" sv:type="Date"> + <sv:value>2008-06-26T16:13:35.061Z</sv:value> + </sv:property> + <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> + <sv:value>2010-03-18T10:40:06.055+01:00</sv:value> + </sv:property> + </sv:node> +</sv:node> Property changes on: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.controls.displayhandle.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.common.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.common.xml 2011-03-13 09:32:51 UTC (rev 3380) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.common.xml 2011-03-13 09:50:28 UTC (rev 3381) @@ -464,5 +464,48 @@ </sv:property> </sv:node> </sv:node> + <sv:node sv:name="displayhandle"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:contentNode</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>1519f4fa-43df-4736-afab-cbefa8828f8f</sv:value> + </sv:property> + <sv:property sv:name="controlType" sv:type="String"> + <sv:value>displayhandle</sv:value> + </sv:property> + <sv:property sv:name="label" sv:type="String"> + <sv:value>media.dialogs.tabAttributes.path.label</sv:value> + </sv:property> + <sv:property sv:name="type" sv:type="String"> + <sv:value>String</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="mgnl:Data" sv:type="String"> + <sv:value>MetaData</sv:value> + </sv:property> + <sv:property sv:name="mgnl:activated" sv:type="Boolean"> + <sv:value>false</sv:value> + </sv:property> + <sv:property sv:name="mgnl:activatorid" sv:type="String"> + <sv:value>superuser</sv:value> + </sv:property> + <sv:property sv:name="mgnl:authorid" sv:type="String"> + <sv:value>superuser</sv:value> + </sv:property> + <sv:property sv:name="mgnl:creationdate" sv:type="String"> + <sv:value>2004-11-02T15:34:29.357+01:00</sv:value> + </sv:property> + <sv:property sv:name="mgnl:lastaction" sv:type="Date"> + <sv:value>2008-06-21T10:33:05.445Z</sv:value> + </sv:property> + <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> + <sv:value>2010-03-18T10:30:43.186+01:00</sv:value> + </sv:property> + </sv:node> + </sv:node> </sv:node> </sv:node> 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-03-13 09:32:51 UTC (rev 3380) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2011-03-13 09:50:28 UTC (rev 3381) @@ -41,6 +41,7 @@ media.dialogs.tabAttributes.creator.label=Created by media.dialogs.tabAttributes.creationDate.label=Created on media.dialogs.tabAttributes.modificationDate.label=Modified on +media.dialogs.tabAttributes.path.label=Path tree.media.folders=Media folders tree media.loadzip=Load zip archive 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-03-13 09:32:51 UTC (rev 3380) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2011-03-13 09:50:28 UTC (rev 3381) @@ -41,6 +41,7 @@ media.dialogs.tabAttributes.creator.label=Creato da media.dialogs.tabAttributes.creationDate.label=Creato il media.dialogs.tabAttributes.modificationDate.label=Modificato il +media.dialogs.tabAttributes.path.label=Path tree.media.folders=Alberatura media media.loadzip=Carica archivio zip This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-03-13 11:12:40
|
Revision: 3385 http://openutils.svn.sourceforge.net/openutils/?rev=3385&view=rev Author: fgiust Date: 2011-03-13 11:12:33 +0000 (Sun, 13 Mar 2011) Log Message: ----------- MEDIA-222 Different icon for search-based playlists Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/tree/PlaylistsTree.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/tree/PlaylistsTreeConfiguration.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.adminInterface.config.menu.media.playlists.xml 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/resources/mgnl-resources/media/icons/ico16-playlist-dynamic.png trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/icons/ico16-playlist-standard.png trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/icons/ico16-playlists.png 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-03-13 10:30:31 UTC (rev 3384) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2011-03-13 11:12:33 UTC (rev 3385) @@ -235,6 +235,20 @@ tasks.add(new BootstrapMissingNodesTask("media-etk")); } + // change "playlists" icon and description + tasks.add(new ChangeExistingPropertyTask( + ContentRepository.CONFIG, + "/modules/admininterface/config/menu/media/playlists", + "icon", + "/.resources/media/icons/ico16-playlist.png", + "/.resources/media/icons/ico16-playlists.png")); + tasks.add(new ChangeExistingPropertyTask( + ContentRepository.CONFIG, + "/modules/admininterface/config/menu/media/playlists", + "label", + "Playlists", + "media.menu.playlists")); + return tasks; } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/tree/PlaylistsTree.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/tree/PlaylistsTree.java 2011-03-13 10:30:31 UTC (rev 3384) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/tree/PlaylistsTree.java 2011-03-13 11:12:33 UTC (rev 3385) @@ -20,6 +20,7 @@ package net.sourceforge.openutils.mgnlmedia.playlist.tree; import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.NodeData; import info.magnolia.cms.gui.control.Tree; import javax.jcr.RepositoryException; @@ -27,6 +28,8 @@ import net.sourceforge.openutils.mgnlmedia.playlist.PlaylistConstants; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -36,6 +39,11 @@ { /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(PlaylistsTree.class); + + /** * */ public PlaylistsTree(String name, String repository) @@ -64,4 +72,26 @@ } html.append(sb); } + + /** + * {@inheritDoc} + */ + protected String getIcon(Content node, NodeData nodedata, String itemType) + { + try + { + // handle dynamic playlist icon + if (node != null && PlaylistConstants.PLAYLIST.equals(node.getItemType()) && node.hasContent("search")) + { + return "/.resources/media/icons/ico16-playlist-dynamic.png"; + } + } + catch (RepositoryException e) + { + log.error("Failed to read content of " + node.getHandle()); + } + + return super.getIcon(node, nodedata, itemType); + } + } Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/tree/PlaylistsTreeConfiguration.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/tree/PlaylistsTreeConfiguration.java 2011-03-13 10:30:31 UTC (rev 3384) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/playlist/tree/PlaylistsTreeConfiguration.java 2011-03-13 11:12:33 UTC (rev 3385) @@ -206,7 +206,9 @@ final Messages msgs = getMessages(); tree.addItemType(PlaylistConstants.FOLDER.getSystemName(), "/.resources/media/icons/ico16-folder.png"); - tree.addItemType(PlaylistConstants.PLAYLIST.getSystemName(), "/.resources/media/icons/ico16-playlist.png"); + tree.addItemType( + PlaylistConstants.PLAYLIST.getSystemName(), + "/.resources/media/icons/ico16-playlist-standard.png"); TreeColumn column0 = TreeColumn.createLabelColumn(tree, msgs.get("tree.playlists.column"), true); column0.setWidth(3); Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.adminInterface.config.menu.media.playlists.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.adminInterface.config.menu.media.playlists.xml 2011-03-13 10:30:31 UTC (rev 3384) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media/config.modules.adminInterface.config.menu.media.playlists.xml 2011-03-13 11:12:33 UTC (rev 3385) @@ -10,13 +10,13 @@ <sv:value>9114d5b9-cb54-414e-8a86-9c3fdab31dd8</sv:value> </sv:property> <sv:property sv:name="icon" sv:type="String"> - <sv:value>/.resources/media/icons/ico16-playlist.png</sv:value> + <sv:value>/.resources/media/icons/ico16-playlists.png</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="label" sv:type="String"> - <sv:value>Playlists</sv:value> + <sv:value>media.menu.playlists</sv:value> </sv:property> <sv:property sv:name="onclick" sv:type="String"> <sv:value>MgnlAdminCentral.showContent('/.magnolia/pages/playlistsBrowser.html');</sv:value> Added: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/icons/ico16-playlist-dynamic.png =================================================================== (Binary files differ) Property changes on: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/icons/ico16-playlist-dynamic.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/icons/ico16-playlist-standard.png =================================================================== (Binary files differ) Property changes on: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/icons/ico16-playlist-standard.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/icons/ico16-playlists.png =================================================================== (Binary files differ) Property changes on: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/icons/ico16-playlists.png ___________________________________________________________________ Added: svn:mime-type + image/png 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-03-13 10:30:31 UTC (rev 3384) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2011-03-13 11:12:33 UTC (rev 3385) @@ -78,13 +78,14 @@ media.menu.title=Media media.menu.browse=Browse media.menu.search=Search +media.menu.playlists=Collections buttons.ok=Ok buttons.cancel=Cancel buttons.date=Date buttons.search=Search buttons.select=Select -buttons.saveAsPlaylist=Save as playlist +buttons.saveAsPlaylist=Save as a collection dialog.filenopreview.extensions=Valid file extensions: dialog.filenopreview.error.extension=File extension for field {0} not valid @@ -123,8 +124,8 @@ stk.dam.mediauuid.label=Select media tree.playlists=Playlists tree -tree.playlists.new=New playlist -tree.playlists.column=Playlists +tree.playlists.new=New collection +tree.playlists.column=Collections tree.playlists.xspf=xspf format playlist.entries.add=Add entry playlist.entries.addMany=Add entries @@ -137,14 +138,14 @@ playlist.media.edit=Edit media playlist.xspf.export=XSPF playlist playlist.saved=Playlist successfully saved -playlist.cantsave=Can''t save the playlist -playlist.details.header=Playlist details +playlist.cantsave=Can''t save the collection +playlist.details.header=Collection details playlist.details.title=Title playlist.details.description=Description playlist.save=Save playlist.search.edit=Edit search -playlist.confirmUpdate.title=Update existing playlist -playlist.confirmUpdate.text=Do you want to update playlist {0} ? +playlist.confirmUpdate.title=Update existing collection +playlist.confirmUpdate.text=Do you want to update collection {0} ? config.search.filters.locale=Locale config.search.filters.text=Text 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-03-13 10:30:31 UTC (rev 3384) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2011-03-13 11:12:33 UTC (rev 3385) @@ -79,6 +79,7 @@ media.menu.title=Media media.menu.browse=Naviga media.menu.search=Cerca +media.menu.playlists=Collezioni buttons.ok=Ok buttons.cancel=Annulla This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <die...@us...> - 2011-03-23 13:44:46
|
Revision: 3395 http://openutils.svn.sourceforge.net/openutils/?rev=3395&view=rev Author: diego_schivo Date: 2011-03-23 13:44:39 +0000 (Wed, 23 Mar 2011) Log Message: ----------- MEDIA-223 mediafolderpath cookie Modified Paths: -------------- 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/MediaFolderViewPage.java trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html 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-03-23 13:38:14 UTC (rev 3394) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.java 2011-03-23 13:44:39 UTC (rev 3395) @@ -38,6 +38,7 @@ import java.util.zip.ZipFile; import javax.jcr.RepositoryException; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -144,6 +145,16 @@ // should never happen } } + for (Cookie cookie : request.getCookies()) + { + if ("mediafolderpath".equals(cookie.getName())) + { + if (StringUtils.isEmpty(openPath)) + { + openPath = cookie.getValue(); + } + } + } } /** Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java 2011-03-23 13:38:14 UTC (rev 3394) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/pages/MediaFolderViewPage.java 2011-03-23 13:44:39 UTC (rev 3395) @@ -86,8 +86,6 @@ protected String sorting; - protected String mediaFolderPath; - protected boolean selectMedia; protected String actMediaHandle; @@ -157,7 +155,6 @@ bgSelector = null; pagesizeSelector = null; sorting = null; - mediaFolderPath = null; for (Cookie cookie : request.getCookies()) { if ("bgselector".equals(cookie.getName())) @@ -172,10 +169,6 @@ { sorting = cookie.getValue(); } - else if ("mediafolderpath".equals(cookie.getName())) - { - mediaFolderPath = cookie.getValue(); - } } bgSelector = StringUtils.defaultIfEmpty(bgSelector, "white"); pagesizeSelector = StringUtils.defaultIfEmpty(pagesizeSelector, "size1"); @@ -626,15 +619,6 @@ } /** - * Returns the mediaFolderPath. - * @return the mediaFolderPath - */ - public String getMediaFolderPath() - { - return mediaFolderPath; - } - - /** * Returns the writable. * @return the writable */ 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-03-23 13:38:14 UTC (rev 3394) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/pages/MediaBrowserPage.html 2011-03-23 13:44:39 UTC (rev 3395) @@ -18,7 +18,7 @@ var viewport; var nodeid = "${this.nodeid!''}"; var selectMedia = ${this.selectMedia?string("true", "false")}; -var openPath = "${this.openPath!this.mediaFolderPath!''}"; +var openPath = "${this.openPath!''}"; var actMediaHandle = "${this.actMediaHandle!''}"; var mediaType = "${this.mediaType!''}"; // get tree url This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mol...@us...> - 2011-05-06 15:18:15
|
Revision: 3449 http://openutils.svn.sourceforge.net/openutils/?rev=3449&view=rev Author: molaschi Date: 2011-05-06 15:18:08 +0000 (Fri, 06 May 2011) Log Message: ----------- MEDIA-227 Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java 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/VideoTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/RtmpMedatadaFetcher.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.mediaVideoDlg.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/multibox/multibox.js Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/VideoMedataUtils.java Removed Paths: ------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/FLVMedataUtils.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java 2011-05-06 15:16:56 UTC (rev 3448) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java 2011-05-06 15:18:08 UTC (rev 3449) @@ -25,7 +25,7 @@ import java.util.Map; import net.sourceforge.openutils.mgnlmedia.media.utils.MediaMetadataFormatUtils; -import net.sourceforge.openutils.mgnlmedia.media.utils.FLVMedataUtils.FLVMetaData; +import net.sourceforge.openutils.mgnlmedia.media.utils.VideoMedataUtils.VideoMetaData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,14 +42,14 @@ */ private Logger log = LoggerFactory.getLogger(BaseVideoTypeHandler.class); - protected abstract FLVMetaData parseFLVMetaData(Content media) throws Exception; + protected abstract VideoMetaData parseFLVMetaData(Content media) throws Exception; @Override public boolean onPostSave(Content media) { try { - FLVMetaData flvMetaData = null; + VideoMetaData flvMetaData = null; try { flvMetaData = parseFLVMetaData(media); 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-05-06 15:16:56 UTC (rev 3448) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ExternalVideoTypeHandler.java 2011-05-06 15:18:08 UTC (rev 3449) @@ -41,8 +41,8 @@ import javax.servlet.http.HttpServletRequest; import net.sourceforge.openutils.mgnlmedia.media.types.externals.ExternalVideoSupport; -import net.sourceforge.openutils.mgnlmedia.media.utils.FLVMedataUtils; -import net.sourceforge.openutils.mgnlmedia.media.utils.FLVMedataUtils.FLVMetaData; +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; @@ -220,7 +220,7 @@ } @Override - protected FLVMetaData parseFLVMetaData(Content media) throws Exception + protected VideoMetaData parseFLVMetaData(Content media) throws Exception { if (!parseremotefiles) { @@ -244,7 +244,7 @@ // handle spaces: note we can't encode the full url here downloadUrl = StringUtils.replace(downloadUrl, " ", "%20"); URL url = new URL(downloadUrl); - return FLVMedataUtils.parseFLVfromUrl(url); + return VideoMedataUtils.parseFLVfromUrl(url); } else if (StringUtils.startsWith(downloadUrl, "rtmp")) { Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/VideoTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/VideoTypeHandler.java 2011-05-06 15:16:56 UTC (rev 3448) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/VideoTypeHandler.java 2011-05-06 15:18:08 UTC (rev 3449) @@ -19,12 +19,13 @@ package net.sourceforge.openutils.mgnlmedia.media.types.impl; +import info.magnolia.cms.beans.runtime.FileProperties; import info.magnolia.cms.core.Content; import java.io.InputStream; -import net.sourceforge.openutils.mgnlmedia.media.utils.FLVMedataUtils; -import net.sourceforge.openutils.mgnlmedia.media.utils.FLVMedataUtils.FLVMetaData; +import net.sourceforge.openutils.mgnlmedia.media.utils.VideoMedataUtils; +import net.sourceforge.openutils.mgnlmedia.media.utils.VideoMedataUtils.VideoMetaData; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; @@ -47,12 +48,19 @@ protected final String DURATION_ATTRIBUTE = "duration"; @Override - protected FLVMetaData parseFLVMetaData(Content media) throws Exception + protected VideoMetaData parseFLVMetaData(Content media) throws Exception { InputStream stream = getOriginalFileNodeData(media).getStream(); try { - return FLVMedataUtils.parseFLVfromStream(stream); + VideoMetaData metaData = VideoMedataUtils.parsefromStream(getOriginalFileNodeData(media).getAttribute( + FileProperties.PROPERTY_EXTENSION), stream); + if (metaData.getFileSize() == 0) + { + metaData.setFileSize(Long.parseLong(getOriginalFileNodeData(media).getAttribute( + FileProperties.PROPERTY_SIZE))); + } + return metaData; } finally { Deleted: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/FLVMedataUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/FLVMedataUtils.java 2011-05-06 15:16:56 UTC (rev 3448) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/FLVMedataUtils.java 2011-05-06 15:18:08 UTC (rev 3449) @@ -1,330 +0,0 @@ -/** - * - * 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; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.nio.ByteBuffer; - -import org.apache.commons.io.IOUtils; - - -/** - * <p> - * Parses FLV metadata in order to extract size and duration. - * </p> - * <p> - * Code based on FLVMetaData class by SANTHOSH REDDY MANDADI - * http://java-servlet-jsp-web.blogspot.com/2009/06/java-program-to-fetch-flv-metadata.html - * </p> - * @author fgiust - * @version $Id$ - */ -public final class FLVMedataUtils -{ - - /** - * Contains informations about a FLV file. - */ - public static class FLVMetaData - { - - private long duration; - - private long width; - - private long height; - - private double audioDataRate; - - private double videoDataRate; - - private long fileSize; - - private String createdDate; - - private String mimeType; - - private double frameRate; - - public void setCreatedDate(String createdDate) - { - this.createdDate = createdDate; - } - - public String getCreatedDate() - { - return createdDate; - } - - public void setMimeType(String mimeType) - { - this.mimeType = mimeType; - } - - public String getMimeType() - { - return mimeType; - } - - public void setWidth(long width) - { - this.width = width; - } - - public double getWidth() - { - return width; - } - - public void setHeight(long height) - { - this.height = height; - } - - public long getHeight() - { - return height; - } - - public void setAudioDataRate(double audioDataRate) - { - this.audioDataRate = audioDataRate; - } - - public double getAudioDataRate() - { - return audioDataRate; - } - - public void setVideoDataRate(double videoDataRate) - { - this.videoDataRate = videoDataRate; - } - - public double getVideoDataRate() - { - return videoDataRate; - } - - public void setFileSize(long fileSize) - { - this.fileSize = fileSize; - } - - public long getFileSize() - { - return fileSize; - } - - public void setFrameRate(double frameRate) - { - this.frameRate = frameRate; - } - - public double getFrameRate() - { - return frameRate; - } - - public void setDuration(long duration) - { - this.duration = duration; - } - - public long getDuration() - { - return duration; - } - - } - - public static FLVMetaData parseFLVfromStream(InputStream stream) throws IOException - { - return getMetaData(stream); - } - - public static FLVMetaData parseFLVfromUrl(URL url) throws IOException - { - URLConnection connection = url.openConnection(); - connection.setConnectTimeout(5000); - - // Getting the remote input stream - InputStream fis = connection.getInputStream(); - try - { - return parseFLVfromStream(fis); - } - finally - { - IOUtils.closeQuietly(fis); - } - - } - - /** - * Extract the metadata for the flv and sets them in the properties. If the property has 0.0 or null, then the - * information is not available on the target FLV. - * @throws IOException - * @throws Exception if something goes wrong. - */ - private static FLVMetaData getMetaData(InputStream fis) throws IOException - { - FLVMetaData meta = new FLVMetaData(); - try - { - // Creating the bytes array to read the first 400 bytes data from input stream - byte[] bytes = new byte[400]; - // Reading the data from the input stream - fis.read(bytes); - - meta = getMetaData(bytes); - - } - finally - { - IOUtils.closeQuietly(fis); - } - - return meta; - } - - /** - * @param meta - * @param bytes - */ - protected static FLVMetaData getMetaData(byte[] bytes) - { - - FLVMetaData meta = new FLVMetaData(); - - // Fetching the properties. If the output shows -1 or null then consider that the FLV doesn't have that - // info on metadata - meta.setDuration(getLong(bytes, "duration")); - meta.setWidth(getLong(bytes, "width")); - meta.setHeight(getLong(bytes, "height")); - meta.setAudioDataRate(getDouble(bytes, "audiodatarate")); - meta.setVideoDataRate(getDouble(bytes, "videodatarate")); - meta.setFileSize(getLong(bytes, "filesize")); - meta.setCreatedDate(getString(bytes, "creationdate")); - meta.setMimeType(getString(bytes, "mimetype")); - meta.setFrameRate(getDouble(bytes, "framerate")); - - return meta; - } - - private static double getDouble(byte[] bytes, String property) - { - // Checking whether the property exists on the metadata - int offset = indexOf(bytes, property.getBytes()); - if (offset != -1) - { - // Calculating the value from the bytes received from getBytes method - return ByteBuffer.wrap(getBytes(bytes, offset + property.length() + 1, 8)).getDouble(); - } - else - { - // Returning -1 to notify the info not available - return -1; - } - } - - private static long getLong(byte[] bytes, String property) - { - // Checking whether the property exists on the metadata - int offset = indexOf(bytes, property.getBytes()); - if (offset != -1) - { - // Calculating the value from the bytes received from getBytes method - return (long) ByteBuffer.wrap(getBytes(bytes, offset + property.length() + 1, 8)).getDouble(); - } - else - { - // Returning -1 to notify the info not available - return -1; - } - } - - private static String getString(byte[] bytes, String property) - { - // Checking whether the property exists on the metadata - int offset = indexOf(bytes, property.getBytes()); - if (offset != -1) - { - // Constructing the string from the bytes received from getBytes method - return new String(getBytes(bytes, offset + property.length() + 3, 24)); - } - else - { - // Returning null to notify the info not available - return null; - } - } - - private static byte[] getBytes(byte[] bytes, int offset, int length) - { - // Fetching the required number of bytes from the source and returning - byte[] requiredBytes = new byte[length]; - for (int i = offset, j = 0; j < length; i++, j++) - { - requiredBytes[j] = bytes[i]; - } - return requiredBytes; - } - - static int indexOf(byte[] source, byte[] target) - { - byte first = target[0]; - int max = source.length - target.length; - - for (int i = 0; i <= max; i++) - { - /* Look for first character. */ - if (source[i] != first) - { - while (++i <= max && source[i] != first) - { - ; - } - } - - /* Found first character, now look at the rest of v2 */ - if (i <= max) - { - int j = i + 1; - int end = j + target.length - 1; - for (int k = 1; j < end && source[j] == target[k]; j++, k++) - { - ; - } - - if (j == end) - { - /* Found whole string. */ - return i; - } - } - } - return -1; - } - -} Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/RtmpMedatadaFetcher.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/RtmpMedatadaFetcher.java 2011-05-06 15:16:56 UTC (rev 3448) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/RtmpMedatadaFetcher.java 2011-05-06 15:18:08 UTC (rev 3449) @@ -25,7 +25,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; -import net.sourceforge.openutils.mgnlmedia.media.utils.FLVMedataUtils.FLVMetaData; +import net.sourceforge.openutils.mgnlmedia.media.utils.VideoMedataUtils.VideoMetaData; import org.apache.commons.lang.StringUtils; import org.jboss.netty.bootstrap.ClientBootstrap; @@ -67,7 +67,7 @@ * @return parsed FLVMetadata * @throws IOException */ - public static FLVMetaData fetchMetadata(String url, long timeoutInMs) throws IOException + public static VideoMetaData fetchMetadata(String url, long timeoutInMs) throws IOException { String validUrl = StringUtils.substringBeforeLast(url, ".flv"); @@ -96,7 +96,7 @@ bootstrap.getFactory().releaseExternalResources(); - return FLVMedataUtils.getMetaData(writer.getByteArray().toByteArray()); + return VideoMedataUtils.getMetaData(writer.getByteArray().toByteArray()); } private static ClientBootstrap getBootstrap(final Executor executor, final ClientOptions options) Copied: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/VideoMedataUtils.java (from rev 3445, trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/FLVMedataUtils.java) =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/VideoMedataUtils.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/VideoMedataUtils.java 2011-05-06 15:18:08 UTC (rev 3449) @@ -0,0 +1,381 @@ +/** + * + * 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; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.nio.ByteBuffer; + +import org.apache.commons.io.IOUtils; + +import com.coremedia.iso.IsoBufferWrapper; +import com.coremedia.iso.IsoFile; +import com.coremedia.iso.IsoFileConvenienceHelper; +import com.coremedia.iso.boxes.MovieBox; +import com.coremedia.iso.boxes.TrackHeaderBox; + + +/** + * <p> + * Parses Video metadata in order to extract size and duration. + * </p> + * <p> + * Code based on FLVMetaData class by SANTHOSH REDDY MANDADI + * http://java-servlet-jsp-web.blogspot.com/2009/06/java-program-to-fetch-flv-metadata.html + * </p> + * @author fgiust + * @version $Id$ + */ +public final class VideoMedataUtils +{ + + /** + * Contains informations about a FLV file. + */ + public static class VideoMetaData + { + + private long duration; + + private long width; + + private long height; + + private double audioDataRate; + + private double videoDataRate; + + private long fileSize; + + private String createdDate; + + private String mimeType; + + private double frameRate; + + public void setCreatedDate(String createdDate) + { + this.createdDate = createdDate; + } + + public String getCreatedDate() + { + return createdDate; + } + + public void setMimeType(String mimeType) + { + this.mimeType = mimeType; + } + + public String getMimeType() + { + return mimeType; + } + + public void setWidth(long width) + { + this.width = width; + } + + public double getWidth() + { + return width; + } + + public void setHeight(long height) + { + this.height = height; + } + + public long getHeight() + { + return height; + } + + public void setAudioDataRate(double audioDataRate) + { + this.audioDataRate = audioDataRate; + } + + public double getAudioDataRate() + { + return audioDataRate; + } + + public void setVideoDataRate(double videoDataRate) + { + this.videoDataRate = videoDataRate; + } + + public double getVideoDataRate() + { + return videoDataRate; + } + + public void setFileSize(long fileSize) + { + this.fileSize = fileSize; + } + + public long getFileSize() + { + return fileSize; + } + + public void setFrameRate(double frameRate) + { + this.frameRate = frameRate; + } + + public double getFrameRate() + { + return frameRate; + } + + public void setDuration(long duration) + { + this.duration = duration; + } + + public long getDuration() + { + return duration; + } + + } + + public static VideoMetaData parsefromStream(String extension, InputStream stream) throws IOException + { + if ("flv".equals(extension)) + { + return parseFLVfromStream(stream); + } + if ("mp4".equals(extension) || "m4v".equals(extension)) + { + return parseMP4fromStream(stream); + } + return null; + } + + public static VideoMetaData parseFLVfromStream(InputStream stream) throws IOException + { + return getMetaData(stream); + } + + public static VideoMetaData parseMP4fromStream(InputStream stream) throws IOException + { + VideoMetaData meta = new VideoMetaData(); + + InputStream is = stream; + ByteBuffer bb = ByteBuffer.wrap(IOUtils.toByteArray(is)); + IsoBufferWrapper buf = new IsoBufferWrapper(bb); + // Properties properties = new Properties(); + // properties.setProperty(MovieBox.TYPE, "com.coremedia.iso.boxes.MovieBox()"); + // PropertyBoxParserImpl boxParser = new PropertyBoxParserImpl(properties); + IsoFile isoFile = new IsoFile(buf); // , boxParser); + isoFile.parse(); + + MovieBox box = (MovieBox) IsoFileConvenienceHelper.get(isoFile, MovieBox.TYPE); + meta.setDuration(box.getMovieHeaderBox().getDuration() / box.getMovieHeaderBox().getTimescale()); + meta.setFrameRate(box.getMovieHeaderBox().getRate()); + // meta.setCreatedDate(box.getMovieHeaderBox().getCreationTime()); + + for (long trackid : box.getTrackNumbers()) + { + TrackHeaderBox thb = box.getTrackMetaData(trackid).getTrackBox().getTrackHeaderBox(); + if (thb.getWidth() > 0) + { + meta.setWidth((long) thb.getWidth()); + meta.setHeight((long) thb.getHeight()); + break; + } + } + + return meta; + } + + public static VideoMetaData parseFLVfromUrl(URL url) throws IOException + { + URLConnection connection = url.openConnection(); + connection.setConnectTimeout(5000); + + // Getting the remote input stream + InputStream fis = connection.getInputStream(); + try + { + return parseFLVfromStream(fis); + } + finally + { + IOUtils.closeQuietly(fis); + } + + } + + /** + * Extract the metadata for the flv and sets them in the properties. If the property has 0.0 or null, then the + * information is not available on the target FLV. + * @throws IOException + * @throws Exception if something goes wrong. + */ + private static VideoMetaData getMetaData(InputStream fis) throws IOException + { + VideoMetaData meta = new VideoMetaData(); + try + { + // Creating the bytes array to read the first 400 bytes data from input stream + byte[] bytes = new byte[400]; + // Reading the data from the input stream + fis.read(bytes); + + meta = getMetaData(bytes); + + } + finally + { + IOUtils.closeQuietly(fis); + } + + return meta; + } + + /** + * @param meta + * @param bytes + */ + protected static VideoMetaData getMetaData(byte[] bytes) + { + + VideoMetaData meta = new VideoMetaData(); + + // Fetching the properties. If the output shows -1 or null then consider that the FLV doesn't have that + // info on metadata + meta.setDuration(getLong(bytes, "duration")); + meta.setWidth(getLong(bytes, "width")); + meta.setHeight(getLong(bytes, "height")); + meta.setAudioDataRate(getDouble(bytes, "audiodatarate")); + meta.setVideoDataRate(getDouble(bytes, "videodatarate")); + meta.setFileSize(getLong(bytes, "filesize")); + meta.setCreatedDate(getString(bytes, "creationdate")); + meta.setMimeType(getString(bytes, "mimetype")); + meta.setFrameRate(getDouble(bytes, "framerate")); + + return meta; + } + + private static double getDouble(byte[] bytes, String property) + { + // Checking whether the property exists on the metadata + int offset = indexOf(bytes, property.getBytes()); + if (offset != -1) + { + // Calculating the value from the bytes received from getBytes method + return ByteBuffer.wrap(getBytes(bytes, offset + property.length() + 1, 8)).getDouble(); + } + else + { + // Returning -1 to notify the info not available + return -1; + } + } + + private static long getLong(byte[] bytes, String property) + { + // Checking whether the property exists on the metadata + int offset = indexOf(bytes, property.getBytes()); + if (offset != -1) + { + // Calculating the value from the bytes received from getBytes method + return (long) ByteBuffer.wrap(getBytes(bytes, offset + property.length() + 1, 8)).getDouble(); + } + else + { + // Returning -1 to notify the info not available + return -1; + } + } + + private static String getString(byte[] bytes, String property) + { + // Checking whether the property exists on the metadata + int offset = indexOf(bytes, property.getBytes()); + if (offset != -1) + { + // Constructing the string from the bytes received from getBytes method + return new String(getBytes(bytes, offset + property.length() + 3, 24)); + } + else + { + // Returning null to notify the info not available + return null; + } + } + + private static byte[] getBytes(byte[] bytes, int offset, int length) + { + // Fetching the required number of bytes from the source and returning + byte[] requiredBytes = new byte[length]; + for (int i = offset, j = 0; j < length; i++, j++) + { + requiredBytes[j] = bytes[i]; + } + return requiredBytes; + } + + static int indexOf(byte[] source, byte[] target) + { + byte first = target[0]; + int max = source.length - target.length; + + for (int i = 0; i <= max; i++) + { + /* Look for first character. */ + if (source[i] != first) + { + while (++i <= max && source[i] != first) + { + ; + } + } + + /* Found first character, now look at the rest of v2 */ + if (i <= max) + { + int j = i + 1; + int end = j + target.length - 1; + for (int k = 1; j < end && source[j] == target[k]; j++, k++) + { + ; + } + + if (j == end) + { + /* Found whole string. */ + return i; + } + } + } + return -1; + } + +} Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.mediaVideoDlg.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.mediaVideoDlg.xml 2011-05-06 15:16:56 UTC (rev 3448) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.mediaVideoDlg.xml 2011-05-06 15:18:08 UTC (rev 3449) @@ -100,7 +100,7 @@ <sv:value>mediaFile</sv:value> </sv:property> <sv:property sv:name="extensions" sv:type="String"> - <sv:value>flv,swf</sv:value> + <sv:value>flv,swf,mp4,m4v</sv:value> </sv:property> <sv:property sv:name="label" sv:type="String"> <sv:value>media.dialogs.tabVideo.video.label</sv:value> Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/multibox/multibox.js =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/multibox/multibox.js 2011-05-06 15:16:56 UTC (rev 3448) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/multibox/multibox.js 2011-05-06 15:18:08 UTC (rev 3449) @@ -175,6 +175,8 @@ this.type = 'flash'; break; case 'flv': + case 'mp4': + case 'm4v': this.type = 'flashVideo'; this.contentObj.xH = 20; break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fg...@us...> - 2011-05-22 17:56:09
|
Revision: 3484 http://openutils.svn.sourceforge.net/openutils/?rev=3484&view=rev Author: fgiust Date: 2011-05-22 17:56:02 +0000 (Sun, 22 May 2011) Log Message: ----------- minor fixes to labels Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.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 Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java 2011-05-22 17:41:57 UTC (rev 3483) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/BaseVideoTypeHandler.java 2011-05-22 17:56:02 UTC (rev 3484) @@ -56,7 +56,7 @@ } catch (Throwable e) { - log.warn("Error parsing FLV file " + log.warn("Error parsing video file " + getOriginalFileNodeData(media).getHandle() + " " + e.getClass().getName() 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-05-22 17:41:57 UTC (rev 3483) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2011-05-22 17:56:02 UTC (rev 3484) @@ -27,7 +27,7 @@ media.dialogs.tabDocument.document.label=File media.dialogs.tabVideo.videoUrl.label=External video url -media.dialogs.tabVideo.videoUrl.description=flv/mp4 absolute url +media.dialogs.tabVideo.videoUrl.description=flv or mp4 absolute url media.dialogs.tabTitle.label=Title @@ -60,7 +60,7 @@ media.types.image.load=Upload new image media.types.audio.load=Upload new mp3 media.types.youtube.load=Link external video -media.types.video.load=Upload new flv/mp4 video +media.types.video.load=Upload new flv or mp4 video media.types.document.load=Upload new document media.download=Download 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-05-22 17:41:57 UTC (rev 3483) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2011-05-22 17:56:02 UTC (rev 3484) @@ -61,7 +61,7 @@ media.types.image.load=Carica immagine media.types.audio.load=Carica file mp3 media.types.youtube.load=Collega video esterno -media.types.video.load=Carica video flv/mp4 +media.types.video.load=Carica video flv o mp4 media.types.document.load=Carica documento media.download=Scarica 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: <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] |