/**
* Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
* and/or other contributors as indicated by the @authors tag. See the
* copyright.txt file in the distribution for a full listing of all
* contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mapstruct.ap.internal.model.source;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.type.TypeKind;
import org.mapstruct.ap.internal.model.common.FormattingParameters;
import org.mapstruct.ap.internal.prism.MapMappingPrism;
import org.mapstruct.ap.internal.prism.NullValueMappingStrategyPrism;
import org.mapstruct.ap.internal.util.FormattingMessager;
import org.mapstruct.ap.internal.util.Message;
/**
* Represents a map mapping as configured via {@code @MapMapping}.
*
* @author Gunnar Morling
*/
public class MapMapping {
private final SelectionParameters keySelectionParameters;
private final SelectionParameters valueSelectionParameters;
private final FormattingParameters keyFormattingParameters;
private final FormattingParameters valueFormattingParameters;
private final AnnotationMirror mirror;
private final NullValueMappingStrategyPrism nullValueMappingStrategy;
public static MapMapping fromPrism(MapMappingPrism mapMapping, ExecutableElement method,
FormattingMessager messager) {
if ( mapMapping == null ) {
return null;
}
NullValueMappingStrategyPrism nullValueMappingStrategy =
mapMapping.values.nullValueMappingStrategy() == null
? null
: NullValueMappingStrategyPrism.valueOf( mapMapping.nullValueMappingStrategy() );
boolean keyTargetTypeIsDefined = !TypeKind.VOID.equals( mapMapping.keyTargetType().getKind() );
boolean valueTargetTypeIsDefined = !TypeKind.VOID.equals( mapMapping.valueTargetType().getKind() );
if ( mapMapping.keyDateFormat().isEmpty()
&& mapMapping.keyNumberFormat().isEmpty()
&& mapMapping.keyQualifiedBy().isEmpty()
&& mapMapping.keyQualifiedByName().isEmpty()
&& mapMapping.valueDateFormat().isEmpty()
&& mapMapping.valueNumberFormat().isEmpty()
&& mapMapping.valueQualifiedBy().isEmpty()
&& mapMapping.valueQualifiedByName().isEmpty()
&& !keyTargetTypeIsDefined
&& !valueTargetTypeIsDefined
&& ( nullValueMappingStrategy == null ) ) {
messager.printMessage( method, Message.MAPMAPPING_NO_ELEMENTS );
}
SelectionParameters keySelection = new SelectionParameters(
mapMapping.keyQualifiedBy(),
mapMapping.keyQualifiedByName(),
keyTargetTypeIsDefined ? mapMapping.keyTargetType() : null);
SelectionParameters valueSelection = new SelectionParameters(
mapMapping.valueQualifiedBy(),
mapMapping.valueQualifiedByName(),
valueTargetTypeIsDefined ? mapMapping.valueTargetType() : null);
FormattingParameters keyFormatting = new FormattingParameters(
mapMapping.keyDateFormat(),
mapMapping.keyNumberFormat(),
mapMapping.mirror,
mapMapping.values.keyDateFormat(),
method
);
FormattingParameters valueFormatting = new FormattingParameters(
mapMapping.valueDateFormat(),
mapMapping.valueNumberFormat(),
mapMapping.mirror,
mapMapping.values.valueDateFormat(),
method
);
return new MapMapping(
keyFormatting,
keySelection,
valueFormatting,
valueSelection,
mapMapping.mirror,
nullValueMappingStrategy
);
}
private MapMapping(FormattingParameters keyFormatting, SelectionParameters keySelectionParameters,
FormattingParameters valueFormatting, SelectionParameters valueSelectionParameters, AnnotationMirror mirror,
NullValueMappingStrategyPrism nvms ) {
this.keyFormattingParameters = keyFormatting;
this.keySelectionParameters = keySelectionParameters;
this.valueFormattingParameters = valueFormatting;
this.valueSelectionParameters = valueSelectionParameters;
this.mirror = mirror;
this.nullValueMappingStrategy = nvms;
}
public FormattingParameters getKeyFormattingParameters() {
return keyFormattingParameters;
}
public SelectionParameters getKeySelectionParameters() {
return keySelectionParameters;
}
public FormattingParameters getValueFormattingParameters() {
return valueFormattingParameters;
}
public SelectionParameters getValueSelectionParameters() {
return valueSelectionParameters;
}
public AnnotationMirror getMirror() {
return mirror;
}
public NullValueMappingStrategyPrism getNullValueMappingStrategy() {
return nullValueMappingStrategy;
}
}