Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<slf4j-api.version>1.6.6</slf4j-api.version>
<logback.version>1.1.2</logback.version>
<guava.version>18.0</guava.version>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package io.getstream.client.model.activities;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

/**
* <b>update_to_targets</b>'s response wrapper class.
* @param <T> Type of the activity in scope.
*/
public class UpdateTargetResponse<T extends BaseActivity> {

private T activity;
private String duration;

@JsonProperty("added")
private List<String> addedTargets;

@JsonProperty("removed")
private List<String> removedTargets;

@JsonProperty("new")
private List<String> newTargets;

public void setDuration(String duration) {
this.duration = duration;
}

/**
* Duration of the operation.
* @return Duration in human-readable format.
*/
public String getDuration() {
return duration;
}

public T getActivity() {
return activity;
}

public void setActivity(T activity) {
this.activity = activity;
}

/**
* Get a list of added target(s).
* @return List of added target(s)
*/
public List<String> getAddedTargets() {
return addedTargets;
}

public void setAddedTargets(List<String> addedTargets) {
this.addedTargets = addedTargets;
}

/**
* Get a list of removed target(s).
* @return List of remove target(s)
*/
public List<String> getRemovedTargets() {
return removedTargets;
}

public void setRemovedTargets(List<String> removedTargets) {
this.removedTargets = removedTargets;
}

/**
* Get a list of newly created target(s).
* @return List of newly created target(s)
*/
public List<String> getNewTargets() {
return newTargets;
}

public void setNewTargets(List<String> newTargets) {
this.newTargets = newTargets;
}
}
126 changes: 126 additions & 0 deletions stream-core/src/main/java/io/getstream/client/model/beans/Targets.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package io.getstream.client.model.beans;

import com.google.common.collect.ImmutableList;

import java.util.ArrayList;
import java.util.List;

/**
* This class acts as container for a list of operations intended to alter the target(s) of a given activity.
* A {@link Targets.Builder} is required in order to build a {@link Targets} object.
*
*/
public class Targets {

private ImmutableList<String> newTargets;
private ImmutableList<String> addedTargets;
private ImmutableList<String> removedTargets;

public Targets(List<String> newTargets, List<String> addedTargets, List<String> removedTargets) {
if (!newTargets.isEmpty()) {
this.newTargets = ImmutableList.copyOf(newTargets);
}

if (!addedTargets.isEmpty()) {
this.addedTargets = ImmutableList.copyOf(addedTargets);
}

if (!removedTargets.isEmpty()) {
this.removedTargets = ImmutableList.copyOf(removedTargets);
}
}

public List<String> getNewTargets() {
return newTargets;
}

public List<String> getAddedTargets() {
return addedTargets;
}

public List<String> getRemovedTargets() {
return removedTargets;
}

/**
* Builder class for the {@link Targets} object.
*/
public static class Builder {

private List<String> newTargets = new ArrayList<>();
private List<String> addedTargets = new ArrayList<>();
private List<String> removedTargets = new ArrayList<>();

/**
* Set a list of new target(s).
* @param newTargets New target(s)
* @return This builder
*/
public Builder setNewTargets(List<String> newTargets) {
this.newTargets = newTargets;
return this;
}

/**
* Set a list of target(s) to add.
* @param addedTargets Target(s) to add.
* @return This builder
*/
public Builder setAddedTargets(List<String> addedTargets) {
this.addedTargets = addedTargets;
return this;
}

/**
* Set a list of target(s) to be removed.
* @param removedTargets Target(s) to be removed.
* @return This builder
*/
public Builder setRemovedTargets(List<String> removedTargets) {
this.removedTargets = removedTargets;
return this;
}

/**
* Change the existing target by specifying a new one.
* @param target New target.
* @return This builder
*/
public Builder addNewTarget(String target) {
this.newTargets.add(target);
return this;
}

/**
* Add a new target to be added.
* @param target Target to be added.
* @return This builder
*/
public Builder addTargetToAdd(String target) {
this.addedTargets.add(target);
return this;
}

/**
* Add a target to be removed.
* @param target Target to be removed.
* @return This builder
*/
public Builder addTargetToRemove(String target) {
this.removedTargets.add(target);
return this;
}

/**
* Build a {@link Targets} object.
* You can specify either new targets or added targets or removed targets or a combinations of added and removed targets.
* @return A valid {@link Targets} object.
*/
public Targets build() {
if (!newTargets.isEmpty() && (!addedTargets.isEmpty() || !removedTargets.isEmpty())) {
throw new IllegalArgumentException("You can specify either new targets or added targets or removed targets or a combinations of added and removed targets.");
}
return new Targets(newTargets, addedTargets, removedTargets);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package io.getstream.client.model.beans;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.getstream.client.model.activities.BaseActivity;

import java.util.List;

/**
* This custom activity is required to perform the <b>update_to_targets</b> operation.
*/
public class UpdateTo extends BaseActivity {

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonProperty("new_targets")
private List<String> newTargets;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonProperty("added_targets")
private List<String> addedTargets;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonProperty("removed_targets")
private List<String> removedTargets;

public List<String> getNewTargets() {
return newTargets;
}

public void setNewTargets(List<String> newTargets) {
this.newTargets = newTargets;
}

public List<String> getAddedTargets() {
return addedTargets;
}

public void setAddedTargets(List<String> addedTargets) {
this.addedTargets = addedTargets;
}

public List<String> getRemovedTargets() {
return removedTargets;
}

public void setRemovedTargets(List<String> removedTargets) {
this.removedTargets = removedTargets;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import io.getstream.client.model.activities.AggregatedActivity;
import io.getstream.client.model.activities.BaseActivity;
import io.getstream.client.model.activities.NotificationActivity;
import io.getstream.client.model.activities.UpdateTargetResponse;
import io.getstream.client.model.beans.FeedFollow;
import io.getstream.client.model.beans.FollowMany;
import io.getstream.client.model.beans.MarkedActivity;
import io.getstream.client.model.beans.StreamActivitiesResponse;
import io.getstream.client.model.beans.StreamResponse;
import io.getstream.client.model.beans.Targets;
import io.getstream.client.model.beans.UnfollowMany;
import io.getstream.client.model.feeds.BaseFeed;
import io.getstream.client.model.filters.FeedFilter;
Expand Down Expand Up @@ -163,6 +165,18 @@ public interface StreamRepository {
*/
<T extends BaseActivity> StreamActivitiesResponse<T> updateActivities(BaseFeed feed, Class<T> type, List<T> activities) throws IOException, StreamClientException;

/**
* Update the <b>to</b> target(s) of a given {@link T} activity.
* @param feed Feed which the activity belong to
* @param activity The activity in scope.
* @param targets A container for the operations that need to be performed on the <b>to</b> field.
* @param <T> The type of the activity.
* @return Response containing the modified activity and a summary of the actions performed to the <b>to</b> field.
* @throws IOException in case of network/socket exceptions
* @throws StreamClientException in case of functional or server-side exception
*/
<T extends BaseActivity> UpdateTargetResponse<T> updateToTargets(BaseFeed feed, BaseActivity activity, Targets targets) throws StreamClientException, IOException;

/**
* Add a new activity of type {@link T} to multiple feeds.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import io.getstream.client.exception.StreamClientException;
import io.getstream.client.model.activities.BaseActivity;
import io.getstream.client.model.activities.UpdateTargetResponse;
import io.getstream.client.model.beans.StreamActivitiesResponse;
import io.getstream.client.model.beans.Targets;
import io.getstream.client.model.feeds.BaseFeed;
import io.getstream.client.repo.StreamRepository;

Expand Down Expand Up @@ -67,6 +69,19 @@ public StreamActivitiesResponse<T> updateActivities(List<T> activities) throws I
return streamRepository.updateActivities(this.feed, type, activities);
}

/**
* Update the <b>to</b> target(s) of a given {@link T} activity.
* @param activity The activity in scope.
* @param targets A container for the operations that need to be performed on the <b>to</b> field.
* @param <T> The type of the activity.
* @return Response containing the modified activity and a summary of the actions performed to the <b>to</b> field.
* @throws IOException in case of network/socket exceptions
* @throws StreamClientException in case of functional or server-side exception
*/
public <T extends BaseActivity> UpdateTargetResponse<T> updateToTargets(BaseActivity activity, Targets targets) throws IOException, StreamClientException {
return streamRepository.updateToTargets(feed, activity, targets);
}

/**
* Add a new activity of type {@link T} to multiple feeds.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.getstream.client.model.beans;

import org.junit.Test;

import java.util.Collections;

import static org.hamcrest.CoreMatchers.hasItem;
import static org.junit.Assert.assertThat;

public class TargetsTest {

@Test
public void shouldBuildTheTargetWithNewTargets() {
Targets targets = new Targets.Builder()
.setNewTargets(Collections.singletonList("user:newUser1"))
.build();

assertThat(targets.getNewTargets(), hasItem("user:newUser1"));
}

@Test
public void shouldBuildTheTargetWithAddAndRemoveTargets() {
Targets targets = new Targets.Builder()
.setAddedTargets(Collections.singletonList("user:newUser1"))
.setRemovedTargets(Collections.singletonList("user:newUser2"))
.build();

assertThat(targets.getAddedTargets(), hasItem("user:newUser1"));
assertThat(targets.getRemovedTargets(), hasItem("user:newUser2"));
}

@Test(expected = IllegalArgumentException.class)
public void shouldFailBuildingTargets() {
Targets targets = new Targets.Builder()
.setNewTargets(Collections.singletonList("user:newUser1"))
.setRemovedTargets(Collections.singletonList("user:newUser2"))
.build();
}
}
Loading