Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
oppiaine-kooditettu-nimi-fix
Browse files Browse the repository at this point in the history
oplekal committed Dec 31, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent c2377be commit cf87321
Showing 9 changed files with 74 additions and 51 deletions.
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import fi.vm.sade.eperusteet.dto.Reference;
import fi.vm.sade.eperusteet.dto.ReferenceableDto;
import fi.vm.sade.eperusteet.dto.tutkinnonrakenne.KoodiDto;
import fi.vm.sade.eperusteet.dto.util.LokalisoituTekstiDto;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -26,18 +27,10 @@ public abstract class OppiaineBaseDto implements ReferenceableDto {
private Optional<Boolean> koosteinen;
private Optional<Boolean> abstrakti;
protected Optional<LokalisoituTekstiDto> nimi;
private KoodiDto koodi;
private Optional<Long> jnro;
private Date muokattu;

@JsonIgnore
public LokalisoituTekstiDto getNimiOrDefault(LokalisoituTekstiDto defaultNimi) {
if (nimi != null) {
return nimi.orElse(defaultNimi);
} else {
return defaultNimi;
}
}

@JsonIgnore
public Long getJnroOrDefault(Long defaultJnro) {
if (jnro != null) {
@@ -46,4 +39,10 @@ public Long getJnroOrDefault(Long defaultJnro) {
return defaultJnro;
}
}

public LokalisoituTekstiDto getNimi() {
return Optional.ofNullable(koodi)
.map(KoodiDto::getNimi)
.orElse(nimi != null ? nimi.orElse(null) : null);
}
}
Original file line number Diff line number Diff line change
@@ -22,14 +22,5 @@ public class OppiaineDto extends OppiaineBaseUpdateDto {
private Set<OppiaineSuppeaDto> oppimaarat;
private Set<OpetuksenKohdealueDto> kohdealueet;
private Set<OppiaineenVuosiluokkaKokonaisuusDto> vuosiluokkakokonaisuudet;
private KoodiDto koodi;
private List<KevytTekstiKappaleDto> vapaatTekstit;

public Optional<LokalisoituTekstiDto> getNimi() {
if (super.getNimi() != null && super.getNimi().isPresent()) {
return super.getNimi();
}

return Optional.ofNullable(koodi).map(KoodiDto::getNimi);
}
}
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import fi.vm.sade.eperusteet.dto.KevytTekstiKappaleDto;
import fi.vm.sade.eperusteet.dto.peruste.PerusteRakenneOsa;
import fi.vm.sade.eperusteet.dto.tutkinnonrakenne.KoodiDto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -29,6 +30,6 @@ public class OppiaineLaajaDto extends OppiaineBaseDto {
private String koodiArvo;

public PerusteRakenneOsa getPerusteenOsa() {
return new PerusteRakenneOsa("perusopetus_oppiaine", nimi.get());
return new PerusteRakenneOsa("perusopetus_oppiaine", getNimi());
}
}
Original file line number Diff line number Diff line change
@@ -91,10 +91,10 @@ private NavigationNodeDto vuosiluokkakokonaisuudet(Long perusteId, String kieli)
private NavigationNodeDto oppiaineet(Long perusteId, String kieli) {
return NavigationNodeDto.of(NavigationType.perusopetusoppiaineet)
.addAll(sisallot.getOppiaineet(perusteId, OppiaineSuppeaDto.class).stream()
.sorted(Comparator.comparing(oppiaine -> LokalisoituTekstiDto.getOrDefault(oppiaine.getNimiOrDefault(LokalisoituTekstiDto.of("")), Kieli.of(kieli), "")))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getNimi().get(Kieli.of(kieli))))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getJnroOrDefault(99L)))
.map(oppiaine ->
NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oppiaine.getNimiOrDefault(null), oppiaine.getId())
NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oppiaine.getNimi(), oppiaine.getId())
.addAll(!ObjectUtils.isEmpty(oppiaine.getOppimaarat()) ? oppimaarat(oppiaine.getOppimaarat(), kieli) : null)
).collect(Collectors.toList()));
}
@@ -103,9 +103,9 @@ private Stream<NavigationNodeDto> oppimaarat(Set<OppiaineSuppeaDto> oppimaarat,
return Stream.concat(
Stream.of(NavigationNodeDto.of(NavigationType.oppimaarat).meta("navigation-subtype", true)),
oppimaarat.stream()
.sorted(Comparator.comparing(oppiaine -> LokalisoituTekstiDto.getOrDefault(oppiaine.getNimiOrDefault(LokalisoituTekstiDto.of("")), Kieli.of(kieli), "")))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getNimi().get(Kieli.of(kieli))))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getJnroOrDefault(99l)))
.map(oppimaara -> NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oppimaara.getNimiOrDefault(null), oppimaara.getId()).meta("oppimaara", true)));
.map(oppimaara -> NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oppimaara.getNimi(), oppimaara.getId()).meta("oppimaara", true)));
}

}
Original file line number Diff line number Diff line change
@@ -61,10 +61,10 @@ private List<NavigationNodeDto> vuosiluokat(PerusteKaikkiDto peruste, String kie
private List<NavigationNodeDto> vuosiluokanOppiaineet(PerusteKaikkiDto peruste, Long vlkId, String kieli) {
return peruste.getPerusopetuksenPerusteenSisalto().getOppiaineet().stream()
.filter(oppiaine -> oppiaineJaOppimaaraVuosiluokkakokonaisuusIdt(oppiaine).contains(vlkId))
.sorted(Comparator.comparing(oppiaine -> LokalisoituTekstiDto.getOrDefault(oppiaine.getNimiOrDefault(LokalisoituTekstiDto.of("")), Kieli.of(kieli), "")))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getNimi().get(Kieli.of(kieli))))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getJnroOrDefault(99l)))
.map(oppiaine ->
NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oppiaine.getNimiOrDefault(null), oppiaine.getId()).meta("vlkId", vlkId)
NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oppiaine.getNimi(), oppiaine.getId()).meta("vlkId", vlkId)
.add(!ObjectUtils.isEmpty(oppiaine.getOppimaarat()) ? oppimaarat(oppiaine.getOppimaarat(), vlkId, kieli) : null)
).collect(Collectors.toList());
}
@@ -82,10 +82,10 @@ private List<Long> oppiaineJaOppimaaraVuosiluokkakokonaisuusIdt(OppiaineLaajaDto
private NavigationNodeDto oppiaineet(PerusteKaikkiDto peruste, String kieli) {
return NavigationNodeDto.of(NavigationType.perusopetusoppiaineet)
.addAll(peruste.getPerusopetuksenPerusteenSisalto().getOppiaineet().stream()
.sorted(Comparator.comparing(oppiaine -> LokalisoituTekstiDto.getOrDefault(oppiaine.getNimiOrDefault(LokalisoituTekstiDto.of("")), Kieli.of(kieli), "")))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getNimi().get(Kieli.of(kieli))))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getJnroOrDefault(99l)))
.map(oppiaine ->
NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oppiaine.getNimiOrDefault(null), oppiaine.getId())
NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oppiaine.getNimi(), oppiaine.getId())
.add(!ObjectUtils.isEmpty(oppiaine.getOppimaarat()) ? oppimaarat(oppiaine.getOppimaarat(), null, kieli) : null)
).collect(Collectors.toList()));
}
@@ -94,11 +94,11 @@ private NavigationNodeDto oppimaarat(Set<OppiaineDto> oppimaarat, Long vlkId, St
return NavigationNodeDto.of(NavigationType.oppimaarat).meta("navigation-subtype", true)
.addAll(
oppimaarat.stream()
.sorted(Comparator.comparing(oppiaine -> LokalisoituTekstiDto.getOrDefault(oppiaine.getNimiOrDefault(LokalisoituTekstiDto.of("")), Kieli.of(kieli), "")))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getNimi().get(Kieli.of(kieli))))
.sorted(Comparator.comparing(oppiaine -> oppiaine.getJnroOrDefault(99l)))
.map(oppimaara -> {
NavigationNodeDto node = NavigationNodeDto
.of(NavigationType.perusopetusoppiaine, oppimaara.getNimiOrDefault(null), oppimaara.getId());
.of(NavigationType.perusopetusoppiaine, oppimaara.getNimi(), oppimaara.getId());
if (vlkId != null) {
node = node.meta("vlkId", vlkId);
}
Original file line number Diff line number Diff line change
@@ -209,7 +209,7 @@ private void tarkistaPerusopetuksenOppiaine(
OppiaineSuppeaDto oaDto = mapper.map(oa, OppiaineSuppeaDto.class);

if (oa.getKoodiArvo() == null && oa.getKoodiUri() == null) {
validointi.virhe("peruste-validointi-oppiaine-koodi", NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oaDto.getNimiOrDefault(null), oa.getId()));
validointi.virhe("peruste-validointi-oppiaine-koodi", NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oaDto.getNimi(), oa.getId()));
}

if (oa.getTehtava() != null) {
@@ -279,11 +279,11 @@ private void tarkistaPerusopetuksenOppiaine(
.flatMap(Collection::stream)
.collect(Collectors.toSet());
if (!sisaltoalueetIdt.containsAll(tavoitteidenSisaltoalueetIdt)) {
validointi.virhe("peruste-validointi-oppiaine-vlk-tavoite-sisaltoalueet", NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oaDto.getNimiOrDefault(null), oa.getId()));
validointi.virhe("peruste-validointi-oppiaine-vlk-tavoite-sisaltoalueet", NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oaDto.getNimi(), oa.getId()));
}
}

virheellisetKielet.entrySet().forEach(entry -> validointi.virhe(entry.getKey(), NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oaDto.getNimiOrDefault(null), oa.getId())));
virheellisetKielet.entrySet().forEach(entry -> validointi.virhe(entry.getKey(), NavigationNodeDto.of(NavigationType.perusopetusoppiaine, oaDto.getNimi(), oa.getId())));

if (oa.getOppimaarat() != null) {
for (Oppiaine oppimaara : oa.getOppimaarat()) {
Original file line number Diff line number Diff line change
@@ -108,6 +108,8 @@
import fi.vm.sade.eperusteet.dto.vst.OpintokokonaisuusDto;
import fi.vm.sade.eperusteet.dto.vst.TavoitesisaltoalueDto;
import fi.vm.sade.eperusteet.dto.yl.LukioOppiaineUpdateDto;
import fi.vm.sade.eperusteet.dto.yl.OppiaineBaseDto;
import fi.vm.sade.eperusteet.dto.yl.OppiaineBaseUpdateDto;
import fi.vm.sade.eperusteet.dto.yl.OppiaineDto;
import fi.vm.sade.eperusteet.dto.yl.OppiaineKevytDto;
import fi.vm.sade.eperusteet.dto.yl.OppiaineLaajaDto;
@@ -673,32 +675,30 @@ public void mapAtoB(Koodi a, OsaamisalaDto b, MappingContext context) {
.byDefault()
.register();

factory.classMap(OppiaineBaseDto.class, Oppiaine.class)
.mapNulls(true)
.customize(OppiaineCustomMapper.create(koodistoClient))
.byDefault()
.register();

factory.classMap(OppiaineDto.class, Oppiaine.class)
.mapNulls(true)
.fieldBToA("vuosiluokkakokonaisuudet", "vuosiluokkakokonaisuudet")
.customize(new CustomMapper<OppiaineDto, Oppiaine>() {
@Override
public void mapBtoA(Oppiaine oppiaine, OppiaineDto oppiaineDto, MappingContext context) {
super.mapBtoA(oppiaine, oppiaineDto, context);
if (oppiaine.getKoodiUri() != null) {
oppiaineDto.setKoodi(koodistoClient.getKoodi(oppiaine.getKoodiUri().split("_")[0], oppiaine.getKoodiUri()));
}
}
.customize(OppiaineCustomMapper.create(koodistoClient))
.byDefault()
.register();

@Override
public void mapAtoB(OppiaineDto oppiaineDto, Oppiaine oppiaine, MappingContext context) {
super.mapAtoB(oppiaineDto, oppiaine, context);
if (oppiaineDto.getKoodi() != null) {
oppiaine.setKoodiUri(oppiaineDto.getKoodi().getUri());
oppiaine.setKoodiArvo(oppiaineDto.getKoodi().getArvo());
}
}
})
factory.classMap(OppiaineLaajaDto.class, Oppiaine.class)
.mapNulls(true)
.fieldBToA("vuosiluokkakokonaisuudet", "vuosiluokkakokonaisuudet")
.customize(OppiaineCustomMapper.create(koodistoClient))
.byDefault()
.register();

factory.classMap(OppiaineSuppeaDto.class, Oppiaine.class)
.fieldBToA("muokattu", "muokattu")
.mapNulls(true)
.fieldBToA("vuosiluokkakokonaisuudet", "vuosiluokkakokonaisuudet")
.customize(OppiaineCustomMapper.create(koodistoClient))
.byDefault()
.register();

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package fi.vm.sade.eperusteet.service.mapping;

import fi.vm.sade.eperusteet.domain.yl.Oppiaine;
import fi.vm.sade.eperusteet.dto.yl.OppiaineBaseDto;
import fi.vm.sade.eperusteet.service.KoodistoClient;
import ma.glasnost.orika.CustomMapper;
import ma.glasnost.orika.MappingContext;

public class OppiaineCustomMapper {

public static <T extends OppiaineBaseDto> CustomMapper<T, Oppiaine> create(KoodistoClient koodistoClient) {
return new CustomMapper<T, Oppiaine>() {

@Override
public void mapBtoA(Oppiaine oppiaine, T oppiaineDto, MappingContext context) {
super.mapBtoA(oppiaine, oppiaineDto, context);
if (oppiaine.getKoodiUri() != null) {
oppiaineDto.setKoodi(koodistoClient.getKoodi(oppiaine.getKoodiUri().split("_")[0], oppiaine.getKoodiUri()));
}
}

@Override
public void mapAtoB(T oppiaineDto, Oppiaine oppiaine, MappingContext context) {
super.mapAtoB(oppiaineDto, oppiaine, context);
if (oppiaineDto.getKoodi() != null) {
oppiaine.setKoodiUri(oppiaineDto.getKoodi().getUri());
oppiaine.setKoodiArvo(oppiaineDto.getKoodi().getArvo());
}
}
};
}
}
Original file line number Diff line number Diff line change
@@ -96,7 +96,7 @@ public void testAddAndListOppiaineet() {

List<OppiaineDto> aineet = lukiokoulutuksenPerusteenSisaltoService.getOppiaineet(perusteId, OppiaineDto.class);
assertEquals(1, aineet.size());
assertEquals("Finska", aineet.get(0).getNimi().get().get(SV));
assertEquals("Finska", aineet.get(0).getNimi().get(SV));
assertEquals(2, aineet.get(0).getOppimaarat().size());
}
}

0 comments on commit cf87321

Please sign in to comment.