Test coverage report for MetricProcedureCount.java - www.sdmetrics.com

  1. /*
  2.  * SDMetrics Open Core for UML design measurement
  3.  * Copyright (c) Juergen Wuest
  4.  * To contact the author, see <http://www.sdmetrics.com/Contact.html>.
  5.  *
  6.  * This file is part of the SDMetrics Open Core.
  7.  *
  8.  * SDMetrics Open Core is free software: you can redistribute it and/or modify
  9.  * it under the terms of the GNU Affero General Public License as
  10.  * published by the Free Software Foundation, either version 3 of the
  11.  * License, or (at your option) any later version.
  12.    
  13.  * SDMetrics Open Core is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU Affero General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Affero General Public License
  19.  * along with SDMetrics Open Core.  If not, see <http://www.gnu.org/licenses/>.
  20.  *
  21.  */
  22. package com.sdmetrics.metrics;

  23. import java.util.Collection;

  24. import com.sdmetrics.math.ExpressionNode;
  25. import com.sdmetrics.model.ModelElement;

  26. /**
  27.  * Calculates the deprecated "count" metric procedure.
  28.  * <p>
  29.  * Counts are now just a special case of projections, using the principal
  30.  * element in the condition expression.
  31.  */
  32. public class MetricProcedureCount extends MetricProcedure {

  33.     @Override
  34.     public Integer calculate(ModelElement element, Metric metric)
  35.             throws SDMetricsException {
  36.         ProcedureAttributes attributes = metric.getAttributes();
  37.         Variables vars = new Variables(element);
  38.         Object term = evalExpression(element,
  39.                 attributes.getRequiredExpression("term"), vars);
  40.         vars.setVariable("term", term);
  41.         Collection<ModelElement> set = evalElementSetExpression(element,
  42.                 attributes.getRequiredExpression("set"), vars);
  43.         if (set.isEmpty()) {
  44.             return MetricTools.ZERO;
  45.         }

  46.         FilterAttributeProcessor fap = getFilterAttributeProcessor(attributes);
  47.         ExpressionNode relset = attributes.getExpression("relset");
  48.         if (relset == null) {
  49.             return Integer.valueOf(MetricTools.elementCount(set, term));
  50.         }
  51.         int result = 0;
  52.         vars.setVariable("set", set);

  53.         // Iterate elements in the result set
  54.         for (ModelElement elem : fap.validIteration(set, vars)) {
  55.             Collection<?> c = evalSetExpression(elem, relset, vars);
  56.             result += MetricTools.elementCount(c, term);
  57.         }
  58.         return Integer.valueOf(result);
  59.     }
  60. }