
au.gov.amsa.ais.router.model.Group Maven / Gradle / Ivy
package au.gov.amsa.ais.router.model;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import com.github.davidmoten.guavamini.Preconditions;
import rx.Observable;
import rx.schedulers.Schedulers;
public final class Group implements GroupMember {
private final String id;
private final List members;
private final boolean enabled;
private final boolean addTimestamp;
private final boolean addArrivalTime;
private final List filterRegions;
private final List filterMessageTypes;
private final List filterPatterns;
private final Observable lines;
private Group(String id, List members, boolean enabled, boolean addTimestamp,
boolean addArrivalTime, List filterRegions,
List filterMessageTypes, List filterPatterns) {
Util.verifyId(id);
Preconditions.checkNotNull(members);
Preconditions.checkNotNull(filterRegions);
this.id = id;
this.members = members;
this.enabled = enabled;
this.addTimestamp = addTimestamp;
this.addArrivalTime = addArrivalTime;
this.filterRegions = filterRegions;
this.filterMessageTypes = filterMessageTypes;
this.filterPatterns = filterPatterns;
this.lines = createLines();
}
@Override
public Observable lines() {
return lines;
}
private Observable createLines() {
if (enabled) {
return Observable.from(members)
// concurrently merge member observables
.flatMap(member -> member.lines().subscribeOn(Schedulers.io()))
// TODO filter on regions and message types
// filter on patterns
.filter(line -> filterPatterns.isEmpty() || filterPatterns.stream()
.anyMatch(pattern -> pattern.matcher(line).find()))
// multiple parent groups share the same stream
.share();
} else {
return Observable.empty();
}
}
public String id() {
return id;
}
public List members() {
return members;
}
public boolean enabled() {
return enabled;
}
public boolean addTimestamp() {
return addTimestamp;
}
public boolean addArrivalTime() {
return addArrivalTime;
}
public List filterRegions() {
return filterRegions;
}
public List filterMessageTypes() {
return filterMessageTypes;
}
public List filterPatterns() {
return filterPatterns;
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String id;
private final List members = new ArrayList();
private boolean enabled = true;
private boolean addTimestamp;
private boolean addArrivalTime;
private final List filterRegions = new ArrayList<>();
private final List filterMessageTypes = new ArrayList();
private final List filterPatterns = new ArrayList();
private Builder() {
}
public Builder id(String id) {
this.id = id;
return this;
}
public Builder members(List members) {
this.members.addAll(members);
return this;
}
public Builder member(GroupMember member) {
this.members.add(member);
return this;
}
public Builder enabled(boolean enabled) {
this.enabled = enabled;
return this;
}
public Builder addTimestamp(boolean addTimestamp) {
this.addTimestamp = addTimestamp;
return this;
}
public Builder addArrivalTime(boolean addArrivalTime) {
this.addArrivalTime = addArrivalTime;
return this;
}
public Builder filterRegions(List filterRegions) {
this.filterRegions.addAll(filterRegions);
return this;
}
public Builder filterRegion(Region filterRegion) {
this.filterRegions.add(filterRegion);
return this;
}
public Builder filterMessageTypes(List filterMessageTypes) {
this.filterMessageTypes.addAll(filterMessageTypes);
return this;
}
public Builder filterMessageTypes(MessageType filterMessageType) {
this.filterMessageTypes.add(filterMessageType);
return this;
}
public Builder filterPatterns(List filterPatterns) {
this.filterPatterns.addAll(filterPatterns);
return this;
}
public Builder filterPattern(Pattern filterPattern) {
this.filterPatterns.add(filterPattern);
return this;
}
public Builder filterPattern(String filterPattern) {
return filterPattern(Pattern.compile(filterPattern));
}
public Group build() {
return new Group(id, members, enabled, addTimestamp, addArrivalTime, filterRegions,
filterMessageTypes, filterPatterns);
}
}
@Override
public String toString() {
StringBuilder b = new StringBuilder();
b.append("Group [id=");
b.append(id);
b.append(", members=");
b.append(members);
b.append(", enabled=");
b.append(enabled);
b.append(", addTimestamp=");
b.append(addTimestamp);
b.append(", addArrivalTime=");
b.append(addArrivalTime);
b.append(", filterRegions=");
b.append(filterRegions);
b.append(", filterMessageTypes=");
b.append(filterMessageTypes);
b.append(", filterPatterns=");
b.append(filterPatterns);
b.append("]");
return b.toString();
}
public static void main(String[] args) {
System.out.println(Pattern.compile("Kembla")
.matcher(
"\\s:ISEEK Kembla,c:1461727307*65\\!BSVDM,1,1,,A,177hUM000<:lKg7dNBPJA:GN0<1R,0*50")
.find());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy