org.sakaiproject.blti.LessonsFacade.java Source code

Java tutorial

Introduction

Here is the source code for org.sakaiproject.blti.LessonsFacade.java

Source

/**
 * $URL$
 * $Id$
 *
 * Copyright (c) 2009 The Sakai Foundation
 *
 * Licensed under the Educational Community License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *             http://www.opensource.org/licenses/ECL-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.sakaiproject.blti;

import java.net.URL;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import java.util.Properties;
import java.util.UUID;

import org.sakaiproject.component.cover.ComponentManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.sakaiproject.lessonbuildertool.model.SimplePageToolDao;
import org.sakaiproject.lessonbuildertool.SimplePage;
import org.sakaiproject.lessonbuildertool.SimplePageComment;
import org.sakaiproject.lessonbuildertool.SimplePageGroup;
import org.sakaiproject.lessonbuildertool.SimplePageItem;

import org.sakaiproject.lti.api.LTIService;
import org.sakaiproject.util.foorm.SakaiFoorm;

public class LessonsFacade {

    private static Log M_log = LogFactory.getLog(LessonsFacade.class);

    protected static SakaiFoorm foorm = new SakaiFoorm();

    protected static LTIService ltiService = null;
    protected static SimplePageToolDao simplePageToolDao = null;

    public static void init() {
        if (ltiService == null)
            ltiService = (LTIService) ComponentManager.get("org.sakaiproject.lti.api.LTIService");
        if (simplePageToolDao == null)
            simplePageToolDao = (SimplePageToolDao) ComponentManager.get(SimplePageToolDao.class);
    }

    public static List<SimplePageItem> findItemsInSite(String context_id) {
        return simplePageToolDao.findItemsInSite(context_id);
    }

    public static List<SimplePageItem> findItemsOnPage(Long pageNum) {
        return simplePageToolDao.findItemsOnPage(pageNum);
    }

    public static SimplePageItem findItem(long pageId) {
        return simplePageToolDao.findItem(pageId);
    }

    public static SimplePageItem findFolder(List<SimplePageItem> sitePages, Long folderId, List<Long> structureList,
            int depth) {
        if (folderId == null)
            return null;
        if (depth > 10)
            return null;
        for (SimplePageItem i : sitePages) {
            if (structureList.size() > 100)
                return null;
            if (i.getType() != SimplePageItem.PAGE)
                continue;
            // System.out.println("d="+depth+" o="+structureList.size()+" Id="+i.getId()+" SakaiId="+i.getSakaiId()+" title="+i.getName());
            Long pageNum = Long.valueOf(i.getSakaiId());
            if (folderId.equals(pageNum))
                return i;
            structureList.add(i.getId());

            List<SimplePageItem> items = simplePageToolDao.findItemsOnPage(pageNum);
            SimplePageItem retval = findFolder(items, folderId, structureList, depth + 1);
            if (retval != null)
                return retval;
        }
        return null;
    }

    public static SimplePageItem addLessonsFolder(SimplePageItem thePage, String nameStr, int startPos) {
        // System.out.println("item="+ thePage.getName()+" id="+ thePage.getId()+" sakaiId="+ thePage.getSakaiId());
        Long parent = Long.valueOf(thePage.getSakaiId());
        // System.out.println("Parent="+parent);

        SimplePage actualPage = simplePageToolDao.getPage(parent);
        // System.out.println("Simple Page="+actualPage);
        Long topParent = actualPage.getTopParent();
        if (topParent == null)
            topParent = parent;
        // System.out.println("topParent="+topParent);
        // System.out.println("toolId="+actualPage.getToolId()+" siteId="+actualPage.getSiteId());

        SimplePage subPage = simplePageToolDao.makePage(actualPage.getToolId(), actualPage.getSiteId(), nameStr,
                parent, topParent);
        List<String> elist = new ArrayList<String>();
        simplePageToolDao.saveItem(subPage, elist, "ERROR WAS HERE", false);
        M_log.debug("Page Saved " + elist);

        // System.out.println("subPage="+subPage);
        String selectedEntity = String.valueOf(subPage.getPageId());
        // System.out.println("selectedEntity="+selectedEntity);

        SimplePageItem subPageItem = simplePageToolDao.makeItem(parent, startPos, SimplePageItem.PAGE,
                Long.toString(subPage.getPageId()), nameStr);
        subPageItem.setFormat("");
        elist = new ArrayList<String>();
        simplePageToolDao.saveItem(subPageItem, elist, "ERROR WAS HERE", false);
        M_log.debug("Item Saved " + elist);
        // System.out.println("subItem = "+subPageItem);
        return subPageItem;
    }

    // Borrowed from SimplePageBean.java#getCurrentPageId
    public static SimplePageItem addFirstPage(String siteId, String toolId, String title) {
        M_log.debug("Adding top page site=" + siteId + " toolId=" + toolId + " title=" + title);
        SimplePage page = simplePageToolDao.makePage(toolId, siteId, title, null, null);
        List<String> elist = new ArrayList<String>();
        if (!simplePageToolDao.saveItem(page, elist, "ERROR WAS HERE", false))
            return null;
        M_log.debug("SimplePage added=" + page.getPageId());

        // Add the dummy item associtated with the page
        Long l = page.getPageId();
        SimplePageItem i = simplePageToolDao.makeItem(0, 0, SimplePageItem.PAGE, l.toString(), title);
        simplePageToolDao.saveItem(i, elist, "ERROR WAS HERE", false);
        M_log.debug("SimplePageItem added=" + i.getId());
        return i;
    }

    public static String doImportTool(String siteId, String launchUrl, String bltiTitle, String strXml,
            String custom) throws Exception {
        if (ltiService == null)
            return null;

        String toolUrl = launchUrl;
        int pos = toolUrl.indexOf("?");
        if (pos > 0) {
            toolUrl = toolUrl.substring(0, pos);
        }

        String toolName = toolUrl;
        try {
            URL launch = new URL(launchUrl);
            toolName = launch.getProtocol() + "://" + launch.getAuthority();
        } catch (Exception e) {
            toolName = toolUrl;
        }

        // Check for global tool configurations (prefer global)
        Map<String, Object> theTool = null;
        List<Map<String, Object>> tools = ltiService.getToolsDao(null, null, 0, 0, "!admin");
        String lastLaunch = "";
        for (Map<String, Object> tool : tools) {
            String toolLaunch = (String) tool.get(LTIService.LTI_LAUNCH);
            // Prefer the longest match
            if (toolUrl.startsWith(toolLaunch) && toolLaunch.length() > lastLaunch.length()) {
                theTool = tool;
                lastLaunch = toolLaunch;
            }
        }

        // Check for within-site tool configurations (prefer global)
        if (theTool == null) {
            tools = ltiService.getToolsDao(null, null, 0, 0, siteId);
            lastLaunch = "";
            for (Map<String, Object> tool : tools) {
                String toolLaunch = (String) tool.get(LTIService.LTI_LAUNCH);
                // Prefer the longest match
                if (toolUrl.startsWith(toolLaunch) && toolLaunch.length() > lastLaunch.length()) {
                    theTool = tool;
                    lastLaunch = toolLaunch;
                }
            }
        }

        // If we still do not have a tool configuration throw an error
        if (theTool == null) {
            M_log.error("LORI Launch configuration not found- " + toolUrl);
            throw new Exception("LORI Launch configuration not found");
        }

        // Found a tool - time to insert content
        Map<String, Object> theContent = null;
        Long contentKey = null;
        if (theTool != null) {
            Properties props = new Properties();
            String toolId = foorm.getLong(theTool.get(LTIService.LTI_ID)).toString();
            props.setProperty(LTIService.LTI_TOOL_ID, toolId);
            props.setProperty(LTIService.LTI_PLACEMENTSECRET, UUID.randomUUID().toString());
            props.setProperty(LTIService.LTI_TITLE, bltiTitle);
            props.setProperty(LTIService.LTI_PAGETITLE, bltiTitle);
            props.setProperty(LTIService.LTI_LAUNCH, launchUrl);
            props.setProperty(LTIService.LTI_SITE_ID, siteId);

            if (strXml != null)
                props.setProperty(LTIService.LTI_XMLIMPORT, strXml);
            if (custom != null)
                props.setProperty(LTIService.LTI_CUSTOM, custom);

            M_log.debug("Inserting content associted with toolId=" + toolId);

            // Insert as admin into siteId, on error throw upwards
            Object result = ltiService.insertContentDao(props, "!admin");
            if (result instanceof String) {
                M_log.error("Could not insert content - " + result);
            } else {
                M_log.debug("Adding LTI tool " + result);
            }
            if (result instanceof Long)
                theContent = ltiService.getContentDao((Long) result, siteId);
        }

        String sakaiId = null;
        if (theContent != null) {
            sakaiId = "/blti/" + theContent.get(LTIService.LTI_ID);
        }
        return sakaiId;
    }

    public static boolean addLessonsLaunch(SimplePageItem thePage, String sakaiId, String nameStr, int startPos) {
        M_log.debug("Adding LTI content item " + sakaiId);
        Long pageNum = Long.valueOf(thePage.getSakaiId());
        M_log.debug("Parent Page=" + thePage.getSakaiId() + " title=" + thePage.getName());

        SimplePageItem item = simplePageToolDao.makeItem(thePage.getPageId(), startPos, SimplePageItem.BLTI,
                sakaiId, nameStr);
        item.setHeight(""); // default depends upon format, so it's supplied at runtime
        item.setPageId(pageNum.longValue());

        List<String> elist = new ArrayList<String>();
        simplePageToolDao.saveItem(item, elist, "ERROR WAS HERE", false);
        M_log.debug("Saved " + elist);
        return true;
    }

}