diff --git a/core/src/main/java/be/ida_mediafoundry/jetpack/dictionaryactivation/models/Dictionary.java b/core/src/main/java/be/ida_mediafoundry/jetpack/dictionaryactivation/models/Dictionary.java index ca1cf26..9c89fc9 100644 --- a/core/src/main/java/be/ida_mediafoundry/jetpack/dictionaryactivation/models/Dictionary.java +++ b/core/src/main/java/be/ida_mediafoundry/jetpack/dictionaryactivation/models/Dictionary.java @@ -46,7 +46,7 @@ private void init() { addLanguageCode(languageCodes, languageResource); languageResource.listChildren().forEachRemaining(dictionaryKeyResource -> { addTranslationKeys(translationKeys, dictionaryKeyResource); - if(isNewTranslationSinceLastReplication(dictionaryKeyResource)){ + if (isNewTranslationSinceLastReplication(dictionaryKeyResource)) { numberOfNewTranslations++; } }); @@ -56,14 +56,6 @@ private void init() { setDescription(languageCodes); } - private void setDescription(List languageCodes) { - if (languageCodes.size() < 10) { - description = String.join(", ", languageCodes); - } else { - description = languageCodes.size() + " languages"; - } - } - private boolean isNewTranslationSinceLastReplication(Resource dictionaryKeyResource) { Calendar created = dictionaryKeyResource.getValueMap().get("jcr:created", Calendar.class); return lastReplicated == null || lastReplicated.before(created); @@ -71,7 +63,9 @@ private boolean isNewTranslationSinceLastReplication(Resource dictionaryKeyResou private void addLanguageCode(List languageCodes, Resource languageResource) { String languageCode = languageResource.getValueMap().get("jcr:language", String.class); - languageCodes.add(languageCode); + if (languageCode != null && !languageCode.isEmpty()) { + languageCodes.add(languageCode); + } } private void addTranslationKeys(Set uniqueKeys, Resource dictionaryKey) { @@ -106,6 +100,14 @@ public String getDescription() { return description; } + private void setDescription(List languageCodes) { + if (languageCodes.size() < 10) { + description = String.join(", ", languageCodes); + } else { + description = languageCodes.size() + " languages"; + } + } + public String getReplicationDate() { return formatDateRDF(lastReplicated, null); } diff --git a/core/src/test/java/be/ida_mediafoundry/jetpack/dictionaryactivation/models/DictionaryTest.java b/core/src/test/java/be/ida_mediafoundry/jetpack/dictionaryactivation/models/DictionaryTest.java index 5f2640b..dc15077 100644 --- a/core/src/test/java/be/ida_mediafoundry/jetpack/dictionaryactivation/models/DictionaryTest.java +++ b/core/src/test/java/be/ida_mediafoundry/jetpack/dictionaryactivation/models/DictionaryTest.java @@ -21,6 +21,7 @@ public void setUp() { context.load().json("/mocks/dictionary.json", "/apps/test-dictionary"); context.load().json("/mocks/activated-dictionary.json", "/apps/test-dictionary-2"); context.load().json("/mocks/activated-dictionary-more-languages.json", "/apps/test-dictionary-3"); + context.load().json("/mocks/dictionary-with-non-language-folders.json", "/apps/test-dictionary-4"); context.addModelsForClasses(Dictionary.class); } @@ -81,4 +82,17 @@ public void testActivatedDictionary_moreLanguages() { assertThat(dictionary.getReplicationDate()).isNotBlank(); assertThat(dictionary.getReplicationBy()).isNotBlank(); } + + @Test + public void testDictionary_nonLanguageFolder() { + //given + Resource resource = context.resourceResolver().getResource("/apps/test-dictionary-4"); + context.request().setResource(resource); + + Dictionary dictionary = context.request().adaptTo(Dictionary.class); + + assertThat(dictionary).isNotNull(); + assertThat(dictionary.getTitle()).isEqualTo("/apps/test-dictionary-4"); + assertThat(dictionary.getDescription()).isEqualTo("en, en-us"); + } } diff --git a/core/src/test/resources/mocks/dictionary-with-non-language-folders.json b/core/src/test/resources/mocks/dictionary-with-non-language-folders.json new file mode 100644 index 0000000..3ac66cb --- /dev/null +++ b/core/src/test/resources/mocks/dictionary-with-non-language-folders.json @@ -0,0 +1,82 @@ +{ + "jcr:primaryType": "nt:folder", + "jcr:createdBy": "admin", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200", + "en": { + "jcr:primaryType": "nt:folder", + "jcr:mixinTypes": [ + "mix:language" + ], + "jcr:createdBy": "admin", + "jcr:language": "en", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200", + "foundation.u65-news-letter-registration.placeholder-msg.email": { + "jcr:primaryType": "nt:folder", + "jcr:mixinTypes": [ + "sling:Message" + ], + "jcr:createdBy": "admin", + "sling:message": "E-mail address", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200" + }, + "foundation.s08-specification-details.seeless": { + "jcr:primaryType": "nt:folder", + "jcr:mixinTypes": [ + "sling:Message" + ], + "jcr:createdBy": "admin", + "sling:message": "See less specifications", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200" + }, + "foundation.u65-news-letter-registration.submit": { + "jcr:primaryType": "nt:folder", + "jcr:mixinTypes": [ + "sling:Message" + ], + "jcr:createdBy": "admin", + "sling:message": "Subscribe", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200" + } + }, + "en-us": { + "jcr:primaryType": "nt:folder", + "jcr:mixinTypes": [ + "mix:language" + ], + "jcr:createdBy": "admin", + "jcr:language": "en-us", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200", + "foundation.u65-news-letter-registration.placeholder-msg.email": { + "jcr:primaryType": "nt:folder", + "jcr:mixinTypes": [ + "sling:Message" + ], + "jcr:createdBy": "admin", + "sling:message": "E-mail address", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200" + }, + "foundation.s08-specification-details.seeless": { + "jcr:primaryType": "nt:folder", + "jcr:mixinTypes": [ + "sling:Message" + ], + "jcr:createdBy": "admin", + "sling:message": "See less specifications", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200" + }, + "foundation.u65-news-letter-registration.submit": { + "jcr:primaryType": "nt:folder", + "jcr:mixinTypes": [ + "sling:Message" + ], + "jcr:createdBy": "admin", + "sling:message": "Subscribe", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200" + } + }, + "no-translations": { + "jcr:primaryType": "nt:folder", + "jcr:createdBy": "admin", + "jcr:created": "Thu Sep 06 2018 15:16:06 GMT+0200" + } +} \ No newline at end of file