001package com.ganteater.ae.desktop.view;
002
003import java.awt.BorderLayout;
004import java.awt.Color;
005import java.util.Properties;
006
007import javax.swing.JEditorPane;
008import javax.swing.JScrollPane;
009
010import org.apache.commons.lang.ObjectUtils;
011
012import com.ganteater.ae.AEManager;
013import com.ganteater.ae.desktop.ui.HyperlinkAdapter;
014import com.ganteater.ae.desktop.ui.JParsedown;
015import com.ganteater.ae.processor.annotation.CommandDescription;
016
017@CommandDescription("`Markdown` View Type example:\n"
018                + "\n"
019                + "```xml\n"
020                + "<View name=\"mdView\" reuse=\"false\" type=\"Markdown\" />\n"
021                + "<Out view=\"mdView\">\n"
022                + "# Title\n"
023                + "## Section\n\n"
024                + "- Item 1\n"
025                + "- Item 2\n"
026                + "- Item 3\n"
027                + "</Out>\n"
028                + "```")
029public class Markdown extends View {
030
031        private static final long serialVersionUID = 1L;
032        private String fFrameId = null;
033        private String fTitle = "";
034        private JEditorPane displayEditorPane = null;
035
036        private boolean append;
037
038        private StringBuilder content = new StringBuilder();
039
040        public void init(Properties params, AEManager manager) {
041                super.init(params, manager);
042
043                append = Boolean.valueOf(params.getProperty("append", "false"));
044
045                displayEditorPane = new JEditorPane();
046                displayEditorPane.setContentType("text/html");
047                displayEditorPane.setEditable(false);
048                displayEditorPane.addHyperlinkListener(new HyperlinkAdapter(manager));
049
050                add(new JScrollPane(displayEditorPane), BorderLayout.CENTER);
051        }
052
053        public String getFrameId() {
054                return fFrameId;
055        }
056
057        public String getTitle() {
058                return fTitle;
059        }
060
061        @Override
062        public void out(Object value, Properties properties) {
063                String text = new JParsedown().text(ObjectUtils.toString(value));
064
065                if (displayEditorPane != null) {
066                        StringBuilder output = new StringBuilder("<html><body>");
067                        output.append(text);
068                        output.append("</body></html>");
069                        displayEditorPane.setText(output.toString());
070                }
071        }
072
073        @Override
074        public void setEnabled(boolean enabled) {
075                setBackground(Color.lightGray);
076                super.setEnabled(enabled);
077        }
078
079}