Example usage for java.text DateFormat SHORT

List of usage examples for java.text DateFormat SHORT

Introduction

In this page you can find the example usage for java.text DateFormat SHORT.

Prototype

int SHORT

To view the source code for java.text DateFormat SHORT.

Click Source Link

Document

Constant for short style pattern.

Usage

From source file:org.libreplan.web.common.Util.java

/**
 * Format specific <code>time</code> using the {@link DateFormat#SHORT} format and showing only the time.
 *///  www.j ava 2  s . com
public static String formatTime(Date time) {
    return time == null ? "" : DateFormat.getTimeInstance(DateFormat.SHORT, Locales.getCurrent()).format(time);
}

From source file:org.dbgl.gui.MainWindow.java

private void setTableItem(final ProfilesListItem newItemTableItem, final Profile prof) {
    for (int i = 0; i < columnIds.length; i++) {
        String value;// w  w w .j  a v a 2s  .  co  m
        switch (columnIds[i]) {
        case 0:
            value = prof.getTitle();
            break;
        case 1:
            value = prof.hasSetupString();
            break;
        case 2:
            value = prof.getDeveloperName();
            break;
        case 3:
            value = prof.getPublisherName();
            break;
        case 4:
            value = prof.getGenre();
            break;
        case 5:
            value = prof.getYear();
            break;
        case 6:
            value = prof.getStatus();
            break;
        case 7:
            value = prof.isDefaultString();
            break;
        case 8:
            value = String.valueOf(prof.getId());
            break;
        case 9:
            value = String.valueOf(prof.getDbversionId());
            break;
        case 10:
        case 11:
        case 12:
        case 13:
        case 14:
        case 15:
        case 16:
        case 17:
            value = prof.getCustomString(columnIds[i] - Constants.RO_COLUMN_NAMES);
            break;
        case 18:
            value = prof.getCustomInt(0) + " %";
            break;
        case 19:
            value = String.valueOf(prof.getCustomInt(1));
            break;
        case 21:
            value = DosboxVersion.findById(dbversionsList, prof.getDbversionId()).getTitle();
            break;
        case 22:
            value = Settings.toString(prof.getStats().getCreated(), DateFormat.SHORT);
            break;
        case 23:
            value = Settings.toString(prof.getStats().getModified(), DateFormat.SHORT);
            break;
        case 24:
            value = Settings.toString(prof.getStats().getLastrun(), DateFormat.SHORT);
            break;
        case 25:
            value = Settings.toString(prof.getStats().getLastsetup(), DateFormat.SHORT);
            break;
        case 26:
            value = String.valueOf(prof.getStats().getRuns());
            break;
        case 27:
            value = String.valueOf(prof.getStats().getSetups());
            break;
        default:
            value = "";
        }
        if (columnIds[i] != 20) {
            newItemTableItem.setText(i, columnIds[i], value);
        }
    }
    newItemTableItem.setData(new ThumbInfo(prof.getCaptures()));
}

From source file:es.emergya.ui.gis.popups.ConsultaHistoricos.java

private WayPoint buildWay(Posicion pos, boolean linea, boolean showTime) {
    WayPoint way = new WayPoint(new LatLon(pos.getY(), pos.getX()));
    way.attr.put("time", dateFormat.format(pos.getMarcaTemporal().getTime()));
    String name = pos.getIdentificador();

    if (showTime) {
        name += " " + DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, LOCALE)
                .format(pos.getMarcaTemporal().getTime());
    }//w  ww .ja va2  s .  com
    way.attr.put("name", name);

    way.setGarminCommentTime("time");
    way.drawLine = linea;
    return way;
}

From source file:org.sakaiproject.lessonbuildertool.tool.producers.ShowPageProducer.java

public void fillComponents(UIContainer tofill, ViewParameters viewParams, ComponentChecker checker) {
    GeneralViewParameters params = (GeneralViewParameters) viewParams;

    UIOutput.make(tofill, "html")
            .decorate(new UIFreeAttributeDecorator("lang", localegetter.get().getLanguage()))
            .decorate(new UIFreeAttributeDecorator("xml:lang", localegetter.get().getLanguage()));

    UIOutput.make(tofill, "datepicker").decorate(
            new UIFreeAttributeDecorator("src", (majorVersion >= 10 ? "/library" : "/lessonbuilder-tool")
                    + "/js/lang-datepicker/lang-datepicker.js"));

    boolean iframeJavascriptDone = false;

    // security model:
    // canEditPage and canReadPage are normal Sakai privileges. They apply

    // to all/*from   w  ww. j a  v a2s.co  m*/
    // pages in the site.
    // However when presented with a page, we need to make sure it's
    // actually in
    // this site, or users could get to pages in other sites. That's done
    // by updatePageObject. The model is that producers always work on the
    // current page, and updatePageObject makes sure that is in the current
    // site.
    // At that point we can safely use canEditPage.

    // somewhat misleading. sendingPage specifies the page we're supposed to
    // go to.  If path is "none", we don't want this page to be what we see
    // when we come back to the tool
    if (params.getSendingPage() != -1) {
        // will fail if page not in this site
        // security then depends upon making sure that we only deal with
        // this page
        try {
            simplePageBean.updatePageObject(params.getSendingPage(), !params.getPath().equals("none"));
        } catch (Exception e) {
            log.warn("ShowPage permission exception " + e);
            UIOutput.make(tofill, "error-div");
            UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.not_available"));
            return;
        }
    }

    boolean canEditPage = simplePageBean.canEditPage();
    boolean canReadPage = simplePageBean.canReadPage();
    boolean canSeeAll = simplePageBean.canSeeAll(); // always on if caneditpage

    boolean cameFromGradingPane = params.getPath().equals("none");

    TimeZone localtz = timeService.getLocalTimeZone();
    isoDateFormat.setTimeZone(localtz);

    if (!canReadPage) {
        // this code is intended for the situation where site permissions
        // haven't been set up.
        // So if the user can't read the page (which is pretty abnormal),
        // see if they have site.upd.
        // if so, give them some explanation and offer to call the
        // permissions helper
        String ref = "/site/" + simplePageBean.getCurrentSiteId();
        if (simplePageBean.canEditSite()) {
            SimplePage currentPage = simplePageBean.getCurrentPage();
            UIOutput.make(tofill, "needPermissions");

            GeneralViewParameters permParams = new GeneralViewParameters();
            permParams.setSendingPage(-1L);
            createStandardToolBarLink(PermissionsHelperProducer.VIEW_ID, tofill, "callpermissions",
                    "simplepage.permissions", permParams, "simplepage.permissions.tooltip");

        }

        // in any case, tell them they can't read the page
        UIOutput.make(tofill, "error-div");
        UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.nopermissions"));
        return;
    }

    String addBefore = params.getAddBefore();
    if (params.addTool == GeneralViewParameters.COMMENTS) {
        simplePageBean.addCommentsSection(addBefore);
    } else if (params.addTool == GeneralViewParameters.STUDENT_CONTENT) {
        simplePageBean.addStudentContentSection(addBefore);
    } else if (params.addTool == GeneralViewParameters.STUDENT_PAGE) {
        simplePageBean.createStudentPage(params.studentItemId);
        canEditPage = simplePageBean.canEditPage();
    }

    // Find the MSIE version, if we're running it.
    int ieVersion = checkIEVersion();
    // as far as I can tell, none of these supports fck or ck
    // we can make it configurable if necessary, or use WURFL
    // however this test is consistent with CKeditor's check.
    // that desireable, since if CKeditor is going to use a bare
    // text block, we want to handle it as noEditor
    String userAgent = httpServletRequest.getHeader("User-Agent");
    if (userAgent == null)
        userAgent = "";
    boolean noEditor = userAgent.toLowerCase().indexOf("mobile") >= 0;

    // set up locale
    Locale M_locale = null;
    String langLoc[] = localegetter.get().toString().split("_");
    if (langLoc.length >= 2) {
        if ("en".equals(langLoc[0]) && "ZA".equals(langLoc[1])) {
            M_locale = new Locale("en", "GB");
        } else {
            M_locale = new Locale(langLoc[0], langLoc[1]);
        }
    } else {
        M_locale = new Locale(langLoc[0]);
    }

    // clear session attribute if necessary, after calling Samigo
    String clearAttr = params.getClearAttr();

    if (clearAttr != null && !clearAttr.equals("")) {
        Session session = SessionManager.getCurrentSession();
        // don't let users clear random attributes
        if (clearAttr.startsWith("LESSONBUILDER_RETURNURL")) {
            session.setAttribute(clearAttr, null);
        }
    }

    if (htmlTypes == null) {
        String mmTypes = ServerConfigurationService.getString("lessonbuilder.html.types", DEFAULT_HTML_TYPES);
        htmlTypes = mmTypes.split(",");
        for (int i = 0; i < htmlTypes.length; i++) {
            htmlTypes[i] = htmlTypes[i].trim().toLowerCase();
        }
        Arrays.sort(htmlTypes);
    }

    if (mp4Types == null) {
        String m4Types = ServerConfigurationService.getString("lessonbuilder.mp4.types", DEFAULT_MP4_TYPES);
        mp4Types = m4Types.split(",");
        for (int i = 0; i < mp4Types.length; i++) {
            mp4Types[i] = mp4Types[i].trim().toLowerCase();
        }
        Arrays.sort(mp4Types);
    }

    if (html5Types == null) {
        String jTypes = ServerConfigurationService.getString("lessonbuilder.html5.types", DEFAULT_HTML5_TYPES);
        html5Types = jTypes.split(",");
        for (int i = 0; i < html5Types.length; i++) {
            html5Types[i] = html5Types[i].trim().toLowerCase();
        }
        Arrays.sort(html5Types);
    }

    // remember that page tool was reset, so we need to give user the option
    // of going to the last page from the previous session
    SimplePageToolDao.PageData lastPage = simplePageBean.toolWasReset();

    // if this page was copied from another site we may have to update links
    // can only do the fixups if you can write. We could hack permissions, but
    // I assume a site owner will access the site first
    if (canEditPage)
        simplePageBean.maybeUpdateLinks();

    // if starting the tool, sendingpage isn't set. the following call
    // will give us the top page.
    SimplePage currentPage = simplePageBean.getCurrentPage();

    // now we need to find our own item, for access checks, etc.
    SimplePageItem pageItem = null;
    if (currentPage != null) {
        pageItem = simplePageBean.getCurrentPageItem(params.getItemId());
    }
    // one more security check: make sure the item actually involves this
    // page.
    // otherwise someone could pass us an item from a different page in
    // another site
    // actually this normally happens if the page doesn't exist and we don't
    // have permission to create it
    if (currentPage == null || pageItem == null || (pageItem.getType() != SimplePageItem.STUDENT_CONTENT
            && Long.valueOf(pageItem.getSakaiId()) != currentPage.getPageId())) {
        log.warn("ShowPage item not in page");
        UIOutput.make(tofill, "error-div");
        if (currentPage == null)
            // most likely tool was created by site info but no page
            // has created. It will created the first time an item is created,
            // so from a user point of view it looks like no item has been added
            UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.noitems_error_user"));
        else
            UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.not_available"));
        return;
    }

    // the reason for a seaprate release date test is so we can show the date.
    // there are currently some issues. If the page is not released and the user doesn't have
    // access because of groups, this will show the not released data. That's misleading because
    // when the release date comes the user still won't be able to see it. Not sure if it's worth
    // creating a separate function that just checks the groups. It's easy to test hidden, so I do that. The idea is that
    // if it's both hidden and not released it makes sense to show hidden.

    // check two parts of isitemvisible where we want to give specific errors
    // potentially need time zone for setting release date
    if (!canSeeAll && currentPage.getReleaseDate() != null && currentPage.getReleaseDate().after(new Date())
            && !currentPage.isHidden()) {
        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, M_locale);
        TimeZone tz = timeService.getLocalTimeZone();
        df.setTimeZone(tz);
        String releaseDate = df.format(currentPage.getReleaseDate());
        String releaseMessage = messageLocator.getMessage("simplepage.not_yet_available_releasedate")
                .replace("{}", releaseDate);

        UIOutput.make(tofill, "error-div");
        UIOutput.make(tofill, "error", releaseMessage);

        return;
    }

    // the only thing not already tested (or tested in release check below) in isItemVisible is groups. In theory
    // no one should have a URL to a page for which they aren't in the group,
    // so I'm not trying to give a better message than just hidden
    if (!canSeeAll && currentPage.isHidden() || !simplePageBean.isItemVisible(pageItem)) {
        UIOutput.make(tofill, "error-div");
        UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.not_available_hidden"));
        return;
    }

    // I believe we've now checked all the args for permissions issues. All
    // other item and
    // page references are generated here based on the contents of the page
    // and items.

    // needed to process path arguments first, so refresh page goes the right page
    if (simplePageBean.getTopRefresh()) {
        UIOutput.make(tofill, "refresh");
        return; // but there's no point doing anything more
    }

    // error from previous operation
    // consumes the message, so don't do it if refreshing
    List<String> errMessages = simplePageBean.errMessages();
    if (errMessages != null) {
        UIOutput.make(tofill, "error-div");
        for (String e : errMessages) {
            UIBranchContainer er = UIBranchContainer.make(tofill, "errors:");
            UIOutput.make(er, "error-message", e);
        }
    }

    if (canEditPage) {
        // special instructor-only javascript setup.
        // but not if we're refreshing
        UIOutput.make(tofill, "instructoronly");
        // Chome and IE will abort a page if some on it was input from
        // a previous submit. I.e. if an HTML editor was used. In theory they
        // only do this if part of it is Javascript, but in practice they do
        // it for images as well. The protection isn't worthwhile, since it only
        // protects the first time. Since it will reesult in a garbled page, 
        // people will just refresh the page, and then they'll get the new
        // contents. The Chrome guys refuse to fix this so it just applies to Javascript
        httpServletResponse.setHeader("X-XSS-Protection", "0");
    }

    if (currentPage == null || pageItem == null) {
        UIOutput.make(tofill, "error-div");
        if (canEditPage) {
            UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.impossible1"));
        } else {
            UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.not_available"));
        }
        return;
    }

    // Set up customizable CSS
    ContentResource cssLink = simplePageBean.getCssForCurrentPage();
    if (cssLink != null) {
        UIOutput.make(tofill, "customCSS").decorate(new UIFreeAttributeDecorator("href", cssLink.getUrl()));
    }

    // offer to go to saved page if this is the start of a session, in case
    // user has logged off and logged on again.
    // need to offer to go to previous page? even if a new session, no need
    // if we're already on that page
    if (lastPage != null && lastPage.pageId != currentPage.getPageId()) {
        UIOutput.make(tofill, "refreshAlert");
        UIOutput.make(tofill, "refresh-message", messageLocator.getMessage("simplepage.last-visited"));
        // Should simply refresh
        GeneralViewParameters p = new GeneralViewParameters(VIEW_ID);
        p.setSendingPage(lastPage.pageId);
        p.setItemId(lastPage.itemId);
        // reset the path to the saved one
        p.setPath("log");

        String name = lastPage.name;

        // Titles are set oddly by Student Content Pages
        SimplePage lastPageObj = simplePageToolDao.getPage(lastPage.pageId);
        if (lastPageObj.getOwner() != null) {
            name = lastPageObj.getTitle();
        }

        UIInternalLink.make(tofill, "refresh-link", name, p);
    }

    // path is the breadcrumbs. Push, pop or reset depending upon path=
    // programmer documentation.
    String title;
    String ownerName = null;
    if (pageItem.getType() != SimplePageItem.STUDENT_CONTENT) {
        title = pageItem.getName();
    } else {
        title = currentPage.getTitle();
        if (!pageItem.isAnonymous() || canEditPage) {
            try {
                String owner = currentPage.getOwner();
                String group = currentPage.getGroup();
                if (group != null)
                    ownerName = simplePageBean.getCurrentSite().getGroup(group).getTitle();
                else
                    ownerName = UserDirectoryService.getUser(owner).getDisplayName();

            } catch (Exception ignore) {
            }
            ;
            if (ownerName != null && !ownerName.equals(title))
                title += " (" + ownerName + ")";
        }
    }

    String newPath = null;

    // If the path is "none", then we don't want to record this page as being viewed, or set a path
    if (!params.getPath().equals("none")) {
        newPath = simplePageBean.adjustPath(params.getPath(), currentPage.getPageId(), pageItem.getId(), title);
        simplePageBean.adjustBackPath(params.getBackPath(), currentPage.getPageId(), pageItem.getId(),
                pageItem.getName());
    }

    // put out link to index of pages
    GeneralViewParameters showAll = new GeneralViewParameters(PagePickerProducer.VIEW_ID);
    showAll.setSource("summary");
    UIInternalLink.make(tofill, "print-view", messageLocator.getMessage("simplepage.print_view"), showAll);
    UIInternalLink.make(tofill, "show-pages", messageLocator.getMessage("simplepage.showallpages"), showAll);

    if (canEditPage) {
        // show tool bar, but not if coming from grading pane
        if (!cameFromGradingPane) {
            createToolBar(tofill, currentPage, (pageItem.getType() == SimplePageItem.STUDENT_CONTENT));
        }

        UIOutput.make(tofill, "title-descrip");
        String label = null;
        if (pageItem.getType() == SimplePageItem.STUDENT_CONTENT)
            label = messageLocator.getMessage("simplepage.editTitle");
        else
            label = messageLocator.getMessage("simplepage.title");
        String descrip = null;
        if (pageItem.getType() == SimplePageItem.STUDENT_CONTENT)
            descrip = messageLocator.getMessage("simplepage.title-student-descrip");
        else if (pageItem.getPageId() == 0)
            descrip = messageLocator.getMessage("simplepage.title-top-descrip");
        else
            descrip = messageLocator.getMessage("simplepage.title-descrip");

        UIOutput.make(tofill, "edit-title").decorate(new UIFreeAttributeDecorator("title", descrip));
        UIOutput.make(tofill, "edit-title-text", label);
        UIOutput.make(tofill, "title-descrip-text", descrip);

        if (pageItem.getPageId() == 0 && currentPage.getOwner() == null) { // top level page
            // need dropdown 
            UIOutput.make(tofill, "dropdown");
            UIOutput.make(tofill, "moreDiv");
            UIOutput.make(tofill, "new-page").decorate(new UIFreeAttributeDecorator("title",
                    messageLocator.getMessage("simplepage.new-page-tooltip")));
            createToolBarLink(PermissionsHelperProducer.VIEW_ID, tofill, "permissions",
                    "simplepage.permissions", currentPage, "simplepage.permissions.tooltip");
            UIOutput.make(tofill, "import-cc").decorate(new UIFreeAttributeDecorator("title",
                    messageLocator.getMessage("simplepage.import_cc.tooltip")));
            UIOutput.make(tofill, "export-cc").decorate(new UIFreeAttributeDecorator("title",
                    messageLocator.getMessage("simplepage.export_cc.tooltip")));

            // Check to see if we have tools registered for external import
            List<Map<String, Object>> toolsFileItem = simplePageBean.getToolsFileItem();
            if (toolsFileItem.size() > 0) {
                UIOutput.make(tofill, "show-lti-import");
                UIForm ltiImport = UIForm.make(tofill, "lti-import-form");
                makeCsrf(ltiImport, "csrf1");
                GeneralViewParameters ltiParams = new GeneralViewParameters();
                ltiParams.setSendingPage(currentPage.getPageId());
                ltiParams.viewID = LtiFileItemProducer.VIEW_ID;
                UILink link = UIInternalLink.make(tofill, "lti-import-link",
                        messageLocator.getMessage("simplepage.import_lti_button"), ltiParams);
                link.decorate(new UITooltipDecorator(messageLocator.getMessage("simplepage.fileitem.tooltip")));
            }
        }

        // Checks to see that user can edit and that this is either a top level page,
        // or a top level student page (not a subpage to a student page)
        if (simplePageBean.getEditPrivs() == 0 && (pageItem.getPageId() == 0)) {
            UIOutput.make(tofill, "remove-li");
            UIOutput.make(tofill, "remove-page").decorate(new UIFreeAttributeDecorator("title",
                    messageLocator.getMessage("simplepage.remove-page-tooltip")));

            if (allowDeleteOrphans) {
                UIOutput.make(tofill, "delete-orphan-li");
                UIForm orphan = UIForm.make(tofill, "delete-orphan-form");
                makeCsrf(orphan, "csrf1");
                UICommand.make(orphan, "delete-orphan", "#{simplePageBean.deleteOrphanPages}");
                UIOutput.make(orphan, "delete-orphan-link").decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.delete-orphan-pages-desc")));
            }

        } else if (simplePageBean.getEditPrivs() == 0 && currentPage.getOwner() != null) {
            // getEditPrivs < 2 if we want to let the student delete. Currently we don't. There can be comments
            // from other students and the page can be shared
            SimpleStudentPage studentPage = simplePageToolDao.findStudentPage(currentPage.getTopParent());
            if (studentPage != null && studentPage.getPageId() == currentPage.getPageId()) {
                UIOutput.make(tofill, "remove-student");
                UIOutput.make(tofill, "remove-page-student").decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.remove-student-page-explanation")));
            }
        }

        UIOutput.make(tofill, "dialogDiv");
        UIOutput.make(tofill, "siteid", simplePageBean.getCurrentSiteId());
        UIOutput.make(tofill, "locale", M_locale.toString());

    } else if (!canReadPage) {
        return;
    } else if (!canSeeAll) {
        // see if there are any unsatisfied prerequisites
        // if this isn't a top level page, this will check that the page above is
        // accessible. That matters because we check visible, available and release
        // only for this page but not for the containing page
        List<String> needed = simplePageBean.pagesNeeded(pageItem);
        if (needed.size() > 0) {
            // yes. error and abort
            if (pageItem.getPageId() != 0) {
                // not top level. This should only happen from a "next"
                // link.
                // at any rate, the best approach is to send the user back
                // to the calling page
                List<SimplePageBean.PathEntry> path = simplePageBean.getHierarchy();
                SimplePageBean.PathEntry containingPage = null;
                if (path.size() > 1) {
                    // page above this. this page is on the top
                    containingPage = path.get(path.size() - 2);
                }

                if (containingPage != null) { // not a top level page, point
                    // to containing page
                    GeneralViewParameters view = new GeneralViewParameters(VIEW_ID);
                    view.setSendingPage(containingPage.pageId);
                    view.setItemId(containingPage.pageItemId);
                    view.setPath(Integer.toString(path.size() - 2));
                    UIInternalLink.make(tofill, "redirect-link", containingPage.title, view);
                    UIOutput.make(tofill, "redirect");
                } else {
                    UIOutput.make(tofill, "error-div");
                    UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.not_available"));
                }

                return;
            }

            // top level page where prereqs not satisified. Output list of
            // pages he needs to do first
            UIOutput.make(tofill, "pagetitle", currentPage.getTitle());
            UIOutput.make(tofill, "error-div");
            UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.has_prerequistes"));
            UIBranchContainer errorList = UIBranchContainer.make(tofill, "error-list:");
            for (String errorItem : needed) {
                UIBranchContainer errorListItem = UIBranchContainer.make(errorList, "error-item:");
                UIOutput.make(errorListItem, "error-item-text", errorItem);
            }
            return;
        }
    }

    ToolSession toolSession = SessionManager.getCurrentToolSession();
    // this code is now for 11 only. helpurl is used in 9 and 10 to indicate neo portal
    // at this point only two code paths are intended to work. inline and iframe.
    // inline pushes stuff into the morpheus-generated header. iframe uses an extra line
    // the previous mode required us to try to duplicate the header generated by morpheus
    // this was too error-prone.
    String helpurl = null; /* (String)toolSession.getAttribute("sakai-portal:help-action"); */
    String reseturl = null; /* (String)toolSession.getAttribute("sakai-portal:reset-action"); */

    Placement placement = toolManager.getCurrentPlacement();
    String toolId = placement.getToolId();
    boolean inline = false;

    // inline includes iframes when morpheus is in effect
    if ("morpheus".equals(portalTemplates) && httpServletRequest.getRequestURI().startsWith("/portal/site/")) {
        inline = true;
    }

    String skinName = null;
    String skinRepo = null;
    String iconBase = null;

    UIComponent titlediv = UIOutput.make(tofill, "titlediv");
    if (inline)
        titlediv.decorate(new UIFreeAttributeDecorator("style", "display:none"));
    // we need to do special CSS for old portal
    else if (helpurl == null)
        titlediv.decorate(new UIStyleDecorator("oldPortal"));

    if (helpurl != null || reseturl != null) {
        // these URLs are defined if we're in the neo portal
        // in that case we need our own help and reset icons. We want
        // to take them from the current skin, so find its prefix.
        // unfortunately the neoportal tacks neo- on front of the skin
        // name, so this is more complex than you might think.

        skinRepo = ServerConfigurationService.getString("skin.repo", "/library/skin");
        iconBase = skinRepo + "/" + CSSUtils.adjustCssSkinFolder(null) + "/images";

        UIVerbatim.make(tofill, "iconstyle", ICONSTYLE.replace("{}", iconBase));

    }

    if (helpurl != null) {
        UILink.make(tofill, (pageItem.getPageId() == 0 ? "helpbutton" : "helpbutton2"), helpurl)
                .decorate(new UIFreeAttributeDecorator("onclick", "openWindow('" + helpurl
                        + "', 'Help', 'resizeable=yes,toolbar=no,scrollbars=yes,menubar=yes,width=800,height=600'); return false"))
                .decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.help-button")));
        if (!inline)
            UIOutput.make(tofill, (pageItem.getPageId() == 0 ? "helpimage" : "helpimage2")).decorate(
                    new UIFreeAttributeDecorator("alt", messageLocator.getMessage("simplepage.help-button")));
        UIOutput.make(tofill, (pageItem.getPageId() == 0 ? "helpnewwindow" : "helpnewwindow2"),
                messageLocator.getMessage("simplepage.opens-in-new"));
        UILink.make(tofill, "directurl")
                .decorate(new UIFreeAttributeDecorator("rel",
                        "#Main" + Web.escapeJavascript(placement.getId()) + "_directurl"))
                .decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.direct-link")));
        // if (inline) {
        UIOutput.make(tofill, "directurl-div").decorate(new UIFreeAttributeDecorator("id",
                "Main" + Web.escapeJavascript(placement.getId()) + "_directurl"));
        // in general 2.9 doesn't have the url shortener
        if (majorVersion >= 10) {
            UIOutput.make(tofill, "directurl-input")
                    .decorate(new UIFreeAttributeDecorator("onclick",
                            "toggleShortUrlOutput('" + myUrl() + "/portal/directtool/" + placement.getId()
                                    + "/', this, 'Main" + Web.escapeJavascript(placement.getId())
                                    + "_urlholder');"));
            UIOutput.make(tofill, "directurl-shorten", messageLocator.getMessage("simplepage.short-url"));
        }
        UIOutput.make(tofill, "directurl-textarea", myUrl() + "/portal/directtool/" + placement.getId() + "/")
                .decorate(new UIFreeAttributeDecorator("class",
                        "portlet title-tools Main" + Web.escapeJavascript(placement.getId()) + "_urlholder"));
        // } else
        UIOutput.make(tofill, "directimage").decorate(
                new UIFreeAttributeDecorator("alt", messageLocator.getMessage("simplepage.direct-link")));
    }

    // morpheus does reset as part of title
    if (reseturl != null && !inline) {
        UILink.make(tofill, (pageItem.getPageId() == 0 ? "resetbutton" : "resetbutton2"), reseturl)
                .decorate(new UIFreeAttributeDecorator("onclick",
                        "location.href='" + reseturl + "'; return false"))
                .decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.reset-button")));
        UIOutput.make(tofill, (pageItem.getPageId() == 0 ? "resetimage" : "resetimage2")).decorate(
                new UIFreeAttributeDecorator("alt", messageLocator.getMessage("simplepage.reset-button")));
    }

    // note page accessed. the code checks to see whether all the required
    // items on it have been finished, and if so marks it complete, else just updates
    // access date save the path because if user goes to it later we want to restore the
    // breadcrumbs
    if (newPath != null) {
        if (pageItem.getType() != SimplePageItem.STUDENT_CONTENT) {
            simplePageBean.track(pageItem.getId(), newPath);
        } else {
            simplePageBean.track(pageItem.getId(), newPath, currentPage.getPageId());
        }
    }

    if (currentPage.getOwner() != null && simplePageBean.getEditPrivs() == 0) {
        SimpleStudentPage student = simplePageToolDao.findStudentPageByPageId(currentPage.getPageId());

        // Make sure this is a top level student page
        if (student != null && pageItem.getGradebookId() != null) {
            UIOutput.make(tofill, "gradingSpan");
            UIOutput.make(tofill, "commentsUUID", String.valueOf(student.getId()));
            UIOutput.make(tofill, "commentPoints",
                    String.valueOf((student.getPoints() != null ? student.getPoints() : "")));
            UIOutput pointsBox = UIOutput.make(tofill, "studentPointsBox");
            UIOutput.make(tofill, "topmaxpoints", String
                    .valueOf((pageItem.getGradebookPoints() != null ? pageItem.getGradebookPoints() : "")));
            if (ownerName != null)
                pointsBox.decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.grade-for-student").replace("{}", ownerName)));

            List<SimpleStudentPage> studentPages = simplePageToolDao.findStudentPages(student.getItemId());

            Collections.sort(studentPages, new Comparator<SimpleStudentPage>() {
                public int compare(SimpleStudentPage o1, SimpleStudentPage o2) {
                    String title1 = o1.getTitle();
                    if (title1 == null)
                        title1 = "";
                    String title2 = o2.getTitle();
                    if (title2 == null)
                        title2 = "";
                    return title1.compareTo(title2);
                }
            });

            for (int in = 0; in < studentPages.size(); in++) {
                if (studentPages.get(in).isDeleted()) {
                    studentPages.remove(in);
                }
            }

            int i = -1;

            for (int in = 0; in < studentPages.size(); in++) {
                if (student.getId() == studentPages.get(in).getId()) {
                    i = in;
                    break;
                }
            }

            if (i > 0) {
                GeneralViewParameters eParams = new GeneralViewParameters(ShowPageProducer.VIEW_ID,
                        studentPages.get(i - 1).getPageId());
                eParams.setItemId(studentPages.get(i - 1).getItemId());
                eParams.setPath("next");

                UIInternalLink.make(tofill, "gradingBack", eParams);
            }

            if (i < studentPages.size() - 1) {
                GeneralViewParameters eParams = new GeneralViewParameters(ShowPageProducer.VIEW_ID,
                        studentPages.get(i + 1).getPageId());
                eParams.setItemId(studentPages.get(i + 1).getItemId());
                eParams.setPath("next");

                UIInternalLink.make(tofill, "gradingForward", eParams);
            }

            printGradingForm(tofill);
        }
    }

    // breadcrumbs
    if (pageItem.getPageId() != 0) {
        // Not top-level, so we have to show breadcrumbs

        List<SimplePageBean.PathEntry> breadcrumbs = simplePageBean.getHierarchy();

        int index = 0;
        if (breadcrumbs.size() > 1 || reseturl != null || helpurl != null) {
            UIOutput.make(tofill, "crumbdiv");
            if (breadcrumbs.size() > 1)
                for (SimplePageBean.PathEntry e : breadcrumbs) {
                    // don't show current page. We already have a title. This
                    // was too much
                    UIBranchContainer crumb = UIBranchContainer.make(tofill, "crumb:");
                    GeneralViewParameters view = new GeneralViewParameters(VIEW_ID);
                    view.setSendingPage(e.pageId);
                    view.setItemId(e.pageItemId);
                    view.setPath(Integer.toString(index));
                    UIComponent link = null;
                    if (index < breadcrumbs.size() - 1) {
                        // Not the last item
                        link = UIInternalLink.make(crumb, "crumb-link", e.title, view);
                        UIOutput.make(crumb, "crumb-follow", " > ");
                    } else {
                        UIOutput.make(crumb, "crumb-follow", e.title).decorate(new UIStyleDecorator("bold"));
                    }
                    index++;
                }
            else {
                UIBranchContainer crumb = UIBranchContainer.make(tofill, "crumb:");
                UILink.make(crumb, "crum-link", currentPage.getTitle(), reseturl);
            }
        } else {
            if (reseturl != null) {
                UIOutput.make(tofill, "pagetitletext", currentPage.getTitle());
            } else if (!inline) {
                UIOutput.make(tofill, "pagetitle", currentPage.getTitle());
            }
        }
    } else {
        if (reseturl != null) {
            UILink.make(tofill, "pagetitlelink", reseturl);
            UIOutput.make(tofill, "pagetitletext", currentPage.getTitle());
        } else if (!inline) {
            UIOutput.make(tofill, "pagetitle", currentPage.getTitle());
        }
    }

    // see if there's a next item in sequence.
    simplePageBean.addPrevLink(tofill, pageItem);
    simplePageBean.addNextLink(tofill, pageItem);

    // swfObject is not currently used
    boolean shownSwfObject = false;

    long newItemId = -1L;
    String newItemStr = (String) toolSession.getAttribute("lessonbuilder.newitem");
    if (newItemStr != null) {
        toolSession.removeAttribute("lessonbuilder.newitem");
        try {
            newItemId = Long.parseLong(newItemStr);
        } catch (Exception e) {
        }
    }

    // items to show
    List<SimplePageItem> itemList = (List<SimplePageItem>) simplePageBean
            .getItemsOnPage(currentPage.getPageId());

    // Move all items with sequence <= 0 to the end of the list.
    // Count is necessary to guarantee we don't infinite loop over a
    // list that only has items with sequence <= 0.
    // Becauses sequence number is < 0, these start out at the beginning
    int count = 1;
    while (itemList.size() > count && itemList.get(0).getSequence() <= 0) {
        itemList.add(itemList.remove(0));
        count++;
    }

    // Make sure we only add the comments javascript file once,
    // even if there are multiple comments tools on the page.
    boolean addedCommentsScript = false;
    int commentsCount = 0;

    // Find the most recent comment on the page by current user
    long postedCommentId = -1;
    if (params.postedComment) {
        postedCommentId = findMostRecentComment();
    }

    boolean showDownloads = (simplePageBean.getCurrentSite().getProperties()
            .getProperty("lessonbuilder-nodownloadlinks") == null);

    //
    //
    // MAIN list of items
    //
    // produce the main table

    // Is anything visible?
    // Note that we don't need to check whether any item is available, since the first visible
    // item is always available.
    boolean anyItemVisible = false;

    if (itemList.size() > 0) {
        UIBranchContainer container = UIBranchContainer.make(tofill, "itemContainer:");

        boolean showRefresh = false;
        boolean fisrt = false;
        int textboxcount = 1;

        int cols = 0;
        int colnum = 0;

        UIBranchContainer sectionContainer = null;
        UIBranchContainer columnContainer = null;
        UIBranchContainer tableContainer = null;

        boolean first = true;

        for (SimplePageItem i : itemList) {

            // break is not a normal item. handle it first
            // this will work whether first item is break or not. Might be a section
            // break or a normal item
            if (first || i.getType() == SimplePageItem.BREAK) {
                boolean sectionbreak = false;
                if (first || "section".equals(i.getFormat())) {
                    sectionContainer = UIBranchContainer.make(container, "section:");
                    cols = colCount(itemList, i.getId());
                    sectionbreak = true;
                    colnum = 0;
                } else if ("colunn".equals(i.getFormat()))
                    colnum++;
                columnContainer = UIBranchContainer.make(sectionContainer, "column:");

                tableContainer = UIBranchContainer.make(columnContainer, "itemTable:");
                Integer width = new Integer(
                        i.getAttribute("colwidth") == null ? "1" : i.getAttribute("colwidth"));
                Integer split = new Integer(
                        i.getAttribute("colsplit") == null ? "1" : i.getAttribute("colsplit"));
                colnum += width; // number after this column

                String color = i.getAttribute("colcolor");

                columnContainer.decorate(new UIStyleDecorator(
                        "cols" + cols + (colnum == cols ? " lastcol" : "") + (width > 1 ? " double" : "")
                                + (split > 1 ? " split" : "") + (color == null ? "" : " col" + color)));
                UIComponent delIcon = UIOutput.make(columnContainer, "section-td");
                if (first)
                    delIcon.decorate(new UIFreeAttributeDecorator("style", "display:none"));

                UIOutput.make(columnContainer, "break-msg", messageLocator
                        .getMessage(sectionbreak ? "simplepage.break-here" : "simplepage.break-column-here"));
                UIOutput.make(columnContainer, "section2");
                UIOutput.make(columnContainer, "section3").decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.columnopen")));
                UIOutput.make(columnContainer, "addbottom");
                UIOutput.make(columnContainer, "addbottom2").decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.add-item-column")));
                UILink link = UILink.make(columnContainer, "section-del-link", (String) null, "/" + i.getId());
                link.decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.join-items")));
                link.decorate(new UIStyleDecorator(sectionbreak ? "section-merge-link" : "column-merge-link"));

                UIBranchContainer tableRow = UIBranchContainer.make(tableContainer, "item:");
                tableRow.decorate(new UIFreeAttributeDecorator("class", "break" + i.getFormat()));

                first = false;
                if (i.getType() == SimplePageItem.BREAK)
                    continue;
                // for first item, if wasn't break, process it
            }

            // listitem is mostly historical. it uses some shared HTML, but
            // if I were
            // doing it from scratch I wouldn't make this distinction. At
            // the moment it's
            // everything that isn't inline.

            boolean listItem = !(i.getType() == SimplePageItem.TEXT || i.getType() == SimplePageItem.MULTIMEDIA
                    || i.getType() == SimplePageItem.COMMENTS || i.getType() == SimplePageItem.STUDENT_CONTENT
                    || i.getType() == SimplePageItem.QUESTION || i.getType() == SimplePageItem.PEEREVAL
                    || i.getType() == SimplePageItem.BREAK);
            // (i.getType() == SimplePageItem.PAGE &&
            // "button".equals(i.getFormat())))

            if (!simplePageBean.isItemVisible(i, currentPage)) {
                continue;
            }
            // break isn't a real item. probably don't want to count it
            if (i.getType() != SimplePageItem.BREAK)
                anyItemVisible = true;

            UIBranchContainer tableRow = UIBranchContainer.make(tableContainer, "item:");

            // set class name showing what the type is, so people can do funky CSS

            String itemClassName = null;

            switch (i.getType()) {
            case SimplePageItem.RESOURCE:
                itemClassName = "resourceType";
                break;
            case SimplePageItem.PAGE:
                itemClassName = "pageType";
                break;
            case SimplePageItem.ASSIGNMENT:
                itemClassName = "assignmentType";
                break;
            case SimplePageItem.ASSESSMENT:
                itemClassName = "assessmentType";
                break;
            case SimplePageItem.TEXT:
                itemClassName = "textType";
                break;
            case SimplePageItem.URL:
                itemClassName = "urlType";
                break;
            case SimplePageItem.MULTIMEDIA:
                itemClassName = "multimediaType";
                break;
            case SimplePageItem.FORUM:
                itemClassName = "forumType";
                break;
            case SimplePageItem.COMMENTS:
                itemClassName = "commentsType";
                break;
            case SimplePageItem.STUDENT_CONTENT:
                itemClassName = "studentContentType";
                break;
            case SimplePageItem.QUESTION:
                itemClassName = "question";
                break;
            case SimplePageItem.BLTI:
                itemClassName = "bltiType";
                break;
            case SimplePageItem.PEEREVAL:
                itemClassName = "peereval";
                break;
            }

            if (listItem) {
                itemClassName = itemClassName + " listType";
            }
            if (canEditPage) {
                itemClassName = itemClassName + "  canEdit";
            }

            if (i.getId() == newItemId)
                itemClassName = itemClassName + " newItem";

            tableRow.decorate(new UIFreeAttributeDecorator("class", itemClassName));

            if (canEditPage)
                UIOutput.make(tableRow, "itemid", String.valueOf(i.getId()));

            // you really need the HTML file open at the same time to make
            // sense of the following code
            if (listItem) { // Not an HTML Text, Element or Multimedia
                // Element

                if (canEditPage) {
                    UIOutput.make(tableRow, "current-item-id2", String.valueOf(i.getId()));
                }

                // users can declare a page item to be navigational. If so
                // we display
                // it to the left of the normal list items, and use a
                // button. This is
                // used for pages that are "next" pages, i.e. they replace
                // this page
                // rather than creating a new level in the breadcrumbs.
                // Since they can't
                // be required, they don't need the status image, which is
                // good because
                // they're displayed with colspan=2, so there's no space for
                // the image.

                boolean navButton = "button".equals(i.getFormat()) && !i.isRequired();
                boolean notDone = false;
                Status status = Status.NOT_REQUIRED;
                if (!navButton) {
                    status = handleStatusImage(tableRow, i);
                    if (status == Status.REQUIRED) {
                        notDone = true;
                    }
                }

                boolean isInline = (i.getType() == SimplePageItem.BLTI && "inline".equals(i.getFormat()));

                UIOutput linktd = UIOutput.make(tableRow, "item-td");

                UIOutput contentCol = UIOutput.make(tableRow, "contentCol");
                // BLTI seems to require explicit specificaiton for column width. Otherwise
                // we get 300 px wide. Don't know why. Doesn't happen to other iframes
                if (isInline)
                    contentCol.decorate(new UIFreeAttributeDecorator("style", "width:100%"));

                UIBranchContainer linkdiv = null;
                if (!isInline) {
                    linkdiv = UIBranchContainer.make(tableRow, "link-div:");
                    UIOutput itemicon = UIOutput.make(linkdiv, "item-icon");
                    switch (i.getType()) {
                    case SimplePageItem.FORUM:
                        itemicon.decorate(new UIStyleDecorator("fa-comments"));
                        break;
                    case SimplePageItem.ASSIGNMENT:
                        itemicon.decorate(new UIStyleDecorator("fa-tasks"));
                        break;
                    case SimplePageItem.ASSESSMENT:
                        itemicon.decorate(new UIStyleDecorator("fa-puzzle-piece"));
                        break;
                    case SimplePageItem.BLTI:
                        itemicon.decorate(new UIStyleDecorator("fa-globe"));
                        break;
                    case SimplePageItem.PAGE:
                        itemicon.decorate(new UIStyleDecorator("fa-folder-open-o"));
                        break;
                    case SimplePageItem.RESOURCE:
                        String mimeType = i.getHtml();

                        if ("application/octet-stream".equals(mimeType)) {
                            // OS X reports octet stream for things like MS Excel documents.
                            // Force a mimeType lookup so we get a decent icon.
                            mimeType = null;
                        }

                        if (mimeType == null || mimeType.equals("")) {
                            String s = i.getSakaiId();
                            int j = s.lastIndexOf(".");
                            if (j >= 0)
                                s = s.substring(j + 1);
                            mimeType = ContentTypeImageService.getContentType(s);
                            // System.out.println("type " + s + ">" + mimeType);
                        }

                        String src = null;
                        //if (!useSakaiIcons)
                        src = imageToMimeMap.get(mimeType);
                        if (src == null) {
                            src = "fa-file-o";
                            //String image = ContentTypeImageService.getContentTypeImage(mimeType);
                            // if (image != null)
                            //   src = "/library/image/" + image;
                        }

                        if (src != null) {
                            itemicon.decorate(new UIStyleDecorator(src));
                        }
                        break;
                    }
                }

                UIOutput descriptiondiv = null;

                // refresh isn't actually used anymore. We've changed the
                // way things are
                // done so the user never has to request a refresh.
                //   FYI: this actually puts in an IFRAME for inline BLTI items
                showRefresh = !makeLink(tableRow, "link", i, canSeeAll, currentPage, notDone, status)
                        || showRefresh;
                UILink.make(tableRow, "copylink", i.getName(),
                        "http://lessonbuilder.sakaiproject.org/" + i.getId() + "/")
                        .decorate(new UIFreeAttributeDecorator("title",
                                messageLocator.getMessage("simplepage.copylink2").replace("{}", i.getName())));

                // dummy is used when an assignment, quiz, or forum item is
                // copied
                // from another site. The way the copy code works, our
                // import code
                // doesn't have access to the necessary info to use the item
                // from the
                // new site. So we add a dummy, which generates an
                // explanation that the
                // author is going to have to choose the item from the
                // current site
                if (i.getSakaiId().equals(SimplePageItem.DUMMY)) {
                    String code = null;
                    switch (i.getType()) {
                    case SimplePageItem.ASSIGNMENT:
                        code = "simplepage.copied.assignment";
                        break;
                    case SimplePageItem.ASSESSMENT:
                        code = "simplepage.copied.assessment";
                        break;
                    case SimplePageItem.FORUM:
                        code = "simplepage.copied.forum";
                        break;
                    }
                    descriptiondiv = UIOutput.make(tableRow, "description", messageLocator.getMessage(code));
                } else {
                    descriptiondiv = UIOutput.make(tableRow, "description", i.getDescription());
                }
                if (isInline)
                    descriptiondiv.decorate(new UIFreeAttributeDecorator("style", "margin-top: 4px"));

                if (!isInline) {
                    // nav button gets float left so any description goes to its
                    // right. Otherwise the
                    // description block will display underneath
                    if ("button".equals(i.getFormat())) {
                        linkdiv.decorate(new UIFreeAttributeDecorator("style", "float:none"));
                    }
                    // for accessibility
                    if (navButton) {
                        linkdiv.decorate(new UIFreeAttributeDecorator("role", "navigation"));
                    }
                }

                // note that a lot of the info here is used by the
                // javascript that prepares
                // the jQuery dialogs
                String itemGroupString = null;
                boolean entityDeleted = false;
                boolean notPublished = false;
                if (canEditPage) {
                    UIOutput.make(tableRow, "edit-td");
                    UILink.make(tableRow, "edit-link", (String) null, "")
                            .decorate(new UIFreeAttributeDecorator("title", messageLocator
                                    .getMessage("simplepage.edit-title.generic").replace("{}", i.getName())));

                    // the following information is displayed using <INPUT
                    // type=hidden ...
                    // it contains information needed to populate the "edit"
                    // popup dialog
                    UIOutput.make(tableRow, "prerequisite-info", String.valueOf(i.isPrerequisite()));

                    if (i.getType() == SimplePageItem.ASSIGNMENT) {
                        // the type indicates whether scoring is letter
                        // grade, number, etc.
                        // the javascript needs this to present the right
                        // choices to the user
                        // types 6 and 8 aren't legal scoring types, so they
                        // are used as
                        // markers for quiz or forum. I ran out of numbers
                        // and started using
                        // text for things that aren't scoring types. That's
                        // better anyway
                        int type = 4;
                        LessonEntity assignment = null;
                        if (!i.getSakaiId().equals(SimplePageItem.DUMMY)) {
                            assignment = assignmentEntity.getEntity(i.getSakaiId(), simplePageBean);
                            if (assignment != null) {
                                type = assignment.getTypeOfGrade();
                                String editUrl = assignment.editItemUrl(simplePageBean);
                                if (editUrl != null) {
                                    UIOutput.make(tableRow, "edit-url", editUrl);
                                }
                                itemGroupString = simplePageBean.getItemGroupString(i, assignment, true);
                                UIOutput.make(tableRow, "item-groups", itemGroupString);
                                if (!assignment.objectExists())
                                    entityDeleted = true;
                                else if (assignment.notPublished())
                                    notPublished = true;
                            }
                        }

                        UIOutput.make(tableRow, "type", String.valueOf(type));
                        String requirement = String.valueOf(i.getSubrequirement());
                        if ((type == SimplePageItem.PAGE || type == SimplePageItem.ASSIGNMENT)
                                && i.getSubrequirement()) {
                            requirement = i.getRequirementText();
                        }
                        UIOutput.make(tableRow, "requirement-text", requirement);
                    } else if (i.getType() == SimplePageItem.ASSESSMENT) {
                        UIOutput.make(tableRow, "type", "6"); // Not used by
                        // assignments,
                        // so it is
                        // safe to dedicate to assessments
                        UIOutput.make(tableRow, "requirement-text",
                                (i.getSubrequirement() ? i.getRequirementText() : "false"));
                        LessonEntity quiz = quizEntity.getEntity(i.getSakaiId(), simplePageBean);
                        if (quiz != null) {
                            String editUrl = quiz.editItemUrl(simplePageBean);
                            if (editUrl != null) {
                                UIOutput.make(tableRow, "edit-url", editUrl);
                            }
                            editUrl = quiz.editItemSettingsUrl(simplePageBean);
                            if (editUrl != null) {
                                UIOutput.make(tableRow, "edit-settings-url", editUrl);
                            }
                            itemGroupString = simplePageBean.getItemGroupString(i, quiz, true);
                            UIOutput.make(tableRow, "item-groups", itemGroupString);
                            if (!quiz.objectExists())
                                entityDeleted = true;

                        } else
                            notPublished = quizEntity.notPublished(i.getSakaiId());
                    } else if (i.getType() == SimplePageItem.BLTI) {
                        UIOutput.make(tableRow, "type", "b");
                        LessonEntity blti = (bltiEntity == null ? null : bltiEntity.getEntity(i.getSakaiId()));
                        if (blti != null) {
                            String editUrl = blti.editItemUrl(simplePageBean);
                            if (editUrl != null)
                                UIOutput.make(tableRow, "edit-url", editUrl);
                            UIOutput.make(tableRow, "item-format", i.getFormat());

                            if (i.getHeight() != null)
                                UIOutput.make(tableRow, "item-height", i.getHeight());
                            itemGroupString = simplePageBean.getItemGroupString(i, null, true);
                            UIOutput.make(tableRow, "item-groups", itemGroupString);
                            if (!blti.objectExists())
                                entityDeleted = true;
                            else if (blti.notPublished())
                                notPublished = true;
                        }
                    } else if (i.getType() == SimplePageItem.FORUM) {
                        UIOutput.make(tableRow, "extra-info");
                        UIOutput.make(tableRow, "type", "8");
                        LessonEntity forum = forumEntity.getEntity(i.getSakaiId());
                        if (forum != null) {
                            String editUrl = forum.editItemUrl(simplePageBean);
                            if (editUrl != null) {
                                UIOutput.make(tableRow, "edit-url", editUrl);
                            }
                            itemGroupString = simplePageBean.getItemGroupString(i, forum, true);
                            UIOutput.make(tableRow, "item-groups", itemGroupString);
                            if (!forum.objectExists())
                                entityDeleted = true;
                            else if (forum.notPublished())
                                notPublished = true;

                        }
                    } else if (i.getType() == SimplePageItem.PAGE) {
                        UIOutput.make(tableRow, "type", "page");
                        UIOutput.make(tableRow, "page-next", Boolean.toString(i.getNextPage()));
                        UIOutput.make(tableRow, "page-button",
                                Boolean.toString("button".equals(i.getFormat())));
                        itemGroupString = simplePageBean.getItemGroupString(i, null, true);
                        UIOutput.make(tableRow, "item-groups", itemGroupString);
                    } else if (i.getType() == SimplePageItem.RESOURCE) {
                        try {
                            itemGroupString = simplePageBean.getItemGroupStringOrErr(i, null, true);
                        } catch (IdUnusedException e) {
                            itemGroupString = "";
                            entityDeleted = true;
                        }
                        if (simplePageBean.getInherited())
                            UIOutput.make(tableRow, "item-groups", "--inherited--");
                        else
                            UIOutput.make(tableRow, "item-groups", itemGroupString);
                        UIOutput.make(tableRow, "item-samewindow", Boolean.toString(i.isSameWindow()));

                        UIVerbatim.make(tableRow, "item-path", getItemPath(i));
                    }

                } // end of canEditPage

                if (canSeeAll) {
                    // haven't set up itemgroupstring yet
                    if (!canEditPage) {
                        if (!i.getSakaiId().equals(SimplePageItem.DUMMY)) {
                            LessonEntity lessonEntity = null;
                            switch (i.getType()) {
                            case SimplePageItem.ASSIGNMENT:
                                lessonEntity = assignmentEntity.getEntity(i.getSakaiId(), simplePageBean);
                                if (lessonEntity != null)
                                    itemGroupString = simplePageBean.getItemGroupString(i, lessonEntity, true);
                                if (!lessonEntity.objectExists())
                                    entityDeleted = true;
                                else if (lessonEntity.notPublished())
                                    notPublished = true;
                                break;
                            case SimplePageItem.ASSESSMENT:
                                lessonEntity = quizEntity.getEntity(i.getSakaiId(), simplePageBean);
                                if (lessonEntity != null)
                                    itemGroupString = simplePageBean.getItemGroupString(i, lessonEntity, true);
                                else
                                    notPublished = quizEntity.notPublished(i.getSakaiId());
                                if (!lessonEntity.objectExists())
                                    entityDeleted = true;
                                break;
                            case SimplePageItem.FORUM:
                                lessonEntity = forumEntity.getEntity(i.getSakaiId());
                                if (lessonEntity != null)
                                    itemGroupString = simplePageBean.getItemGroupString(i, lessonEntity, true);
                                if (!lessonEntity.objectExists())
                                    entityDeleted = true;
                                else if (lessonEntity.notPublished())
                                    notPublished = true;
                                break;
                            case SimplePageItem.BLTI:
                                if (bltiEntity != null)
                                    lessonEntity = bltiEntity.getEntity(i.getSakaiId());
                                if (lessonEntity != null)
                                    itemGroupString = simplePageBean.getItemGroupString(i, null, true);
                                if (!lessonEntity.objectExists())
                                    entityDeleted = true;
                                else if (lessonEntity.notPublished())
                                    notPublished = true;
                                break;
                            case SimplePageItem.PAGE:
                                itemGroupString = simplePageBean.getItemGroupString(i, null, true);
                                break;
                            case SimplePageItem.RESOURCE:
                                try {
                                    itemGroupString = simplePageBean.getItemGroupStringOrErr(i, null, true);
                                } catch (IdUnusedException e) {
                                    itemGroupString = "";
                                    entityDeleted = true;
                                }
                                break;
                            }
                        }
                    }

                    String releaseString = simplePageBean.getReleaseString(i);
                    if (itemGroupString != null || releaseString != null || entityDeleted || notPublished) {
                        if (itemGroupString != null)
                            itemGroupString = simplePageBean.getItemGroupTitles(itemGroupString, i);
                        if (itemGroupString != null) {
                            itemGroupString = " [" + itemGroupString + "]";
                            if (releaseString != null)
                                itemGroupString = " " + releaseString + itemGroupString;
                        } else if (releaseString != null)
                            itemGroupString = " " + releaseString;
                        if (notPublished) {
                            if (itemGroupString != null)
                                itemGroupString = itemGroupString + " "
                                        + messageLocator.getMessage("simplepage.not-published");
                            else
                                itemGroupString = messageLocator.getMessage("simplepage.not-published");
                        }
                        if (entityDeleted) {
                            if (itemGroupString != null)
                                itemGroupString = itemGroupString + " "
                                        + messageLocator.getMessage("simplepage.deleted-entity");
                            else
                                itemGroupString = messageLocator.getMessage("simplepage.deleted-entity");
                        }

                        if (itemGroupString != null)
                            UIOutput.make(tableRow, (isInline ? "item-group-titles-div" : "item-group-titles"),
                                    itemGroupString);
                    }

                } // end of canSeeAll

                // the following are for the inline item types. Multimedia
                // is the most complex because
                // it can be IMG, IFRAME, or OBJECT, and Youtube is treated
                // separately

            } else if (i.getType() == SimplePageItem.MULTIMEDIA) {
                // This code should be read together with the code in SimplePageBean
                // that sets up this data, method addMultimedia.  Most display is set
                // up here, but note that show-page.js invokes the jquery oembed on all
                // <A> items with class="oembed".

                // historically this code was to display files ,and urls leading to things
                // like MP4. as backup if we couldn't figure out what to do we'd put something
                // in an iframe. The one exception is youtube, which we supposed explicitly.
                //   However we now support several ways to embed content. We use the
                // multimediaDisplayType code to indicate which. The codes are
                //     1 -- embed code, 2 -- av type, 3 -- oembed, 4 -- iframe
                // 2 is the original code: MP4, image, and as a special case youtube urls
                // since we have old entries with no type code, and that behave the same as
                // 2, we start by converting 2 to null.
                //  then the logic is
                //  if type == null & youtube, do youtube
                //  if type == null & image, do iamge
                //  if type == null & not HTML do MP4 or other player for file 
                //  final fallthrough to handel the new types, with IFRAME if all else fails
                // the old code creates ojbects in ContentHosting for both files and URLs.
                // The new code saves the embed code or URL itself as an atteibute of the item
                // If I were doing it again, I wouldn't create the ContebtHosting item
                //   Note that IFRAME is only used for something where the far end claims the MIME
                // type is HTML. For weird stuff like MS Word files I use the file display code, which
                // will end up producing <OBJECT>.

                // the reason this code is complex is that we try to choose
                // the best
                // HTML for displaying the particular type of object. We've
                // added complexities
                // over time as we get more experience with different
                // object types and browsers.

                String itemGroupString = null;
                String itemGroupTitles = null;
                boolean entityDeleted = false;
                // new format explicit display indication
                String mmDisplayType = i.getAttribute("multimediaDisplayType");
                // 2 is the generic "use old display" so treat it as null
                if ("".equals(mmDisplayType) || "2".equals(mmDisplayType))
                    mmDisplayType = null;
                if (canSeeAll) {
                    try {
                        itemGroupString = simplePageBean.getItemGroupStringOrErr(i, null, true);
                    } catch (IdUnusedException e) {
                        itemGroupString = "";
                        entityDeleted = true;
                    }
                    itemGroupTitles = simplePageBean.getItemGroupTitles(itemGroupString, i);
                    if (entityDeleted) {
                        if (itemGroupTitles != null)
                            itemGroupTitles = itemGroupTitles + " "
                                    + messageLocator.getMessage("simplepage.deleted-entity");
                        else
                            itemGroupTitles = messageLocator.getMessage("simplepage.deleted-entity");
                    }
                    if (itemGroupTitles != null) {
                        itemGroupTitles = "[" + itemGroupTitles + "]";
                    }
                    UIOutput.make(tableRow, "item-groups", itemGroupString);
                } else if (entityDeleted)
                    continue;

                if (!"1".equals(mmDisplayType) && !"3".equals(mmDisplayType))
                    UIVerbatim.make(tableRow, "item-path", getItemPath(i));

                // the reason this code is complex is that we try to choose
                // the best
                // HTML for displaying the particular type of object. We've
                // added complexities
                // over time as we get more experience with different
                // object types and browsers.

                StringTokenizer token = new StringTokenizer(i.getSakaiId(), ".");

                String extension = "";

                while (token.hasMoreTokens()) {
                    extension = token.nextToken().toLowerCase();
                }

                // the extension is almost never used. Normally we have
                // the MIME type and use it. Extension is used only if
                // for some reason we don't have the MIME type
                UIComponent item;
                String youtubeKey;

                Length width = null;
                if (i.getWidth() != null) {
                    width = new Length(i.getWidth());
                }
                Length height = null;
                if (i.getHeight() != null) {
                    height = new Length(i.getHeight());
                }

                // Get the MIME type. For multimedia types is should be in
                // the html field.
                // The old code saved the URL there. So if it looks like a
                // URL ignore it.
                String mimeType = i.getHtml();
                if (mimeType != null && (mimeType.startsWith("http") || mimeType.equals(""))) {
                    mimeType = null;
                }

                // here goes. dispatch on the type and produce the right tag
                // type,
                // followed by the hidden INPUT tags with information for the
                // edit dialog
                if (mmDisplayType == null && simplePageBean.isImageType(i)) {

                    if (canSeeAll || simplePageBean.isItemAvailable(i)) {
                        UIOutput.make(tableRow, "imageSpan");

                        if (itemGroupString != null) {
                            UIOutput.make(tableRow, "item-group-titles3", itemGroupTitles);
                            UIOutput.make(tableRow, "item-groups3", itemGroupString);
                        }

                        String imageName = i.getAlt();
                        if (imageName == null || imageName.equals("")) {
                            imageName = abbrevUrl(i.getURL());
                        }

                        item = UIOutput.make(tableRow, "image")
                                .decorate(new UIFreeAttributeDecorator("src",
                                        i.getItemURL(simplePageBean.getCurrentSiteId(),
                                                currentPage.getOwner())))
                                .decorate(new UIFreeAttributeDecorator("alt", imageName));
                        if (lengthOk(width)) {
                            item.decorate(new UIFreeAttributeDecorator("width", width.getOld()));
                        }

                        if (lengthOk(height)) {
                            item.decorate(new UIFreeAttributeDecorator("height", height.getOld()));
                        }
                    } else {
                        UIComponent notAvailableText = UIOutput.make(tableRow, "notAvailableText",
                                messageLocator.getMessage("simplepage.multimediaItemUnavailable"));
                        // Grey it out
                        notAvailableText.decorate(new UIFreeAttributeDecorator("class", "disabled-text-item"));
                    }

                    // stuff for the jquery dialog
                    if (canEditPage) {
                        UIOutput.make(tableRow, "imageHeight", getOrig(height));
                        UIOutput.make(tableRow, "imageWidth", getOrig(width));
                        UIOutput.make(tableRow, "mimetype2", mimeType);
                        UIOutput.make(tableRow, "current-item-id4", Long.toString(i.getId()));
                        UIOutput.make(tableRow, "item-prereq3", String.valueOf(i.isPrerequisite()));
                        UIVerbatim.make(tableRow, "item-path3", getItemPath(i));
                        UIOutput.make(tableRow, "editimage-td");
                        UILink.make(tableRow, "image-edit", (String) null, "")
                                .decorate(new UIFreeAttributeDecorator("title",
                                        messageLocator.getMessage("simplepage.edit-title.url").replace("{}",
                                                abbrevUrl(i.getURL()))));
                    }

                    UIOutput.make(tableRow, "description2", i.getDescription());

                } else if (mmDisplayType == null && (youtubeKey = simplePageBean.getYoutubeKey(i)) != null) {
                    String youtubeUrl = SimplePageBean.getYoutubeUrlFromKey(youtubeKey);

                    if (canSeeAll || simplePageBean.isItemAvailable(i)) {
                        UIOutput.make(tableRow, "youtubeSpan");

                        if (itemGroupString != null) {
                            UIOutput.make(tableRow, "item-group-titles4", itemGroupTitles);
                            UIOutput.make(tableRow, "item-groups4", itemGroupString);
                        }

                        // if width is blank or 100% scale the height
                        if (width != null && height != null && !height.number.equals("")) {
                            if (width.number.equals("") && width.unit.equals("")
                                    || width.number.equals("100") && width.unit.equals("%")) {

                                int h = Integer.parseInt(height.number);
                                if (h > 0) {
                                    width.number = Integer.toString((int) Math.round(h * 1.641025641));
                                    width.unit = height.unit;
                                }
                            }
                        }

                        // <object style="height: 390px; width: 640px"><param
                        // name="movie"
                        // value="http://www.youtube.com/v/AKIC7OQqBrA?version=3"><param
                        // name="allowFullScreen" value="true"><param
                        // name="allowScriptAccess" value="always"><embed
                        // src="http://www.youtube.com/v/AKIC7OQqBrA?version=3"
                        // type="application/x-shockwave-flash"
                        // allowfullscreen="true" allowScriptAccess="always"
                        // width="640" height="390"></object>

                        item = UIOutput.make(tableRow, "youtubeIFrame");
                        // youtube seems ok with length and width
                        if (lengthOk(height)) {
                            item.decorate(new UIFreeAttributeDecorator("height", height.getOld()));
                        }

                        if (lengthOk(width)) {
                            item.decorate(new UIFreeAttributeDecorator("width", width.getOld()));
                        }

                        item.decorate(new UIFreeAttributeDecorator("title",
                                messageLocator.getMessage("simplepage.youtube_player")));
                        item.decorate(new UIFreeAttributeDecorator("src", youtubeUrl));
                    } else {
                        UIComponent notAvailableText = UIOutput.make(tableRow, "notAvailableText",
                                messageLocator.getMessage("simplepage.multimediaItemUnavailable"));
                        // Grey it out
                        notAvailableText.decorate(new UIFreeAttributeDecorator("class", "disabled-text-item"));
                    }

                    if (canEditPage) {
                        UIOutput.make(tableRow, "youtubeId", String.valueOf(i.getId()));
                        UIOutput.make(tableRow, "currentYoutubeURL", youtubeUrl);
                        UIOutput.make(tableRow, "currentYoutubeHeight", getOrig(height));
                        UIOutput.make(tableRow, "currentYoutubeWidth", getOrig(width));
                        UIOutput.make(tableRow, "current-item-id5", Long.toString(i.getId()));
                        UIOutput.make(tableRow, "item-prereq4", String.valueOf(i.isPrerequisite()));
                        UIVerbatim.make(tableRow, "item-path4", getItemPath(i));
                        UIOutput.make(tableRow, "youtube-td");
                        UILink.make(tableRow, "youtube-edit", (String) null, "")
                                .decorate(new UIFreeAttributeDecorator("title",
                                        messageLocator.getMessage("simplepage.edit-title.youtube")));
                    }

                    UIOutput.make(tableRow, "description4", i.getDescription());

                    // as of Oct 28, 2010, we store the mime type. mimeType
                    // null is an old entry.
                    // For that use the old approach of checking the
                    // extension.
                    // Otherwise we want to use iframes for HTML and OBJECT
                    // for everything else
                    // We need the iframes because IE up through 8 doesn't
                    // reliably display
                    // HTML with OBJECT. Experiments show that everything
                    // else works with OBJECT
                    // for most browsers. Unfortunately IE, even IE 9,
                    // doesn't reliably call the
                    // right player with OBJECT. EMBED works. But it's not
                    // as nice because you can't
                    // nest error recovery code. So we use OBJECT for
                    // everything except IE, where we
                    // use EMBED. OBJECT does work with Flash.
                    // application/xhtml+xml is XHTML.

                } else if (mmDisplayType == null && ((mimeType != null && !mimeType.equals("text/html")
                        && !mimeType.equals("application/xhtml+xml")) ||
                // ((mimeType != null && (mimeType.startsWith("audio/") || mimeType.startsWith("video/"))) || 
                        (mimeType == null && !(Arrays.binarySearch(htmlTypes, extension) >= 0)))) {

                    // except where explicit display is set,
                    // this code is used for everything that isn't an image,
                    // Youtube, or HTML
                    // This could be audio, video, flash, or something random like MS word.
                    // Random stuff will turn into an object.
                    // HTML is done with an IFRAME in the next "if" case
                    // The explicit display types are handled there as well

                    // in theory the things that fall through to iframe are
                    // html and random stuff without a defined mime type
                    // random stuff with mime type is displayed with object

                    if (mimeType == null) {
                        mimeType = "";
                    }

                    String oMimeType = mimeType; // in case we change it for
                    // FLV or others

                    if (itemGroupString != null) {
                        UIOutput.make(tableRow, "item-group-titles5", itemGroupTitles);
                        UIOutput.make(tableRow, "item-groups5", itemGroupString);
                    }

                    UIOutput.make(tableRow, "movieSpan");

                    if (canSeeAll || simplePageBean.isItemAvailable(i)) {

                        UIComponent item2;

                        String movieUrl = i.getItemURL(simplePageBean.getCurrentSiteId(),
                                currentPage.getOwner());
                        // movieUrl = "https://heidelberg.rutgers.edu" + movieUrl;
                        // Safari doens't always pass cookies to plugins, so we have to pass the arg
                        // this requires session.parameter.allow=true in sakai.properties
                        // don't pass the arg unless that is set, since the whole point of defaulting
                        // off is to not expose the session id
                        String sessionParameter = getSessionParameter(movieUrl);
                        if (sessionParameter != null)
                            movieUrl = movieUrl + "?lb.session=" + sessionParameter;

                        UIComponent movieLink = UIOutput.make(tableRow, "movie-link-div");
                        if (showDownloads)
                            UILink.make(tableRow, "movie-link-link",
                                    messageLocator.getMessage("simplepage.download_file"), movieUrl);

                        //   if (allowSessionId)
                        //  movieUrl = movieUrl + "?sakai.session=" + SessionManager.getCurrentSession().getId();
                        boolean useFlvPlayer = false;

                        // isMp4 means we try the flash player (if not HTML5)
                        // we also try the flash player for FLV but for mp4 we do an
                        // additional backup if flash fails, but that doesn't make sense for FLV
                        boolean isMp4 = Arrays.binarySearch(mp4Types, mimeType) >= 0;
                        boolean isHtml5 = Arrays.binarySearch(html5Types, mimeType) >= 0;

                        // wrap whatever stuff we decide to put out in HTML5 if appropriate
                        // javascript is used to do the wrapping, because RSF can't really handle this
                        if (isHtml5) {
                            // flag for javascript
                            boolean isAudio = mimeType.startsWith("audio/");
                            UIComponent h5video = UIOutput.make(tableRow, (isAudio ? "h5audio" : "h5video"));
                            UIComponent h5source = UIOutput.make(tableRow,
                                    (isAudio ? "h5asource" : "h5source"));
                            if (lengthOk(height) && height.getOld().indexOf("%") < 0)
                                h5video.decorate(new UIFreeAttributeDecorator("height", height.getOld()));
                            if (lengthOk(width) && width.getOld().indexOf("%") < 0)
                                h5video.decorate(new UIFreeAttributeDecorator("width", width.getOld()));
                            h5source.decorate(new UIFreeAttributeDecorator("src", movieUrl))
                                    .decorate(new UIFreeAttributeDecorator("type", mimeType));
                            String caption = i.getAttribute("captionfile");
                            if (!isAudio && caption != null && caption.length() > 0) {
                                movieLink.decorate(
                                        new UIFreeAttributeDecorator("class", "has-caption allow-caption"));
                                String captionUrl = "/access/lessonbuilder/item/" + i.getId() + caption;
                                sessionParameter = getSessionParameter(captionUrl);
                                // sessionParameter should always be non-null
                                // because this overrides all other checks in /access/lessonbuilder,
                                // we haven't adjusted it to handle these files otherwise
                                if (sessionParameter != null)
                                    captionUrl = captionUrl + "?lb.session=" + sessionParameter;
                                UIOutput.make(tableRow, "h5track")
                                        .decorate(new UIFreeAttributeDecorator("src", captionUrl));
                            } else if (!isAudio) {
                                movieLink.decorate(new UIFreeAttributeDecorator("class", "allow-caption"));
                            }
                        }

                        // FLV is special. There's no player for flash video in
                        // the browser
                        // it shows with a special flash program, which I
                        // supply. For the moment MP4 is
                        // shown with the same player so it uses much of the
                        // same code
                        if (mimeType != null
                                && (mimeType.equals("video/x-flv") || mimeType.equals("video/flv") || isMp4)) {
                            mimeType = "application/x-shockwave-flash";
                            movieUrl = "/lessonbuilder-tool/templates/StrobeMediaPlayback.swf";
                            useFlvPlayer = true;
                        }
                        // for IE, if we're not supplying a player it's safest
                        // to use embed
                        // otherwise Quicktime won't work. Oddly, with IE 9 only
                        // it works if you set CLASSID to the MIME type,
                        // but that's so unexpected that I hate to rely on it.
                        // EMBED is in HTML 5, so I think we're OK
                        // using it permanently for IE.
                        // I prefer OBJECT where possible because of the nesting
                        // ability.
                        boolean useEmbed = ieVersion > 0 && !mimeType.equals("application/x-shockwave-flash");

                        if (useEmbed) {
                            item2 = UIOutput.make(tableRow, "movieEmbed")
                                    .decorate(new UIFreeAttributeDecorator("src", movieUrl))
                                    .decorate(new UIFreeAttributeDecorator("alt",
                                            messageLocator.getMessage("simplepage.mm_player").replace("{}",
                                                    abbrevUrl(i.getURL()))));
                        } else {
                            item2 = UIOutput.make(tableRow, "movieObject")
                                    .decorate(new UIFreeAttributeDecorator("data", movieUrl))
                                    .decorate(new UIFreeAttributeDecorator("title",
                                            messageLocator.getMessage("simplepage.mm_player").replace("{}",
                                                    abbrevUrl(i.getURL()))));
                        }
                        if (mimeType != null) {
                            item2.decorate(new UIFreeAttributeDecorator("type", mimeType));
                        }
                        if (canEditPage) {
                            //item2.decorate(new UIFreeAttributeDecorator("style", "border: 1px solid black"));
                        }

                        // some object types seem to need a specification, so supply our default if necessary
                        if (lengthOk(height) && lengthOk(width)) {
                            item2.decorate(new UIFreeAttributeDecorator("height", height.getOld()))
                                    .decorate(new UIFreeAttributeDecorator("width", width.getOld()));
                        } else {
                            if (oMimeType.startsWith("audio/"))
                                item2.decorate(new UIFreeAttributeDecorator("height", "100"))
                                        .decorate(new UIFreeAttributeDecorator("width", "400"));
                            else
                                item2.decorate(new UIFreeAttributeDecorator("height", "300"))
                                        .decorate(new UIFreeAttributeDecorator("width", "400"));
                        }
                        if (!useEmbed) {
                            if (useFlvPlayer) {
                                UIOutput.make(tableRow, "flashvars")
                                        .decorate(
                                                new UIFreeAttributeDecorator("value",
                                                        "src=" + URLEncoder.encode(myUrl() + i.getItemURL(
                                                                simplePageBean.getCurrentSiteId(),
                                                                currentPage.getOwner()))));
                                // need wmode=opaque for player to stack properly with dialogs, etc.
                                // there is a performance impact, but I'm guessing in our application we don't 
                                // need ultimate performance for embedded video. I'm setting it only for
                                // the player, so flash games and other applications will still get wmode=window
                                UIOutput.make(tableRow, "wmode");
                            } else if (mimeType.equals("application/x-shockwave-flash"))
                                UIOutput.make(tableRow, "wmode");

                            UIOutput.make(tableRow, "movieURLInject")
                                    .decorate(new UIFreeAttributeDecorator("value", movieUrl));
                            if (!isMp4 && showDownloads) {
                                UIOutput.make(tableRow, "noplugin-p",
                                        messageLocator.getMessage("simplepage.noplugin"));
                                UIOutput.make(tableRow, "noplugin-br");
                                UILink.make(tableRow, "noplugin", i.getName(), movieUrl);
                            }
                        }

                        if (isMp4) {
                            // do fallback. for ie use EMBED
                            if (ieVersion > 0) {
                                item2 = UIOutput.make(tableRow, "mp4-embed")
                                        .decorate(new UIFreeAttributeDecorator("src",
                                                i.getItemURL(simplePageBean.getCurrentSiteId(),
                                                        currentPage.getOwner())))
                                        .decorate(new UIFreeAttributeDecorator("alt",
                                                messageLocator.getMessage("simplepage.mm_player").replace("{}",
                                                        abbrevUrl(i.getURL()))));
                            } else {
                                item2 = UIOutput.make(tableRow, "mp4-object")
                                        .decorate(new UIFreeAttributeDecorator("data",
                                                i.getItemURL(simplePageBean.getCurrentSiteId(),
                                                        currentPage.getOwner())))
                                        .decorate(new UIFreeAttributeDecorator("title",
                                                messageLocator.getMessage("simplepage.mm_player").replace("{}",
                                                        abbrevUrl(i.getURL()))));
                            }
                            if (oMimeType != null) {
                                item2.decorate(new UIFreeAttributeDecorator("type", oMimeType));
                            }

                            // some object types seem to need a specification, so give a default if needed
                            if (lengthOk(height) && lengthOk(width)) {
                                item2.decorate(new UIFreeAttributeDecorator("height", height.getOld()))
                                        .decorate(new UIFreeAttributeDecorator("width", width.getOld()));
                            } else {
                                if (oMimeType.startsWith("audio/"))
                                    item2.decorate(new UIFreeAttributeDecorator("height", "100"))
                                            .decorate(new UIFreeAttributeDecorator("width", "100%"));
                                else
                                    item2.decorate(new UIFreeAttributeDecorator("height", "300"))
                                            .decorate(new UIFreeAttributeDecorator("width", "100%"));
                            }

                            if (!useEmbed) {
                                UIOutput.make(tableRow, "mp4-inject")
                                        .decorate(new UIFreeAttributeDecorator("value", i.getItemURL(
                                                simplePageBean.getCurrentSiteId(), currentPage.getOwner())));

                                if (showDownloads) {
                                    UIOutput.make(tableRow, "mp4-noplugin-p",
                                            messageLocator.getMessage("simplepage.noplugin"));
                                    UILink.make(tableRow, "mp4-noplugin", i.getName(), i.getItemURL(
                                            simplePageBean.getCurrentSiteId(), currentPage.getOwner()));
                                }
                            }
                        }
                        UIOutput.make(tableRow, "description3", i.getDescription());
                    } else {
                        UIVerbatim notAvailableText = UIVerbatim.make(tableRow, "notAvailableText",
                                messageLocator.getMessage("simplepage.multimediaItemUnavailable"));
                        // Grey it out
                        notAvailableText
                                .decorate(new UIFreeAttributeDecorator("class", "disabled-multimedia-item"));
                    }

                    if (canEditPage) {
                        UIOutput.make(tableRow, "movieId", String.valueOf(i.getId()));
                        UIOutput.make(tableRow, "movieHeight", getOrig(height));
                        UIOutput.make(tableRow, "movieWidth", getOrig(width));
                        UIOutput.make(tableRow, "mimetype5", oMimeType);
                        UIOutput.make(tableRow, "prerequisite", (i.isPrerequisite()) ? "true" : "false");
                        UIOutput.make(tableRow, "current-item-id6", Long.toString(i.getId()));
                        UIVerbatim.make(tableRow, "item-path5", getItemPath(i));
                        UIOutput.make(tableRow, "movie-td");
                        UILink.make(tableRow, "edit-movie", (String) null, "")
                                .decorate(new UIFreeAttributeDecorator("title",
                                        messageLocator.getMessage("simplepage.edit-title.url").replace("{}",
                                                abbrevUrl(i.getURL()))));
                    }

                } else {
                    // this is fallthrough for html or an explicit mm display type (i.e. embed code)
                    // odd types such as MS word will be handled by the AV code, and presented as <OBJECT>

                    if (canSeeAll || simplePageBean.isItemAvailable(i)) {

                        // definition of resizeiframe, at top of page
                        if (!iframeJavascriptDone && getOrig(height).equals("auto")) {
                            UIOutput.make(tofill, "iframeJavascript");
                            iframeJavascriptDone = true;
                        }

                        UIOutput.make(tableRow, "iframeSpan");

                        if (itemGroupString != null) {
                            UIOutput.make(tableRow, "item-group-titles2", itemGroupTitles);
                            UIOutput.make(tableRow, "item-groups2", itemGroupString);
                        }
                        String itemUrl = i.getItemURL(simplePageBean.getCurrentSiteId(),
                                currentPage.getOwner());
                        if ("1".equals(mmDisplayType)) {
                            // embed
                            item = UIVerbatim.make(tableRow, "mm-embed", i.getAttribute("multimediaEmbedCode"));
                            //String style = getStyle(width, height);
                            //if (style != null)
                            //item.decorate(new UIFreeAttributeDecorator("style", style));
                        } else if ("3".equals(mmDisplayType)) {
                            item = UILink.make(tableRow, "mm-oembed", i.getAttribute("multimediaUrl"),
                                    i.getAttribute("multimediaUrl"));
                            if (lengthOk(width))
                                item.decorate(new UIFreeAttributeDecorator("maxWidth", width.getOld()));
                            if (lengthOk(height))
                                item.decorate(new UIFreeAttributeDecorator("maxHeight", height.getOld()));
                            // oembed
                        } else {
                            UIOutput.make(tableRow, "iframe-link-div");
                            UILink.make(tableRow, "iframe-link-link",
                                    messageLocator.getMessage("simplepage.open_new_window"), itemUrl);
                            item = UIOutput.make(tableRow, "iframe")
                                    .decorate(new UIFreeAttributeDecorator("src", itemUrl));
                            // if user specifies auto, use Javascript to resize the
                            // iframe when the
                            // content changes. This only works for URLs with the
                            // same origin, i.e.
                            // URLs in this sakai system
                            if (getOrig(height).equals("auto")) {
                                item.decorate(new UIFreeAttributeDecorator("onload",
                                        "resizeiframe('" + item.getFullID() + "')"));
                                if (lengthOk(width)) {
                                    item.decorate(new UIFreeAttributeDecorator("width", width.getOld()));
                                }
                                item.decorate(new UIFreeAttributeDecorator("height", "300"));
                            } else {
                                // we seem OK without a spec
                                if (lengthOk(height) && lengthOk(width)) {
                                    item.decorate(new UIFreeAttributeDecorator("height", height.getOld()))
                                            .decorate(new UIFreeAttributeDecorator("width", width.getOld()));
                                }
                            }
                        }
                        item.decorate(new UIFreeAttributeDecorator("title", messageLocator
                                .getMessage("simplepage.web_content").replace("{}", abbrevUrl(i.getURL()))));

                        if (canEditPage) {
                            UIOutput.make(tableRow, "iframeHeight", getOrig(height));
                            UIOutput.make(tableRow, "iframeWidth", getOrig(width));
                            UIOutput.make(tableRow, "mimetype3", mimeType);
                            UIOutput.make(tableRow, "item-prereq2", String.valueOf(i.isPrerequisite()));
                            UIOutput.make(tableRow, "embedtype", mmDisplayType);
                            UIOutput.make(tableRow, "current-item-id3", Long.toString(i.getId()));
                            UIVerbatim.make(tableRow, "item-path2", getItemPath(i));
                            UIOutput.make(tableRow, "editmm-td");
                            UILink.make(tableRow, "iframe-edit", (String) null, "")
                                    .decorate(new UIFreeAttributeDecorator("title",
                                            messageLocator.getMessage("simplepage.edit-title.url").replace("{}",
                                                    abbrevUrl(i.getURL()))));
                        }

                        UIOutput.make(tableRow, "description5", i.getDescription());
                    } else {

                        UIVerbatim notAvailableText = UIVerbatim.make(tableRow, "notAvailableText",
                                messageLocator.getMessage("simplepage.multimediaItemUnavailable"));
                        // Grey it out
                        notAvailableText
                                .decorate(new UIFreeAttributeDecorator("class", "disabled-multimedia-item"));
                    }

                }

                // end of multimedia object

            } else if (i.getType() == SimplePageItem.COMMENTS) {
                // Load later using AJAX and CommentsProducer

                UIOutput.make(tableRow, "commentsSpan");

                boolean isAvailable = simplePageBean.isItemAvailable(i);
                // faculty missing preqs get warning but still see the comments
                if (!isAvailable && canSeeAll)
                    UIOutput.make(tableRow, "missing-prereqs",
                            messageLocator.getMessage("simplepage.fake-missing-prereqs"));

                // students get warning and not the content
                if (!isAvailable && !canSeeAll) {
                    UIOutput.make(tableRow, "missing-prereqs",
                            messageLocator.getMessage("simplepage.missing-prereqs"));
                } else {
                    UIOutput.make(tableRow, "commentsDiv");
                    UIOutput.make(tableRow, "placementId", placement.getId());

                    // note: the URL will be rewritten in comments.js to look like
                    //  /lessonbuilder-tool/faces/Comments...
                    CommentsViewParameters eParams = new CommentsViewParameters(CommentsProducer.VIEW_ID);
                    eParams.itemId = i.getId();
                    eParams.placementId = placement.getId();
                    if (params.postedComment) {
                        eParams.postedComment = postedCommentId;
                    }
                    eParams.siteId = simplePageBean.getCurrentSiteId();
                    eParams.pageId = currentPage.getPageId();

                    if (params.author != null && !params.author.equals("")) {
                        eParams.author = params.author;
                        eParams.showAllComments = true;
                    }

                    UIInternalLink.make(tableRow, "commentsLink", eParams);

                    if (!addedCommentsScript) {
                        UIOutput.make(tofill, "comments-script");
                        UIOutput.make(tofill, "fckScript");
                        addedCommentsScript = true;
                        UIOutput.make(tofill, "delete-dialog");
                    }

                    // forced comments have to be edited on the main page
                    if (canEditPage) {
                        // Checks to make sure that the comments item isn't on a student page.
                        // That it is graded.  And that we didn't just come from the grading pane.
                        if (i.getPageId() > 0 && i.getGradebookId() != null && !cameFromGradingPane) {
                            CommentsGradingPaneViewParameters gp = new CommentsGradingPaneViewParameters(
                                    CommentGradingPaneProducer.VIEW_ID);
                            gp.placementId = toolManager.getCurrentPlacement().getId();
                            gp.commentsItemId = i.getId();
                            gp.pageId = currentPage.getPageId();
                            gp.pageItemId = pageItem.getId();
                            gp.siteId = simplePageBean.getCurrentSiteId();

                            UIInternalLink.make(tableRow, "gradingPaneLink",
                                    messageLocator.getMessage("simplepage.show-grading-pane-comments"), gp)
                                    .decorate(new UIFreeAttributeDecorator("title", messageLocator
                                            .getMessage("simplepage.show-grading-pane-comments")));
                        }

                        UIOutput.make(tableRow, "comments-td");

                        if (i.getSequence() > 0) {
                            UILink.make(tableRow, "edit-comments", (String) null, "")
                                    .decorate(new UIFreeAttributeDecorator("title",
                                            messageLocator.getMessage("simplepage.edit-title.comments")));

                            UIOutput.make(tableRow, "commentsId", String.valueOf(i.getId()));
                            UIOutput.make(tableRow, "commentsAnon", String.valueOf(i.isAnonymous()));
                            UIOutput.make(tableRow, "commentsitem-required", String.valueOf(i.isRequired()));
                            UIOutput.make(tableRow, "commentsitem-prerequisite",
                                    String.valueOf(i.isPrerequisite()));
                            UIOutput.make(tableRow, "commentsGrade",
                                    String.valueOf(i.getGradebookId() != null));
                            UIOutput.make(tableRow, "commentsMaxPoints",
                                    String.valueOf(i.getGradebookPoints()));

                            String itemGroupString = simplePageBean.getItemGroupString(i, null, true);
                            if (itemGroupString != null) {
                                String itemGroupTitles = simplePageBean.getItemGroupTitles(itemGroupString, i);
                                if (itemGroupTitles != null) {
                                    itemGroupTitles = "[" + itemGroupTitles + "]";
                                }
                                UIOutput.make(tableRow, "comments-groups", itemGroupString);
                                UIOutput.make(tableRow, "item-group-titles6", itemGroupTitles);
                            }
                        }

                        // Allows AJAX posting of comment grades
                        printGradingForm(tofill);
                    }

                    UIForm form = UIForm.make(tableRow, "comment-form");
                    makeCsrf(form, "csrf2");

                    UIInput.make(form, "comment-item-id", "#{simplePageBean.itemId}",
                            String.valueOf(i.getId()));
                    UIInput.make(form, "comment-edit-id", "#{simplePageBean.editId}");

                    // usage * image is required and not done
                    if (i.isRequired() && !simplePageBean.isItemComplete(i))
                        UIOutput.make(tableRow, "comment-required-image");

                    UIOutput.make(tableRow, "add-comment-link");
                    UIOutput.make(tableRow, "add-comment-text",
                            messageLocator.getMessage("simplepage.add-comment"));
                    UIInput fckInput = UIInput.make(form, "comment-text-area-evolved:",
                            "#{simplePageBean.formattedComment}");
                    fckInput.decorate(new UIFreeAttributeDecorator("height", "175"));
                    fckInput.decorate(new UIFreeAttributeDecorator("width", "800"));
                    fckInput.decorate(new UIStyleDecorator("evolved-box"));
                    fckInput.decorate(new UIFreeAttributeDecorator("aria-label",
                            messageLocator.getMessage("simplepage.editor")));
                    fckInput.decorate(new UIFreeAttributeDecorator("role", "dialog"));

                    if (!noEditor) {
                        fckInput.decorate(new UIStyleDecorator("using-editor")); // javascript needs to know
                        ((SakaiFCKTextEvolver) richTextEvolver).evolveTextInput(fckInput, "" + commentsCount);
                    }
                    UICommand.make(form, "add-comment", "#{simplePageBean.addComment}");
                }

            } else if (i.getType() == SimplePageItem.PEEREVAL) {

                String owner = currentPage.getOwner();
                String currentUser = UserDirectoryService.getCurrentUser().getId();
                Long pageId = currentPage.getPageId();

                UIOutput.make(tableRow, "peerReviewRubricStudent");
                UIOutput.make(tableRow, "peer-review-form");

                makePeerRubric(tableRow, i, makeStudentRubric);

                boolean isOpen = false;
                boolean isPastDue = false;

                String peerEvalDateOpenStr = i.getAttribute("rubricOpenDate");
                String peerEvalDateDueStr = i.getAttribute("rubricDueDate");
                boolean peerEvalAllowSelfGrade = Boolean.parseBoolean(i.getAttribute("rubricAllowSelfGrade"));
                boolean gradingSelf = owner.equals(currentUser) && peerEvalAllowSelfGrade;

                if (peerEvalDateOpenStr != null && peerEvalDateDueStr != null) {
                    Date peerEvalNow = new Date();
                    Date peerEvalOpen = new Date(Long.valueOf(peerEvalDateOpenStr));
                    Date peerEvalDue = new Date(Long.valueOf(peerEvalDateDueStr));

                    isOpen = peerEvalNow.after(peerEvalOpen);
                    isPastDue = peerEvalNow.after(peerEvalDue);
                }

                if (isOpen) {

                    if (owner.equals(currentUser)) { //owner gets their own data
                        class PeerEvaluation {
                            String category;
                            public int grade, count;

                            public PeerEvaluation(String category, int grade) {
                                this.category = category;
                                this.grade = grade;
                                count = 1;
                            }

                            public void increment() {
                                count++;
                            }

                            public boolean equals(Object o) {
                                if (!(o instanceof PeerEvaluation))
                                    return false;
                                PeerEvaluation pe = (PeerEvaluation) o;
                                return category.equals(pe.category) && grade == pe.grade;
                            }

                            public String toString() {
                                return category + " " + grade + " [" + count + "]";
                            }
                        }

                        ArrayList<PeerEvaluation> myEvaluations = new ArrayList<PeerEvaluation>();

                        List<SimplePagePeerEvalResult> evaluations = simplePageToolDao
                                .findPeerEvalResultByOwner(pageId.longValue(), owner);
                        if (evaluations != null)
                            for (SimplePagePeerEvalResult eval : evaluations) {
                                PeerEvaluation target = new PeerEvaluation(eval.getRowText(),
                                        eval.getColumnValue());
                                int targetIndex = myEvaluations.indexOf(target);
                                if (targetIndex != -1) {
                                    myEvaluations.get(targetIndex).increment();
                                } else
                                    myEvaluations.add(target);
                            }

                        UIOutput.make(tableRow, "my-existing-peer-eval-data");
                        for (PeerEvaluation eval : myEvaluations) {
                            UIBranchContainer evalData = UIBranchContainer.make(tableRow, "my-peer-eval-data:");
                            UIOutput.make(evalData, "peer-eval-row-text", eval.category);
                            UIOutput.make(evalData, "peer-eval-grade", String.valueOf(eval.grade));
                            UIOutput.make(evalData, "peer-eval-count", String.valueOf(eval.count));
                        }
                    }

                    if (!owner.equals(currentUser) || gradingSelf) {
                        List<SimplePagePeerEvalResult> evaluations = simplePageToolDao
                                .findPeerEvalResult(pageId, currentUser, owner);
                        //existing evaluation data
                        if (evaluations != null && evaluations.size() != 0) {
                            UIOutput.make(tableRow, "existing-peer-eval-data");
                            for (SimplePagePeerEvalResult eval : evaluations) {
                                UIBranchContainer evalData = UIBranchContainer.make(tableRow,
                                        "peer-eval-data:");
                                UIOutput.make(evalData, "peer-eval-row-text", eval.getRowText());
                                UIOutput.make(evalData, "peer-eval-grade",
                                        String.valueOf(eval.getColumnValue()));
                            }
                        }

                        //form for peer evaluation results
                        UIForm form = UIForm.make(tofill, "rubricSelection");
                        makeCsrf(form, "csrf6");

                        UIInput.make(form, "rubricPeerGrade", "#{simplePageBean.rubricPeerGrade}");
                        UICommand.make(form, "update-peer-eval-grade",
                                messageLocator.getMessage("simplepage.edit"),
                                "#{simplePageBean.savePeerEvalResult}");
                    }

                    //buttons
                    UIOutput.make(tableRow, "add-peereval-link");
                    UIOutput.make(tableRow, "add-peereval-text",
                            messageLocator.getMessage("simplepage.view-peereval"));

                    if (isPastDue) {
                        UIOutput.make(tableRow, "peer-eval-grade-directions",
                                messageLocator.getMessage("simplepage.peer-eval.past-due-date"));
                    } else if (!owner.equals(currentUser) || gradingSelf) {
                        UIOutput.make(tableRow, "save-peereval-link");
                        UIOutput.make(tableRow, "save-peereval-text",
                                messageLocator.getMessage("simplepage.save"));
                        UIOutput.make(tableRow, "cancel-peereval-link");
                        UIOutput.make(tableRow, "cancel-peereval-text",
                                messageLocator.getMessage("simplepage.cancel"));

                        UIOutput.make(tableRow, "peer-eval-grade-directions",
                                messageLocator.getMessage("simplepage.peer-eval.click-on-cell"));
                    } else { //owner who cannot grade himself
                        UIOutput.make(tableRow, "peer-eval-grade-directions",
                                messageLocator.getMessage("simplepage.peer-eval.cant-eval-yourself"));
                    }

                    if (canEditPage)
                        UIOutput.make(tableRow, "peerReviewRubricStudent-edit");//lines up rubric with edit btn column for users with editing privs
                }
            } else if (i.getType() == SimplePageItem.STUDENT_CONTENT) {

                UIOutput.make(tableRow, "studentSpan");

                boolean isAvailable = simplePageBean.isItemAvailable(i);
                // faculty missing preqs get warning but still see the comments
                if (!isAvailable && canSeeAll)
                    UIOutput.make(tableRow, "student-missing-prereqs",
                            messageLocator.getMessage("simplepage.student-fake-missing-prereqs"));
                if (!isAvailable && !canSeeAll)
                    UIOutput.make(tableRow, "student-missing-prereqs",
                            messageLocator.getMessage("simplepage.student-missing-prereqs"));
                else {
                    UIOutput.make(tableRow, "studentDiv");

                    HashMap<Long, SimplePageLogEntry> cache = simplePageBean
                            .cacheStudentPageLogEntries(i.getId());
                    List<SimpleStudentPage> studentPages = simplePageToolDao.findStudentPages(i.getId());

                    boolean hasOwnPage = false;
                    String userId = UserDirectoryService.getCurrentUser().getId();

                    Collections.sort(studentPages, new Comparator<SimpleStudentPage>() {
                        public int compare(SimpleStudentPage o1, SimpleStudentPage o2) {
                            String title1 = o1.getTitle();
                            if (title1 == null)
                                title1 = "";
                            String title2 = o2.getTitle();
                            if (title2 == null)
                                title2 = "";
                            return title1.compareTo(title2);
                        }
                    });

                    UIOutput contentList = UIOutput.make(tableRow, "studentContentTable");
                    UIOutput contentTitle = UIOutput.make(tableRow, "studentContentTitle",
                            messageLocator.getMessage("simplepage.student"));
                    contentList.decorate(
                            new UIFreeAttributeDecorator("aria-labelledby", contentTitle.getFullID()));

                    // Print each row in the table
                    for (SimpleStudentPage page : studentPages) {
                        if (page.isDeleted())
                            continue;

                        SimplePageLogEntry entry = cache.get(page.getPageId());
                        UIBranchContainer row = UIBranchContainer.make(tableRow, "studentRow:");

                        // There's content they haven't seen
                        if (entry == null || entry.getLastViewed().compareTo(page.getLastUpdated()) < 0) {
                            UIOutput.make(row, "newContentImg").decorate(new UIFreeAttributeDecorator("title",
                                    messageLocator.getMessage("simplepage.new-student-content")));
                        } else
                            UIOutput.make(row, "newContentImgT");

                        // The comments tool exists, so we might have to show the icon
                        if (i.getShowComments() != null && i.getShowComments()) {

                            // New comments have been added since they last viewed the page
                            if (page.getLastCommentChange() != null && (entry == null
                                    || entry.getLastViewed().compareTo(page.getLastCommentChange()) < 0)) {
                                UIOutput.make(row, "newCommentsImg").decorate(new UIFreeAttributeDecorator(
                                        "title", messageLocator.getMessage("simplepage.new-student-comments")));
                            } else
                                UIOutput.make(row, "newCommentsImgT");
                        }

                        // Never visited page
                        if (entry == null) {
                            UIOutput.make(row, "newPageImg").decorate(new UIFreeAttributeDecorator("title",
                                    messageLocator.getMessage("simplepage.new-student-page")));
                        } else
                            UIOutput.make(row, "newPageImgT");

                        GeneralViewParameters eParams = new GeneralViewParameters(ShowPageProducer.VIEW_ID,
                                page.getPageId());
                        eParams.setItemId(i.getId());
                        eParams.setPath("push");

                        String studentTitle = page.getTitle();

                        String sownerName = null;
                        try {
                            if (!i.isAnonymous() || canEditPage) {
                                if (page.getGroup() != null)
                                    sownerName = simplePageBean.getCurrentSite().getGroup(page.getGroup())
                                            .getTitle();
                                else
                                    sownerName = UserDirectoryService.getUser(page.getOwner()).getDisplayName();
                                if (sownerName != null && sownerName.equals(studentTitle))
                                    studentTitle = "(" + sownerName + ")";
                                else
                                    studentTitle += " (" + sownerName + ")";
                            } else if (simplePageBean.isPageOwner(page)) {
                                studentTitle += " (" + messageLocator.getMessage("simplepage.comment-you")
                                        + ")";
                            }
                        } catch (UserNotDefinedException e) {
                        }

                        UIInternalLink.make(row, "studentLink", studentTitle, eParams);

                        if (simplePageBean.isPageOwner(page)) {
                            hasOwnPage = true;
                        }

                        if (i.getGradebookId() != null && simplePageBean.getEditPrivs() == 0) {
                            UIOutput.make(row, "studentGradingCell",
                                    String.valueOf((page.getPoints() != null ? page.getPoints() : "")));
                        }
                    }

                    if (!hasOwnPage && simplePageBean.myStudentPageGroupsOk(i)) {
                        UIBranchContainer row = UIBranchContainer.make(tableRow, "studentRow:");
                        UIOutput.make(row, "linkRow");
                        UIOutput.make(row, "linkCell");

                        if (i.isRequired() && !simplePageBean.isItemComplete(i))
                            UIOutput.make(row, "student-required-image");
                        GeneralViewParameters eParams = new GeneralViewParameters(ShowPageProducer.VIEW_ID);
                        eParams.addTool = GeneralViewParameters.STUDENT_PAGE;
                        eParams.studentItemId = i.getId();
                        UIInternalLink.make(row, "linkLink", messageLocator.getMessage("simplepage.add-page"),
                                eParams);
                    }

                    String itemGroupString = null;
                    // do before canEditAll because we need itemGroupString in it
                    if (canSeeAll) {
                        itemGroupString = simplePageBean.getItemGroupString(i, null, true);
                        if (itemGroupString != null) {
                            String itemGroupTitles = simplePageBean.getItemGroupTitles(itemGroupString, i);
                            if (itemGroupTitles != null) {
                                itemGroupTitles = "[" + itemGroupTitles + "]";
                            }
                            UIOutput.make(tableRow, "item-group-titles7", itemGroupTitles);
                        }
                    }

                    if (canEditPage) {
                        // Checks to make sure that the comments are graded and that we didn't
                        // just come from a grading pane (would be confusing)
                        if (i.getAltGradebook() != null && !cameFromGradingPane) {
                            CommentsGradingPaneViewParameters gp = new CommentsGradingPaneViewParameters(
                                    CommentGradingPaneProducer.VIEW_ID);
                            gp.placementId = toolManager.getCurrentPlacement().getId();
                            gp.commentsItemId = i.getId();
                            gp.pageId = currentPage.getPageId();
                            gp.pageItemId = pageItem.getId();
                            gp.studentContentItem = true;

                            UIInternalLink.make(tableRow, "studentGradingPaneLink",
                                    messageLocator.getMessage("simplepage.show-grading-pane-content"), gp)
                                    .decorate(new UIFreeAttributeDecorator("title",
                                            messageLocator.getMessage("simplepage.show-grading-pane-content")));
                        }

                        UIOutput.make(tableRow, "student-td");
                        UILink.make(tableRow, "edit-student", (String) null, "")
                                .decorate(new UIFreeAttributeDecorator("title",
                                        messageLocator.getMessage("simplepage.edit-title.student")));

                        UIOutput.make(tableRow, "studentId", String.valueOf(i.getId()));
                        UIOutput.make(tableRow, "studentAnon", String.valueOf(i.isAnonymous()));
                        UIOutput.make(tableRow, "studentComments", String.valueOf(i.getShowComments()));
                        UIOutput.make(tableRow, "forcedAnon", String.valueOf(i.getForcedCommentsAnonymous()));
                        UIOutput.make(tableRow, "studentGrade", String.valueOf(i.getGradebookId() != null));
                        UIOutput.make(tableRow, "studentMaxPoints", String.valueOf(i.getGradebookPoints()));
                        UIOutput.make(tableRow, "studentGrade2", String.valueOf(i.getAltGradebook() != null));
                        UIOutput.make(tableRow, "studentMaxPoints2", String.valueOf(i.getAltPoints()));
                        UIOutput.make(tableRow, "studentitem-required", String.valueOf(i.isRequired()));
                        UIOutput.make(tableRow, "studentitem-prerequisite", String.valueOf(i.isPrerequisite()));
                        UIOutput.make(tableRow, "peer-eval", String.valueOf(i.getShowPeerEval()));
                        makePeerRubric(tableRow, i, makeMaintainRubric);
                        makeSamplePeerEval(tableRow);

                        String peerEvalDate = i.getAttribute("rubricOpenDate");
                        String peerDueDate = i.getAttribute("rubricDueDate");

                        Calendar peerevalcal = Calendar.getInstance();

                        if (peerEvalDate != null && peerDueDate != null) {
                            DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT,
                                    M_locale);
                            //Open date from attribute string
                            peerevalcal.setTimeInMillis(Long.valueOf(peerEvalDate));

                            String dateStr = isoDateFormat.format(peerevalcal.getTime());

                            UIOutput.make(tableRow, "peer-eval-open-date", dateStr);

                            //Due date from attribute string
                            peerevalcal.setTimeInMillis(Long.valueOf(peerDueDate));

                            dateStr = isoDateFormat.format(peerevalcal.getTime());

                            UIOutput.make(tableRow, "peer-eval-due-date", dateStr);
                            UIOutput.make(tableRow, "peer-eval-allow-self",
                                    i.getAttribute("rubricAllowSelfGrade"));

                        } else {
                            //Default open and due date
                            Date now = new Date();
                            peerevalcal.setTime(now);

                            //Default open date: now
                            String dateStr = isoDateFormat.format(peerevalcal.getTime());

                            UIOutput.make(tableRow, "peer-eval-open-date", dateStr);

                            //Default due date: 7 days from now
                            Date later = new Date(peerevalcal.getTimeInMillis() + 604800000);
                            peerevalcal.setTime(later);

                            dateStr = isoDateFormat.format(peerevalcal.getTime());

                            //System.out.println("Setting date to " + dateStr + " and time to " + timeStr);

                            UIOutput.make(tableRow, "peer-eval-due-date", dateStr);
                            UIOutput.make(tableRow, "peer-eval-allow-self",
                                    i.getAttribute("rubricAllowSelfGrade"));
                        }

                        //Peer Eval Stats link
                        GeneralViewParameters view = new GeneralViewParameters(PeerEvalStatsProducer.VIEW_ID);
                        view.setSendingPage(currentPage.getPageId());
                        view.setItemId(i.getId());
                        if (i.getShowPeerEval()) {
                            UILink link = UIInternalLink.make(tableRow, "peer-eval-stats-link", view);
                        }

                        if (itemGroupString != null) {
                            UIOutput.make(tableRow, "student-groups", itemGroupString);
                        }
                        UIOutput.make(tableRow, "student-owner-groups",
                                simplePageBean.getItemOwnerGroupString(i));
                        UIOutput.make(tableRow, "student-group-owned", (i.isGroupOwned() ? "true" : "false"));
                    }
                }
            } else if (i.getType() == SimplePageItem.QUESTION) {
                String itemGroupString = null;
                String itemGroupTitles = null;
                if (canSeeAll) {
                    itemGroupString = simplePageBean.getItemGroupString(i, null, true);
                    if (itemGroupString != null)
                        itemGroupTitles = simplePageBean.getItemGroupTitles(itemGroupString, i);
                    if (itemGroupTitles != null) {
                        itemGroupTitles = "[" + itemGroupTitles + "]";
                    }
                    if (canEditPage)
                        UIOutput.make(tableRow, "item-groups", itemGroupString);
                    if (itemGroupTitles != null)
                        UIOutput.make(tableRow, "questionitem-group-titles", itemGroupTitles);
                }
                SimplePageQuestionResponse response = simplePageToolDao.findQuestionResponse(i.getId(),
                        simplePageBean.getCurrentUserId());

                UIOutput.make(tableRow, "questionSpan");

                boolean isAvailable = simplePageBean.isItemAvailable(i) || canSeeAll;

                UIOutput.make(tableRow, "questionDiv");

                UIOutput.make(tableRow, "questionText", i.getAttribute("questionText"));

                List<SimplePageQuestionAnswer> answers = new ArrayList<SimplePageQuestionAnswer>();
                if ("multipleChoice".equals(i.getAttribute("questionType"))) {
                    answers = simplePageToolDao.findAnswerChoices(i);
                    UIOutput.make(tableRow, "multipleChoiceDiv");
                    UIForm questionForm = UIForm.make(tableRow, "multipleChoiceForm");
                    makeCsrf(questionForm, "csrf4");

                    UIInput.make(questionForm, "multipleChoiceId", "#{simplePageBean.questionId}",
                            String.valueOf(i.getId()));

                    String[] options = new String[answers.size()];
                    String initValue = null;
                    for (int j = 0; j < answers.size(); j++) {
                        options[j] = String.valueOf(answers.get(j).getId());
                        if (response != null && answers.get(j).getId() == response.getMultipleChoiceId()) {
                            initValue = String.valueOf(answers.get(j).getId());
                        }
                    }

                    UISelect multipleChoiceSelect = UISelect.make(questionForm, "multipleChoiceSelect:",
                            options, "#{simplePageBean.questionResponse}", initValue);
                    if (!isAvailable || response != null) {
                        multipleChoiceSelect.decorate(new UIDisabledDecorator());
                    }

                    for (int j = 0; j < answers.size(); j++) {
                        UIBranchContainer answerContainer = UIBranchContainer.make(questionForm,
                                "multipleChoiceAnswer:", String.valueOf(j));
                        UISelectChoice multipleChoiceInput = UISelectChoice.make(answerContainer,
                                "multipleChoiceAnswerRadio", multipleChoiceSelect.getFullID(), j);

                        multipleChoiceInput
                                .decorate(new UIFreeAttributeDecorator("id", multipleChoiceInput.getFullID()));
                        UIOutput.make(answerContainer, "multipleChoiceAnswerText", answers.get(j).getText())
                                .decorate(new UIFreeAttributeDecorator("for", multipleChoiceInput.getFullID()));

                        if (!isAvailable || response != null) {
                            multipleChoiceInput.decorate(new UIDisabledDecorator());
                        }
                    }

                    UICommand answerButton = UICommand.make(questionForm, "answerMultipleChoice",
                            messageLocator.getMessage("simplepage.answer_question"),
                            "#{simplePageBean.answerMultipleChoiceQuestion}");
                    if (!isAvailable || response != null) {
                        answerButton.decorate(new UIDisabledDecorator());
                    }
                } else if ("shortanswer".equals(i.getAttribute("questionType"))) {
                    UIOutput.make(tableRow, "shortanswerDiv");

                    UIForm questionForm = UIForm.make(tableRow, "shortanswerForm");
                    makeCsrf(questionForm, "csrf5");

                    UIInput.make(questionForm, "shortanswerId", "#{simplePageBean.questionId}",
                            String.valueOf(i.getId()));

                    UIInput shortanswerInput = UIInput.make(questionForm, "shortanswerInput",
                            "#{simplePageBean.questionResponse}");
                    if (!isAvailable || response != null) {
                        shortanswerInput.decorate(new UIDisabledDecorator());
                        if (response != null && response.getShortanswer() != null) {
                            shortanswerInput.setValue(response.getShortanswer());
                        }
                    }

                    UICommand answerButton = UICommand.make(questionForm, "answerShortanswer",
                            messageLocator.getMessage("simplepage.answer_question"),
                            "#{simplePageBean.answerShortanswerQuestion}");
                    if (!isAvailable || response != null) {
                        answerButton.decorate(new UIDisabledDecorator());
                    }
                }

                Status questionStatus = getQuestionStatus(i, response);
                addStatusImage(questionStatus, tableRow, "questionStatus", null);
                String statusNote = getStatusNote(questionStatus);
                if (statusNote != null) // accessibility version of icon
                    UIOutput.make(tableRow, "questionNote", statusNote);
                String statusText = null;
                if (questionStatus == Status.COMPLETED)
                    statusText = i.getAttribute("questionCorrectText");
                else if (questionStatus == Status.FAILED)
                    statusText = i.getAttribute("questionIncorrectText");
                if (statusText != null && !"".equals(statusText.trim()))
                    UIOutput.make(tableRow, "questionStatusText", statusText);

                // Output the poll data
                if ("multipleChoice".equals(i.getAttribute("questionType"))
                        && (canEditPage || ("true".equals(i.getAttribute("questionShowPoll"))
                                && (questionStatus == Status.COMPLETED || questionStatus == Status.FAILED)))) {
                    UIOutput.make(tableRow, "showPollGraph", messageLocator.getMessage("simplepage.show-poll"));
                    UIOutput questionGraph = UIOutput.make(tableRow, "questionPollGraph");
                    questionGraph.decorate(new UIFreeAttributeDecorator("id", "poll" + i.getId()));

                    List<SimplePageQuestionResponseTotals> totals = simplePageToolDao.findQRTotals(i.getId());
                    HashMap<Long, Long> responseCounts = new HashMap<Long, Long>();
                    // in theory we don't need the first loop, as there should be a total
                    // entry for all possible answers. But in case things are out of sync ...
                    for (SimplePageQuestionAnswer answer : answers)
                        responseCounts.put(answer.getId(), 0L);
                    for (SimplePageQuestionResponseTotals total : totals)
                        responseCounts.put(total.getResponseId(), total.getCount());

                    for (int j = 0; j < answers.size(); j++) {
                        UIBranchContainer pollContainer = UIBranchContainer.make(tableRow, "questionPollData:",
                                String.valueOf(j));
                        UIOutput.make(pollContainer, "questionPollText", answers.get(j).getText());
                        UIOutput.make(pollContainer, "questionPollNumber",
                                String.valueOf(responseCounts.get(answers.get(j).getId())));
                    }
                }

                if (canEditPage) {
                    UIOutput.make(tableRow, "question-td");

                    // always show grading panel. Currently this is the only way to get feedback
                    if (!cameFromGradingPane) {
                        QuestionGradingPaneViewParameters gp = new QuestionGradingPaneViewParameters(
                                QuestionGradingPaneProducer.VIEW_ID);
                        gp.placementId = toolManager.getCurrentPlacement().getId();
                        gp.questionItemId = i.getId();
                        gp.pageId = currentPage.getPageId();
                        gp.pageItemId = pageItem.getId();

                        UIInternalLink
                                .make(tableRow, "questionGradingPaneLink",
                                        messageLocator.getMessage("simplepage.show-grading-pane"), gp)
                                .decorate(new UIFreeAttributeDecorator("title",
                                        messageLocator.getMessage("simplepage.show-grading-pane")));
                    }

                    UILink.make(tableRow, "edit-question", (String) null, "")
                            .decorate(new UIFreeAttributeDecorator("title",
                                    messageLocator.getMessage("simplepage.edit-title.question")));

                    UIOutput.make(tableRow, "questionId", String.valueOf(i.getId()));
                    boolean graded = "true".equals(i.getAttribute("questionGraded"))
                            || i.getGradebookId() != null;
                    UIOutput.make(tableRow, "questionGrade", String.valueOf(graded));
                    UIOutput.make(tableRow, "questionMaxPoints", String.valueOf(i.getGradebookPoints()));
                    UIOutput.make(tableRow, "questionGradebookTitle", String.valueOf(i.getGradebookTitle()));
                    UIOutput.make(tableRow, "questionitem-required", String.valueOf(i.isRequired()));
                    UIOutput.make(tableRow, "questionitem-prerequisite", String.valueOf(i.isPrerequisite()));
                    UIOutput.make(tableRow, "questionitem-groups", itemGroupString);
                    UIOutput.make(tableRow, "questionCorrectText",
                            String.valueOf(i.getAttribute("questionCorrectText")));
                    UIOutput.make(tableRow, "questionIncorrectText",
                            String.valueOf(i.getAttribute("questionIncorrectText")));

                    if ("shortanswer".equals(i.getAttribute("questionType"))) {
                        UIOutput.make(tableRow, "questionType", "shortanswer");
                        UIOutput.make(tableRow, "questionAnswer", i.getAttribute("questionAnswer"));
                    } else {
                        UIOutput.make(tableRow, "questionType", "multipleChoice");

                        for (int j = 0; j < answers.size(); j++) {
                            UIBranchContainer answerContainer = UIBranchContainer.make(tableRow,
                                    "questionMultipleChoiceAnswer:", String.valueOf(j));
                            UIOutput.make(answerContainer, "questionMultipleChoiceAnswerId",
                                    String.valueOf(answers.get(j).getId()));
                            UIOutput.make(answerContainer, "questionMultipleChoiceAnswerText",
                                    answers.get(j).getText());
                            UIOutput.make(answerContainer, "questionMultipleChoiceAnswerCorrect",
                                    String.valueOf(answers.get(j).isCorrect()));
                        }

                        UIOutput.make(tableRow, "questionShowPoll",
                                String.valueOf(i.getAttribute("questionShowPoll")));
                    }
                }
            } else {
                // remaining type must be a block of HTML
                UIOutput.make(tableRow, "itemSpan");

                if (canSeeAll) {
                    String itemGroupString = simplePageBean.getItemGroupString(i, null, true);
                    String itemGroupTitles = simplePageBean.getItemGroupTitles(itemGroupString, i);
                    if (itemGroupTitles != null) {
                        itemGroupTitles = "[" + itemGroupTitles + "]";
                    }

                    UIOutput.make(tableRow, "item-groups-titles-text", itemGroupTitles);
                }

                if (canSeeAll || simplePageBean.isItemAvailable(i)) {
                    UIVerbatim.make(tableRow, "content", (i.getHtml() == null ? "" : i.getHtml()));
                } else {
                    UIComponent unavailableText = UIOutput.make(tableRow, "content",
                            messageLocator.getMessage("simplepage.textItemUnavailable"));
                    unavailableText.decorate(new UIFreeAttributeDecorator("class", "disabled-text-item"));
                }

                // editing is done using a special producer that calls FCK.
                if (canEditPage) {
                    GeneralViewParameters eParams = new GeneralViewParameters();
                    eParams.setSendingPage(currentPage.getPageId());
                    eParams.setItemId(i.getId());
                    eParams.viewID = EditPageProducer.VIEW_ID;
                    UIOutput.make(tableRow, "edittext-td");
                    UIInternalLink.make(tableRow, "edit-link", (String) null, eParams)
                            .decorate(new UIFreeAttributeDecorator("title",
                                    messageLocator.getMessage("simplepage.edit-title.textbox").replace("{}",
                                            Integer.toString(textboxcount))));
                    textboxcount++;
                }
            }
        }

        // end of items. This is the end for normal users. Following is
        // special
        // checks and putting out the dialogs for the popups, for
        // instructors.

        boolean showBreak = false;

        // I believe refresh is now done automatically in all cases
        // if (showRefresh) {
        // UIOutput.make(tofill, "refreshAlert");
        //
        // // Should simply refresh
        // GeneralViewParameters p = new GeneralViewParameters(VIEW_ID);
        // p.setSendingPage(currentPage.getPageId());
        // UIInternalLink.make(tofill, "refreshLink", p);
        // showBreak = true;
        // }

        // stuff goes on the page in the order in the HTML file. So the fact
        // that it's here doesn't mean it shows
        // up at the end. This code produces errors and other odd stuff.

        if (canSeeAll) {
            // if the page is hidden, warn the faculty [students get stopped
            // at
            // the top]
            if (currentPage.isHidden()) {
                UIOutput.make(tofill, "hiddenAlert").decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.pagehidden")));
                UIVerbatim.make(tofill, "hidden-text", messageLocator.getMessage("simplepage.pagehidden.text"));

                showBreak = true;
                // similarly warn them if it isn't released yet
            } else if (currentPage.getReleaseDate() != null && currentPage.getReleaseDate().after(new Date())) {
                DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, M_locale);
                TimeZone tz = timeService.getLocalTimeZone();
                df.setTimeZone(tz);
                String releaseDate = df.format(currentPage.getReleaseDate());
                UIOutput.make(tofill, "hiddenAlert").decorate(new UIFreeAttributeDecorator("title",
                        messageLocator.getMessage("simplepage.notreleased")));
                UIVerbatim.make(tofill, "hidden-text",
                        messageLocator.getMessage("simplepage.notreleased.text").replace("{}", releaseDate));
                showBreak = true;
            }
        }

        if (showBreak) {
            UIOutput.make(tofill, "breakAfterWarnings");
        }
    }

    // more warnings: if no item on the page, give faculty instructions,
    // students an error
    if (!anyItemVisible) {
        if (canEditPage) {
            String helpUrl = null;
            // order:
            // localized placedholder
            // localized general
            // default placeholder
            // we know the defaults exist because we include them, so
            // we never need to consider default general
            if (currentPage.getOwner() != null)
                helpUrl = getLocalizedURL("student.html", true);
            else {
                helpUrl = getLocalizedURL("placeholder.html", false);
                if (helpUrl == null)
                    helpUrl = getLocalizedURL("general.html", false);
                if (helpUrl == null)
                    helpUrl = getLocalizedURL("placeholder.html", true);
            }

            UIOutput.make(tofill, "startupHelp").decorate(new UIFreeAttributeDecorator("src", helpUrl))
                    .decorate(new UIFreeAttributeDecorator("id", "iframe"));
            if (!iframeJavascriptDone) {
                UIOutput.make(tofill, "iframeJavascript");
                iframeJavascriptDone = true;
            }
        } else {
            UIOutput.make(tofill, "error-div");
            UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.noitems_error_user"));
        }
    }

    // now output the dialogs. but only for faculty (to avoid making the
    // file bigger)
    if (canEditPage) {
        createSubpageDialog(tofill, currentPage);
    }

    createDialogs(tofill, currentPage, pageItem);
}

From source file:com.ruesga.rview.tasks.AsyncTextDiffProcessor.java

private void processBlames(List<DiffView.AbstractModel> model) {
    if (mBlames == null) {
        return;/*from  w  w  w . ja va  2 s. c  o m*/
    }

    final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT,
            AndroidHelper.getCurrentLocale(mContext));

    if (mBlames.first != null) {
        for (BlameInfo blame : mBlames.first) {
            int start = 0;
            for (RangeInfo range : blame.ranges) {
                Pair<Integer, DiffInfoModel> p = findDiffModelByLine(model, range.start, start, true);
                if (p != null) {
                    start = p.first;
                    String commit = Formatter.toShortenCommit(blame.id);
                    String date = df.format(new Date(blame.time * 1000L)); //Unix time
                    p.second.blameA = mContext.getString(R.string.blame_format, commit, date, blame.author);
                }
            }
        }
    }

    if (mBlames.second != null) {
        for (BlameInfo blame : mBlames.second) {
            int start = 0;
            for (RangeInfo range : blame.ranges) {
                Pair<Integer, DiffInfoModel> p = findDiffModelByLine(model, range.start, start, false);
                if (p != null) {
                    start = p.first;
                    String commit = Formatter.toShortenCommit(blame.id);
                    String date = df.format(new Date(blame.time * 1000L)); //Unix time
                    p.second.blameB = mContext.getString(R.string.blame_format, commit, date, blame.author);
                }
            }
        }
    }
}

From source file:org.dbgl.gui.MainWindow.java

private void setTableItem(final TableItem newItemTableItem, final DosboxVersion dbversion) {
    newItemTableItem.setText(0, dbversion.getTitle());
    newItemTableItem.setText(1, dbversion.getVersion());
    newItemTableItem.setText(2, dbversion.getPath());
    newItemTableItem.setText(3, dbversion.isDefaultString());
    newItemTableItem.setText(4, String.valueOf(dbversion.getId()));
    newItemTableItem.setText(5, Settings.toString(dbversion.getStats().getCreated(), DateFormat.SHORT));
    newItemTableItem.setText(6, Settings.toString(dbversion.getStats().getModified(), DateFormat.SHORT));
    newItemTableItem.setText(7, Settings.toString(dbversion.getStats().getLastrun(), DateFormat.SHORT));
    newItemTableItem.setText(8, String.valueOf(dbversion.getStats().getRuns()));
}

From source file:org.dbgl.gui.MainWindow.java

private void setTableItem(final TableItem newItemTableItem, final Template template) {
    newItemTableItem.setText(0, template.getTitle());
    newItemTableItem.setText(1, template.isDefaultString());
    newItemTableItem.setText(2, String.valueOf(template.getId()));
    newItemTableItem.setText(3, Settings.toString(template.getStats().getCreated(), DateFormat.SHORT));
    newItemTableItem.setText(4, Settings.toString(template.getStats().getModified(), DateFormat.SHORT));
    newItemTableItem.setText(5, Settings.toString(template.getStats().getLastrun(), DateFormat.SHORT));
    newItemTableItem.setText(6, String.valueOf(template.getStats().getRuns()));
}

From source file:org.wso2.carbon.registry.app.RegistryAdapter.java

private ResponseContext processLogsRequest(RequestContext request, String path) {
    Map<String, String> parameters = parseQueryString(request.getUri().getQuery());
    String user = parameters.get("user");
    Date fromDate = null;//from  ww  w . j  a va2 s  .c om
    Date toDate = null;
    String recentParam = parameters.get("recentFirst");

    DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
    String dateStr = parameters.get("from");
    if (dateStr != null) {
        try {
            fromDate = format.parse(dateStr);
        } catch (ParseException e) {
            return new EmptyResponseContext(400, "Bad 'from' date format '" + dateStr + "'");
        }
    }
    dateStr = parameters.get("to");
    if (dateStr != null) {
        try {
            toDate = format.parse(dateStr);
        } catch (ParseException e) {
            return new EmptyResponseContext(400, "Bad 'to' date format '" + dateStr + "'");
        }
    }
    boolean recentFirst = recentParam == null || recentParam.equals("true");
    int action = -1;
    LogEntry[] logs;
    try {
        final Registry reg = getSecureRegistry(request);
        logs = reg.getLogs(path, action, user, fromDate, toDate, recentFirst);
    } catch (RegistryException e) {
        return new StackTraceResponseContext(e);
    }
    String uri = request.getUri().toString();
    int colonIdx = uri.indexOf(':');
    if (colonIdx > -1 && uri.length() > colonIdx + 1) {
        int entryIdx;
        try {
            entryIdx = Integer.parseInt(uri.substring(colonIdx + 1));
        } catch (NumberFormatException e) {
            return new EmptyResponseContext(400, "Bad log entry id '" + uri.substring(colonIdx + 1) + "'");
        }
        if (entryIdx < 0 || entryIdx > logs.length - 1) {
            return new EmptyResponseContext(400, "Bad log entry id '" + entryIdx + "'");
        }
        LogEntry logentry = logs[logs.length - 1 - entryIdx];
        Entry entry = factory.newEntry();
        entry.setUpdated(new Date());
        entry.setId("http://wso2.org/jdbcregistry,2007:logs:" + entryIdx);
        entry.setTitle(logentry.getTitle());
        entry.setEdited(logentry.getDate());
        entry.setContentAsHtml(logentry.getText());
        entry.addAuthor(logentry.getUserName());
        entry.addSimpleExtension(new QName(APPConstants.NAMESPACE, "action"), "" + logentry.getAction());
        entry.addSimpleExtension(new QName(APPConstants.NAMESPACE, APPConstants.PARAMETER_PATH),
                logentry.getResourcePath());
        try {
            return buildGetEntryResponse(request, entry);
        } catch (ResponseContextException e) {
            return createErrorResponse(e);
        }

    }
    Feed feed = factory.newFeed();
    feed.setId("http://wso2.org/jdbcregistry,2007:logs");
    feed.setTitle("Logs for the resource " + path);
    feed.addLink("", Link.REL_SELF);
    feed.setUpdated(new Date());
    int count = logs.length - 1;
    for (LogEntry logentry : logs) {
        Entry entry = factory.newEntry();
        entry.setTitle(logentry.getTitle());
        entry.addLink((request.getUri() + ":" + count).replaceAll(" ", "+"));
        count--;
        entry.setEdited(logentry.getDate());
        entry.setContentAsHtml(logentry.getText());
        entry.addAuthor(logentry.getUserName());
        entry.addSimpleExtension(new QName(APPConstants.NAMESPACE, "action"), "" + logentry.getAction());
        entry.addSimpleExtension(new QName(APPConstants.NAMESPACE, APPConstants.PARAMETER_PATH),
                logentry.getResourcePath());
        feed.addEntry(entry);
    }
    return buildResponseContextFromFeed(feed);
}

From source file:org.openmrs.web.controller.person.PersonFormController.java

/**
 * Add the given name, gender, and birthdate/age to the given Person
 * /*from  w ww.jav  a  2 s.co  m*/
 * @param <P> Should be a Patient or User object
 * @param person
 * @param name
 * @param gender
 * @param date birthdate
 * @param age
 */
public static <P extends Person> void getMiniPerson(P person, String name, String gender, String date,
        String age) {

    person.addName(Context.getPersonService().parsePersonName(name));

    person.setGender(gender);
    Date birthdate = null;
    boolean birthdateEstimated = false;
    if (StringUtils.isNotEmpty(date)) {
        try {
            // only a year was passed as parameter
            if (date.length() < 5) {
                Calendar c = Calendar.getInstance();
                c.set(Calendar.YEAR, Integer.valueOf(date));
                c.set(Calendar.MONTH, 0);
                c.set(Calendar.DATE, 1);
                birthdate = c.getTime();
                birthdateEstimated = true;
            }
            // a full birthdate was passed as a parameter
            else {
                birthdate = Context.getDateFormat().parse(date);
                birthdateEstimated = false;
            }
        } catch (ParseException e) {
            log.debug("Error getting date from birthdate", e);
        }
    } else if (age != null && !"".equals(age)) {
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        Integer d = c.get(Calendar.YEAR);
        d = d - Integer.parseInt(age);
        try {
            birthdate = DateFormat.getDateInstance(DateFormat.SHORT).parse("01/01/" + d);
            birthdateEstimated = true;
        } catch (ParseException e) {
            log.debug("Error getting date from age", e);
        }
    }
    if (birthdate != null) {
        person.setBirthdate(birthdate);
    }
    person.setBirthdateEstimated(birthdateEstimated);

}

From source file:com.rogchen.common.xml.UtilDateTime.java

/**
 * Returns an initialized DateFormat object.
 *
 * @param dateFormat optional format string
 * @param tz/* w  ww .  j av a2 s .c om*/
 * @param locale can be null if dateFormat is not null
 * @return DateFormat object
 */
public static DateFormat toDateFormat(String dateFormat, TimeZone tz, Locale locale) {
    DateFormat df = null;
    if (dateFormat == null) {
        df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    } else {
        df = new SimpleDateFormat(dateFormat);
    }
    df.setTimeZone(tz);
    return df;
}