/** * */ package com.thinkbiganalytics.metadata.rest.model.feed; import java.io.Serializable; import java.util.HashSet; import java.util.Properties; import java.util.Set; import org.joda.time.DateTime; /*- * #%L * thinkbig-metadata-rest-model * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.thinkbiganalytics.security.rest.model.ActionGroup; /** * */ @SuppressWarnings("serial") @JsonInclude(Include.NON_EMPTY) @JsonIgnoreProperties(ignoreUnknown = true) public class Feed implements Serializable { private String id; private String systemName; private String displayName; private String description; private String owner; private State state; private DateTime createdTime; // TODO versions private FeedPrecondition precondition; private Set<FeedSource> sources = new HashSet<>(); private Set<FeedDestination> destinations = new HashSet<>(); private Properties properties = new Properties(); private FeedCategory category; private InitializationStatus currentInitStatus; /** * Feeds that this feed is dependent upon (parents) */ private Set<Feed> dependentFeeds; private Set<String> dependentFeedIds; /** * Feeds that depend upon this feed (children) */ private Set<Feed> usedByFeeds; private Set<String> usedByFeedIds; private ActionGroup allowedActions; /** * Last modified time */ private DateTime modifiedTime; public Feed() { super(); } public ActionGroup getAllowedActions() { return allowedActions; } public void setAllowedActions(ActionGroup allowedActions) { this.allowedActions = allowedActions; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } public String getSystemName() { return systemName; } public void setSystemName(String systemName) { this.systemName = systemName; } public String getDisplayName() { return displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public DateTime getCreatedTime() { return createdTime; } public void setCreatedTime(DateTime createdTime) { this.createdTime = createdTime; } public State getState() { return state; } public void setState(State state) { this.state = state; } public FeedPrecondition getPrecondition() { return precondition; } public void setPrecondition(FeedPrecondition trigger) { this.precondition = trigger; } public Set<FeedSource> getSources() { return sources; } public void setSources(Set<FeedSource> sources) { this.sources = sources; } public Set<FeedDestination> getDestinations() { return destinations; } public void setDestinations(Set<FeedDestination> destinations) { this.destinations = destinations; } public FeedDestination getDestination(String datasourceId) { for (FeedDestination dest : this.destinations) { if (datasourceId.equals(dest.getDatasourceId()) || dest.getDatasource() != null && datasourceId.equals(dest.getDatasource().getId())) { return dest; } } return null; } public FeedCategory getCategory() { return category; } public void setCategory(FeedCategory category) { this.category = category; } public InitializationStatus getCurrentInitStatus() { return currentInitStatus; } public void setCurrentInitStatus(InitializationStatus currentInitStatus) { this.currentInitStatus = currentInitStatus; } public Set<Feed> getDependentFeeds() { if (dependentFeeds == null) { dependentFeeds = new HashSet<>(); } return dependentFeeds; } public void setDependentFeeds(Set<Feed> dependentFeeds) { this.dependentFeeds = dependentFeeds; //mark the inverse relationship if (dependentFeeds != null) { dependentFeeds.stream().forEach(dependentFeed -> { dependentFeed.getUsedByFeeds().add(this); }); } } public Set<Feed> getUsedByFeeds() { if (usedByFeeds == null) { usedByFeeds = new HashSet<>(); } return usedByFeeds; } public Set<String> getDependentFeedIds() { return dependentFeedIds; } public void setDependentFeedIds(Set<String> dependentFeedIds) { this.dependentFeedIds = dependentFeedIds; } public Set<String> getUsedByFeedIds() { return usedByFeedIds; } public void setUsedByFeedIds(Set<String> usedByFeedIds) { this.usedByFeedIds = usedByFeedIds; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Feed feed = (Feed) o; if (id != null ? !id.equals(feed.id) : feed.id != null) { return false; } return !(systemName != null ? !systemName.equals(feed.systemName) : feed.systemName != null); } @Override public int hashCode() { int result = id != null ? id.hashCode() : 0; result = 31 * result + (systemName != null ? systemName.hashCode() : 0); return result; } public enum State {ENABLED, DISABLED, DELETED} public DateTime getModifiedTime() { return modifiedTime; } public void setModifiedTime(DateTime modifiedTime) { this.modifiedTime = modifiedTime; } }