
fr.ird.observe.spi.module.BusinessProjectMapping Maven / Gradle / Ivy
package fr.ird.observe.spi.module;
/*-
* #%L
* ObServe Toolkit :: Dto
* %%
* Copyright (C) 2017 - 2021 Ultreia.io
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* .
* #L%
*/
import fr.ird.observe.dto.BusinessDto;
import fr.ird.observe.dto.data.DataDto;
import fr.ird.observe.dto.reference.DataDtoReference;
import fr.ird.observe.dto.reference.DtoReference;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.spi.mapping.DtoToFormDtoMapping;
import fr.ird.observe.spi.mapping.DtoToMainDtoClassMapping;
import fr.ird.observe.spi.mapping.DtoToReferenceDtoMapping;
import fr.ird.observe.spi.mapping.ReferenceDtoToDtoClassMapping;
import java.lang.reflect.Modifier;
import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Set;
/**
* Created on 05/10/2020.
*
* @author Tony Chemit - [email protected]
* @since 8.0.1
*/
public class BusinessProjectMapping {
private final DtoToReferenceDtoMapping dtoToReferenceDtoClassMapping;
private final ReferenceDtoToDtoClassMapping referenceDtoToDtoClassMapping;
private final DtoToFormDtoMapping dtoToFormDtoMapping;
private final DtoToMainDtoClassMapping dtoToMainDtoClassMapping;
private final Set> mainDataClasses;
public BusinessProjectMapping(DtoToReferenceDtoMapping dtoToReferenceDtoClassMapping, ReferenceDtoToDtoClassMapping referenceDtoToDtoClassMapping, DtoToFormDtoMapping dtoToFormDtoMapping, DtoToMainDtoClassMapping dtoToMainDtoClassMapping) {
this.dtoToReferenceDtoClassMapping = Objects.requireNonNull(dtoToReferenceDtoClassMapping);
this.referenceDtoToDtoClassMapping = Objects.requireNonNull(referenceDtoToDtoClassMapping);
this.dtoToFormDtoMapping = Objects.requireNonNull(dtoToFormDtoMapping);
this.dtoToMainDtoClassMapping = Objects.requireNonNull(dtoToMainDtoClassMapping);
this.mainDataClasses = new LinkedHashSet<>();
for (Class extends BusinessDto> dtoType : this.dtoToMainDtoClassMapping.values()) {
if (DataDto.class.isAssignableFrom(dtoType)) {
@SuppressWarnings("unchecked") Class extends DataDto> type = (Class extends DataDto>) dtoType;
mainDataClasses.add(type);
}
}
}
public DtoToReferenceDtoMapping getDtoToReferenceDtoClassMapping() {
return dtoToReferenceDtoClassMapping;
}
public ReferenceDtoToDtoClassMapping getReferenceDtoToDtoClassMapping() {
return referenceDtoToDtoClassMapping;
}
public DtoToFormDtoMapping getDtoToFormDtoMapping() {
return dtoToFormDtoMapping;
}
public DtoToMainDtoClassMapping getDtoToMainDtoClassMapping() {
return dtoToMainDtoClassMapping;
}
public Set> getMainDataClasses() {
return mainDataClasses;
}
public Class getMainDtoType(Class dtoType) {
return getDtoToMainDtoClassMapping().get(dtoType);
}
@SuppressWarnings({"unchecked", "rawtypes"})
public Class getReferenceType(Class dtoType) {
if (Modifier.isAbstract(dtoType.getModifiers())) {
if (ReferentialDto.class.isAssignableFrom(dtoType)) {
return (Class) ReferentialDtoReference.class;
}
if (DataDto.class.equals(dtoType)) {
return (Class) DataDtoReference.class;
}
}
return getDtoToReferenceDtoClassMapping().get(dtoType);
}
@SuppressWarnings({"unchecked", "rawtypes"})
public Class getDtoType(Class dtoType) {
if (Modifier.isAbstract(dtoType.getModifiers())) {
if (ReferentialDtoReference.class.isAssignableFrom(dtoType)) {
return (Class) ReferentialDto.class;
}
if (DataDtoReference.class.equals(dtoType)) {
return (Class) DataDto.class;
}
}
return getReferenceDtoToDtoClassMapping().get(dtoType);
}
public Set> getSubDtoTypes(Class extends BusinessDto> mainDtoType) {
Set> builder = new LinkedHashSet<>();
for (Class extends BusinessDto> dtoType : getDtoToMainDtoClassMapping().keySet()) {
if (Objects.equals(mainDtoType, getMainDtoType(dtoType))) {
builder.add(dtoType);
}
}
return builder;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy