use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.
the class DefaultServicePluginConfigurer method createClassLoader.
@Override
public ClassLoader createClassLoader() {
Map<String, Plugin> plugins = getPlugins().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, v -> v.getValue().getPlugin()));
ClassLoader pluginsClassLoader = PluginClassLoaders.createFilteredPluginsClassLoader(plugins, getPluginInstantiator());
return new CombineClassLoader(null, programClassLoader, pluginsClassLoader, getClass().getClassLoader());
}
use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.
the class FindPluginHelper method getPlugin.
/**
* Get the Plugin information from the specified information.
*
* @param parents plugin parents of the plugin. Each item in the iterable must be the parent of the item before it,
* with the first item as the direct parent of the plugin
* @param pluginEntry artifact and class information for the plugin
* @param properties plugin properties
* @param pluginInstantiator instantiator to add the plugin artifact to
* @return plugin information
*/
public static Plugin getPlugin(Iterable<ArtifactId> parents, Map.Entry<ArtifactDescriptor, PluginClass> pluginEntry, PluginProperties properties, PluginInstantiator pluginInstantiator) {
CollectMacroEvaluator collectMacroEvaluator = new CollectMacroEvaluator();
for (PluginPropertyField field : pluginEntry.getValue().getProperties().values()) {
if (field.isMacroSupported() && properties.getProperties().containsKey(field.getName())) {
MacroParser parser = new MacroParser(collectMacroEvaluator, MacroParserOptions.builder().setEscaping(field.isMacroEscapingEnabled()).build());
parser.parse(properties.getProperties().get(field.getName()));
}
}
ArtifactId artifact = pluginEntry.getKey().getArtifactId();
try {
pluginInstantiator.addArtifact(pluginEntry.getKey().getLocation(), artifact);
} catch (IOException e) {
throw Throwables.propagate(e);
}
return new Plugin(parents, artifact, pluginEntry.getValue(), properties.setMacros(collectMacroEvaluator.getMacros()));
}
use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.
the class ProfileMetadataMessageProcessor method addPluginMetadataDelete.
private void addPluginMetadataDelete(ApplicationId appId, ApplicationSpecification appSpec, List<MetadataMutation> deletes) {
LOG.trace("Deleting plugin metadata for {}", appSpec.getName());
String namespace = appId.getNamespace();
String appKey = String.format("%s:%s", namespace, appSpec.getName());
Set<ScopedNameOfKind> pluginSet = Collections.singleton(new ScopedNameOfKind(MetadataKind.PROPERTY, MetadataScope.SYSTEM, appKey));
for (Plugin plugin : appSpec.getPlugins().values()) {
PluginId pluginId = new PluginId(namespace, plugin);
deletes.add(new MetadataMutation.Remove(pluginId.toMetadataEntity(), pluginSet));
}
}
use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.
the class AppSystemMetadataWriter method getSystemPropertiesToAdd.
@Override
public Map<String, String> getSystemPropertiesToAdd() {
ImmutableMap.Builder<String, String> properties = ImmutableMap.builder();
if (systemAppMetadata != null) {
properties.putAll(systemAppMetadata.getProperties());
}
properties.put(MetadataConstants.ENTITY_NAME_KEY, appSpec.getName());
properties.put(VERSION_KEY, appId.getVersion());
String description = appSpec.getDescription();
if (!Strings.isNullOrEmpty(description)) {
properties.put(MetadataConstants.DESCRIPTION_KEY, description);
}
properties.put(MetadataConstants.CREATION_TIME_KEY, creationTime);
addPrograms(properties);
addSchedules(properties);
// appSpec.getPlugins() returns all instances of all plugins, so there may be duplicates.
// we only store unique plugins right now
Set<PluginClass> existingPluginClasses = new HashSet<>();
for (Plugin plugin : appSpec.getPlugins().values()) {
if (!existingPluginClasses.contains(plugin.getPluginClass())) {
SystemMetadataProvider.addPlugin(plugin.getPluginClass(), null, properties);
existingPluginClasses.add(plugin.getPluginClass());
}
}
addCapabilities(appSpec, applicationClass, properties);
return properties.build();
}
use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.
the class ApplicationDetail method fromSpec.
public static ApplicationDetail fromSpec(ApplicationSpecification spec, @Nullable String ownerPrincipal) {
List<ProgramRecord> programs = new ArrayList<>();
for (ProgramSpecification programSpec : spec.getMapReduce().values()) {
programs.add(new ProgramRecord(ProgramType.MAPREDUCE, spec.getName(), programSpec.getName(), programSpec.getDescription()));
}
for (ProgramSpecification programSpec : spec.getServices().values()) {
programs.add(new ProgramRecord(ProgramType.SERVICE, spec.getName(), programSpec.getName(), programSpec.getDescription()));
}
for (ProgramSpecification programSpec : spec.getSpark().values()) {
programs.add(new ProgramRecord(ProgramType.SPARK, spec.getName(), programSpec.getName(), programSpec.getDescription()));
}
for (ProgramSpecification programSpec : spec.getWorkers().values()) {
programs.add(new ProgramRecord(ProgramType.WORKER, spec.getName(), programSpec.getName(), programSpec.getDescription()));
}
for (ProgramSpecification programSpec : spec.getWorkflows().values()) {
programs.add(new ProgramRecord(ProgramType.WORKFLOW, spec.getName(), programSpec.getName(), programSpec.getDescription()));
}
List<DatasetDetail> datasets = new ArrayList<>();
for (DatasetCreationSpec datasetSpec : spec.getDatasets().values()) {
datasets.add(new DatasetDetail(datasetSpec.getInstanceName(), datasetSpec.getTypeName()));
}
List<PluginDetail> plugins = new ArrayList<>();
for (Map.Entry<String, Plugin> pluginEnty : spec.getPlugins().entrySet()) {
plugins.add(new PluginDetail(pluginEnty.getKey(), pluginEnty.getValue().getPluginClass().getName(), pluginEnty.getValue().getPluginClass().getType()));
}
// this is only required if there are old apps lying around that failed to get upgrading during
// the upgrade to v3.2 for some reason. In those cases artifact id will be null until they re-deploy the app.
// in the meantime, we don't want this api call to null pointer exception.
ArtifactSummary summary = spec.getArtifactId() == null ? new ArtifactSummary(spec.getName(), null) : ArtifactSummary.from(spec.getArtifactId());
return new ApplicationDetail(spec.getName(), spec.getAppVersion(), spec.getDescription(), spec.getConfiguration(), datasets, programs, plugins, summary, ownerPrincipal);
}
Aggregations