Package ch.hortis.sonar.core.service

Source Code of ch.hortis.sonar.core.service.Module

/*
* This program is copyright (c) 2007 Hortis-GRC SA.
*
* This file is part of Sonar.
* Sonar is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Sonar is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
package ch.hortis.sonar.core.service;

import ch.hortis.sonar.model.File;
import ch.hortis.sonar.model.FileMeasure;
import ch.hortis.sonar.model.MavenProject;
import ch.hortis.sonar.model.MetricMeasure;
import ch.hortis.sonar.model.ProjectMeasure;
import ch.hortis.sonar.model.ProjectTendency;
import ch.hortis.sonar.model.Snapshot;
import ch.hortis.sonar.model.RuleFailure;
import ch.hortis.sonar.service.MeasureKey;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.math.RoundingMode;

public class Module {
  private Snapshot snapshot;
  private Map<MeasureKey, MetricMeasure> measuresByKey;
  private List<RuleFailure> ruleFailures;

  protected Module(List<File> files) {
    // for tests
    snapshot = new Snapshot();
    measuresByKey = new HashMap<MeasureKey, MetricMeasure>();
    ruleFailures = new ArrayList<RuleFailure>();
    snapshot.setFiles(files);
  }

  protected Module(Snapshot s) {
    snapshot = s;
    measuresByKey = new HashMap<MeasureKey, MetricMeasure>();
    for (FileMeasure measure : snapshot.getFileMeasures()) {
      MeasureKey key = new MeasureKey(measure);
      measuresByKey.put(key, measure);
    }
    for (ProjectMeasure measure : snapshot.getProjectMeasures()) {
      MeasureKey key = new MeasureKey(measure);
      measuresByKey.put(key, measure);
    }
    ruleFailures = Collections.unmodifiableList(snapshot.getRuleFailures());
  }
 
  public MavenProject getMavenProject() {
    return snapshot.getMavenProject();
  }
 
  public Date getCreatedAt() {
    return snapshot.getCreatedAt();
  }

  public Integer getId() {
    return snapshot.getId();
  }

  public void createMeasure(MeasureKey key, Double value) {
    MetricMeasure measure;
    Double roundedValue = roundUp(value);
    if (key.getFile()==null) {
      measure = new ProjectMeasure(snapshot, key.getMetric(), roundedValue);
    } else {
      measure = new FileMeasure(snapshot, key.getMetric(), roundedValue, key.getFile());
    }
    createMeasure( measure, key );
  }
 
  public void createTendency(MeasureKey key, Double value, Integer level, int days) {
    Double roundedValue = roundUp(value);
    MetricMeasure measure = new ProjectTendency(snapshot, key.getMetric(), roundedValue, level, days);
    createMeasure( measure, key );
  }
 
  private void createMeasure(MetricMeasure measure, MeasureKey key) {
    if (key.getRule() != null) {
      measure.setRule(key.getRule());
      measure.setRulesCategory(key.getRule().getRulesCategory());

    } else if (key.getRulesCategory() != null) {
      measure.setRulesCategory(key.getRulesCategory());
    }

    if (measure instanceof ProjectMeasure) {
      snapshot.getProjectMeasures().add(0, (ProjectMeasure)measure);
      measuresByKey.put(key, measure);

    } else if ( measure instanceof FileMeasure ) {
      snapshot.getFileMeasures().add(0, (FileMeasure)measure);
      measuresByKey.put(key, measure);

    } else if ( measure instanceof ProjectTendency) {
      snapshot.getTendencies().add(0, (ProjectTendency)measure);

    } else {
      throw new RuntimeException( "Unknown measure type " + measure.getClass().getName() );
    }
  }

  public final List<MeasureKey> getMeasureKeys() {
    List<MeasureKey> keys = new ArrayList<MeasureKey>();
    keys.addAll(measuresByKey.keySet());
    return keys;
  }

  public final MetricMeasure getMeasure(MeasureKey key) {
    return measuresByKey.get(key);
  }

  public final Double getMeasureValue(MeasureKey key) {
    MetricMeasure measure = getMeasure(key);
    if (measure!=null) {
      return measure.getValue();
    }
    return null;
  }

  public final List<RuleFailure> getRuleFailures() {
    return ruleFailures;
  }
 
  public final List<File> getFiles() {
    return snapshot.getFiles();
  }

  protected double roundUp(double d) {
    BigDecimal bd = new BigDecimal(d);
    bd = bd.setScale(2, RoundingMode.HALF_UP);
    return bd.doubleValue();
  }
}
TOP

Related Classes of ch.hortis.sonar.core.service.Module

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.