HtmlLister.java :  » Messenger » linksender » com » mrroman » linksender » filesender » server » Java Open Source

Java Open Source » Messenger » linksender 
linksender » com » mrroman » linksender » filesender » server » HtmlLister.java
package com.mrroman.linksender.filesender.server;

import com.mrroman.linksender.filesender.sendables.Sendable;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Comparator;

public class HtmlLister extends InputStream {

    private Sendable sendable;
    private Comparator<Sendable> comparator;

    public HtmlLister(Sendable sendable) {
        super();
        this.sendable = sendable;
        comparator = new Comparator<Sendable>() {

            @Override
            public int compare(Sendable f1, Sendable f2) {
                boolean children1 = f1.hasChildren();
                boolean children2 = f2.hasChildren();
                return (children1 ^ children2) ? (children1 ? -1 : 1) : f1.toString().toLowerCase().compareTo(f2.toString().toLowerCase());
            }
        };
    }

    public String getHtmlList(Sendable... elements) {
        if (elements == null) {
            return null;
        }
        Arrays.sort(elements, comparator);
        StringBuilder listBuffer = new StringBuilder();
        listBuffer.append("<ul class=\"ls\">");
        for (Sendable f : elements) {
            if ((f.getAttributes() & Sendable.ATTR_HIDDEN) == 0) {
                listBuffer.append("<li>");
                boolean dir = f.hasChildren();
                //String href = EncodingTools.urlEncodeUTF(f.toString()) + (dir ? "/" : "");
                String href = f.toString() + (dir ? "/" : "");
                String s = dir ? "[" + f.toString() + "]" : f.toString();
                listBuffer.append(String.format("<a class=\"" + (dir ? "dir" : "file") + "\" href=\"%1$s\">%2$s", href, s));
                long len = f.getContentLength();
                if (len > 0) {
                    listBuffer.append(" <span class=\"size\">(" + String.format("%.02f MB", (double) len / (1024 * 1024)) + ")</span>");
                }
                listBuffer.append("</a></li>");
                listBuffer.append("\n");
            }
        }
        listBuffer.append("</ul>");
        return listBuffer.toString();
    }

    private String getHtmlList() {
        Sendable[] elements = sendable.getChildren();
        return getHtmlList(elements);
    }
    byte[] htmlListBuffer = null;
    int htmlListBufferPos = 0;

    @Override
    public int read() throws IOException {
        if (htmlListBuffer == null) {
            htmlListBuffer = getHtmlList().getBytes("UTF-8");
        }
        if (htmlListBufferPos >= htmlListBuffer.length) {
            return -1;
        } else {
            return htmlListBuffer[htmlListBufferPos++];
        }
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.