package com.adaptris.core.metadata;

import javax.validation.constraints.NotNull;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.adaptris.annotation.AutoPopulated;
import com.adaptris.annotation.InputFieldDefault;
import com.adaptris.annotation.InputFieldHint;
import com.adaptris.core.MetadataElement;
import com.thoughtworks.xstream.annotations.XStreamAlias;

/**
 * Key and value element formatter.
 *
 * @author Ashley Anderson <ashley.anderson@reedbusiness.com>
 */
@XStreamAlias("element-key-and-value-formatter")
public class ElementKeyAndValueFormatter implements ElementFormatter {

	private static final transient Logger LOGGER = LoggerFactory.getLogger(ElementKeyAndValueFormatter.class.getName());

	/**
	 * The default key/value separator.
	 */
	private static final String DEFAULT_SEPARATOR = "=";

	/**
	 * The key/value separator.
	 */
	@NotNull
	@AutoPopulated
	@InputFieldDefault(value = DEFAULT_SEPARATOR)
  @InputFieldHint(style = "BLANKABLE")
	private String separator;

	/**
	 * Default constructor.
	 */
	public ElementKeyAndValueFormatter() {
		separator = DEFAULT_SEPARATOR;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String format(final MetadataElement element) {
		if (element == null) {
			LOGGER.warn("Metadata element is null!");
			return null;
		}
		return element.getKey() + separator + element.getValue();
	}

	/**
	 * Set the key/value separator.
	 *
	 * @param separator
	 *          The key/value separator.
	 */
	public void setSeparator(final String separator) {
		this.separator = separator;
	}

	/**
	 * Get the key/value separator.
	 *
	 * @return The key/value separator.
	 */
	public String getSeparator() {
		return separator;
	}
}

@@ -75,17 +75,16 @@
 otNull;%0A
-%0A
 import o
@@ -132,17 +132,16 @@
 actory;%0A
-%0A
 import c
@@ -313,24 +313,60 @@
 ataElement;%0A
+import com.adaptris.core.util.Args;%0A
 import com.t
@@ -642,17 +642,18 @@
 tter %7B%0A%0A
-%09
+  
 private 
@@ -690,16 +690,22 @@
 LOGGER =
+%0A     
  LoggerF
@@ -768,22 +768,24 @@
 me());%0A%0A
-%09
+  
 /**%0A
-%09
+  
  * The d
@@ -812,22 +812,24 @@
 arator.%0A
-%09
+  
  */%0A
-%09
+  
 private 
@@ -874,22 +874,24 @@
 = %22=%22;%0A%0A
-%09
+  
 /**%0A
-%09
+  
  * The k
@@ -910,22 +910,24 @@
 arator.%0A
-%09
+  
  */%0A
-%09
+  
 @NotNull
@@ -927,17 +927,18 @@
 NotNull%0A
-%09
+  
 @AutoPop
@@ -944,17 +944,18 @@
 pulated%0A
-%09
+  
 @InputFi
@@ -1031,17 +1031,18 @@
 KABLE%22)%0A
-%09
+  
 private 
@@ -1060,22 +1060,24 @@
 rator;%0A%0A
-%09
+  
 /**%0A
-%09
+  
  * Defau
@@ -1088,30 +1088,32 @@
 onstructor.%0A
-%09
+  
  */%0A
-%09
+  
 public Eleme
@@ -1143,19 +1143,24 @@
 ) %7B%0A
-%09%09s
+    setS
 eparator
  = D
@@ -1155,19 +1155,17 @@
 eparator
- = 
+(
 DEFAULT_
@@ -1173,28 +1173,32 @@
 EPARATOR
+)
 ;%0A
-%09%7D%0A%0A%09
+  %7D%0A%0A  
 /**%0A
-%09
+  
  * %7B@inh
@@ -1206,22 +1206,24 @@
 ritDoc%7D%0A
-%09
+  
  */%0A
-%09
+  
 @Overrid
@@ -1224,17 +1224,18 @@
 verride%0A
-%09
+  
 public S
@@ -1280,18 +1280,20 @@
 ment) %7B%0A
-%09%09
+    
 if (elem
@@ -1307,19 +1307,22 @@
 null) %7B%0A
-%09%09%09
+      
 LOGGER.w
@@ -1359,11 +1359,14 @@
 %22);%0A
-%09%09%09
+      
 retu
@@ -1378,14 +1378,18 @@
 ll;%0A
-%09%09%7D%0A%09%09
+    %7D%0A    
 retu
@@ -1410,25 +1410,28 @@
 Key() + 
-s
+getS
 eparator
  + eleme
@@ -1422,16 +1422,18 @@
 eparator
+()
  + eleme
@@ -1447,26 +1447,29 @@
 alue();%0A
-%09%7D%0A%0A%09
+  %7D%0A%0A  
 /**%0A
-%09
+  
  * Set t
@@ -1488,29 +1488,31 @@
  separator.%0A
-%09 *%0A%09
+   *%0A  
  * @param se
@@ -1522,21 +1522,8 @@
 ator
-%0A%09 *         
  The
@@ -1540,30 +1540,32 @@
  separator.%0A
-%09
+  
  */%0A
-%09
+  
 public void 
@@ -1603,18 +1603,20 @@
 ator) %7B%0A
-%09%09
+    
 this.sep
@@ -1628,29 +1628,59 @@
 r = 
-separator;%0A%09%7D%0A%0A%09
+Args.notNull(separator, %22separator%22);%0A  %7D%0A%0A  
 /**%0A
-%09
+  
  * G
@@ -1711,13 +1711,15 @@
 or.%0A
-%09 *%0A%09
+   *%0A  
  * @
@@ -1754,14 +1754,16 @@
 or.%0A
-%09
+  
  */%0A
-%09
+  
 publ
@@ -1793,10 +1793,12 @@
 ) %7B%0A
-%09%09
+    
 retu
@@ -1815,9 +1815,10 @@
 or;%0A
-%09
+  
 %7D%0A%7D%0A

test coverage.