Index: lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/LamsLearningDesignServlet.java =================================================================== diff -u -rceb0cd59c019481da796281a115e4d2e61034b25 -rb4bc62d687404aa739ce4e126b740a7fb610b4d5 --- lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/LamsLearningDesignServlet.java (.../LamsLearningDesignServlet.java) (revision ceb0cd59c019481da796281a115e4d2e61034b25) +++ lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/LamsLearningDesignServlet.java (.../LamsLearningDesignServlet.java) (revision b4bc62d687404aa739ce4e126b740a7fb610b4d5) @@ -59,18 +59,32 @@ String courseId = request.getParameter("courseId"); // validate method parameter and associated parameters - if ((folderId == null) || (courseId == null)) { - throw new RuntimeException("Requred parameters missing. courseId=" + courseId + ", folderId=" + folderId); + if (courseId == null) { + throw new RuntimeException("Required parameter missing. courseId=" + courseId); } + //paging parameters of tablesorter - used in the LAMS Template Wizard + boolean usePaging = false; + String page = request.getParameter("page"); + String size = request.getParameter("size"); + if ( page != null && page.length()>0) { + usePaging = true; + if ( size == null || size.length()==0) + size="10"; + } + String sortName = request.getParameter("sortName"); + String sortDate = request.getParameter("sortDate"); + String search = request.getParameter("search"); + ContextManager ctxMgr = null; Context ctx = null; try { // get Blackboard context ctxMgr = (ContextManager) BbServiceManager.lookupService(ContextManager.class); ctx = ctxMgr.setContext(request); - String learningDesigns = LamsSecurityUtil.getLearningDesigns(ctx, courseId, folderId); + String method = usePaging ? "getPagedHomeLearningDesignsJSON" : "getLearningDesignsJSON"; + String learningDesigns = LamsSecurityUtil.getLearningDesigns(ctx, courseId, folderId, method, search, page, size, sortName, sortDate); response.setContentType("application/json;charset=UTF-8"); response.getWriter().print(learningDesigns); Index: lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/LamsSecurityUtil.java =================================================================== diff -u -rf6a30da76fc0043c9eebf56c23c7f35ff7afaeeb -rb4bc62d687404aa739ce4e126b740a7fb610b4d5 --- lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/LamsSecurityUtil.java (.../LamsSecurityUtil.java) (revision f6a30da76fc0043c9eebf56c23c7f35ff7afaeeb) +++ lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/LamsSecurityUtil.java (.../LamsSecurityUtil.java) (revision b4bc62d687404aa739ce4e126b740a7fb610b4d5) @@ -194,7 +194,7 @@ } /** - * Gets a list of learning designs for the current user from LAMS + * Gets a list of learning designs & workspace folders for the current user from LAMS. * * @param ctx * the blackboard context, contains session data @@ -206,7 +206,25 @@ * @return a string containing the LAMS workspace tree in tigra format */ public static String getLearningDesigns(Context ctx, String courseId, String folderId) { - String serverAddr = getServerAddress(); + return getLearningDesigns(ctx, courseId, folderId,"getLearningDesignsJSON",null,null,null,null,null); + } + + /** + * Gets a list of learning designs & workspace folders for the current user from LAMS. + * + * @param ctx the blackboard context, contains session data + * @param courseId blackboard courseid. We pass it as a parameter as ctx.getCourse().getCourseId() is null when called + * from LamsLearningDesignServlet. + * @param folderId folderID in LAMS. It can be null and then LAMS returns default workspace folders. + * @param method which method to call on the LAMS end + * @param page used only for method = getPagedHomeLearningDesignsJSON + * @param size used only for method = getPagedHomeLearningDesignsJSON + * @return a string containing the LAMS workspace tree in tigra format (method = getLearningDesignsJSON) or + * a string containing the learning designs in JSON (method = getPagedHomeLearningDesignsJSON) + */ + public static String getLearningDesigns(Context ctx, String courseId, String folderId, String method, + String search, String page, String size, String sortName, String sortDate) { + String serverAddr = getServerAddress(); String serverId = getServerID(); // If lams.properties could not be read, throw exception @@ -225,32 +243,45 @@ String country = getCountry(locale); String lang = getLanguage(locale); - // LamsSecurityUtil.getLearningDesigns(null, userDTO.getUserID(), false); // the mode to call upon learning designs final Integer MODE = 2; // TODO: Make locale settings work String learningDesigns = ""; // empty try { - String serviceURLBase = serverAddr - + "/services/xml/LearningDesignRepository?method=getLearningDesignsJSON" + "&datetime=" + + String serviceURL = serverAddr + + "/services/xml/LearningDesignRepository?method="+method+"&datetime=" + timestamp + "&username=" + URLEncoder.encode(username, "utf8") + "&serverId=" + URLEncoder.encode(serverId, "utf8") + "&hashValue=" + hash + "&courseId=" + URLEncoder.encode(courseId, "UTF8") + "&country=" + country + "&lang=" + lang + "&mode=" + MODE + "&firstName=" + URLEncoder.encode(firstName, "UTF-8") + "&lastName=" + URLEncoder.encode(lastName, "UTF-8") + "&email=" + URLEncoder.encode(email, "UTF-8"); - String serviceURL = serviceURLBase; - boolean isHome = false; - if (folderId != null ) { - if ( folderId.equalsIgnoreCase("home") ) { - isHome = true; - } else { - serviceURL += "&folderID=" + folderId; - } + serviceURL += "&folderID=" + ( folderId.equalsIgnoreCase("home") ? "-1" : folderId); } + + // The following parameters are only used for getPagedLearningDesignsJSON + if (page != null ) { + serviceURL += "&page=" + page; + } + if (size != null ) { + serviceURL += "&size=" + size; + } + // sort by name, ascending = 1, descending = 0 + if (sortName != null ) { + serviceURL += "&sortName=" + sortName; + } + // sort by date, ascending = 1, descending = 0 + if (sortDate != null ) { + serviceURL += "&sortDate=" + sortDate; + } + // get all the designs that contain this string + if (search != null ) { + serviceURL += "&search=" + search; + } InputStream is = LamsSecurityUtil.callLamsServer(serviceURL); @@ -259,22 +290,6 @@ IOUtils.copy(is, writer, "UTF-8"); learningDesigns = writer.toString(); - if ( isHome ) { - // we are after the designs in the root of the user's personal folder - String newFolderId = findPersonalFolderId(learningDesigns); - if ( newFolderId != null ) { - serviceURL = serviceURLBase + "&folderID=" + newFolderId; - is = LamsSecurityUtil.callLamsServer(serviceURL); - writer = new StringWriter(); - IOUtils.copy(is, writer, "UTF-8"); - learningDesigns = writer.toString(); - } else { - logger.error("Unable to find personal folder ID from learning design response "+learningDesigns); - learningDesigns = "{}"; - } - } - - } catch (MalformedURLException e) { throw new RuntimeException("Unable to get LAMS learning designs, bad URL: '" + serverAddr + "', please check lams.properties", e); @@ -295,19 +310,7 @@ return learningDesigns; } - private static String findPersonalFolderId(String response) { - // {"folders":[{"isRunSequencesFolder":false,"name":"Teacher Pontiff","folderID":47},{.........}]} - int indexStart = response.indexOf("folderID"); - if ( indexStart > 0 ) { - indexStart += 10; - int indexEnd = response.indexOf("}",indexStart); - if ( indexEnd > 0 ) { - return response.substring(indexStart, indexEnd); - } - } - return null; - } - + /** * Starts lessons in lams through a LAMS webservice *