All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.axway.apim.setup.impl.JsonAPIManagerSetupExporter Maven / Gradle / Ivy

package com.axway.apim.setup.impl;

import com.axway.apim.adapter.APIManagerAdapter;
import com.axway.apim.adapter.apis.RemoteHostFilter;
import com.axway.apim.adapter.jackson.PolicySerializerModifier;
import com.axway.apim.adapter.jackson.UserSerializerModifier;
import com.axway.apim.api.model.Config;
import com.axway.apim.lib.EnvironmentProperties;
import com.axway.apim.lib.ExportResult;
import com.axway.apim.lib.error.AppException;
import com.axway.apim.lib.error.ErrorCode;
import com.axway.apim.lib.utils.Utils;
import com.axway.apim.setup.lib.APIManagerSetupExportParams;
import com.axway.apim.setup.model.APIManagerConfig;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

public class JsonAPIManagerSetupExporter extends APIManagerSetupResultHandler {
    private static final Logger LOG = LoggerFactory.getLogger(JsonAPIManagerSetupExporter.class);

    public JsonAPIManagerSetupExporter(APIManagerSetupExportParams params, ExportResult result) {
        super(params, result);
    }

    @Override
    public RemoteHostFilter getRemoteHostFilter() {
        return getRemoteHostBaseFilterBuilder().build();
    }

    @Override
    public void export(APIManagerConfig apimanagerConfig) throws AppException {
        exportToFile(new ObjectMapper(), apimanagerConfig, "/apimanager-config.json");
    }


    public void exportToFile(ObjectMapper mapper, APIManagerConfig apimanagerConfig, String configFile) throws AppException {
        File localFolder = null;
        if (!EnvironmentProperties.PRINT_CONFIG_CONSOLE) {
            String folderName = getExportFolder(apimanagerConfig.getConfig());
            String targetFolder = params.getTarget();
            localFolder = new File(targetFolder + File.separator + folderName);
            LOG.info("Going to export API-Manager configuration into folder: {}", localFolder);
            if (localFolder.exists()) {
                if (params.isDeleteTarget()) {
                    Utils.deleteDirectory(localFolder);
                } else {
                    LOG.warn("Local export folder: {} already exists. Configuration will not be exported. (You may set -deleteTarget)", localFolder);
                    this.hasError = true;
                    return;
                }
            }
            if (!localFolder.mkdirs()) {
                throw new AppException("Cannot create export folder: " + localFolder, ErrorCode.UNXPECTED_ERROR);
            }
        }
        try {
            mapper.enable(SerializationFeature.INDENT_OUTPUT);
            mapper.registerModule(new SimpleModule().setSerializerModifier(new PolicySerializerModifier(true)));
            mapper.registerModule(new SimpleModule().setSerializerModifier(new UserSerializerModifier(true)));
            FilterProvider filters = new SimpleFilterProvider()
                .addFilter("RemoteHostFilter", SimpleBeanPropertyFilter.serializeAllExcept("id", "organizationId"))
                .addFilter("APIManagerConfigFilter", SimpleBeanPropertyFilter.serializeAllExcept("os", "architecture", "productVersion", "baseOAuth"))
                .addFilter("QuotaRestrictionFilter", SimpleBeanPropertyFilter.serializeAllExcept("apiId")) // Is handled in ExportApplication
                .setFailOnUnknownId(false);
            mapper.setFilterProvider(filters);
            if (EnvironmentProperties.PRINT_CONFIG_CONSOLE) {
                mapper.writeValue(System.out, apimanagerConfig);
            } else {
                mapper.writeValue(new File(localFolder.getCanonicalPath() + configFile), apimanagerConfig);
                result.addExportedFile(localFolder.getCanonicalPath() + configFile);
            }
        } catch (Exception e) {
            throw new AppException("Can't create configuration export", ErrorCode.UNXPECTED_ERROR, e);
        }
        LOG.info("Successfully exported API-Manager configuration into: {}{}", localFolder, configFile);
        if (!APIManagerAdapter.getInstance().hasAdminAccount()) {
            LOG.warn("Export has been done with an Org-Admin account only. Export of configuration restricted.");
        }
    }

    private String getExportFolder(Config config) {
        try {
            if (config == null) {
                config = APIManagerAdapter.getInstance().getConfigAdapter().getConfig(APIManagerAdapter.getInstance().hasAdminAccount());
            }
            String name = config.getPortalName().toLowerCase();
            name = name.replace(" ", "-");
            return name;
        } catch (Exception e) {
            LOG.warn("Error defining export folder. Error message: {}", e.getMessage());
            if (LOG.isDebugEnabled()) {
                LOG.error("Error defining export folder.", e);
            }
            return "";
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy