blob: bfe7a01ae83c8f6b6cab6946f9510652f1615c75 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.core.feed.jpa;
import java.util.Date;
import java.util.UUID;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.eclipse.persistence.annotations.Index;
import org.eclipse.skalli.commons.UUIDUtils;
import org.eclipse.skalli.services.feed.Content;
import org.eclipse.skalli.services.feed.FeedEntry;
import org.eclipse.skalli.services.feed.Link;
import org.eclipse.skalli.services.feed.Person;
@Table(name = "Entry")
@NamedQueries({
@NamedQuery(name = EntryJPA.FIND_BY_PROJECT_ID,
query = "SELECT e FROM EntryJPA e where e.projectId = :projectId " + EntryJPA.DEFAULT_ORDER_BY),
@NamedQuery(name = EntryJPA.FIND_BY_PROJECT_AND_SOURCES,
query = "SELECT e FROM EntryJPA e where e.projectId = :projectId and e.source in :sources "
+ EntryJPA.DEFAULT_ORDER_BY),
@NamedQuery(name = EntryJPA.FIND_SOURCES_BY_PROJECT_ID,
query = "SELECT DISTINCT e.source FROM EntryJPA e where e.projectId = :projectId "
+ "order by e.source")
})
@Entity
public class EntryJPA implements FeedEntry {
public static final String FIND_BY_PROJECT_ID = "EntryJPA.findByProjectID"; //$NON-NLS-1$
public static final String FIND_BY_PROJECT_AND_SOURCES = "EntryJPA.findByProjectAndSources"; //$NON-NLS-1$
public static final String FIND_SOURCES_BY_PROJECT_ID = "EntryJPA.findSourcesByProjectID"; //$NON-NLS-1$
public static final String PARAM_PROJECT_ID = "projectId"; //$NON-NLS-1$
public static final String PARAM_SOURCES = "sources"; //$NON-NLS-1$
static final String DEFAULT_ORDER_BY = "order by e.published DESC, e.id ASC"; //$NON-NLS-1$
public static final int ID_LENGTH = 40;
public static final int URI_LENGTH = 512;
public static final int TITLE_LENGTH = 256;
public static final int TITLE_EX_LENGTH = 512;
public static final int TYPE_LENGTH = 32;
public static final int SOURCE_LENGTH = 16;
@Id
@Column(length = ID_LENGTH)
private String id;
@Column(length = TITLE_LENGTH, nullable = false)
private String title;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "href", column = @Column(name = "link_href", length = LinkJPA.HREF_LENGTH)),
@AttributeOverride(name = "title", column = @Column(name = "link_title", length = LinkJPA.TITLE_LENGHT))
})
private LinkJPA link;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "type", column = @Column(name = "content_type", length = ContentJPA.TYPE_LENGTH)),
@AttributeOverride(name = "value", column = @Column(name = "content_value", length = ContentJPA.VALUE_LENGTH))
})
private ContentJPA content;
@Temporal(TemporalType.TIMESTAMP)
@Column(nullable = false)
private Date published;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "name", column = @Column(name = "author_name", length = PersonJPA.NAME_LENGTH)),
@AttributeOverride(name = "email", column = @Column(name = "author_email", length = PersonJPA.EMAIL_LENGTH))
})
private PersonJPA author;
@Column(nullable = false)
@Index
private String projectId;
@Column(length = SOURCE_LENGTH, nullable = false)
@Index
private String source;
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
@Override
public String getTitle() {
return title;
}
@Override
public void setTitle(String title) {
this.title = title;
}
@Override
public Link getLink() {
if (link == null) {
link = new LinkJPA();
}
return link;
}
@Override
public Content getContent() {
if (content == null) {
content = new ContentJPA();
}
return content;
}
@Override
public Date getPublished() {
return published;
}
@Override
public void setPublished(Date published) {
this.published = published;
}
@Override
public Person getAuthor() {
if (author == null) {
author = new PersonJPA();
}
return author;
}
@Override
public UUID getProjectId() {
return UUIDUtils.asUUID(projectId);
}
@Override
public void setProjectId(UUID projectId) {
this.projectId = projectId.toString();
}
@Override
public String getSource() {
return source;
}
@Override
public void setSource(String source) {
this.source = source;
}
}