/**
* 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.IterableMappingPrism;
import org.mapstruct.ap.internal.prism.NullValueMappingStrategyPrism;
import org.mapstruct.ap.internal.util.FormattingMessager;
import org.mapstruct.ap.internal.util.Message;
/**
* Represents an iterable mapping as configured via {@code @IterableMapping}.
*
* @author Gunnar Morling
*/
public class IterableMapping {
private final SelectionParameters selectionParameters;
private final FormattingParameters formattingParameters;
private final AnnotationMirror mirror;
private final NullValueMappingStrategyPrism nullValueMappingStrategy;
public static IterableMapping fromPrism(IterableMappingPrism iterableMapping, ExecutableElement method,
FormattingMessager messager) {
if ( iterableMapping == null ) {
return null;
}
boolean elementTargetTypeIsDefined = !TypeKind.VOID.equals( iterableMapping.elementTargetType().getKind() );
NullValueMappingStrategyPrism nullValueMappingStrategy =
iterableMapping.values.nullValueMappingStrategy() == null
? null
: NullValueMappingStrategyPrism.valueOf( iterableMapping.nullValueMappingStrategy() );
if ( !elementTargetTypeIsDefined
&& iterableMapping.dateFormat().isEmpty()
&& iterableMapping.numberFormat().isEmpty()
&& iterableMapping.qualifiedBy().isEmpty()
&& iterableMapping.qualifiedByName().isEmpty()
&& ( nullValueMappingStrategy == null ) ) {
messager.printMessage( method, Message.ITERABLEMAPPING_NO_ELEMENTS );
}
SelectionParameters selection = new SelectionParameters(
iterableMapping.qualifiedBy(),
iterableMapping.qualifiedByName(),
elementTargetTypeIsDefined ? iterableMapping.elementTargetType() : null );
FormattingParameters formatting = new FormattingParameters(
iterableMapping.dateFormat(),
iterableMapping.numberFormat(),
iterableMapping.mirror,
iterableMapping.values.dateFormat(),
method
);
return new IterableMapping( formatting,
selection,
iterableMapping.mirror,
nullValueMappingStrategy
);
}
private IterableMapping(FormattingParameters formattingParameters, SelectionParameters selectionParameters,
AnnotationMirror mirror, NullValueMappingStrategyPrism nvms) {
this.formattingParameters = formattingParameters;
this.selectionParameters = selectionParameters;
this.mirror = mirror;
this.nullValueMappingStrategy = nvms;
}
public SelectionParameters getSelectionParameters() {
return selectionParameters;
}
public FormattingParameters getFormattingParameters() {
return formattingParameters;
}
public AnnotationMirror getMirror() {
return mirror;
}
public NullValueMappingStrategyPrism getNullValueMappingStrategy() {
return nullValueMappingStrategy;
}
}