diff --git a/src/nl/surf/eduhub_rio_mapper/commands/dry_run.clj b/src/nl/surf/eduhub_rio_mapper/commands/dry_run.clj index 884ea6bd..8c596a48 100644 --- a/src/nl/surf/eduhub_rio_mapper/commands/dry_run.clj +++ b/src/nl/surf/eduhub_rio_mapper/commands/dry_run.clj @@ -79,7 +79,7 @@ {:begindatum (:validFrom current-period), :naamLang (ooapi-utils/get-localized-value (:name current-period) dutch-locales), :naamKort (:abbreviation current-period), - :internationaleNaam (ooapi-utils/get-localized-value (:name current-period)), + :internationaleNaam (ooapi-utils/get-localized-value (:name current-period) []), :omschrijving (ooapi-utils/get-localized-value (:description current-period) dutch-locales), :eigenOpleidingseenheidSleutel (:educationSpecificationId eduspec)})) @@ -98,7 +98,7 @@ (ooapi-utils/get-localized-value dutch-locales)) :eigenNaamInternationaal (-> current-period :name - (ooapi-utils/get-localized-value)) + (ooapi-utils/get-localized-value [])) :eigenOmschrijving (-> current-period :description (ooapi-utils/get-localized-value dutch-locales)) diff --git a/src/nl/surf/eduhub_rio_mapper/rio/aangeboden_opleiding.clj b/src/nl/surf/eduhub_rio_mapper/rio/aangeboden_opleiding.clj index ad7477c6..11700171 100644 --- a/src/nl/surf/eduhub_rio_mapper/rio/aangeboden_opleiding.clj +++ b/src/nl/surf/eduhub_rio_mapper/rio/aangeboden_opleiding.clj @@ -54,7 +54,7 @@ "privateProgram" "aangebodenParticuliereOpleiding"}) (def ^:private mapping-course-program->aangeboden-opleiding - {:buitenlandsePartner [:foreignPartners true] + {:buitenlandsePartner [#(ooapi-utils/truncate (:foreignPartners %) 250) true] :eersteInstroomDatum [:firstStartDate false] :onderwijsaanbiedercode [:educationOffererCode true] :onderwijslocatiecode [:educationLocationCode true] @@ -67,7 +67,7 @@ :deelnemersplaatsen :maxNumberStudents :einddatum :endDate :eindeAanmeldperiode :enrollEndDate - :toelichtingVereisteToestemming :explanationRequiredPermission}) + :toelichtingVereisteToestemming #(-> % :explanationRequiredPermission (ooapi-utils/truncate 3000))}) (defn- course-program-timeline-override-adapter [{:keys [name description validFrom abbreviation link consumers] :as _periode}] @@ -76,14 +76,14 @@ (fn [pk] (case pk :begindatum validFrom - :buitenlandsePartner foreignPartners + :buitenlandsePartner (ooapi-utils/truncate foreignPartners 250) :deficientie (rio-helper/ooapi-mapping "deficientie" deficiency) - :eigenNaamAangebodenOpleiding (ooapi-utils/get-localized-value name ["nl-NL" "nl"]) - :eigenNaamInternationaal (ooapi-utils/get-localized-value-exclusive name ["en"]) - :eigenNaamKort abbreviation - :eigenOmschrijving (ooapi-utils/get-localized-value description ["nl-NL" "nl"]) + :eigenNaamAangebodenOpleiding (ooapi-utils/get-localized-value name ["nl-NL" "nl"] :maxlen 225) + :eigenNaamInternationaal (ooapi-utils/get-localized-value-exclusive name ["en"] :maxlen 225) + :eigenNaamKort (ooapi-utils/truncate abbreviation 40) + :eigenOmschrijving (ooapi-utils/get-localized-value description ["nl-NL" "nl"] :maxlen 3000) :eisenWerkzaamheden (rio-helper/ooapi-mapping "eisenWerkzaamheden" requirementsActivities) - :internationaleNaamDuits (ooapi-utils/get-localized-value-exclusive name ["de"]) + :internationaleNaamDuits (ooapi-utils/get-localized-value-exclusive name ["de"] :maxlen 225) :propedeutischeFase (rio-helper/ooapi-mapping "propedeutischeFase" propaedeuticPhase) :samenwerkendeOnderwijsaanbiedercode jointPartnerCodes :studiekeuzecheck (rio-helper/ooapi-mapping "studiekeuzecheck" studyChoiceCheck) diff --git a/src/nl/surf/eduhub_rio_mapper/rio/opleidingseenheid.clj b/src/nl/surf/eduhub_rio_mapper/rio/opleidingseenheid.clj index 1a32b9f3..75c29716 100644 --- a/src/nl/surf/eduhub_rio_mapper/rio/opleidingseenheid.clj +++ b/src/nl/surf/eduhub_rio_mapper/rio/opleidingseenheid.clj @@ -42,10 +42,10 @@ (fn [pk] (case pk :begindatum validFrom - :internationaleNaam (ooapi-utils/get-localized-value-exclusive name ["en"]) - :naamKort abbreviation - :naamLang (ooapi-utils/get-localized-value name ["nl-NL" "nl"]) - :omschrijving (ooapi-utils/get-localized-value description ["nl-NL" "nl"]) + :internationaleNaam (ooapi-utils/get-localized-value-exclusive name ["en"] :maxlen 225) + :naamKort (ooapi-utils/truncate abbreviation 40) + :naamLang (ooapi-utils/get-localized-value name ["nl-NL" "nl"] :maxlen 225) + :omschrijving (ooapi-utils/get-localized-value description ["nl-NL" "nl"] :maxlen 3000) :studielast (if (= "VARIANT" (soort-mapping eduspec)) nil (:value studyLoad)) :studielasteenheid (rio-helper/ooapi-mapping "studielasteenheid" (:studyLoadUnit studyLoad)) :waardedocumentsoort (rio-helper/ooapi-mapping "waardedocumentsoort" formalDocument)))) diff --git a/src/nl/surf/eduhub_rio_mapper/utils/ooapi.clj b/src/nl/surf/eduhub_rio_mapper/utils/ooapi.clj index 6aa51564..57ffc69b 100644 --- a/src/nl/surf/eduhub_rio_mapper/utils/ooapi.clj +++ b/src/nl/surf/eduhub_rio_mapper/utils/ooapi.clj @@ -12,6 +12,12 @@ true (catch IllegalArgumentException _ false))) +(defn truncate [s n] + {:pre [(and (integer? n) (pos? n))]} + (if (string? s) + (subs s 0 (min (count s) n)) + s)) + (defn level-sector-map-to-rio? "True if we can map the given level and sector to RIO." [{:keys [level sector educationSpecificationType]}] @@ -22,23 +28,30 @@ "Get localized value from LanguageTypedString. The provided locales are tried in order. There is no fallback" - [attr & [locales]] + ([attr locales] (->> locales (keep (fn [locale] (some #(when (string/starts-with? (% :language) locale) (% :value)) attr))) first)) + ([attr locales key value] + {:pre [(= key :maxlen)]} + (-> (get-localized-value-exclusive attr locales) + (truncate value)))) (defn get-localized-value "Get localized value from LanguageTypedString. The provided locales are tried in order. If none found, fall back to English (international). If still none found take the first." - [attr & [locales]] - (or + ([attr locales] (or (get-localized-value-exclusive attr (concat locales ["en"])) (-> attr first :value))) + ([attr locales key value] + {:pre [(= key :maxlen)]} + (-> (get-localized-value attr locales) + (truncate value)))) (defn ooapi-to-periods [{:keys [timelineOverrides] :as ooapi} entity-key] (as-> timelineOverrides $ diff --git a/test/nl/surf/eduhub_rio_mapper/rio_test.clj b/test/nl/surf/eduhub_rio_mapper/rio_test.clj index f8ce9de0..c1768f95 100644 --- a/test/nl/surf/eduhub_rio_mapper/rio_test.clj +++ b/test/nl/surf/eduhub_rio_mapper/rio_test.clj @@ -33,8 +33,7 @@ [nl.surf.eduhub-rio-mapper.utils.keystore :as keystore] [nl.surf.eduhub-rio-mapper.utils.soap :as soap] [nl.surf.eduhub-rio-mapper.utils.xml-utils :as xml-utils]) - (:import clojure.lang.ExceptionInfo - java.io.PushbackReader)) + (:import java.io.PushbackReader)) (deftest canonicalization-and-digestion (let [canonicalizer (fn [id] (str " request - prep-body - (soap/guard-valid-sexp mutator/validator))) - "guard should throw an exception"))) - (defn collect-paths "If leaf-node, add current path (and node if include-leaves is true) to acc. Otherwise, call recursively for each child with name of child appended to the path."