/**
   * Register a set of transformers in the transform registry associated with this deployment.
   *
   * @param transforms The transforms model.
   * @param failOnError false to eat duplicate exceptions
   * @throws DuplicateTransformerException an existing transformer has already been registered for
   *     the from and to types
   */
  public void registerTransformers(TransformsModel transforms, boolean failOnError)
      throws DuplicateTransformerException {
    if (transforms == null) {
      return;
    }

    try {
      for (TransformModel transformModel : transforms.getTransforms()) {
        Collection<Transformer<?, ?>> transformers = newTransformers(transformModel);
        transformerLoop:
        for (Transformer<?, ?> transformer : transformers) {
          if (_transformerRegistry.hasTransformer(transformer.getFrom(), transformer.getTo())) {
            Transformer<?, ?> registeredTransformer =
                _transformerRegistry.getTransformer(transformer.getFrom(), transformer.getTo());
            boolean test = false;
            testLoop:
            for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
              if (ste.getClassName().startsWith("org.switchyard.test.")) {
                test = true;
                break testLoop;
              }
            }
            String msg =
                "Failed to register Transformer '"
                    + toDescription(transformer)
                    + "'.  A Transformer for these types is already registered: '"
                    + toDescription(registeredTransformer)
                    + "'.";
            if (test) {
              _log.trace(msg);
            } else if (failOnError) {
              throw new DuplicateTransformerException(msg);
            } else {
              _log.debug(msg);
            }
            continue transformerLoop;
          }
          _log.debug(
              "Adding transformer =>"
                  + " From: "
                  + transformer.getFrom()
                  + ", To:"
                  + transformer.getTo());
          _transformerRegistry.addTransformer(transformer);
          _transformers.add(transformer);
        }
      }
    } catch (DuplicateTransformerException e) {
      throw e;
    } catch (RuntimeException e) {
      // If there was an exception for any reason... remove all Transformer instance that have
      // already been registered with the domain...
      unregisterTransformers();
      throw e;
    }
  }
 private String toDescription(Transformer<?, ?> transformer) {
   return transformer.getClass().getName()
       + "("
       + transformer.getFrom()
       + ", "
       + transformer.getTo()
       + ")";
 }
 @Override
 public BaseTransformerRegistry addTransformer(Transformer<?, ?> transformer) {
   _fallbackTransformers.clear();
   _transformers.put(new NameKey(transformer.getFrom(), transformer.getTo()), transformer);
   return this;
 }
 @Override
 public boolean removeTransformer(Transformer<?, ?> transformer) {
   _fallbackTransformers.clear();
   return _transformers.remove(new NameKey(transformer.getFrom(), transformer.getTo())) != null;
 }