@Override
 public void errorOccurs(Reachable reachable, Throwable t) {
   for (IBuildingDecoration d : decorations) {
     d.errorOccurs(this, reachable, t);
   }
   callBack.errorOccurs(reachable, t);
 }
 @Override
 public void endBuild(Reachable reachable) {
   for (IBuildingDecoration d : decorations) {
     d.endBuild(this, reachable);
   }
   callBack.endBuild(reachable);
 }
  @Override
  public void newUpwardRelation(
      Object traceability,
      Object resource,
      Object source,
      List<? extends Object> targets,
      TType kind) {
    String check = "arguments must be different to null";
    Preconditions.checkNotNull(resource, check);
    Preconditions.checkNotNull(source, check);
    Preconditions.checkNotNull(targets, check);
    Preconditions.checkNotNull(kind, check);
    boolean keepOriginalLink = true;
    for (IBuildingDecoration d : decorations) {
      keepOriginalLink &= d.newUpwardRelation(this, traceability, resource, source, targets, kind);
    }
    if (keepOriginalLink) {
      Composite c = getComposite(traceability, resource, source, targets, kind);

      callBack.newUpwardRelation(c.traceabilityObject, c.resource, c.source, c.targets, c.kind);
    }
  }
 @Override
 public boolean newUpwardRelation(
     IBuilderCallBack callBack,
     Object traceability,
     Object resource,
     Object source,
     List<? extends Object> targets,
     TType kind) {
   if (kind instanceof RelationBasedType) {
     // prevent recursive call
     return true;
   }
   // in case of no configuration registered the elements are not modified
   if (defaultConfiguration == null) {
     return true;
   }
   Reachable reachableSource = getReachable(source);
   Reachable reachableTrac = getReachable(traceability);
   boolean newOne = true;
   for (Object t : targets) {
     Reachable reachableTarget = getReachable(t);
     Iterable<Relation> relations =
         RelationUtils.getAgregatingRelations(
             kind, defaultConfiguration, reachableSource, reachableTarget, DIRECTION.UPWARD);
     for (Relation r : relations) {
       newOne = false;
       RelationBasedType relBasedType = new RelationBasedType(r, kind);
       callBack.newUpwardRelation(traceability, resource, source, targets, relBasedType);
       if (currentStorage != null) {
         currentStorage.addUpdateProperty(
             reachableTrac, TraceabilityAttributesManager.RELATION_NAME, r.getKind());
       }
     }
   }
   return newOne;
 }
 @Override
 public boolean needsBuild(Reachable reachable) {
   return callBack.needsBuild(reachable);
 }