Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge pull request #191 from zanata/squashed-enforcedValidation
Browse files Browse the repository at this point in the history
Enforced Validation: prevent saving of translations that have validation errors
  • Loading branch information
davidmason committed Sep 22, 2013
2 parents b2714d6 + 08a06ad commit a9594ef
Show file tree
Hide file tree
Showing 125 changed files with 2,754 additions and 2,413 deletions.
68 changes: 20 additions & 48 deletions zanata-model/src/main/java/org/zanata/model/HIterationGroup.java
Expand Up @@ -20,96 +20,68 @@
*/
package org.zanata.model;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import lombok.Getter;
import lombok.Setter;

import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.Field;
import org.hibernate.validator.constraints.NotEmpty;
import org.zanata.common.EntityStatus;

import com.google.common.collect.Sets;

/**
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
*/
@Entity
@Setter
// @EqualsAndHashCode(callSuper = true)
@Getter
@Access(AccessType.FIELD)
public class HIterationGroup extends SlugEntityBase implements HasEntityStatus
{
private static final long serialVersionUID = 5682522115222479842L;
private String name;

private String description;

private Set<HPerson> maintainers;

private Set<HProjectIteration> projectIterations;

private EntityStatus status = EntityStatus.ACTIVE;

@Size(max = 80)
@NotEmpty
@Field()
public String getName()
{
return name;
}
private String name;

@Size(max = 100)
@Field()
public String getDescription()
{
return description;
}
private String description;

@ManyToMany
@JoinTable(name = "HIterationGroup_Maintainer", joinColumns = @JoinColumn(name = "iterationGroupId"), inverseJoinColumns = @JoinColumn(name = "personId"))
public Set<HPerson> getMaintainers()
{
if (maintainers == null)
{
maintainers = new HashSet<HPerson>();
}
return maintainers;
}
@JoinTable(name = "HIterationGroup_Maintainer", joinColumns = @JoinColumn(name = "iterationGroupId"),
inverseJoinColumns = @JoinColumn(name = "personId"))
private Set<HPerson> maintainers = Sets.newHashSet();

@ManyToMany
@JoinTable(name = "HIterationGroup_ProjectIteration", joinColumns = @JoinColumn(name = "iterationGroupId"), inverseJoinColumns = @JoinColumn(name = "projectIterationId"))
private Set<HProjectIteration> projectIterations = Sets.newHashSet();

@Type(type = "entityStatus")
@NotNull
private EntityStatus status = EntityStatus.ACTIVE;

public void addMaintainer(HPerson maintainer)
{
this.getMaintainers().add(maintainer);
maintainer.getMaintainerVersionGroups().add(this);
}

@ManyToMany
@JoinTable(name = "HIterationGroup_ProjectIteration", joinColumns = @JoinColumn(name = "iterationGroupId"), inverseJoinColumns = @JoinColumn(name = "projectIterationId"))
public Set<HProjectIteration> getProjectIterations()
{
if (projectIterations == null)
{
projectIterations = new HashSet<HProjectIteration>();
}
return projectIterations;
}

public void addProjectIteration(HProjectIteration iteration)
{
this.getProjectIterations().add(iteration);
}

@Type(type = "entityStatus")
@NotNull
@Override
public EntityStatus getStatus()
{
return status;
}

}
185 changes: 56 additions & 129 deletions zanata-model/src/main/java/org/zanata/model/HProject.java
Expand Up @@ -25,11 +25,12 @@
import static org.jboss.seam.security.EntityAction.UPDATE;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
Expand All @@ -39,11 +40,13 @@
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.MapKeyColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

Expand All @@ -52,182 +55,106 @@
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.hibernate.search.annotations.Field;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.validator.constraints.NotEmpty;
import org.jboss.seam.annotations.security.Restrict;
import org.zanata.annotation.EntityRestrict;
import org.zanata.common.EntityStatus;
import org.zanata.common.ProjectType;
import org.zanata.model.type.EntityStatusType;
import org.zanata.rest.dto.Project;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;

/**
* @see Project
*
*/
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Access(AccessType.FIELD)
@TypeDef(name = "entityStatus", typeClass = EntityStatusType.class)
@Restrict
@EntityRestrict({INSERT, UPDATE, DELETE})
@EntityRestrict({ INSERT, UPDATE, DELETE })
@Setter
@Getter
@Indexed
@ToString(callSuper = true, of = "name")
public class HProject extends SlugEntityBase implements Serializable, HasEntityStatus
{
private static final long serialVersionUID = 1L;
private String name;
private String description;
private String homeContent;
private String sourceViewURL;
private String sourceCheckoutURL;
private boolean overrideLocales = false;
private boolean restrictedByRoles = false;
private boolean overrideValidations = false;
private HCopyTransOptions defaultCopyTransOpts;
private Set<HLocale> customizedLocales;
private ProjectType defaultProjectType;

private Set<HPerson> maintainers;
private Set<HAccountRole> allowedRoles;
private Set<String> customizedValidations;

private List<HProjectIteration> projectIterations = new ArrayList<HProjectIteration>();
private EntityStatus status = EntityStatus.ACTIVE;

@OneToMany(mappedBy = "project")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public List<HProjectIteration> getProjectIterations()
{
return projectIterations;
}

public void addIteration(HProjectIteration iteration)
{
projectIterations.add(iteration);
iteration.setProject(this);
}

@Size(max = 80)
@NotEmpty
@Field()
public String getName()
{
return name;
}

public boolean getOverrideLocales()
{
return this.overrideLocales;
}

public boolean getOverrideValidations()
{
return overrideValidations;
}

public boolean isRestrictedByRoles()
{
return restrictedByRoles;
}

@Enumerated(EnumType.STRING)
public ProjectType getDefaultProjectType()
{
return defaultProjectType;
}
private String name;

@Size(max = 100)
@Field()
public String getDescription()
{
return description;
}
private String description;

@Type(type = "text")
public String getHomeContent()
{
return homeContent;
}
private String homeContent;

public String getSourceViewURL()
{
return sourceViewURL;
}
private String sourceViewURL;

public String getSourceCheckoutURL()
{
return sourceCheckoutURL;
}
private String sourceCheckoutURL;

private boolean overrideLocales = false;

private boolean restrictedByRoles = false;

@OneToOne(fetch = FetchType.LAZY, optional = true)
@JoinColumn(name = "default_copy_trans_opts_id")
public HCopyTransOptions getDefaultCopyTransOpts()
{
return defaultCopyTransOpts;
}
private HCopyTransOptions defaultCopyTransOpts;

@ManyToMany
@JoinTable(name = "HProject_Locale", joinColumns = @JoinColumn(name = "projectId"),
inverseJoinColumns = @JoinColumn(name = "localeId"))
private Set<HLocale> customizedLocales = Sets.newHashSet();

@Enumerated(EnumType.STRING)
private ProjectType defaultProjectType;

/**
* @see {@link #addMaintainer(HPerson)}
*/
@ManyToMany
@JoinTable(name = "HProject_Maintainer", joinColumns = @JoinColumn(name = "projectId"), inverseJoinColumns = @JoinColumn(name = "personId"))
@JoinTable(name = "HProject_Maintainer", joinColumns = @JoinColumn(name = "projectId"),
inverseJoinColumns = @JoinColumn(name = "personId"))
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public Set<HPerson> getMaintainers()
{
if (maintainers == null)
{
maintainers = new HashSet<HPerson>();
}
return maintainers;
}

public void addMaintainer( HPerson maintainer )
{
this.getMaintainers().add(maintainer);
maintainer.getMaintainerProjects().add(this);
}
private Set<HPerson> maintainers = Sets.newHashSet();

@ManyToMany
@JoinTable(name = "HProject_Locale", joinColumns = @JoinColumn(name = "projectId"), inverseJoinColumns = @JoinColumn(name = "localeId"))
public Set<HLocale> getCustomizedLocales()
{
if (customizedLocales == null)
{
customizedLocales = new HashSet<HLocale>();
}
return customizedLocales;
}
@JoinTable(name = "HProject_AllowedRole", joinColumns = @JoinColumn(name = "projectId"),
inverseJoinColumns = @JoinColumn(name = "roleId"))
private Set<HAccountRole> allowedRoles = Sets.newHashSet();

@ManyToMany
@JoinTable(name = "HProject_AllowedRole", joinColumns = @JoinColumn(name = "projectId"), inverseJoinColumns = @JoinColumn(name = "roleId"))
public Set<HAccountRole> getAllowedRoles()
{
if(allowedRoles == null)
{
allowedRoles = new HashSet<HAccountRole>();
}
return allowedRoles;
}
@ElementCollection
@JoinTable(name = "HProject_Validation", joinColumns = { @JoinColumn(name = "projectId") })
@MapKeyColumn(name = "validation")
@Column(name = "state", nullable = false)
private Map<String, String> customizedValidations = Maps.newHashMap();

@JoinTable(name = "HProject_Validation", joinColumns = @JoinColumn(name = "projectId"))
@Type(type = "text")
@ElementCollection(fetch = FetchType.LAZY)
@Column(name = "validation", nullable = false)
public Set<String> getCustomizedValidations()
{
if (customizedValidations == null)
{
customizedValidations = new HashSet<String>();
}
return customizedValidations;
}
@OneToMany(mappedBy = "project")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<HProjectIteration> projectIterations = Lists.newArrayList();

@Type(type = "entityStatus")
@NotNull
@Override
public EntityStatus getStatus()
private EntityStatus status = EntityStatus.ACTIVE;

public void addIteration(HProjectIteration iteration)
{
return status;
projectIterations.add(iteration);
iteration.setProject(this);
}

public void addMaintainer(HPerson maintainer)
{
this.getMaintainers().add(maintainer);
maintainer.getMaintainerProjects().add(this);
}
}

0 comments on commit a9594ef

Please sign in to comment.