Search in sources :

Example 1 with MulePluginModel

use of org.mule.runtime.api.deployment.meta.MulePluginModel in project mule by mulesoft.

the class PluginResourcesResolver method resolvePluginResourcesFor.

/**
 * Resolves for the given {@link PluginUrlClassification} the resources exported.
 *
 * @param pluginUrlClassification {@link PluginUrlClassification} to be resolved
 * @return {@link PluginUrlClassification} with the resources resolved
 */
public PluginUrlClassification resolvePluginResourcesFor(PluginUrlClassification pluginUrlClassification) {
    final Set<String> exportPackages = newHashSet();
    final Set<String> exportResources = newHashSet();
    final Set<String> privilegedExportedPackages = newHashSet();
    final Set<String> privilegedArtifacts = newHashSet();
    try (URLClassLoader classLoader = new URLClassLoader(pluginUrlClassification.getUrls().toArray(new URL[0]), null)) {
        logger.debug("Loading plugin '{}' descriptor", pluginUrlClassification.getName());
        URL pluginJsonUrl = classLoader.getResource(MULE_ARTIFACT_PATH_INSIDE_JAR + "/" + MULE_ARTIFACT_JSON_DESCRIPTOR);
        if (pluginJsonUrl == null) {
            pluginJsonUrl = classLoader.getResource(MULE_AUTO_GENERATED_ARTIFACT_PATH_INSIDE_JAR);
            if (pluginJsonUrl == null) {
                throw new IllegalStateException(MULE_ARTIFACT_JSON_DESCRIPTOR + " couldn't be found for plugin: " + pluginUrlClassification.getName());
            }
        }
        MulePluginModel mulePluginModel;
        try (InputStream stream = pluginJsonUrl.openStream()) {
            mulePluginModel = new MulePluginModelJsonSerializer().deserialize(IOUtils.toString(stream));
        } catch (IOException e) {
            throw new IllegalArgumentException(format("Could not read extension describer on plugin '%s'", pluginJsonUrl), e);
        }
        Map<String, Object> attributes = mulePluginModel.getClassLoaderModelLoaderDescriptor().getAttributes();
        exportPackages.addAll((List<String>) attributes.getOrDefault(EXPORTED_PACKAGES, emptyList()));
        exportResources.addAll((List<String>) attributes.getOrDefault(EXPORTED_RESOURCES, emptyList()));
        privilegedExportedPackages.addAll((List<String>) attributes.getOrDefault(PRIVILEGED_EXPORTED_PACKAGES, emptyList()));
        privilegedArtifacts.addAll((List<String>) attributes.getOrDefault(PRIVILEGED_ARTIFACTS_IDS, emptyList()));
        return new PluginUrlClassification(pluginUrlClassification.getName(), pluginUrlClassification.getUrls(), pluginUrlClassification.getExportClasses(), pluginUrlClassification.getPluginDependencies(), exportPackages, exportResources, privilegedExportedPackages, privilegedArtifacts);
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
}
Also used : MulePluginModelJsonSerializer(org.mule.runtime.api.deployment.persistence.MulePluginModelJsonSerializer) InputStream(java.io.InputStream) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) UncheckedIOException(java.io.UncheckedIOException) URL(java.net.URL) MulePluginModel(org.mule.runtime.api.deployment.meta.MulePluginModel) URLClassLoader(java.net.URLClassLoader)

Example 2 with MulePluginModel

use of org.mule.runtime.api.deployment.meta.MulePluginModel in project mule by mulesoft.

the class PluginResourcesResolverTestCase method resolvePluginResourcesForMulePlugin.

@Test
public void resolvePluginResourcesForMulePlugin() throws Exception {
    MulePluginModelBuilder builder = new MulePluginModelBuilder();
    builder.withClassLoaderModelDescriptorLoader(new MuleArtifactLoaderDescriptorBuilder().setId("mule").addProperty(EXPORTED_PACKAGES, newArrayList(ORG_MULE_TEST_RUNNER, ORG_MULE_TEST_RUNNER_API)).addProperty(EXPORTED_RESOURCES, newArrayList(META_INF_RESOURCE_PROPERTIES, META_INF_ANOTHER_RESOURCE_PROPERTIES)).build());
    builder.withBundleDescriptorLoader(new MuleArtifactLoaderDescriptor(MULE_LOADER_ID, emptyMap()));
    MulePluginModel mulePluginModel = builder.setName("samplePlugin").setMinMuleVersion("4.0.0").build();
    String mulePluginModelJson = new MulePluginModelJsonSerializer().serialize(mulePluginModel);
    File pluginPropertiesFile = new File(new File(new File(temporaryFolder.getRoot(), "META-INF"), "mule-artifact"), MULE_ARTIFACT_JSON_DESCRIPTOR);
    writeStringToFile(pluginPropertiesFile, mulePluginModelJson);
    URL classPathUrl = temporaryFolder.getRoot().toURI().toURL();
    List<URL> urls = newArrayList(classPathUrl);
    PluginUrlClassification mulePluginClassification = newPluginUrlClassification(urls);
    PluginResourcesResolver resolver = new PluginResourcesResolver();
    PluginUrlClassification result = resolver.resolvePluginResourcesFor(mulePluginClassification);
    assertResolvedResources(mulePluginClassification, result);
}
Also used : MuleArtifactLoaderDescriptor(org.mule.runtime.api.deployment.meta.MuleArtifactLoaderDescriptor) MuleArtifactLoaderDescriptorBuilder(org.mule.runtime.api.deployment.meta.MuleArtifactLoaderDescriptorBuilder) MulePluginModel(org.mule.runtime.api.deployment.meta.MulePluginModel) MulePluginModelJsonSerializer(org.mule.runtime.api.deployment.persistence.MulePluginModelJsonSerializer) MulePluginModelBuilder(org.mule.runtime.api.deployment.meta.MulePluginModel.MulePluginModelBuilder) FileUtils.writeStringToFile(org.apache.commons.io.FileUtils.writeStringToFile) File(java.io.File) URL(java.net.URL) SmallTest(org.mule.tck.size.SmallTest) Test(org.junit.Test)

Example 3 with MulePluginModel

use of org.mule.runtime.api.deployment.meta.MulePluginModel in project mule by mulesoft.

the class ArtifactPluginDescriptorFactoryTestCase method createPluginDescriptor.

@Test
public void createPluginDescriptor() throws Exception {
    String pluginName = "samplePlugin";
    MulePluginModel.MulePluginModelBuilder builder = new MulePluginModel.MulePluginModelBuilder();
    builder.withClassLoaderModelDescriptorLoader(new MuleArtifactLoaderDescriptorBuilder().setId("mule").build());
    Map<String, Object> attributes = new HashMap<>();
    attributes.put(GROUP_ID, "org.mule.test");
    attributes.put(ARTIFACT_ID, pluginName);
    attributes.put(VERSION, "1.0.0");
    attributes.put(CLASSIFIER, MULE_PLUGIN_CLASSIFIER);
    attributes.put(TYPE, "jar");
    builder.withBundleDescriptorLoader(new MuleArtifactLoaderDescriptor(PROPERTIES_BUNDLE_DESCRIPTOR_LOADER_ID, attributes));
    builder.withClassLoaderModelDescriptorLoader(new MuleArtifactLoaderDescriptor(MULE_LOADER_ID, emptyMap()));
    MulePluginModel mulePluginModel = builder.setName(pluginName).setMinMuleVersion("4.0.0").setRequiredProduct(MULE).build();
    ArtifactPluginFileBuilder pluginFileBuilder = new ArtifactPluginFileBuilder(PLUGIN_NAME).tempFolder(pluginsTempFolder.newFolder()).describedBy(mulePluginModel);
    final ArtifactPluginDescriptor artifactPluginDescriptor = descriptorFactory.create(pluginFileBuilder.getArtifactFile(), empty());
    assertThat(artifactPluginDescriptor.getName(), equalTo(pluginName));
    assertThat(artifactPluginDescriptor.getBundleDescriptor().getArtifactId(), equalTo(pluginName));
}
Also used : MuleArtifactLoaderDescriptor(org.mule.runtime.api.deployment.meta.MuleArtifactLoaderDescriptor) ArtifactPluginFileBuilder(org.mule.runtime.module.deployment.impl.internal.builder.ArtifactPluginFileBuilder) MuleArtifactLoaderDescriptorBuilder(org.mule.runtime.api.deployment.meta.MuleArtifactLoaderDescriptorBuilder) MulePluginModel(org.mule.runtime.api.deployment.meta.MulePluginModel) HashMap(java.util.HashMap) ArtifactPluginDescriptor(org.mule.runtime.deployment.model.api.plugin.ArtifactPluginDescriptor) Matchers.containsString(org.hamcrest.Matchers.containsString) Test(org.junit.Test)

Example 4 with MulePluginModel

use of org.mule.runtime.api.deployment.meta.MulePluginModel in project mule by mulesoft.

the class ArtifactPluginFileBuilder method getCustomResources.

@Override
protected List<ZipResource> getCustomResources() {
    final List<ZipResource> customResources = new LinkedList<>();
    if (!properties.isEmpty()) {
        final MulePluginModel.MulePluginModelBuilder builder = new MulePluginModel.MulePluginModelBuilder();
        builder.setName(getArtifactId()).setMinMuleVersion("4.0.0").setRequiredProduct(MULE);
        MuleArtifactLoaderDescriptorBuilder classLoaderModelDescriptorBuilder = new MuleArtifactLoaderDescriptorBuilder().setId(MULE_LOADER_ID);
        if (properties.containsKey(EXPORTED_CLASS_PACKAGES_PROPERTY)) {
            classLoaderModelDescriptorBuilder.addProperty(EXPORTED_PACKAGES, ((String) properties.get(EXPORTED_CLASS_PACKAGES_PROPERTY)).split(","));
        }
        if (properties.containsKey(PRIVILEGED_EXPORTED_CLASS_PACKAGES_PROPERTY)) {
            classLoaderModelDescriptorBuilder.addProperty(PRIVILEGED_EXPORTED_PACKAGES, ((String) properties.get(PRIVILEGED_EXPORTED_CLASS_PACKAGES_PROPERTY)).split(","));
        }
        if (properties.containsKey(PRIVILEGED_ARTIFACTS_PROPERTY)) {
            classLoaderModelDescriptorBuilder.addProperty(PRIVILEGED_ARTIFACTS_IDS, ((String) properties.get(PRIVILEGED_ARTIFACTS_PROPERTY)).split(","));
        }
        if (properties.containsKey(EXPORTED_RESOURCE_PROPERTY)) {
            classLoaderModelDescriptorBuilder.addProperty(EXPORTED_RESOURCES, ((String) properties.get(EXPORTED_RESOURCE_PROPERTY)).split(","));
        }
        builder.withClassLoaderModelDescriptorLoader(classLoaderModelDescriptorBuilder.build());
        builder.withBundleDescriptorLoader(new MuleArtifactLoaderDescriptor(MULE_LOADER_ID, emptyMap()));
        mulePluginModel = builder.build();
    }
    if (mulePluginModel != null) {
        final File jsonDescriptorFile = new File(getTempFolder(), MULE_ARTIFACT_FOLDER + separator + MULE_ARTIFACT_JSON_DESCRIPTOR);
        jsonDescriptorFile.deleteOnExit();
        String jsonDescriber = new MulePluginModelJsonSerializer().serialize(mulePluginModel);
        try {
            writeStringToFile(jsonDescriptorFile, jsonDescriber);
        } catch (IOException e) {
            throw new IllegalStateException("There was an issue generating the JSON file for " + this.getId(), e);
        }
        customResources.add(new ZipResource(jsonDescriptorFile.getAbsolutePath(), MULE_ARTIFACT_PATH_INSIDE_JAR + "/" + MULE_ARTIFACT_JSON_DESCRIPTOR));
    }
    return customResources;
}
Also used : MuleArtifactLoaderDescriptor(org.mule.runtime.api.deployment.meta.MuleArtifactLoaderDescriptor) MuleArtifactLoaderDescriptorBuilder(org.mule.runtime.api.deployment.meta.MuleArtifactLoaderDescriptorBuilder) MulePluginModelJsonSerializer(org.mule.runtime.api.deployment.persistence.MulePluginModelJsonSerializer) IOException(java.io.IOException) LinkedList(java.util.LinkedList) ZipResource(org.mule.tck.ZipUtils.ZipResource) MulePluginModel(org.mule.runtime.api.deployment.meta.MulePluginModel) FileUtils.writeStringToFile(org.apache.commons.io.FileUtils.writeStringToFile) File(java.io.File)

Aggregations

MulePluginModel (org.mule.runtime.api.deployment.meta.MulePluginModel)4 MuleArtifactLoaderDescriptor (org.mule.runtime.api.deployment.meta.MuleArtifactLoaderDescriptor)3 MuleArtifactLoaderDescriptorBuilder (org.mule.runtime.api.deployment.meta.MuleArtifactLoaderDescriptorBuilder)3 MulePluginModelJsonSerializer (org.mule.runtime.api.deployment.persistence.MulePluginModelJsonSerializer)3 File (java.io.File)2 IOException (java.io.IOException)2 URL (java.net.URL)2 FileUtils.writeStringToFile (org.apache.commons.io.FileUtils.writeStringToFile)2 Test (org.junit.Test)2 InputStream (java.io.InputStream)1 UncheckedIOException (java.io.UncheckedIOException)1 URLClassLoader (java.net.URLClassLoader)1 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 Matchers.containsString (org.hamcrest.Matchers.containsString)1 MulePluginModelBuilder (org.mule.runtime.api.deployment.meta.MulePluginModel.MulePluginModelBuilder)1 ArtifactPluginDescriptor (org.mule.runtime.deployment.model.api.plugin.ArtifactPluginDescriptor)1 ArtifactPluginFileBuilder (org.mule.runtime.module.deployment.impl.internal.builder.ArtifactPluginFileBuilder)1 ZipResource (org.mule.tck.ZipUtils.ZipResource)1 SmallTest (org.mule.tck.size.SmallTest)1