/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.uff.ic.oceano.core.model;
import br.uff.ic.oceano.core.model.transiente.Language;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.persistence.*;
/**
*
* @author Kann
*/
@NamedQueries({
@NamedQuery(name = "SoftwareProject.getByRepositoryUrl", query = "select p from SoftwareProject p where p.repositoryUrl = ?"),
@NamedQuery(name = "SoftwareProject.getByName", query = "select p from SoftwareProject p where p.configurationItem.name = ?"),
@NamedQuery(name = "SoftwareProject.getProjectsByOceanoUser", query = "select pu.project from ProjectUser pu where pu.oceanoUser = ? order by pu.project.configurationItem.name"),
@NamedQuery(name = "SoftwareProject.getProjectToDetailById", query = "select distinct p from SoftwareProject p left outer join fetch p.revisions r left outer join fetch r.changedFiles vi where p.id = ?"),
@NamedQuery(name = "SoftwareProject.getMavenProjectsByUser", query = "select pu.project from ProjectUser pu where pu.oceanoUser = ? and pu.project.mavenProject = true order by pu.project.configurationItem.name")
})
@Entity
@Table(name = "SoftwareProject")
@SequenceGenerator(name = "SoftwareProject_seq", sequenceName = "SoftwareProject_seq")
public class SoftwareProject implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SoftwareProject_seq")
private Long id;
@OneToMany(mappedBy = "project", fetch = FetchType.LAZY)
private Set<Revision> revisions;
private boolean mavenProject = false;
@Column(nullable = false, unique = true)
private String repositoryUrl;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
private Set<ProjectUser> projectUsers;
@ManyToOne(optional = false)
@JoinColumn(name = "idConfigurationItem")
private ConfigurationItem configurationItem;
@Column(nullable = false)
private Language lang = Language.JAVA;
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final SoftwareProject other = (SoftwareProject) obj;
if ((this.repositoryUrl == null) ? (other.repositoryUrl != null) : !this.repositoryUrl.equals(other.repositoryUrl)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 47 * hash + (this.repositoryUrl != null ? this.repositoryUrl.hashCode() : 0);
return hash;
}
@Override
public String toString() {
String result = "";
result += this.configurationItem != null ? this.configurationItem.getName() : "null item";
result += " - ";
result += this.repositoryUrl != null ? this.repositoryUrl.hashCode() : "null url";
return result;
}
public int getNumberOfRevisionsMeasured() {
if (this.revisions == null) {
return 0;
}
return this.revisions.size();
}
/**
* @return the id
*/
public Long getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(Long id) {
this.id = id;
}
/**
* @return the revisions
*/
public Set<Revision> getRevisions() {
return revisions;
}
public Integer getUncompiledRevisionCount() {
Integer count = 0;
if (revisions != null && !revisions.isEmpty()) {
for (Revision revision : revisions) {
if (revision.getCannotCompile() != null && revision.getCannotCompile() == true) {
count++;
}
}
}
return count;
}
/**
* @return the revisions
*/
public List<Revision> getRevisionsAsList() {
List<Revision> returnList = new ArrayList<Revision>(revisions);
Collections.sort(returnList);
return returnList;
}
/**
* @param revisions the revisions to set
*/
public void setRevisions(Set<Revision> revisions) {
this.revisions = revisions;
}
/**
* @return the mavenProject
*/
public boolean isMavenProject() {
return mavenProject;
}
/**
* @param mavenProject the mavenProject to set
*/
public void setMavenProject(boolean mavenProject) {
this.mavenProject = mavenProject;
}
/**
* @return the repositoryUrl
*/
public String getRepositoryUrl() {
return repositoryUrl;
}
/**
* @param repositoryUrl the repositoryUrl to set
*/
public void setRepositoryUrl(String repositoryUrl) {
this.repositoryUrl = repositoryUrl;
}
/**
* @return the projectUser
*/
public Set<ProjectUser> getProjectUser() {
return projectUsers;
}
/**
* @param projectUser the projectUser to set
*/
public void setProjectUser(Set<ProjectUser> projectUsers) {
this.projectUsers = projectUsers;
}
/**
* @return the configurationItem
*/
public ConfigurationItem getConfigurationItem() {
return configurationItem;
}
/**
* @param configurationItem the configurationItem to set
*/
public void setConfigurationItem(ConfigurationItem configurationItem) {
this.configurationItem = configurationItem;
}
/**
* @param language the lanaguage to set
*/
public Language getLanguage() {
return this.lang;
}
/**
* @param language the lanaguage to set
*/
public void setLanguage(Language language) {
this.lang = language;
}
}