Skip to content

Commit

Permalink
Added file checksum handling to ThirdPartyTMSSmartlingWithJSON
Browse files Browse the repository at this point in the history
  • Loading branch information
maallen committed Aug 4, 2023
1 parent 872a2a0 commit 53370ce
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.box.l10n.mojito.service.thirdparty;

import static com.box.l10n.mojito.android.strings.AndroidPluralQuantity.MANY;
import static com.box.l10n.mojito.service.thirdparty.ThirdPartyTMSUtils.isFileEqualToPreviousRun;
import static com.box.l10n.mojito.service.thirdparty.smartling.SmartlingFileUtils.getOutputSourceFile;
import static com.box.l10n.mojito.service.thirdparty.smartling.SmartlingFileUtils.getOutputTargetFile;
import static com.box.l10n.mojito.service.thirdparty.smartling.SmartlingFileUtils.isPluralFile;
Expand All @@ -9,11 +10,8 @@
import com.box.l10n.mojito.android.strings.AndroidStringDocumentMapper;
import com.box.l10n.mojito.android.strings.AndroidStringDocumentReader;
import com.box.l10n.mojito.android.strings.AndroidStringDocumentWriter;
import com.box.l10n.mojito.entity.Locale;
import com.box.l10n.mojito.entity.Repository;
import com.box.l10n.mojito.entity.RepositoryLocale;
import com.box.l10n.mojito.entity.ThirdPartyFileChecksum;
import com.box.l10n.mojito.entity.ThirdPartyFileChecksumId;
import com.box.l10n.mojito.service.assetExtraction.AssetTextUnitToTMTextUnitRepository;
import com.box.l10n.mojito.service.thirdparty.smartling.SmartlingFile;
import com.box.l10n.mojito.service.thirdparty.smartling.SmartlingFileUtils;
Expand Down Expand Up @@ -45,7 +43,6 @@
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.regex.Pattern;
Expand All @@ -55,7 +52,6 @@
import java.util.stream.StreamSupport;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -660,7 +656,11 @@ private void processPullBatch(
"Error with download from Smartling, file content string is not present."));

if (isFileEqualToPreviousRun(
repository, locale.getLocale(), fileName, fileContent)) {
thirdPartyFileChecksumRepository,
repository,
locale.getLocale(),
fileName,
fileContent)) {
logger.info("Checksum match for " + fileName + ", skipping text unit import.");
return;
}
Expand Down Expand Up @@ -690,26 +690,6 @@ private void processPullBatch(
}
}

private boolean isFileEqualToPreviousRun(
Repository repository, Locale locale, String fileName, String fileContent) {

String currentChecksum = DigestUtils.md5Hex(fileContent);
ThirdPartyFileChecksumId thirdPartyFileChecksumId =
new ThirdPartyFileChecksumId(repository, locale, fileName);

Optional<ThirdPartyFileChecksum> thirdPartyFileChecksum =
thirdPartyFileChecksumRepository.findByThirdPartyFileChecksumId(thirdPartyFileChecksumId);
if (thirdPartyFileChecksum.isPresent()
&& thirdPartyFileChecksum.get().getChecksum().equals(currentChecksum)) {
return true;
} else {
thirdPartyFileChecksumRepository.save(
new ThirdPartyFileChecksum(thirdPartyFileChecksumId, currentChecksum));
}

return false;
}

@Override
public void pushTranslations(
Repository repository,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.box.l10n.mojito.service.thirdparty;

import static com.box.l10n.mojito.service.thirdparty.ThirdPartyTMSUtils.isFileEqualToPreviousRun;
import static com.box.l10n.mojito.service.thirdparty.smartling.SmartlingFileUtils.isPluralFile;

import com.box.l10n.mojito.entity.Repository;
Expand Down Expand Up @@ -58,6 +59,8 @@ public class ThirdPartyTMSSmartlingWithJson {

MeterRegistry meterRegistry;

ThirdPartyFileChecksumRepository thirdPartyFileChecksumRepository;

int batchSize = 5000;

public ThirdPartyTMSSmartlingWithJson(
Expand All @@ -66,13 +69,15 @@ public ThirdPartyTMSSmartlingWithJson(
TextUnitSearcher textUnitSearcher,
TextUnitBatchImporterService textUnitBatchImporterService,
SmartlingJsonKeys smartlingJsonKeys,
MeterRegistry meterRegistry) {
MeterRegistry meterRegistry,
ThirdPartyFileChecksumRepository thirdPartyFileChecksumRepository) {
this.smartlingClient = smartlingClient;
this.smartlingJsonConverter = smartlingJsonConverter;
this.textUnitSearcher = textUnitSearcher;
this.textUnitBatchImporterService = textUnitBatchImporterService;
this.smartlingJsonKeys = smartlingJsonKeys;
this.meterRegistry = meterRegistry;
this.thirdPartyFileChecksumRepository = thirdPartyFileChecksumRepository;
}

void push(
Expand Down Expand Up @@ -201,6 +206,19 @@ void pull(Repository repository, String projectId, Map<String, String> localeMap
String localizedFileContent =
getLocalizedFileContent(projectId, file, smartlingLocale, false);

if (isFileEqualToPreviousRun(
thirdPartyFileChecksumRepository,
repository,
repositoryLocale.getLocale(),
file.getFileUri(),
localizedFileContent)) {
logger.info(
"Checksum match for "
+ file.getFileUri()
+ ", skipping text unit import.");
return;
}

ImmutableList<TextUnitDTO> textUnitDTOS =
smartlingJsonConverter.jsonStringToTextUnitDTOs(
localizedFileContent, TextUnitDTO::setTarget);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.box.l10n.mojito.service.thirdparty;

import com.box.l10n.mojito.entity.Locale;
import com.box.l10n.mojito.entity.Repository;
import com.box.l10n.mojito.entity.ThirdPartyFileChecksum;
import com.box.l10n.mojito.entity.ThirdPartyFileChecksumId;
import java.util.Optional;
import org.apache.commons.codec.digest.DigestUtils;

public class ThirdPartyTMSUtils {

public static boolean isFileEqualToPreviousRun(
ThirdPartyFileChecksumRepository thirdPartyFileChecksumRepository,
Repository repository,
Locale locale,
String fileName,
String fileContent) {

String currentChecksum = DigestUtils.md5Hex(fileContent);
ThirdPartyFileChecksumId thirdPartyFileChecksumId =
new ThirdPartyFileChecksumId(repository, locale, fileName);

Optional<ThirdPartyFileChecksum> thirdPartyFileChecksum =
thirdPartyFileChecksumRepository.findByThirdPartyFileChecksumId(thirdPartyFileChecksumId);
if (thirdPartyFileChecksum.isPresent()
&& thirdPartyFileChecksum.get().getChecksum().equals(currentChecksum)) {
return true;
} else {
thirdPartyFileChecksumRepository.save(
new ThirdPartyFileChecksum(thirdPartyFileChecksumId, currentChecksum));
}

return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ public class ThirdPartyTMSSmartlingWithJsonTest extends ServiceTestBase {

@Autowired TextUnitSearcher textUnitSearcher;

@Mock ThirdPartyFileChecksumRepository thirdPartyFileChecksumRepository;

SmartlingJsonConverter smartlingJsonConverter =
new SmartlingJsonConverter(ObjectMapper.withIndentedOutput(), new SmartlingJsonKeys());

Expand Down Expand Up @@ -250,7 +252,8 @@ public void testGetTranslatedUnits() {
ImmutableList.of(translatedTextUnitDto, untranslatedTextUnitDtoWithOriginalString);

ThirdPartyTMSSmartlingWithJson thirdPartyTMSSmartlingWithJson =
new ThirdPartyTMSSmartlingWithJson(null, null, null, null, null, meterRegistryMock);
new ThirdPartyTMSSmartlingWithJson(
null, null, null, null, null, meterRegistryMock, thirdPartyFileChecksumRepository);

ImmutableList<TextUnitDTO> result =
thirdPartyTMSSmartlingWithJson.getTranslatedUnits(
Expand Down

0 comments on commit 53370ce

Please sign in to comment.