Search in sources :

Example 1 with NewPluginBean

use of io.apiman.manager.api.beans.plugins.NewPluginBean in project apiman by apiman.

the class PluginResourceImpl method create.

/**
 * @see IPluginResource#create(io.apiman.manager.api.beans.plugins.NewPluginBean)
 */
@Override
public PluginBean create(NewPluginBean bean) throws PluginAlreadyExistsException, PluginNotFoundException, NotAuthorizedException {
    securityContext.checkAdminPermissions();
    PluginCoordinates coordinates = new PluginCoordinates(bean.getGroupId(), bean.getArtifactId(), bean.getVersion(), bean.getClassifier(), bean.getType());
    boolean isSnapshot = PluginUtils.isSnapshot(coordinates);
    if (isSnapshot) {
        // $NON-NLS-1$
        LOGGER.debug("Loading a snapshot version of plugin: " + coordinates);
    }
    boolean isUpgrade = isSnapshot || bean.isUpgrade();
    Plugin plugin;
    try {
        plugin = pluginRegistry.loadPlugin(coordinates);
        bean.setName(plugin.getName());
        bean.setDescription(plugin.getDescription());
    } catch (InvalidPluginException e) {
        throw new PluginNotFoundException(coordinates.toString(), e);
    }
    PluginBean pluginBean = new PluginBean();
    pluginBean.setGroupId(bean.getGroupId());
    pluginBean.setArtifactId(bean.getArtifactId());
    pluginBean.setVersion(bean.getVersion());
    pluginBean.setClassifier(bean.getClassifier());
    pluginBean.setType(bean.getType());
    pluginBean.setName(bean.getName());
    pluginBean.setDescription(bean.getDescription());
    pluginBean.setCreatedBy(securityContext.getCurrentUser());
    pluginBean.setCreatedOn(new Date());
    try {
        PluginBean existingPlugin = storage.getPlugin(bean.getGroupId(), bean.getArtifactId());
        boolean hasExistingPlugin = existingPlugin != null && !existingPlugin.isDeleted();
        boolean isUpdatePolicyDefs = false;
        if (hasExistingPlugin && !isUpgrade) {
            throw ExceptionFactory.pluginAlreadyExistsException();
        } else if (hasExistingPlugin && isUpgrade) {
            isUpdatePolicyDefs = true;
            existingPlugin.setName(pluginBean.getName());
            existingPlugin.setDescription(pluginBean.getDescription());
            existingPlugin.setVersion(pluginBean.getVersion());
            existingPlugin.setClassifier(pluginBean.getClassifier());
            existingPlugin.setType(pluginBean.getType());
            pluginBean.setId(existingPlugin.getId());
            storage.updatePlugin(existingPlugin);
        } else if (!hasExistingPlugin && existingPlugin != null) {
            isUpdatePolicyDefs = true;
            existingPlugin.setName(pluginBean.getName());
            existingPlugin.setDescription(pluginBean.getDescription());
            existingPlugin.setVersion(pluginBean.getVersion());
            existingPlugin.setClassifier(pluginBean.getClassifier());
            existingPlugin.setType(pluginBean.getType());
            existingPlugin.setCreatedOn(new Date());
            existingPlugin.setCreatedBy(securityContext.getCurrentUser());
            existingPlugin.setDeleted(false);
            pluginBean.setId(existingPlugin.getId());
            storage.updatePlugin(existingPlugin);
        } else {
            if (bean.isUpgrade()) {
                throw ExceptionFactory.pluginNotFoundException(0L);
            }
            storage.createPlugin(pluginBean);
        }
        // Process any contributed policy definitions.
        List<URL> policyDefs = plugin.getPolicyDefinitions();
        int createdPolicyDefCounter = 0;
        int updatedPolicyDefCounter = 0;
        for (URL url : policyDefs) {
            PolicyDefinitionBean policyDef = (PolicyDefinitionBean) MAPPER.reader(PolicyDefinitionBean.class).readValue(url);
            if (policyDef.getId() == null || policyDef.getId().trim().isEmpty()) {
                // $NON-NLS-1$
                throw ExceptionFactory.policyDefInvalidException(Messages.i18n.format("PluginResourceImpl.MissingPolicyDefId", policyDef.getName()));
            }
            policyDef.setPluginId(pluginBean.getId());
            if (policyDef.getId() == null) {
                policyDef.setId(BeanUtils.idFromName(policyDef.getName()));
            } else {
                policyDef.setId(BeanUtils.idFromName(policyDef.getId()));
            }
            if (policyDef.getFormType() == null) {
                policyDef.setFormType(PolicyFormType.Default);
            }
            PolicyDefinitionBean existingPolicyDef = storage.getPolicyDefinition(policyDef.getId());
            if (existingPolicyDef == null) {
                storage.createPolicyDefinition(policyDef);
                createdPolicyDefCounter++;
            } else if (isUpdatePolicyDefs) {
                existingPolicyDef.setName(policyDef.getName());
                existingPolicyDef.setDescription(policyDef.getDescription());
                existingPolicyDef.setIcon(policyDef.getIcon());
                existingPolicyDef.getTemplates().clear();
                existingPolicyDef.getTemplates().addAll(policyDef.getTemplates());
                existingPolicyDef.setFormType(policyDef.getFormType());
                existingPolicyDef.setForm(policyDef.getForm());
                existingPolicyDef.setDeleted(false);
                existingPolicyDef.setPolicyImpl(policyDef.getPolicyImpl());
                storage.updatePolicyDefinition(existingPolicyDef);
                updatedPolicyDefCounter++;
            } else {
                // $NON-NLS-1$
                throw ExceptionFactory.policyDefInvalidException(Messages.i18n.format("PluginResourceImpl.DuplicatePolicyDef", policyDef.getId()));
            }
        }
        LOGGER.info(// $NON-NLS-1$
        String.format(// $NON-NLS-1$
        "Created plugin mvn:%s:%s:%s", // $NON-NLS-1$
        pluginBean.getGroupId(), // $NON-NLS-1$
        pluginBean.getArtifactId(), pluginBean.getVersion()));
        // $NON-NLS-1$
        LOGGER.info(String.format("\tCreated %s policy definitions from plugin.", String.valueOf(createdPolicyDefCounter)));
        if (isUpdatePolicyDefs) {
            // $NON-NLS-1$
            LOGGER.info(String.format("\tUpdated %s policy definitions from plugin.", String.valueOf(updatedPolicyDefCounter)));
        }
    } catch (AbstractRestException e) {
        throw e;
    } catch (Exception e) {
        throw new SystemErrorException(e);
    }
    return pluginBean;
}
Also used : SystemErrorException(io.apiman.manager.api.rest.exceptions.SystemErrorException) PluginNotFoundException(io.apiman.manager.api.rest.exceptions.PluginNotFoundException) Date(java.util.Date) URL(java.net.URL) AbstractRestException(io.apiman.manager.api.rest.exceptions.AbstractRestException) StorageException(io.apiman.manager.api.core.exceptions.StorageException) PluginNotFoundException(io.apiman.manager.api.rest.exceptions.PluginNotFoundException) PluginResourceNotFoundException(io.apiman.manager.api.rest.exceptions.PluginResourceNotFoundException) InvalidPluginException(io.apiman.manager.api.core.exceptions.InvalidPluginException) SystemErrorException(io.apiman.manager.api.rest.exceptions.SystemErrorException) IOException(java.io.IOException) PluginAlreadyExistsException(io.apiman.manager.api.rest.exceptions.PluginAlreadyExistsException) NotAuthorizedException(io.apiman.manager.api.rest.exceptions.NotAuthorizedException) PolicyDefinitionNotFoundException(io.apiman.manager.api.rest.exceptions.PolicyDefinitionNotFoundException) PolicyDefinitionBean(io.apiman.manager.api.beans.policies.PolicyDefinitionBean) InvalidPluginException(io.apiman.manager.api.core.exceptions.InvalidPluginException) PluginCoordinates(io.apiman.common.plugin.PluginCoordinates) PluginBean(io.apiman.manager.api.beans.plugins.PluginBean) NewPluginBean(io.apiman.manager.api.beans.plugins.NewPluginBean) AbstractRestException(io.apiman.manager.api.rest.exceptions.AbstractRestException) Plugin(io.apiman.common.plugin.Plugin)

Aggregations

Plugin (io.apiman.common.plugin.Plugin)1 PluginCoordinates (io.apiman.common.plugin.PluginCoordinates)1 NewPluginBean (io.apiman.manager.api.beans.plugins.NewPluginBean)1 PluginBean (io.apiman.manager.api.beans.plugins.PluginBean)1 PolicyDefinitionBean (io.apiman.manager.api.beans.policies.PolicyDefinitionBean)1 InvalidPluginException (io.apiman.manager.api.core.exceptions.InvalidPluginException)1 StorageException (io.apiman.manager.api.core.exceptions.StorageException)1 AbstractRestException (io.apiman.manager.api.rest.exceptions.AbstractRestException)1 NotAuthorizedException (io.apiman.manager.api.rest.exceptions.NotAuthorizedException)1 PluginAlreadyExistsException (io.apiman.manager.api.rest.exceptions.PluginAlreadyExistsException)1 PluginNotFoundException (io.apiman.manager.api.rest.exceptions.PluginNotFoundException)1 PluginResourceNotFoundException (io.apiman.manager.api.rest.exceptions.PluginResourceNotFoundException)1 PolicyDefinitionNotFoundException (io.apiman.manager.api.rest.exceptions.PolicyDefinitionNotFoundException)1 SystemErrorException (io.apiman.manager.api.rest.exceptions.SystemErrorException)1 IOException (java.io.IOException)1 URL (java.net.URL)1 Date (java.util.Date)1