Package com.psddev.cms.tool.page

Source Code of com.psddev.cms.tool.page.ToolUserHistory

package com.psddev.cms.tool.page;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;

import com.psddev.cms.db.ToolUser;
import com.psddev.cms.db.ToolUserAction;
import com.psddev.cms.db.ToolUserDevice;
import com.psddev.cms.tool.PageServlet;
import com.psddev.cms.tool.ToolPageContext;
import com.psddev.dari.db.Query;
import com.psddev.dari.util.CompactMap;
import com.psddev.dari.util.JspUtils;
import com.psddev.dari.util.RoutingFilter;

@RoutingFilter.Path(application = "cms", value = "toolUserHistory")
@SuppressWarnings("serial")
public class ToolUserHistory extends PageServlet {

    @Override
    protected String getPermissionId() {
        return null;
    }

    @Override
    protected void doService(ToolPageContext page) throws IOException, ServletException {
        ToolUser user = page.getUser();
        Map<String, List<ToolUserDevice>> devicesByUserAgent = new CompactMap<String, List<ToolUserDevice>>();

        for (ToolUserDevice device : Query.
                from(ToolUserDevice.class).
                where("user = ?", user).
                selectAll()) {
            String userAgent = device.getUserAgentDisplay();
            List<ToolUserDevice> devices = devicesByUserAgent.get(userAgent);

            if (devices == null) {
                devices = new ArrayList<ToolUserDevice>();
                devicesByUserAgent.put(userAgent, devices);
            }

            devices.add(device);
        }

        final Map<ToolUserDevice, List<ToolUserAction>> actionsByDevice = new CompactMap<ToolUserDevice, List<ToolUserAction>>();

        for (Map.Entry<String, List<ToolUserDevice>> entry : devicesByUserAgent.entrySet()) {
            ToolUserDevice device = null;
            List<ToolUserAction> actions = null;
            long lastTime = 0;

            for (ToolUserDevice d : entry.getValue()) {
                List<ToolUserAction> a = Query.
                        from(ToolUserAction.class).
                        where("device = ?", d).
                        sortDescending("time").
                        selectAll();

                if (!a.isEmpty()) {
                    long time = a.get(0).getTime();

                    if (lastTime < time) {
                        lastTime = time;
                        device = d;
                        actions = a;
                    }
                }
            }

            if (device != null) {
                actionsByDevice.put(device, actions);
            }
        }

        List<ToolUserDevice> recentDevices = new ArrayList<ToolUserDevice>(actionsByDevice.keySet());

        Collections.sort(recentDevices, new Comparator<ToolUserDevice>() {

            @Override
            public int compare(ToolUserDevice x, ToolUserDevice y) {
                long xTime = actionsByDevice.get(x).get(0).getTime();
                long yTime = actionsByDevice.get(y).get(0).getTime();

                return xTime < yTime ? 1 : (xTime > yTime ? -1 : 0);
            }
        });

        page.writeHeader();
            page.writeStart("div", "class", "widget", "style", "overflow: hidden;");
                page.writeStart("h1", "class", "icon icon-object-history");
                    page.writeHtml("History");
                page.writeEnd();

                page.writeStart("div", "class", "tabbed");
                    for (ToolUserDevice device : recentDevices) {
                        List<ToolUserAction> actions = actionsByDevice.get(device);
                        String lookingGlassUrl = page.cmsUrl("/lookingGlass", "id", device.getOrCreateLookingGlassId());

                        page.writeStart("div", "data-tab", device.getUserAgentDisplay());
                            page.writeStart("div", "style", page.cssString(
                                    "float", "right",
                                    "text-align", "center"));
                                page.writeStart("a",
                                        "class", "icon icon-facetime-video",
                                        "target", "_blank",
                                        "href", lookingGlassUrl);
                                    page.writeHtml("Looking Glass");
                                page.writeEnd();

                                page.writeElement("br");

                                page.writeElement("img",
                                        "width", 150,
                                        "height", 150,
                                        "src", page.cmsUrl("qrCode",
                                                "data", JspUtils.getAbsoluteUrl(page.getRequest(), lookingGlassUrl),
                                                "size", 150));
                            page.writeEnd();

                            page.writeStart("ul",
                                    "class", "links",
                                    "style", page.cssString("margin-right", "150px"));
                                for (ToolUserAction action : actions) {
                                    Object actionContent = action.getContent();

                                    if (actionContent == null) {
                                        continue;
                                    }

                                    page.writeStart("li");
                                        page.writeStart("a",
                                                "target", "_top",
                                                "href", page.objectUrl("/content/edit.jsp", actionContent));
                                            page.writeTypeObjectLabel(actionContent);
                                        page.writeEnd();
                                    page.writeEnd();
                                }
                            page.writeEnd();
                        page.writeEnd();
                    }
                page.writeEnd();
            page.writeEnd();
        page.writeFooter();
    }
}
TOP

Related Classes of com.psddev.cms.tool.page.ToolUserHistory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.