package models.dataConstraintModel; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import models.algebra.Expression; import models.algebra.Variable; public class Channel { protected String channelName; protected Channel parent = null; protected List<Channel> children = null; protected List<Selector> selectors = null; protected Set<ChannelMember> channelMembers = null; protected String sourceText = null; protected boolean isNative = false; public Channel(String channelName) { this.channelName = channelName; this.parent = null; this.children = new ArrayList<>(); selectors = new ArrayList<>(); channelMembers = new HashSet<>(); } public Channel(String channelName, Variable variable) { this.channelName = channelName; this.parent = null; this.children = new ArrayList<>(); selectors = new ArrayList<>(); selectors.add(new Selector(variable)); channelMembers = new HashSet<>(); } public Channel(String channelName, List<Variable> variables) { this.channelName = channelName; this.parent = null; this.children = new ArrayList<>(); selectors = new ArrayList<>(); for (Variable var: variables) { selectors.add(new Selector(var)); } channelMembers = new HashSet<>(); } public String getChannelName() { return channelName; } public Channel getParent() { return parent; } public List<Channel> getChildren() { return children; } public void addChild(Channel child) { children.add(child); child.parent = this; } public List<Selector> getSelectors() { return selectors; } public List<Selector> getAllSelectors() { List<Selector> allSelectors = new ArrayList<>(); if (parent != null) allSelectors.addAll(parent.getAllSelectors()); allSelectors.addAll(selectors); return allSelectors; } public void setSelectors(List<Selector> selectors) { this.selectors = selectors; } public void addSelector(Variable var) { selectors.add(new Selector(var)); } public void addSelector(Selector selector) { selectors.add(selector); } public Set<ChannelMember> getChannelMembers() { return channelMembers; } public void setChannelMembers(Set<ChannelMember> channelMembers) { this.channelMembers = channelMembers; } public void addChannelMember(ChannelMember channelMember) { channelMembers.add(channelMember); if (getAllSelectors().size() > 0) { Set<Expression> params = new HashSet<>(); for (Selector s: getAllSelectors()) { params.add(s.getExpression()); } if (!params.containsAll(channelMember.getResource().getPathParams())) { channelMember.setOutside(true); } } else { if (channelMember.getResource().getPathParams().size() == 0) { channelMember.setOutside(false); } else { channelMember.setOutside(true); } } } public void removeChannelMember(ResourcePath res) { for (ChannelMember cm: channelMembers) { if (cm.getResource() == res) { channelMembers.remove(cm); break; } } } public Set<ResourcePath> getResources() { Set<ResourcePath> resources = new HashSet<>(); for (ChannelMember member: channelMembers) { resources.add(member.getResource()); } return resources; } public String toString() { return channelName; } public void setSourceText(String sourceText) { this.sourceText = sourceText; } public String getSourceText() { if (sourceText == null) { return toString(); } return sourceText; } public boolean isNative() { return isNative; } public void setNative(boolean isNative) { this.isNative = isNative; } }