Versions Compared

Key

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

...

Code Block
// No changes to existing Plugin class in CDAP-API.
public final class Plugin {
  private final ArtifactId artifactId;
  private final PluginClass pluginClass;
  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, String> properties;
  // new addition in PluginProperties to add macro
  private final Set<String> macros;

  public static Builder builder() {
    return new Builder();
  }

  private PluginProperties(Map<String, String> properties) {
    this(properties, null);
  }
 
   private PluginProperties(Map<String, String> properties, @Nullable Set<String> macros) {
    this.properties = properties;
    this.macros = new HashSet<String>()macros;
  }
  
  /**
   * return the set of macros used by the plugin
   */ 
  @Nullable 
  public Set<String> getMacros() {
   return macros;
  }
  
  /**
   * internal method used by platform to addset macros used in properties. its not advisable for users to use this. 
   * returns new PluginProperties instance with macros set
   */  
  public voidPluginProperties addMacrosetMacros(StringSet<String> macromacros) {
    return new PluginProperties(getProperties(), macros.add(macro);
  }
 
  // 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)));
    }
  }
}

...