package com.thinkbiganalytics.metadata.jpa.feed;
/*-
* #%L
* thinkbig-operational-metadata-jpa
* %%
* 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.metadata.api.feed.OpsManagerFeed;
import com.thinkbiganalytics.metadata.api.jobrepo.job.BatchJobInstance;
import com.thinkbiganalytics.metadata.jpa.jobrepo.job.JpaBatchJobInstance;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedStoredProcedureQueries;
import javax.persistence.NamedStoredProcedureQuery;
import javax.persistence.OneToMany;
import javax.persistence.ParameterMode;
import javax.persistence.StoredProcedureParameter;
import javax.persistence.Table;
/**
* This entity is used to Map the Operational Feed Data with the Modeshape JCR feed data. The ID here maps directly to the JCR Modeshape Feed.ID
* Two stored procedures are mapped here to delete jobs for a given feed, and abandon all failed jobs for a feed.
*/
@Entity
@Table(name = "FEED")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "OpsManagerFeed.deleteFeedJobs", procedureName = "delete_feed_jobs", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "category", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "feed", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "result", type = Integer.class)
}),
@NamedStoredProcedureQuery(name = "OpsManagerFeed.abandonFeedJobs", procedureName = "abandon_feed_jobs", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "feed", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "exitMessage", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res", type = Integer.class)
})
})
public class JpaOpsManagerFeed implements OpsManagerFeed {
@EmbeddedId
private OpsManagerFeedId id;
@Column(name = "name", length = 100, unique = true, nullable = false)
private String name;
@Enumerated(EnumType.STRING)
@Column(name = "FEED_TYPE")
private FeedType feedType = FeedType.FEED;
@OneToMany(targetEntity = JpaBatchJobInstance.class, mappedBy = "feed", fetch = FetchType.LAZY, orphanRemoval = true)
private Set<BatchJobInstance> jobInstances = new HashSet<>();
/**
* The FEED_CHECK_DATA_FEEDS is a many to many table linking a Feed to any other feeds which are registered to check the data of the related feed.
*/
@ManyToMany(targetEntity = JpaOpsManagerFeed.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "FEED_CHECK_DATA_FEEDS",
joinColumns = {@JoinColumn(name = "FEED_ID")},
inverseJoinColumns = {@JoinColumn(name = "CHECK_DATA_FEED_ID")})
private Set<OpsManagerFeed> checkDataFeeds = new HashSet<OpsManagerFeed>();
@ManyToMany(targetEntity = JpaOpsManagerFeed.class, mappedBy = "checkDataFeeds")
private Set<OpsManagerFeed> feedsToCheck = new HashSet<OpsManagerFeed>();
public JpaOpsManagerFeed(OpsManagerFeed.ID id, String name) {
this.id = (OpsManagerFeedId) id;
this.name = name;
}
public JpaOpsManagerFeed() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public OpsManagerFeedId getId() {
return id;
}
public void setId(OpsManagerFeedId id) {
this.id = id;
}
public FeedType getFeedType() {
return feedType;
}
public void setFeedType(FeedType feedType) {
this.feedType = feedType;
}
public Set<BatchJobInstance> getJobInstances() {
return jobInstances;
}
public void setJobInstances(Set<BatchJobInstance> jobInstances) {
this.jobInstances = jobInstances;
}
public Set<OpsManagerFeed> getCheckDataFeeds() {
if (checkDataFeeds == null) {
checkDataFeeds = new HashSet<>();
}
return checkDataFeeds;
}
public void setCheckDataFeeds(Set<OpsManagerFeed> checkDataFeeds) {
this.checkDataFeeds = checkDataFeeds;
}
public Set<OpsManagerFeed> getFeedsToCheck() {
if (feedsToCheck == null) {
feedsToCheck = new HashSet<>();
}
return feedsToCheck;
}
public void setFeedsToCheck(Set<OpsManagerFeed> feedsToCheck) {
this.feedsToCheck = feedsToCheck;
}
}