/** * 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.ExecutableElement; import javax.lang.model.type.TypeKind; import org.mapstruct.ap.internal.prism.BeanMappingPrism; import org.mapstruct.ap.internal.prism.NullValueMappingStrategyPrism; import org.mapstruct.ap.internal.prism.ReportingPolicyPrism; import org.mapstruct.ap.internal.util.FormattingMessager; import org.mapstruct.ap.internal.util.Message; /** * Represents an bean mapping as configured via {@code @BeanMapping}. * * @author Sjaak Derksen */ public class BeanMapping { private final SelectionParameters selectionParameters; private final NullValueMappingStrategyPrism nullValueMappingStrategy; private final ReportingPolicyPrism reportingPolicy; public static BeanMapping fromPrism(BeanMappingPrism beanMapping, ExecutableElement method, FormattingMessager messager) { if ( beanMapping == null ) { return null; } boolean resultTypeIsDefined = !TypeKind.VOID.equals( beanMapping.resultType().getKind() ); NullValueMappingStrategyPrism nullValueMappingStrategy = null == beanMapping.values.nullValueMappingStrategy() ? null : NullValueMappingStrategyPrism.valueOf( beanMapping.nullValueMappingStrategy() ); if ( !resultTypeIsDefined && beanMapping.qualifiedBy().isEmpty() && beanMapping.qualifiedByName().isEmpty() && ( nullValueMappingStrategy == null ) ) { messager.printMessage( method, Message.BEANMAPPING_NO_ELEMENTS ); } SelectionParameters cmp = new SelectionParameters( beanMapping.qualifiedBy(), beanMapping.qualifiedByName(), resultTypeIsDefined ? beanMapping.resultType() : null ); //TODO Do we want to add the reporting policy to the BeanMapping as well? To give more granular support? return new BeanMapping( cmp, nullValueMappingStrategy, null ); } /** * This method should be used to generate BeanMappings for our internal generated Mappings. Like forged update * methods. * * @return bean mapping that needs to be used for Mappings */ public static BeanMapping forForgedMethods() { return new BeanMapping( null, null, ReportingPolicyPrism.IGNORE ); } private BeanMapping(SelectionParameters selectionParameters, NullValueMappingStrategyPrism nvms, ReportingPolicyPrism reportingPolicy) { this.selectionParameters = selectionParameters; this.nullValueMappingStrategy = nvms; this.reportingPolicy = reportingPolicy; } public SelectionParameters getSelectionParameters() { return selectionParameters; } public NullValueMappingStrategyPrism getNullValueMappingStrategy() { return nullValueMappingStrategy; } public ReportingPolicyPrism getReportingPolicy() { return reportingPolicy; } }