use of io.cdap.cdap.api.plugin.Plugin in project cdap by caskdata.
the class ServiceSpecificationCodec method deserialize.
@Override
public ServiceSpecification deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObj = (JsonObject) json;
if (isOldSpec(jsonObj)) {
return decodeOldSpec(jsonObj);
}
String className = jsonObj.get("className").getAsString();
String name = jsonObj.get("name").getAsString();
String description = jsonObj.get("description").getAsString();
Map<String, Plugin> plugins = deserializeMap(jsonObj.get("plugins"), context, Plugin.class);
Map<String, HttpServiceHandlerSpecification> handlers = deserializeMap(jsonObj.get("handlers"), context, HttpServiceHandlerSpecification.class);
Resources resources = context.deserialize(jsonObj.get("resources"), Resources.class);
int instances = jsonObj.get("instances").getAsInt();
Map<String, String> properties = deserializeMap(jsonObj.get("properties"), context, String.class);
return new ServiceSpecification(className, name, description, handlers, resources, instances, plugins, properties);
}
use of io.cdap.cdap.api.plugin.Plugin in project cdap by caskdata.
the class ArtifactRepositoryTest method testPluginConfigWithNoStringValues.
@Test
public void testPluginConfigWithNoStringValues() throws Exception {
File pluginDir = TMP_FOLDER.newFolder();
addPluginArtifact();
SortedMap<ArtifactDescriptor, Set<PluginClass>> plugins = getPlugins();
copyArtifacts(pluginDir, plugins);
String numericValue = "42";
// Instantiate the plugins and execute them
try (PluginInstantiator instantiator = new PluginInstantiator(cConf, appClassLoader, pluginDir)) {
for (Map.Entry<ArtifactDescriptor, Set<PluginClass>> entry : plugins.entrySet()) {
for (PluginClass pluginClass : entry.getValue()) {
Plugin pluginInfo = new Plugin(new ArrayList<>(), entry.getKey().getArtifactId(), pluginClass, PluginProperties.builder().add("class.name", TEST_EMPTY_CLASS).add("nullableLongFlag", numericValue).add("host", "example.com").add("aBoolean", "${aBoolean}").add("aByte", numericValue).add("aChar", "${aChar}").add("aDouble", "${aDouble}").add("anInt", numericValue).add("aFloat", "${aFloat}").add("aLong", numericValue).add("aShort", numericValue).build());
// first test with quotes ("42")
String jsonPluginStr = GSON.toJson(pluginInfo);
pluginInfo = GSON.fromJson(jsonPluginStr, Plugin.class);
instantiator.newInstance(pluginInfo);
// test without quotes (42)
pluginInfo = GSON.fromJson(jsonPluginStr.replaceAll("\"" + numericValue + "\"", numericValue), Plugin.class);
instantiator.newInstance(pluginInfo);
// test with quotes and dot ("42.0")
pluginInfo = GSON.fromJson(jsonPluginStr.replaceAll(numericValue, numericValue + ".0"), Plugin.class);
instantiator.newInstance(pluginInfo);
// test with dot (42.0)
pluginInfo = GSON.fromJson(jsonPluginStr.replaceAll("\"" + numericValue + "\"", numericValue + ".0"), Plugin.class);
instantiator.newInstance(pluginInfo);
// test with some actual double number 42.5
pluginInfo = GSON.fromJson(jsonPluginStr.replaceAll("\"" + numericValue + "\"", numericValue + ".5"), Plugin.class);
try {
instantiator.newInstance(pluginInfo);
Assert.fail("Plugin instantiation should fail with value '42.5'");
} catch (InvalidPluginConfigException e) {
// expected
}
}
}
}
}
use of io.cdap.cdap.api.plugin.Plugin in project cdap by caskdata.
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 caskdata.
the class MapReduceSpecificationCodec method deserialize.
@Override
public MapReduceSpecification deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObj = json.getAsJsonObject();
String className = jsonObj.get("className").getAsString();
String name = jsonObj.get("name").getAsString();
String description = jsonObj.get("description").getAsString();
Map<String, Plugin> plugins = deserializeMap(jsonObj.get("plugins"), context, Plugin.class);
Resources driverResources = deserializeResources(jsonObj, "driver", context);
Resources mapperResources = deserializeResources(jsonObj, "mapper", context);
Resources reducerResources = deserializeResources(jsonObj, "reducer", context);
JsonElement inputDataSetElem = jsonObj.get("inputDataSet");
String inputDataSet = inputDataSetElem == null ? null : inputDataSetElem.getAsString();
JsonElement outputDataSetElem = jsonObj.get("outputDataSet");
String outputDataSet = outputDataSetElem == null ? null : outputDataSetElem.getAsString();
Set<String> dataSets = deserializeSet(jsonObj.get("datasets"), context, String.class);
Map<String, String> properties = deserializeMap(jsonObj.get("properties"), context, String.class);
return new MapReduceSpecification(className, name, description, inputDataSet, outputDataSet, dataSets, properties, driverResources, mapperResources, reducerResources, plugins);
}
use of io.cdap.cdap.api.plugin.Plugin in project cdap by caskdata.
the class WorkflowSpecificationCodec method deserialize.
@Override
public WorkflowSpecification deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObj = json.getAsJsonObject();
String className = jsonObj.get("className").getAsString();
String name = jsonObj.get("name").getAsString();
String description = jsonObj.get("description").getAsString();
Map<String, Plugin> plugins = deserializeMap(jsonObj.get("plugins"), context, Plugin.class);
Map<String, String> properties = deserializeMap(jsonObj.get("properties"), context, String.class);
List<WorkflowNode> nodes = deserializeList(jsonObj.get("nodes"), context, WorkflowNode.class);
Map<String, DatasetCreationSpec> localDatasetSpec = deserializeMap(jsonObj.get("localDatasetSpecs"), context, DatasetCreationSpec.class);
return new WorkflowSpecification(className, name, description, properties, nodes, localDatasetSpec, plugins);
}
Aggregations