package cz.trask.migration.impl.v45; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.concurrent.atomic.AtomicInteger; import cz.trask.migration.AbstractProcess; import cz.trask.migration.model.TokenResponse; import lombok.extern.log4j.Log4j2; @Log4j2 public class ApiFilesToWso2 extends AbstractProcess { private final AtomicInteger apiCounter = new AtomicInteger(1); /** * Main entry point for the import process. * * @throws RuntimeException if any error occurs */ public void process() { try { log.info("Starting API import to WSO2 from directory..."); TokenResponse token = authenticateToWso2AndGetToken(config.getTarget()); File root = new File(config.getSource().getWso2ApisDir()); File[] apiFiles = root.listFiles((dir, name) -> name.endsWith(".zip")); if (apiFiles == null || apiFiles.length == 0) { log.warn("No API zip files found in directory: {}", config.getSource().getWso2ApisDir()); return; } log.info("Found {} APIs", apiFiles.length); for (File api : apiFiles) { final int index = apiCounter.getAndIncrement(); processApi(api, token, index, apiFiles.length); } log.info("Finished processing APIs."); } catch (Exception e) { log.error("Error while importing APIs.", e); throw new RuntimeException("Import failed", e); } } /** * Process a single API – fetches the data, creates or updates the corresponding * artifact in WSO2. */ private void processApi(File apiFile, TokenResponse token, int index, int total) { long start = System.currentTimeMillis(); try { log.info("Processing API {} of {}", index, total); String fileName = apiFile.getName(); byte[] data = null; try { data = Files.readAllBytes(apiFile.toPath()); } catch (IOException e) { log.error("Failed to read API file '{}': {}", apiFile.getName(), e.getMessage(), e); return; } if (data != null && data.length > 0 && fileName != null && !fileName.isEmpty()) { int responseCode = publishApiToWso2(fileName, data, token); if (responseCode == 200 || responseCode == 201) { log.info(" - API version {} imported successfully with response code: {}", fileName, responseCode); } else { log.warn(" - API version {} import failed with response code: {}", fileName, responseCode); } } log.info("Successfully imported API '{}' ({}). Took {} ms", apiFile.getName(), apiFile.getName(), System.currentTimeMillis() - start); } catch (Exception e) { log.error("Cannot export API '{}': {}", apiFile.getName(), e.getMessage(), e); } } }