Package org.springframework.xd.dirt.test.process

Source Code of org.springframework.xd.dirt.test.process.AbstractSingleNodeProcessingChain

/*
* Copyright 2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springframework.xd.dirt.test.process;

import org.springframework.util.Assert;
import org.springframework.xd.dirt.integration.bus.MessageBus;
import org.springframework.xd.dirt.module.ArchiveModuleRegistry;
import org.springframework.xd.dirt.server.SingleNodeApplication;
import org.springframework.xd.dirt.stream.StreamDefinition;
import org.springframework.xd.dirt.test.SingleNodeIntegrationTestSupport;
import org.springframework.xd.dirt.test.sink.NamedChannelSink;
import org.springframework.xd.dirt.test.sink.SingleNodeNamedQueueSink;
import org.springframework.xd.dirt.test.source.NamedChannelSource;
import org.springframework.xd.dirt.test.source.SingleNodeNamedQueueSource;


/**
* A helper class for building single node streams that use a {@link NamedChannelSource} and {@link NamedChannelSink}.
*
* @author David Turanski
*/
public abstract class AbstractSingleNodeProcessingChain {

  private static final String QUEUE_CONSUMER = "queue:consumer";

  private static final String QUEUE_PRODUCER = "queue:producer";

  private final StreamDefinition stream;

  private final MessageBus messageBus;

  protected final NamedChannelSource source;

  protected final NamedChannelSink sink;

  protected final SingleNodeIntegrationTestSupport integrationSupport;

  protected AbstractSingleNodeProcessingChain(SingleNodeApplication application, String streamName,
      String processingChain) {
    this(application, streamName, processingChain, "file:./config");

  }

  protected AbstractSingleNodeProcessingChain(SingleNodeApplication application, String streamName,
      String processingChain, String moduleResourceLocation) {
    Assert.notNull(application, "application cannot be null");
    Assert.hasText(processingChain, "processingChain cannot be null or empty");
    Assert.hasText(streamName, "streamName cannot be null or empty");
    Assert.hasText(moduleResourceLocation, "moduleResourceLocation cannot be null or empty");
    this.integrationSupport = new SingleNodeIntegrationTestSupport(application);
    this.integrationSupport.addModuleRegistry(new ArchiveModuleRegistry(moduleResourceLocation));
    String streamDefinition = buildStreamDefinition(processingChain);
    stream = new StreamDefinition(streamName, streamDefinition);

    integrationSupport.createAndDeployStream(stream);

    messageBus = integrationSupport.messageBus();
    this.sink = createSink() ? new SingleNodeNamedQueueSink(messageBus, QUEUE_CONSUMER) : null;
    this.source = createSource() ? new SingleNodeNamedQueueSource(messageBus, QUEUE_PRODUCER) : null;

  }

  private String buildStreamDefinition(String processingChain) {
    StringBuilder sb = new StringBuilder();
    if (createSource()) {
      sb.append(QUEUE_PRODUCER).append(">");
    }
    sb.append(processingChain);
    if (createSink()) {
      sb.append(">").append(QUEUE_CONSUMER);
    }
    return sb.toString();
  }

  public void unbind() {
    if (sink != null) {
      sink.unbind();
    }
    if (source != null) {
      source.unbind();
    }
  }

  public void destroy() {
    unbind();
    integrationSupport.undeployAndDestroyStream(stream);
  }

  protected abstract boolean createSink();

  protected abstract boolean createSource();
}
TOP

Related Classes of org.springframework.xd.dirt.test.process.AbstractSingleNodeProcessingChain

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.