package de.unioninvestment.eai.portal.support.vaadin; import com.google.common.base.Strings; import com.vaadin.server.BootstrapFragmentResponse; import com.vaadin.server.BootstrapListener; import com.vaadin.server.BootstrapPageResponse; import org.jsoup.nodes.Element; import org.jsoup.nodes.Node; import java.util.List; import java.util.ResourceBundle; /** * Created by cmj on 10.10.14. */ public class LoadingIndicatorBootstrapListener implements BootstrapListener { @Override public void modifyBootstrapPage(BootstrapPageResponse response) { } @Override public void modifyBootstrapFragment(BootstrapFragmentResponse response) { String message = getMessage(response); if (!Strings.isNullOrEmpty(message)) { List<Node> nodes = response.getFragmentNodes(); for(Node node : nodes) { if (isMainDiv(node)) { addLoadingIndicator((Element) node, message); } } } } public String getMessage(BootstrapFragmentResponse response) { ResourceBundle messages = ResourceBundle.getBundle("de.unioninvestment.eai.portal.portlet.crud.messages", response.getRequest().getLocale()); return messages.getString("portlet.crud.loadingindicator.text"); } public boolean isMainDiv(Node node) { return node instanceof Element && node.nodeName().equals("div") && node.hasAttr("class") && node.attr("class").contains("v-app"); } public void addLoadingIndicator(Element mainDiv, String message) { mainDiv.appendElement("div").addClass("loadingindicator").text(message); } }