001    package org.sonar.api.web.gwt.client.widgets;
002    
003    import com.google.gwt.user.client.ui.ClickListener;
004    import com.google.gwt.user.client.ui.Hyperlink;
005    import com.google.gwt.user.client.ui.Widget;
006    
007    public class ExpandCollapseLink extends Hyperlink {
008    
009      private Widget expandOrCollapse;
010    
011      public ExpandCollapseLink(Widget expandOrCollapse) {
012        super();
013        this.expandOrCollapse = expandOrCollapse;
014        setText(getLinkLabel(!expandOrCollapse.isVisible()));
015        getElement().setId("expand-" + expandOrCollapse.getElement().getId());
016        setStyleName("expandCollapseLink");
017        final ExpandCollapseLink link = this;
018        this.addClickListener(new ClickListener() {
019          public void onClick(Widget sender) {
020            link.toggle();
021          }
022        });
023        getElement().getFirstChildElement().setAttribute("href", "#");
024      }
025    
026      public void toggle() {
027        boolean visible = expandOrCollapse.isVisible();
028        setText(getLinkLabel(visible));
029        expandOrCollapse.setVisible(!visible);
030      }
031    
032      protected String getLinkLabel(boolean show) {
033        return (show ? "expand" : "collapse");
034      }
035    
036    }