/** {@inheritDoc} */
  public void decorate(Resource resource, DecoratorContext context) {

    if (ResourceUtils.isProject(resource)) {

      Collection<Measure> childMeasures =
          context.getChildrenMeasures(CodesizeMetrics.CODE_COUNTERS);

      if (!childMeasures.isEmpty()) {
        Measure projectMeasure = context.getMeasure(CodesizeMetrics.CODE_COUNTERS);
        final PropertiesBuilder<String, Integer> counters =
            new PropertiesBuilder<String, Integer>(CodesizeMetrics.CODE_COUNTERS);
        if (projectMeasure != null) {
          Map<String, Integer> map = KeyValueFormat.parseStringInt(projectMeasure.getData());
          counters.addAll(map);
        }

        for (Measure childMeasure : childMeasures) {
          Map<String, Integer> childcounters =
              KeyValueFormat.parseStringInt(childMeasure.getData());
          for (Entry<String, Integer> entry : childcounters.entrySet()) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            if (counters.getProps().containsKey(key)) {
              counters.add(key, value + counters.getProps().get(key));
            } else {
              counters.add(key, value);
            }
          }
        }

        if (projectMeasure != null) {
          projectMeasure.setData(counters.buildData());
        } else {
          context.saveMeasure(counters.build());
        }
      }
    }
  }