Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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)));
    }
  }
}