...
Code Block |
---|
GET: /v3/namespaces/{namespace-id}/apps/{app-id}/plugins/{plugin-id} {plugin-id} is unique in the app. this will return JSONlist of Plugin object's correspondingused toby the plugin-id. app. |
Code Block |
---|
// No changes to existing Plugin class in CDAP-API. public final class Plugin { // Existingprivate final ArtifactId artifactId; private final ArtifactIdPluginClass artifactIdpluginClass; private final PluginProperties properties; Plugin(ArtifactId artifactId, PluginClass pluginClass, PluginProperties) { ... } ... } |
Code Block |
---|
/** * Plugin instance properties. */ @Beta public class PluginProperties implements Serializable { private static final long serialVersionUID = -7396484717511717753L; // Currently only support String->String map. private final Map<String, PluginPropertiesString> properties; // new field addition in PluginProperties to add macro private final /*Set<String> macros used at this plugin; public static Builder builder() { return * Examples :new Builder(); } * for the field value ${hostname}:${port}/${path}, the set would be[hostname, port, path] * for the field value ${secure(accessKey)}, the set would be [accessKey] * for the field value ${key1:${key2}}, the set would be [key2, key1:${key2}] * for the field value \${u-name}, the set would be empty as macro is escaped * for the field value ${key1\${key2}}, the set would be [key1\${key2}] so the user understands key2 is not a macro and will provide value for the key, "key1${key2}" */ private final Set<String> macros; Plugin(ArtifactId artifactId, PluginClass pluginClass, PluginProperties, @Nullable Set<String> macros) { ... } ... } |
Another Option is instead of returning Set<String> macros, we can return MacroInfo object.
Code Block |
---|
class MacroInfo {
Set<String> properties;
Set<MacroFunction> functions;
}
class MacroFunction {
String functionName;
List<String> arguments;
} |
...
Notes:
...
private PluginProperties(Map<String, String> properties) {
this(properties, null);
}
private PluginProperties(Map<String, String> properties, @Nullable Set<String> macros) {
this.properties = properties;
this.macros = macros;
}
/**
* return the set of macros used by the plugin
*/
@Nullable
public Set<String> getMacros() {
return macros;
}
/**
* internal method used by platform to set macros used in properties. its not advisable for users to use this.
* returns new PluginProperties instance with macros set
*/
public PluginProperties setMacros(Set<String> macros) {
return new PluginProperties(getProperties(), macros);
}
// no changes to existing methods or Builder
public Map<String, String> getProperties() {
return properties;
}
/**
* A builder to create {@link PluginProperties} instance.
*/
public static final class Builder {
private final Map<String, String> properties;
private Builder() {
this.properties = new HashMap<>();
}
/**
* Adds multiple properties.
*
* @param properties map of properties to add.
* @return this builder
*/
public Builder addAll(Map<String, String> properties) {
this.properties.putAll(properties);
return this;
}
/**
* Adds a property
* @param key the name of the property
* @param value the value of the property
* @return this builder
*/
public Builder add(String key, String value) {
this.properties.put(key, value);
return this;
}
/**
* Creates a new instance of {@link PluginProperties} with the properties added to this builder prior to this call.
*/
public PluginProperties build() {
return new PluginProperties(Collections.unmodifiableMap(new HashMap<>(properties)));
}
}
} |