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}