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.RuleFailure;
import ch.hortis.sonar.model.Snapshot;
import ch.hortis.sonar.service.MeasureKey;

import java.math.BigDecimal;
import java.math.RoundingMode;
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 javax.persistence.EntityManager;

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

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

  protected Module(Snapshot s, EntityManager manager) {
    this.manager = manager;
    snapshot = s;
    measuresByKey = new HashMap<MeasureKey, MetricMeasure>(snapshot.getFileMeasures().size());
    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());
    }
    measure.setSnapshot(snapshot);

    if (measure instanceof ProjectMeasure) {
      snapshot.getProjectMeasures().add((ProjectMeasure) measure);
      manager.persist(measure);
      measuresByKey.put(key, measure);
    } else if (measure instanceof FileMeasure) {
      snapshot.getFileMeasures().add((FileMeasure) measure);
      manager.persist(measure);
      measuresByKey.put(key, measure);
    } else if (measure instanceof ProjectTendency) {
      snapshot.getTendencies().add((ProjectTendency) measure);
      manager.persist(measure);
    } else {
      throw new RuntimeException("Unknown measure type " + measure.getClass().getName());
    }
  }

  public final List<MeasureKey> getMeasureKeys() {
    List<MeasureKey> keys = new ArrayList<MeasureKey>(measuresByKey.size());
    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.