You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2012/04/04 10:55:13 UTC

svn commit: r1309292 [8/8] - in /chemistry/playground/chemistry-opencmis-javascript-relax: ./ src/ src/main/ src/main/webapp/ src/main/webapp/WEB-INF/ src/main/webapp/css/ src/main/webapp/css/eggplant/ src/main/webapp/css/eggplant/images/ src/main/weba...

Added: chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/playerpage.js
URL: http://svn.apache.org/viewvc/chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/playerpage.js?rev=1309292&view=auto
==============================================================================
--- chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/playerpage.js (added)
+++ chemistry/playground/chemistry-opencmis-javascript-relax/src/main/webapp/playerpage.js Wed Apr  4 08:55:11 2012
@@ -0,0 +1,409 @@
+    
+    var session = null;
+    var filter = null;
+    var myPlaylist =null;
+    
+    function connect() {
+        var firstRepoId;        
+        connectToRepo($("#reposfield").val(), $("#jsonpfield").attr("checked")=="checked", $("#userfield").val(),
+                $("#pwdfield").val(), function(repoInfos) {
+            trace("getRepositories()");
+            var row;
+            var tbl = $('<table>').append($('<tr>').append($('<td>').text("Found repositories:")))
+                    .append(row = $('<tr>'));
+            for (var repoInfo in repoInfos) {
+                row.append($('<td>').text(repoInfos[repoInfo].repositoryId));
+                if (null == firstRepoId)
+                    firstRepoId = repoInfos[repoInfo].repositoryId;
+            }
+            $("#repositoriessection *").remove();
+            $("#repositoriessection").append(tbl);
+            $("#repoidfield").attr('value', firstRepoId);
+            $("#folderidfield").attr('value', repoInfos[firstRepoId].rootFolderId);
+            
+            createSession($("#reposfield").val(), firstRepoId, $("#jsonpfield").attr("checked")=="checked", $("#userfield").val(),
+                    $("#pwdfield").val());
+        });    
+    }
+    
+    function connectToRepo(connectionUrl, jsonp, user, password, cbFct) {
+         var factory = new CmisSessionFactory({
+              url : connectionUrl,
+              jsonp : jsonp,
+              user : user,
+              password: password
+            });
+         factory.getRepositories(cbFct, function(errorMessage) {
+             displayError(errorMessage, "#alertpane")
+         });
+    }
+                
+    function createSession(connectionUrl, repoId, jsonp, user, password) {
+                trace("Initializing session to " + connectionUrl);
+                session = null;
+                var factory = new CmisSessionFactory({
+                    url : connectionUrl,
+                    repositoryId : repoId,
+                    jsonp : jsonp,
+                    user : user,
+                    password: password
+                });
+                  
+                session = factory.createSession();
+                session.getRepositoryInfo(function(repoInfos) {
+                    trace("init(): getRepositoryInfo()");
+                    for (var repoInfo in repoInfos) {
+                        session.rootFolderId = repoInfos[repoInfo].rootFolderId;
+                        session.rootUrl = repoInfos[repoInfo].rootFolderUrl;
+                        break;
+                    }
+                    checkSession("#alertpane");
+                });
+    }
+    
+    
+    function checkSession(domId) {
+        if (null == session) {
+            var error = "No session! Please connect first...";
+            displayError(error, domId);
+            throw error;
+        } else {
+            $('#alertpane').text("Connected to server as user: " + session.user);
+        }
+    }
+
+    function displayError(cmisError, domId) {
+        if (null == domId)
+            domId = "#alertpane";
+        $(domId + " *").remove();
+        if (null != cmisError)
+            $(domId).html(cmisError.toString());         
+    }
+    
+    function checkError(jsonObj, domId) {
+        if (jsonObj != null && jsonObj.exception) {
+            var cmisError = session.createErrorFromErrorResponse(jsonObj);
+            displayError(cmisError, domId);
+            return cmisError;
+        } else
+            return null;
+    }
+    
+    function createRandomString() {
+        return Math.round(Math.random()*1000).toString();
+    }
+
+    function onClickQueryForPlaylistFirst() {
+        var pageCtx = session.getPagingContext("doQueryForPlaylist");
+        pageCtx.setFirstPage();
+        doQueryForPlaylist(pageCtx.query);
+    }
+    
+    function onClickQueryForPlaylistPrev() {
+        var pageCtx = session.getPagingContext("doQueryForPlaylist");
+        pageCtx.setPreviousPage();
+        doQueryForPlaylist(pageCtx.query);
+    }
+    
+    function onClickQueryForPlaylistNext() {
+        var pageCtx = session.getPagingContext("doQueryForPlaylist");
+        pageCtx.setNextPage();
+        doQueryForPlaylist(pageCtx.query);
+    }
+    
+    function onClickQueryForPlaylistLast() {
+        var pageCtx = session.getPagingContext("doQueryForPlaylist");        
+        pageCtx.setLastPage();        
+        doQueryForPlaylist(pageCtx.query);
+    }
+    
+    function onClickQueryForAlbumNext() {
+        var pageCtx = session.getPagingContext("doQueryByAlbum");
+        pageCtx.setNextPage();
+        doQueryByAlbum(pageCtx.query);
+    }
+    
+    function onClickQueryForArtistNext() {
+        var pageCtx = session.getPagingContext("doQueryByArtist");
+        pageCtx.setNextPage();
+        doQueryByArtist(pageCtx.query);
+    }
+
+    function getContentUrl(id) {
+        return session.getRootUrl() + "?cmisselector=content&objectId=" + id;
+    }
+    
+    
+    function convertValue(value, type) {
+        if (type == 'string') {
+            if (value == '*')
+                return "'*'"; // confuses text() method 
+            else 
+                return value;
+        } else if (type == 'datetime') {
+            return new Date(value).toLocaleString();
+        } else
+            return value.toString();
+    }
+    
+    function getPropertyValue(props, queryName) {
+        var prop = props[queryName];
+        if (null != prop && null != prop.value) {
+            return convertValue(prop.value, prop.type);
+        } else
+            return "";
+    }
+        
+    function filterByAlbum(filter) {
+        session.deletePagingContext("doQueryByAlbum");
+        if (filter)
+            doQueryByAlbum("SELECT * FROM AUDIO_FILE where ALBUM LIKE '" + filter + "%'");
+        else
+            doQueryByAlbum("SELECT * FROM AUDIO_FILE");
+    }
+    
+    function createAlbumList(queryResp) {
+        var albums = {};
+        
+        for (var child in queryResp.results) {
+            var props = queryResp.results[child].properties;
+            var typeId = getPropertyValue(props, "cmis:objectTypeId");
+            if (typeId != null && typeId === "audioFile") {
+                var playItem = {};
+                var album = getPropertyValue(props, "ALBUM");
+                var artist  = getPropertyValue(props, "ARTIST");
+                if (album && artist)
+                    albums[album] = artist;
+            }
+        }
+        
+        $("#filterresultlist").html(null);
+        for (var album in albums) {
+            $("#filterresultlist").append($("<li>").append($("<a>").attr("href","javascript:getPlaylistForAlbum(\"" + album + "\");").text(album))
+                    .append($("<span class=\"artist\">").text(" by " + albums[album])));
+        }
+    }
+        
+    function doQueryByAlbum(cmisQuery) {
+        checkSession("#alertpane");
+        $("#queryresponsesection *").remove();
+        trace("doing query: " + cmisQuery);
+        session.doQueryPaged(cmisQuery, "doQueryByAlbum", function(data) {
+            if (!checkError(data, "#alertpane")) {
+                createAlbumList(data);
+                var pageCtx = session.getPagingContext("doQueryByAlbum");
+                pageCtx.query = cmisQuery; // store query for later reuse when paging
+                $("#pagingbuttons").html(null);
+                if (pageCtx.getCurrentPage() < pageCtx.getTotalPages()) {
+                    $("#pagingbuttons")
+                        .append($("<p>").append($("<a>").attr("href", "javascript:onClickQueryForAlbumNext();").text("More...")));
+                }
+            }
+        });       
+    }
+    
+    function loadPlayer(domObj, cbFct) {
+        domObj.load('jplayer.html', function() {
+
+            myPlaylist = new jPlayerPlaylist({
+                jPlayer: "#jquery_jplayer_N",
+                cssSelectorAncestor: "#jplayer"
+            }, [
+                {
+                    title:"<Empty>",
+                    artist:"",
+                    mp3:"",
+                    oga:"",
+                    poster: "poster.jpg"
+                }
+            ], {
+                playlistOptions: {
+                    enableRemoveControls: false
+                },
+                swfPath: "jplayer",
+                supplied: "webmv, mp3"
+                // supplied: "webmv, ogv, m4v, oga, mp3"
+            });
+
+            return cbFct.call(this);
+        });        
+    }
+    
+    function getPlaylistForAlbum(albumName) {
+        var queryString; 
+        
+        if (albumName.lastIndexOf("no/unknown") >= 0)
+            queryString = "SELECT * FROM AUDIO_FILE WHERE ALBUM IS NULL";
+        else
+            queryString = "SELECT * FROM AUDIO_FILE WHERE ALBUM LIKE '" + albumName + "%'  ORDER BY TRACK";
+        
+        checkSession("#alertpane");
+        // load player view
+        loadPlayer($('#mainpane'), function() {
+            session.opCtx.maxItems = 25; // set paging size
+            session.deletePagingContext("doQueryForPlaylist");
+            $("#playerheader").html($("<h3 class=\"ui-widget ui-widget-header\">").text("Album: " + albumName));
+            doQueryForPlaylist(queryString);
+            });
+    }
+    
+    function filterByArtist(filter) {
+        session.deletePagingContext("doQueryByArtist");
+        if (filter)
+            doQueryByArtist("SELECT * FROM AUDIO_FILE where ARTIST LIKE '" + filter + "%'");
+        else
+            doQueryByArtist("SELECT * FROM AUDIO_FILE");
+    }
+
+    function doQueryByArtist(cmisQuery) {
+        checkSession("#alertpane");
+        $("#queryresponsesection *").remove();
+        trace("doing query: " + cmisQuery);
+        session.doQueryPaged(cmisQuery, "doQueryByArtist", function(data) {
+            if (!checkError(data, "#alertpane")) {
+                createArtistList(data);
+                var pageCtx = session.getPagingContext("doQueryByArtist");
+                pageCtx.query = cmisQuery; // store query for later reuse when paging
+                $("#pagingbuttons").html(null);
+                if (pageCtx.getCurrentPage() < pageCtx.getTotalPages()) {
+                    $("#pagingbuttons")
+                        .append($("<p>").append($("<a>").attr("href", "javascript:onClickQueryForArtistNext();").text("More...")));
+                }
+            }
+        });       
+    }
+    
+    function createArtistList(queryResp) {
+        var albums = {};
+        for (var child in queryResp.results) {
+            var props = queryResp.results[child].properties;
+            var typeId = getPropertyValue(props, "cmis:objectTypeId");
+            if (typeId != null && typeId === "audioFile") {
+                var playItem = {};
+                var album = getPropertyValue(props, "ALBUM");
+                var artist  = getPropertyValue(props, "ARTIST");
+                if (album && artist)
+                    albums[album] = artist;
+                else if (artist) 
+                    albums[album] = "(no/unknown album)";
+            }
+        }
+        
+        $("#filterresultlist").html(null);
+        for (var album in albums) {
+            $("#filterresultlist").append($("<li>").append($("<a>").attr("href","javascript:getPlaylistForAlbum(\"" + album + "\");").text(album))
+                    .append($("<span class=\"artist\">").text(" by " + albums[album])));
+        }
+    }
+
+    function filterByTitle(filter) {
+        session.deletePagingContext("doQueryByAlbum");
+        if (filter)
+            doQueryForPlaylist("SELECT * FROM AUDIO_FILE where TITLE LIKE '" + filter + "%'");
+        else
+            doQueryForPlaylist("SELECT * FROM AUDIO_FILE");
+    }
+    
+    function doQueryForPlaylist(queryString) {
+        checkSession("#alertpane");
+        $("#queryresponsesection *").remove();
+        trace("doing query: " + queryString);
+        session.doQueryPaged(queryString, "doQueryForPlaylist", function(data) {
+            if (!checkError(data, "#queryresponsesection")) {
+                var tbl = createPlaylist(data);
+                var pageCtx = session.getPagingContext("doQueryForPlaylist");
+                pageCtx.query = queryString;
+                var totalItems = pageCtx.totalItems==null ? 4294967295 : pageCtx.totalItems;
+                var page = Math.floor(pageCtx.skipCount / session.opCtx.maxItems) + 1;
+                var totalPages;
+                if (pageCtx.totalItems==null)
+                    totalPages = "(unknown)";
+                else
+                    totalPages = ((totalItems - (totalItems % session.opCtx.maxItems)) / session.opCtx.maxItems) + 1;
+                
+                if (data.results.length == 0)
+                    $("#pagingbuttons").html($("<p>").text("No items found."));
+                else
+                    $("#pagingbuttons").html(null);
+                
+                if (pageCtx.getTotalPages() > 1) {
+                    // #queryresponsesection
+                    // $("#pagingbuttons").html($("<p>").text("Retrieved playlist from server, found " + totalItems + 
+                    //         " items. Use buttons for paging through the list."))
+                    $("#pagingbuttons")
+                        .append($("<table>").append($("<tr>").append($("<td>")
+                        .append($("<button>").attr("value", "first").click(function() {onClickQueryForPlaylistFirst();}).append($("<img>").attr("src", "images/first.png")))
+                        .append($("<button>").attr("value", "prev").click(function() {onClickQueryForPlaylistPrev();}).append($("<img>").attr("src", "images/prev.png")))
+                        .append($("<button>").attr("value", "next").click(function() {onClickQueryForPlaylistNext();}).append($("<img>").attr("src", "images/next.png")))
+                        .append($("<button>").attr("value", "last").click(function() {onClickQueryForPlaylistLast();}).append($("<img>").attr("src", "images/last.png"))))
+                        .append($("<td>").text("Page " + page + " of " + totalPages + " / Items total: " + (totalItems==4294967295?"unknown":totalItems)))))
+                        .append($("<hr>"));
+                }
+            }
+        });
+    };
+    
+    function createPlaylist(queryResp) {
+        var playList = [];
+        
+        for (var child in queryResp.results) {
+            var props = queryResp.results[child].properties;
+            var typeId = getPropertyValue(props, "cmis:objectTypeId");
+            if (typeId != null && typeId === "audioFile") {
+                var playItem = {};
+                playItem.artist = getPropertyValue(props, "ARTIST");
+                playItem.title = getPropertyValue(props, "TITLE");
+                playItem.mp3 = getContentUrl(getPropertyValue(props, "cmis:objectId"));
+                playItem.poster = "images/musical-notes.jpg";
+                trace("add track: " + playItem.mp3);
+                playList.push(playItem);
+            }
+        }        
+        myPlaylist.setPlaylist(playList);
+    }
+
+    function onFilterByAlbum() {
+        checkSession("#alertpane");
+        $('#mainpane').load('filterbyalbum.html', function() {
+        });
+    }
+
+    function onFilterByArtist() {
+        checkSession("#alertpane");
+        $('#mainpane').load('filterbyartist.html', function() {
+        });
+    }
+    
+    function onFilterByTitle() {
+        checkSession("#alertpane");
+        $('#mainpane').load('filterbytitle.html', function() {
+            loadPlayer($('#playerpane'), function() {
+                });
+       });
+    }
+
+    $(document).ready(function() {
+
+        $(document).ajaxError(function(event, request, settings, excep){
+            var cmisError = CmisSession.defaultErrorHandler(event, request, settings, excep);
+            displayError(cmisError, '#alertpane');
+         });
+        
+        var myLayout = $('body').layout({
+            west__size:         200 // "25%"
+        ,   east__size:         0
+            // RESIZE Accordion widget when panes resize
+        ,   west__onresize:     $.layout.callbacks.resizePaneAccordions
+        });
+
+        // ACCORDION - in the West pane
+        $("#accordion1").accordion({ fillSpace: true,
+                                     active:     1
+                                   });        
+        connect();
+        
+        $('#connectbutton').click(function() {
+            connect();
+        });
+
+    });  
\ No newline at end of file