Package com.dianping.cat.configuration

Source Code of com.dianping.cat.configuration.ClientConfigMerger

package com.dianping.cat.configuration;

import java.util.Stack;

import com.dianping.cat.configuration.client.entity.ClientConfig;
import com.dianping.cat.configuration.client.entity.Domain;
import com.dianping.cat.configuration.client.entity.Property;
import com.dianping.cat.configuration.client.transform.DefaultMerger;

public class ClientConfigMerger extends DefaultMerger {
  public ClientConfigMerger(ClientConfig config) {
    super(config);
  }

  @Override
  protected void mergeDomain(Domain old, Domain domain) {
    if (domain.getIp() != null) {
      old.setIp(domain.getIp());
    }

    if (domain.getEnabled() != null) {
      old.setEnabled(domain.getEnabled());
    }

    if (domain.getMaxMessageSize() > 0) {
      old.setMaxMessageSize(domain.getMaxMessageSize());
    }
  }

  @Override
  protected void visitConfigChildren(ClientConfig to, ClientConfig from) {
    if (to != null) {
      Stack<Object> objs = getObjects();

      // if servers is configured, then override it instead of merge
      if (!from.getServers().isEmpty()) {
        to.getServers().clear();
        to.getServers().addAll(from.getServers());
      }

      // only configured domain in client configure will be merged
      for (Domain source : from.getDomains().values()) {
        Domain target = to.findDomain(source.getId());

        if (target == null) {
          target = new Domain(source.getId());
          to.addDomain(target);
        }

        if (to.getDomains().containsKey(source.getId())) {
          objs.push(target);
          source.accept(this);
          objs.pop();
        }
      }

      for (Property source : from.getProperties().values()) {
        Property target = to.findProperty(source.getName());

        if (target == null) {
          target = new Property(source.getName());
          to.addProperty(target);
        }

        objs.push(target);
        source.accept(this);
        objs.pop();
      }
    }
  }
}
TOP

Related Classes of com.dianping.cat.configuration.ClientConfigMerger

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.