001package org.kuali.common.util.xml.jaxb.adapter; 002 003import javax.xml.bind.annotation.adapters.XmlAdapter; 004 005import org.kuali.common.util.Assert; 006import org.kuali.common.util.Str; 007 008import com.google.common.base.Optional; 009 010public final class FlattenOptionalStringAdapter extends XmlAdapter<String, Optional<String>> { 011 012 public FlattenOptionalStringAdapter() { 013 this(FlattenConstants.DEFAULT_CR_REPLACEMENT, FlattenConstants.DEFAULT_LF_REPLACEMENT); 014 } 015 016 public FlattenOptionalStringAdapter(String carriageReturnReplacement, String linefeedReplacement) { 017 // No blanks because this needs to work in both directions (flatten + inflate) 018 Assert.noBlanks(carriageReturnReplacement, linefeedReplacement); 019 this.carriageReturnReplacement = carriageReturnReplacement; 020 this.linefeedReplacement = linefeedReplacement; 021 } 022 023 private final String carriageReturnReplacement; 024 private final String linefeedReplacement; 025 026 @Override 027 public String marshal(Optional<String> optional) { 028 if (optional.isPresent()) { 029 return Str.flatten(optional.get(), carriageReturnReplacement, linefeedReplacement); 030 } else { 031 return null; 032 } 033 } 034 035 @Override 036 public Optional<String> unmarshal(String value) { 037 if (value == null) { 038 return Optional.<String> absent(); 039 } else { 040 return Optional.<String> of(Str.inflate(value, carriageReturnReplacement, linefeedReplacement)); 041 } 042 } 043 044 public String getCarriageReturnReplacement() { 045 return carriageReturnReplacement; 046 } 047 048 public String getLinefeedReplacement() { 049 return linefeedReplacement; 050 } 051 052}