Package pl.net.bluesoft.rnd.processtool.ui.basewidgets

Source Code of pl.net.bluesoft.rnd.processtool.ui.basewidgets.LatestProcessCommentsWidget

package pl.net.bluesoft.rnd.processtool.ui.basewidgets;

import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.ui.*;
import pl.net.bluesoft.rnd.processtool.model.BpmTask;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.processdata.ProcessComment;
import pl.net.bluesoft.rnd.processtool.model.processdata.ProcessComments;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolDataWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolVaadinRenderable;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.*;
import pl.net.bluesoft.rnd.processtool.ui.widgets.impl.BaseProcessToolVaadinWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.impl.BaseProcessToolWidget;
import pl.net.bluesoft.util.lang.FormatUtil;

import java.util.*;

import static pl.net.bluesoft.rnd.processtool.ui.basewidgets.ProcessHistoryWidget.label;

@AliasName(name = "LatestComments")
@AperteDoc(humanNameKey="widget.latest_process_comments.name", descriptionKey="widget.latest_process_comments.description")
@ChildrenAllowed(false)
public class LatestProcessCommentsWidget extends BaseProcessToolVaadinWidget implements ProcessToolVaadinRenderable, ProcessToolDataWidget {
  @AutoWiredProperty(required = false)
  @AperteDoc(humanNameKey="widget.latest_process_comments.property.displayed_comments.name", descriptionKey="widget.latest_process_comments.property.displayed_comments.description")
  private int displayedComments = 1;

    public static final String MODE_DEFAULT = "DEFAULT";
    public static final String MODE_SMART = "SMART";

    @AutoWiredProperty(required = false)
    private String mode = MODE_DEFAULT;

    private boolean showContent = true;

    private BeanItemContainer<ProcessComment> bic = new BeanItemContainer<ProcessComment>(ProcessComment.class);

    @Override
  public void loadData(BpmTask task) {
        ProcessInstance pi = task.getProcessInstance().getRootProcessInstance();

        if (mode.equalsIgnoreCase(MODE_SMART)) {
            if (!"true".equalsIgnoreCase(pi.getSimpleAttributeValue("commentAdded", "false"))) {
                showContent = false;
            }
        }

        bic.removeAllItems();
    ProcessComments comments = pi.findAttributeByClass(ProcessComments.class);
        if (comments != null) {
            List<ProcessComment> lst = new ArrayList<ProcessComment>(comments.getComments());
            Collections.sort(lst, new Comparator<ProcessComment>() {
                @Override
                public int compare(ProcessComment o1, ProcessComment o2) {
                    return o2.getCreateTime().compareTo(o1.getCreateTime());
                }
            });
            for (int i = 0; i < displayedComments && i < lst.size(); ++i) {
                bic.addBean(lst.get(i));
            }
        }
    }

    @Override
    public Component render() {
        if (!showContent) {
            return null;
        }

        Panel commentsPanel = new Panel();
        commentsPanel.setStyleName("borderless light");
        commentsPanel.setWidth("100%");

        VerticalLayout layout = new VerticalLayout();
        layout.removeAllComponents();
        layout.setSpacing(true);

        if (bic.getItemIds().isEmpty()) {
            Label l = new Label(getMessage("processdata.comments.empty"));
            l.setWidth("100%");
            layout.addComponent(l);
        }
        else {
      boolean first = true;
            for (ProcessComment pc : bic.getItemIds()) {
        VerticalLayout vl = new VerticalLayout();

                HorizontalLayout hl;
                hl = new HorizontalLayout();
                hl.setSpacing(true);
                String authorLabel = pc.getAuthor() != null ? pc.getAuthor().getRealName() : "System";
                if (pc.getAuthorSubstitute() != null) {
                    authorLabel = (pc.getAuthorSubstitute() != null ? pc.getAuthorSubstitute().getRealName() : "System")
                                + " ( " + getMessage("processdata.comments.substituting") + " "
                                + authorLabel
                                + " )";
                }
                hl.addComponent(label("<b>" + authorLabel + "</b>", 150));
                hl.addComponent(label("<b>" + FormatUtil.formatFullDate(pc.getCreateTime()) + "</b>", 150));
        //                hl.addComponent(label(pc.getComment(), 450));
                vl.addComponent(hl);

                hl = new HorizontalLayout();
                hl.setWidth("100%");
                hl.setSpacing(true);
                hl.setMargin(new Layout.MarginInfo(false, false, true, true));
                Label l = new Label(pc.getBody(), Label.CONTENT_XHTML);
                l.setWidth("100%");
                hl.addComponent(l);
                hl.setExpandRatio(l, 1.0f);
                vl.addComponent(hl);

        if (first) {
          vl.addStyleName("latest-comment-indication");
          first = false;
        }
        layout.addComponent(vl);
            }
        }

        commentsPanel.setContent(layout);

        return commentsPanel;
    }

    @Override
    public boolean hasVisibleData() {
        return !bic.getItemIds().isEmpty();
    }

    @Override
  public void saveData(BpmTask task) {
    }

    @Override
  public Collection<String> validateData(BpmTask task, boolean skipRequired) {
        return null;
    }

    @Override
    public void addChild(ProcessToolWidget child) {
        throw new IllegalArgumentException("children are not supported in this widget");
    }

    public Integer getDisplayedComments() {
        return displayedComments;
    }

    public void setDisplayedComments(Integer displayedComments) {
        this.displayedComments = displayedComments;
    }

    public String getMode() {
        return mode;
    }

    public void setMode(String mode) {
        this.mode = mode;
    }
}
TOP

Related Classes of pl.net.bluesoft.rnd.processtool.ui.basewidgets.LatestProcessCommentsWidget

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.