package com.ubx1.pdpscanner.client.views.project;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.ubx1.pdpscanner.client.GeneralStat;
import com.ubx1.pdpscanner.client.views.AbstractView;
import com.ubx1.pdpscanner.shared.Project;
/**
* The widget for showing how extensive the code is
*
* @author wbraik
*
*/
public class ProjectSizeWidget extends AbstractView {
/**
* The associated Project object
*/
protected Project project = null;
/**
* The current version to display the stats for
*/
private int version;
// View components
private final HorizontalPanel titlePanel = new HorizontalPanel();
private final Label titleLabel = new Label("Taille du projet");
private final Label sourcesLabel = new Label("(d'après JavaNCSS et CLOC)");
private final HorizontalPanel locPanel = new HorizontalPanel();
private final Label locLabel = new Label();
private final Label diffLocLabel = new Label();
private final HorizontalPanel funcPanel = new HorizontalPanel();
private final Label funcLabel = new Label();
private final Label diffFuncLabel = new Label();
private final HorizontalPanel clPanel = new HorizontalPanel();
private final Label clLabel = new Label();
private final Label diffClLabel = new Label();
private final HorizontalPanel filePanel = new HorizontalPanel();
private final Label fileLabel = new Label();
private final Label diffFileLabel = new Label();
private final HorizontalPanel pkgPanel = new HorizontalPanel();
private final Label pkgLabel = new Label();
private final Label diffPkgLabel = new Label();
public ProjectSizeWidget(Project project) {
super(new VerticalPanel());
this.project = project;
this.titleLabel.setStyleDependentName("widgetTitle", true);
this.sourcesLabel.setStyleDependentName("widgetSources", true);
this.diffLocLabel.setStyleDependentName("diff", true);
this.diffFuncLabel.setStyleDependentName("diff", true);
this.diffClLabel.setStyleDependentName("diff", true);
this.diffFileLabel.setStyleDependentName("diff", true);
this.diffPkgLabel.setStyleDependentName("diff", true);
this.viewPanel.setStyleName("projectSizeWidget");
}
public void setVersion(int version) {
this.version = version;
}
@Override
public void buildView() {
locLabel.setText("");
diffLocLabel.setText("");
funcLabel.setText("");
diffFuncLabel.setText("");
clLabel.setText("");
diffClLabel.setText("");
fileLabel.setText("");
diffFileLabel.setText("");
pkgLabel.setText("");
diffPkgLabel.setText("");
fillLabel(GeneralStat.LOC);
fillLabel(GeneralStat.FUNC);
fillLabel(GeneralStat.CL);
fillLabel(GeneralStat.FILE);
fillLabel(GeneralStat.PKG);
fillDiffLabel(GeneralStat.LOC);
fillDiffLabel(GeneralStat.FUNC);
fillDiffLabel(GeneralStat.CL);
fillDiffLabel(GeneralStat.FILE);
fillDiffLabel(GeneralStat.PKG);
locPanel.add(locLabel);
locPanel.add(diffLocLabel);
funcPanel.add(funcLabel);
funcPanel.add(diffFuncLabel);
clPanel.add(clLabel);
clPanel.add(diffClLabel);
pkgPanel.add(pkgLabel);
pkgPanel.add(diffPkgLabel);
filePanel.add(fileLabel);
filePanel.add(diffFileLabel);
titlePanel.add(titleLabel);
titlePanel.add(sourcesLabel);
viewPanel.add(titlePanel);
viewPanel.add(locPanel);
viewPanel.add(funcPanel);
viewPanel.add(clPanel);
viewPanel.add(filePanel);
viewPanel.add(pkgPanel);
}
/**
* Fill the label of a given stat kind
*
* @param s
* the stat kind
*/
private void fillLabel(GeneralStat s) {
Project p = this.project;
int v = this.version;
switch (s) {
case LOC:
locLabel.setText("Lignes de code : "
+ (p.getNloc(v) == -1 ? "--" : p.getNloc(v)));
break;
case FUNC:
funcLabel.setText("Fonctions : "
+ (p.getNfunc(v) == -1 ? "--" : p.getNfunc(v)));
break;
case CL:
clLabel.setText("Classes : "
+ (p.getNcl(v) == -1 ? "--" : p.getNcl(v)));
break;
case PKG:
pkgLabel.setText("Packages : "
+ (p.getNpkg(v) == -1 ? "--" : p.getNpkg(v)));
break;
case FILE:
fileLabel.setText("Fichiers : "
+ (p.getNfile(v) == -1 ? "--" : p.getNfile(v)));
break;
default:
}
}
/**
* Fill the label of a given stat kind for showing the differential with the
* previous version
*
* @param s
* the stat kind
*/
private void fillDiffLabel(GeneralStat s) {
Project p = this.project;
int v = this.version;
// If there is an anterior version
if (v > 1) {
switch (s) {
case LOC:
if (p.getNloc(v) > p.getNloc(v - 1)) {
diffLocLabel.setText("(+)");
} else if (p.getNloc(v) < p.getNloc(v - 1)) {
diffLocLabel.setText("(-)");
}
break;
case FUNC:
if (p.getNfunc(v) > p.getNfunc(v - 1)) {
diffFuncLabel.setText("(+)");
} else if (p.getNfunc(v) < p.getNfunc(v - 1)) {
diffFuncLabel.setText("(-)");
}
break;
case CL:
if (p.getNcl(v) > p.getNcl(v - 1)) {
diffClLabel.setText("(+)");
} else if (p.getNcl(v) < p.getNcl(v - 1)) {
diffClLabel.setText("(-)");
}
break;
case FILE:
if (p.getNfile(v) > p.getNfile(v - 1)) {
diffFileLabel.setText("(+)");
} else if (p.getNfile(v) < p.getNfile(v - 1)) {
diffFileLabel.setText("(-)");
}
break;
case PKG:
if (p.getNpkg(v) > p.getNpkg(v - 1)) {
diffPkgLabel.setText("(+)");
} else if (p.getNpkg(v) < p.getNpkg(v - 1)) {
diffPkgLabel.setText("(-)");
}
break;
default:
}
}
}
}