package com.thinkbiganalytics.feedmgr.service.feed; /*- * #%L * thinkbig-feed-manager-controller * %% * 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.thinkbiganalytics.feedmgr.rest.model.FeedMetadata; import com.thinkbiganalytics.feedmgr.rest.model.FeedSummary; import com.thinkbiganalytics.feedmgr.rest.model.NifiFeed; import com.thinkbiganalytics.feedmgr.rest.model.UIFeed; import com.thinkbiganalytics.feedmgr.rest.model.UserField; import com.thinkbiganalytics.feedmgr.rest.model.UserProperty; import com.thinkbiganalytics.metadata.api.feed.Feed; import com.thinkbiganalytics.policy.rest.model.FieldRuleProperty; import com.thinkbiganalytics.security.action.Action; import java.io.Serializable; import java.security.AccessControlException; import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.Set; import javax.annotation.Nonnull; /** * Common Feed Manager actions */ public interface FeedManagerFeedService { /** * Checks the current security context has been granted permission to perform the specified action(s) * on the feed with the specified feed ID. If the feed does not exist then no check is made. * * @param id the feed ID * @param action an action to check * @param more any additional actions to check * @return true if the feed existed, otherwise false * @throws AccessControlException thrown if the feed exists and the action(s) checked are not permitted */ boolean checkFeedPermission(String id, Action action, Action... more); /** * Return a feed matching its system category and system feed name * * @param categoryName a system category name * @param feedName a system feed name * @return a feed matching its system category and system feed name */ FeedMetadata getFeedByName(String categoryName, String feedName); /** * Return a feed matching the incoming id * * @param id a feed id * @return a feed matching the id, or null if not found */ FeedMetadata getFeedById(String id); /** * Return a feed matching the feedId. * * @param refreshTargetTableSchema if true it will attempt to update the metadata of the destination table {@link FeedMetadata#table} with the real the destination * @return a feed matching the feedId */ FeedMetadata getFeedById(String id, boolean refreshTargetTableSchema); /** * @return a list of all the feeds in the system */ Collection<FeedMetadata> getFeeds(); /** * Return a list of feeds, optionally returning a more verbose object populating all the templates and properties. * Verbose will return {@link FeedMetadata} objects, false will return {@link FeedSummary} objects * * @param verbose true will return {@link FeedMetadata} objects, false will return {@link FeedSummary} objects * @return a list of feed objects */ Collection<? extends UIFeed> getFeeds(boolean verbose); /** * @return a list of feeds */ List<FeedSummary> getFeedSummaryData(); /** * Return a list of feeds in a given category * * @param categoryId the category to look at * @return a list of feeds in a given category */ List<FeedSummary> getFeedSummaryForCategory(String categoryId); /** * Find all the feeds assigned to a given template * * @param registeredTemplateId a registered template id * @return all the feeds assigned to a given template */ List<FeedMetadata> getFeedsWithTemplate(String registeredTemplateId); /** * Converts the specified feed id to a {@link Feed.ID} object. * * @param fid the feed id, usually a string * @return the {@link Feed.ID} object */ Feed.ID resolveFeed(@Nonnull Serializable fid); /** * Create a new Feed in NiFi * * @param feedMetadata metadata about the feed * @return an object with status information about the newly created feed, or error information if unsuccessful */ NifiFeed createFeed(FeedMetadata feedMetadata); /** * Deletes the specified feed. * * @param feedId the feed id * @throws RuntimeException if the feed cannot be deleted */ void deleteFeed(@Nonnull String feedId); /** * Allows a feed's cleanup flow to run. * * @param feedId the feed id to be cleaned up * @throws RuntimeException if the metadata property cannot be set */ void enableFeedCleanup(@Nonnull String feedId); /** * Change the state of the feed to be {@link FeedMetadata.STATE#ENABLED} * * @return a summary of the feed after being enabled */ FeedSummary enableFeed(String feedId); /** * Change the state of the feed to be {@link FeedMetadata.STATE#DISABLED} * * @return a summary of the feed after being disabled */ FeedSummary disableFeed(String feedId); void applyFeedSelectOptions(List<FieldRuleProperty> properties); /** * Gets the user-defined fields for feeds. * * @return the user-defined fields */ @Nonnull Set<UserField> getUserFields(); /** * Sets the user-defined fields for feeds. * * @param userFields the new set of user-defined fields */ void setUserFields(@Nonnull Set<UserField> userFields); /** * Gets the user-defined fields for feeds within the specified category. * * @param categoryId the category id * @return the user-defined fields, if the category exists */ @Nonnull Optional<Set<UserProperty>> getUserFields(@Nonnull String categoryId); }