package com.ryantenney.zookeeper.spring.config;

import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;

import com.ryantenney.zookeeper.spring.ZooKeeperAnnotationBeanPostProcessor;

import static org.springframework.beans.factory.config.BeanDefinition.ROLE_INFRASTRUCTURE;

public class AnnotationDrivenBeanDefinitionParser extends AbstractBeanDefinitionParser {

  @Override
  protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
    final BeanDefinitionBuilder beanDefBuilder = BeanDefinitionBuilder.rootBeanDefinition(ZooKeeperAnnotationBeanPostProcessor.class);
    beanDefBuilder.setRole(ROLE_INFRASTRUCTURE);
    beanDefBuilder.getRawBeanDefinition().setSource(parserContext.extractSource(element));
    beanDefBuilder.addPropertyReference("curatorFramework", element.getAttribute("curator-framework"));
    return beanDefBuilder.getBeanDefinition();
  }

  @Override
  protected boolean shouldGenerateId() {
    return true;
  }

}