package com.thinkbiganalytics.feedmgr.rest.model;
/*-
* #%L
* thinkbig-feed-manager-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.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.thinkbiganalytics.feedmgr.rest.support.SystemNamingService;
import com.thinkbiganalytics.metadata.MetadataField;
import com.thinkbiganalytics.security.rest.model.EntityAccessControl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
/**
* A category is a collection of zero or more feeds in the Feed Manager.
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class FeedCategory extends EntityAccessControl {
private String id;
@MetadataField
private String name;
@MetadataField
private String systemName;
private String icon;
private String iconColor;
private String description;
private List<HadoopSecurityGroup> securityGroups;
/**
* User-defined fields for feeds within this category
*/
private Set<UserField> userFields;
/**
* User-defined business metadata
*/
private Set<UserProperty> userProperties;
@JsonIgnore
private List<FeedSummary> feeds;
private int relatedFeeds;
private Date createDate;
private Date updateDate;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSystemName() {
if (systemName == null) {
generateSystemName();
}
return systemName;
}
public void setSystemName(String systemName) {
this.systemName = systemName;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getIconColor() {
return iconColor;
}
public void setIconColor(String iconColor) {
this.iconColor = iconColor;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
/**
* Gets the user-defined fields for feeds within this category.
*
* @return the user-defined fields
* @see #setUserFields(Set)
* @since 0.4.0
*/
public Set<UserField> getUserFields() {
return userFields;
}
/**
* Sets the user-defined fields for feeds within this category.
*
* @param userFields the new user-defined fields
* @see #setUserFields(Set)
* @since 0.4.0
*/
public void setUserFields(final Set<UserField> userFields) {
this.userFields = userFields;
}
/**
* Gets the user-defined business metadata for this category.
*
* @return the user-defined properties
* @see #setUserProperties(Set)
* @since 0.3.0
*/
public Set<UserProperty> getUserProperties() {
return userProperties;
}
/**
* Sets the user-defined business metadata for this category.
*
* @param userProperties the user-defined properties
* @see #getUserProperties()
* @since 0.3.0
*/
public void setUserProperties(final Set<UserProperty> userProperties) {
this.userProperties = userProperties;
}
public List<FeedSummary> getFeeds() {
if (feeds == null) {
feeds = new ArrayList<>();
}
return feeds;
}
public void setFeeds(List<FeedSummary> feeds) {
this.feeds = feeds;
}
@JsonIgnore
public void removeRelatedFeed(final FeedMetadata feed) {
FeedSummary match = Iterables.tryFind(feeds, new Predicate<FeedSummary>() {
@Override
public boolean apply(FeedSummary metadata) {
return feed.getFeedName().equalsIgnoreCase(metadata.getFeedName());
}
}).orNull();
if (match != null) {
getFeeds().remove(match);
}
}
@JsonIgnore
public void addRelatedFeed(final FeedSummary feed) {
if (feeds != null) {
List<FeedSummary> arr = Lists.newArrayList(feeds);
FeedSummary match = Iterables.tryFind(arr, new Predicate<FeedSummary>() {
@Override
public boolean apply(FeedSummary metadata) {
return feed.getFeedName().equalsIgnoreCase(metadata.getFeedName());
}
}).orNull();
if (match != null) {
feeds.remove(match);
}
}
getFeeds().add(feed);
relatedFeeds = getFeeds().size();
}
public int getRelatedFeeds() {
return relatedFeeds;
}
public void setRelatedFeeds(int relatedFeeds) {
this.relatedFeeds = relatedFeeds;
}
@JsonIgnore
public void generateSystemName() {
this.systemName = SystemNamingService.generateSystemName(name);
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public List<HadoopSecurityGroup> getSecurityGroups() {
return securityGroups;
}
public void setSecurityGroups(List<HadoopSecurityGroup> securityGroups) {
this.securityGroups = securityGroups;
}
}