001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2011 SonarSource
004     * mailto:contact AT sonarsource DOT com
005     *
006     * Sonar is free software; you can redistribute it and/or
007     * modify it under the terms of the GNU Lesser General Public
008     * License as published by the Free Software Foundation; either
009     * version 3 of the License, or (at your option) any later version.
010     *
011     * Sonar is distributed in the hope that it will be useful,
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014     * Lesser General Public License for more details.
015     *
016     * You should have received a copy of the GNU Lesser General Public
017     * License along with Sonar; if not, write to the Free Software
018     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019     */
020    package org.sonar.plugins.design.ui.lcom4.client;
021    
022    import com.google.gwt.i18n.client.Dictionary;
023    import com.google.gwt.user.client.ui.*;
024    import org.sonar.gwt.ui.Icons;
025    import org.sonar.gwt.ui.Loading;
026    import org.sonar.gwt.ui.Page;
027    import org.sonar.wsclient.gwt.AbstractCallback;
028    import org.sonar.wsclient.gwt.Sonar;
029    import org.sonar.wsclient.services.Resource;
030    import org.sonar.wsclient.services.ResourceQuery;
031    
032    public class Lcom4Tab extends Page {
033      public static final String GWT_ID = "org.sonar.plugins.design.ui.lcom4.Lcom4Tab";
034    
035      private VerticalPanel panel;
036    
037      @Override
038      protected Widget doOnResourceLoad(Resource resource) {
039        panel = new VerticalPanel();
040        panel.setWidth("100%");
041        loadData(resource);
042        return panel;
043      }
044    
045      private void loadData(Resource resource) {
046        panel.add(new Loading());
047        ResourceQuery query = ResourceQuery.createForMetrics(resource.getId().toString(), "lcom4", "lcom4_blocks");
048        Sonar.getInstance().find(query, new AbstractCallback<Resource>() {
049          @Override
050          protected void doOnResponse(Resource resource) {
051            panel.clear();
052            panel.add(new Header(resource));
053            if (resource != null && resource.getMeasure("lcom4_blocks") != null) {
054              String json = resource.getMeasure("lcom4_blocks").getData();
055              Data.Blocks blocks = Data.parse(json);
056    
057              Grid grid = new Grid(blocks.size(), 2);
058              grid.setStyleName("lcom4blocks");
059              grid.getColumnFormatter().setStyleName(0, "index");
060              
061              for (int indexBlock = 0; indexBlock < blocks.size(); indexBlock++) {
062                Data.Block block = blocks.get(indexBlock);
063                grid.setHTML(indexBlock, 0, "<div class='index'>" + (indexBlock + 1) + "</div>");
064    
065                VerticalPanel blockPanel = new VerticalPanel();
066                blockPanel.setStyleName("lcom4block");
067    
068                for (int indexEntity = 0; indexEntity < block.size(); indexEntity++) {
069                  Data.Entity entity = block.get(indexEntity);
070                  HTML row = new HTML(Icons.forQualifier(entity.getQualifier()).getHTML() + " " + entity.getName());
071                  row.setStyleName("lcom4row");
072                  blockPanel.add(row);
073                }
074                grid.setWidget(indexBlock, 1, blockPanel);
075    
076              }
077              panel.add(grid);
078            }
079          }
080        });
081      }
082    
083      private static class Header extends Composite {
084        private FlowPanel header;
085    
086        public Header(Resource resource) {
087          header = new FlowPanel();
088          header.setStyleName("gwt-ViewerHeader");
089    
090          HorizontalPanel panel = new HorizontalPanel();
091          HTML html = new HTML(Dictionary.getDictionary("l10n").get("lcom4.metric") + ": ");
092          html.setStyleName("metric");
093          panel.add(html);
094    
095          if (resource != null) {
096            html = new HTML(resource.getMeasureFormattedValue("lcom4", "-"));
097            html.setStyleName("value");
098            panel.add(html);
099          }
100    
101          header.add(panel);
102          initWidget(header);
103        }
104      }
105    }