Untitled

 avatar
unknown
java
12 days ago
2.0 kB
2
Indexable
import java.lang.reflect.Method;
import java.util.Map;
import java.util.function.Consumer;
import lombok.extern.slf4j.Slf4j;

@Slf4j
class FieldProcessingHelpers {

  private static final Map<String, String> FIELD_MAPPINGS = Map.of(
      "celex", "ID_CELEX",
      "eli", "RESOURCE_LEGAL_ELI",
      "ojNumber", "RESOURCE_LEGAL_NUMBER_NATURAL",
      "actType", "WORK_HAS_RESOURCE-TYPE",
      "ojSeries", "OFFICIAL_JOURNAL_ACT_PART_OF_COLLECTION_DOCUMENT",
      "ojYear", "YEAR"
  );

  void processFields(Work work, EuActDto euActDto) {
    FIELD_MAPPINGS.forEach((dtoField, xmlField) -> {
      processField(work, euActDto, dtoField, xmlField);
    });
  }

  private static void processField(Work work, EuActDto dto, String fieldName, String xmlFieldName) {
    try {
      // Construct getter name (e.g., getEli)
      String getterName = "get" + capitalize(fieldName);
      Method getterMethod = Work.class.getMethod(getterName);
      Object source = getterMethod.invoke(work);

      if (source != null) {
        String value = extractValue(source);

        // Construct setter name (e.g., setEli)
        String setterName = "set" + capitalize(fieldName);
        Method setterMethod = EuActDto.class.getMethod(setterName, String.class);
        setterMethod.invoke(dto, value);

        log.debug("Set {} to '{}'", xmlFieldName, value);
      } else {
        log.warn("{} field is missing or invalid.", xmlFieldName);
      }
    } catch (Exception e) {
      log.error("Error processing field: {} for XML field {}", fieldName, xmlFieldName, e);
    }
  }

  private static String capitalize(String str) {
    return str.substring(0, 1).toUpperCase() + str.substring(1);
  }

  private static String extractValue(Object obj) {
    if (obj instanceof HasValue) {
      return ((HasValue) obj).getValue();
    } else if (obj instanceof HasPrefLabel) {
      return ((HasPrefLabel) obj).getPrefLabel();
    }
    return null;
  }
}
Leave a Comment