Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,17 @@

import com.rte_france.antares.datamanager_back.repository.model.ThermalClusterRef;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.Optional;

public interface ThermalClusterRefRepository extends JpaRepository<ThermalClusterRef, Integer> {

@Query("SELECT tcr FROM ThermalClusterRef tcr " +
"JOIN FETCH tcr.thermalTechnology tt " +
"WHERE tcr.name = ?1 AND tt.name = :name AND tt.name = :technology")
Optional<ThermalClusterRef> findByNameAndNameAndThermalTechnology(String name, String technology);
Optional<ThermalClusterRef> findByThermalTechnology_NameIgnoreCaseAndNameIgnoreCase(
String technology,
String name
);

@Query("SELECT tcr FROM ThermalClusterRef tcr " +
"LEFT JOIN FETCH tcr.thermalTechnology tt " +
"WHERE tcr.name = :name AND tt.name = :technology")
Optional<ThermalClusterRef> findByNameAndTechnologyName(String name, String technology);
Optional<ThermalClusterRef> findByThermalTechnologyIsNullAndNameIgnoreCase(String name);


}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collections;
import java.util.Optional;

@Slf4j
@Service
Expand All @@ -23,23 +23,30 @@ public class ThermalClusterRefServiceImpl implements ThermalClusterRefService {


@Transactional
@Override
public ThermalClusterRef findOrCreateThermalClusterRef(String technology, String name, String namePemmdb) {
String trimmedName = name != null ? name.trim() : null;
public ThermalClusterRef findOrCreateThermalClusterRef(String technologyName, String clusterName, String namePemmdb) {
String trimmedName = clusterName.trim();

return thermalClusterRefRepository.findByNameAndTechnologyName(trimmedName, technology)
.map(ref -> updatePemmdbIfNeeded(ref, namePemmdb))
.orElseGet(() -> {
// Création si absent
ThermalTechnology thermalTechnology = technology != null ? findThermalTechnology(technology) : null;
ThermalClusterRef ref = buildClusterRef(trimmedName, thermalTechnology, namePemmdb);
return thermalClusterRefRepository.save(ref);
});
Optional<ThermalClusterRef> optionalThermalClusterRef = technologyName != null ?
thermalClusterRefRepository.findByThermalTechnology_NameIgnoreCaseAndNameIgnoreCase(technologyName, trimmedName) :
thermalClusterRefRepository.findByThermalTechnologyIsNullAndNameIgnoreCase(trimmedName);

return optionalThermalClusterRef.map(ref -> updatePemmdbIfNeeded(ref, namePemmdb)).orElseGet(() -> {

ThermalTechnology thermalTechnology = technologyName != null ? getThermalTechnology(technologyName) : null;

ThermalClusterRef ref = buildThermalClusterRef(namePemmdb, trimmedName, thermalTechnology);

return thermalClusterRefRepository.save(ref);
});
}

// ==========================
// Helpers
// ==========================
private ThermalTechnology getThermalTechnology(String technologyName) {
return thermalTechnologyRepository.findThermalTechnologyByNameIgnoreCase(technologyName).orElseThrow(() -> BusinessException.builder().message("Technology " + technologyName + " does not exist").build());
}

private static ThermalClusterRef buildThermalClusterRef(String namePemmdb, String trimmedName, ThermalTechnology technology) {
return ThermalClusterRef.builder().name(trimmedName).namePemmdb(namePemmdb != null && !namePemmdb.isBlank() ? namePemmdb : "NA").thermalTechnology(technology).build();
}

private ThermalClusterRef updatePemmdbIfNeeded(ThermalClusterRef ref, String namePemmdb) {
if (namePemmdb != null && !namePemmdb.isBlank()) {
Expand All @@ -50,46 +57,4 @@ private ThermalClusterRef updatePemmdbIfNeeded(ThermalClusterRef ref, String nam
}
return ref;
}

private ThermalTechnology findThermalTechnology(String technology) {
return thermalTechnologyRepository.findThermalTechnologyByNameIgnoreCase(technology)
.orElseThrow(() -> BusinessException.builder().message("Technology {0} does not exist in the technology reference table.")
.errorMessageArguments(Collections.singletonList(technology))
.build());
}

private ThermalClusterRef buildClusterRef(String name, ThermalTechnology technology, String namePemmdb) {
return ThermalClusterRef.builder()
.name(name).thermalTechnology(technology).namePemmdb((namePemmdb != null && !namePemmdb.isBlank()) ? namePemmdb : "NA")
.build();
}

// ==========================
// Key
// ==========================

private record ClusterKey(String technology, String name) {

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ClusterKey other)) return false;
return equalsIgnoreCase(technology, other.technology) && equalsIgnoreCase(name, other.name);
}

@Override
public int hashCode() {
return (normalize(technology) + "|" + normalize(name)).hashCode();
}

private static boolean equalsIgnoreCase(String a, String b) {
if (a == null && b == null) return true;
if (a == null || b == null) return false;
return a.equalsIgnoreCase(b);
}

private static String normalize(String s) {
return s == null ? "" : s.toLowerCase();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ SEQUENCE trajectory_sequence

CREATE
SEQUENCE area_sequence
START WITH 40
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
-- liquibase formatted sql
-- changeset elazaarmou:100V8-1
ALTER SEQUENCE trajectory_sequence RESTART WITH 100;
ALTER SEQUENCE project_sequence RESTART WITH 100;
ALTER SEQUENCE study_sequence RESTART WITH 100;
ALTER SEQUENCE trajectory_sequence RESTART WITH 1;
ALTER SEQUENCE project_sequence RESTART WITH 1;
ALTER SEQUENCE study_sequence RESTART WITH 1;

Loading