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

Commit

Permalink
Work in progress: version group enhancement
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Jun 18, 2012
1 parent cb7a674 commit 4b0911e
Show file tree
Hide file tree
Showing 16 changed files with 394 additions and 30 deletions.
6 changes: 6 additions & 0 deletions zanata-model/src/main/java/org/zanata/model/HPerson.java
Expand Up @@ -178,6 +178,12 @@ public boolean isMaintainerOfVersionGroups()
return !getMaintainerVersionGroups().isEmpty();
}

@Transient
public boolean isMaintainerOfProjects()
{
return !getMaintainerProjects().isEmpty();
}

@Transient
public boolean isCoordinator(HLocale locale)
{
Expand Down
53 changes: 53 additions & 0 deletions zanata-war/src/main/java/org/zanata/action/SendEmailAction.java
Expand Up @@ -25,6 +25,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Set;

import org.hibernate.validator.Email;
import org.jboss.seam.ScopeType;
Expand All @@ -45,10 +46,12 @@
import org.zanata.common.LocaleId;
import org.zanata.dao.PersonDAO;
import org.zanata.model.HAccount;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HLocale;
import org.zanata.model.HLocaleMember;
import org.zanata.model.HPerson;
import org.zanata.service.LocaleService;
import org.zanata.service.VersionGroupService;

/**
* Sends an email to a specified role.
Expand All @@ -67,10 +70,12 @@ public class SendEmailAction implements Serializable
private static final String EMAIL_TYPE_CONTACT_ADMIN = "contact_admin";
private static final String EMAIL_TYPE_CONTACT_COORDINATOR = "contact_coordinator";
private static final String EMAIL_TYPE_REQUEST_TO_JOIN = "request_to_join_language_team";
private static final String EMAIL_TYPE_REQUEST_TO_JOIN_GROUP = "request_to_join_group";

private static final String ADMIN_EMAIL_TEMPLATE = "/WEB-INF/facelets/email/email_admin.xhtml";
private static final String COORDINATOR_EMAIL_TEMPLATE = "/WEB-INF/facelets/email/email_coordinator.xhtml";
private static final String REQUEST_TO_JOIN_EMAIL_TEMPLATE = "/WEB-INF/facelets/email/email_request_to_join.xhtml";
private static final String REQUEST_TO_JOIN_GROUP_EMAIL_TEMPLATE = "/WEB-INF/facelets/email/email_request_to_join_group.xhtml";

@In
private ApplicationConfiguration applicationConfiguration;
Expand All @@ -90,6 +95,9 @@ public class SendEmailAction implements Serializable
@In
private LocaleSelector localeSelector;

@In
private VersionGroupService versionGroupServiceImpl;

@Logger
private Log log;

Expand All @@ -104,9 +112,13 @@ public class SendEmailAction implements Serializable
private String emailType;
private String toName;
private String toEmailAddr;

private String language;
private HLocale locale;

private String versionGroupSlug;
private HIterationGroup versionGroup;

@Create
public void onCreate()
{
Expand Down Expand Up @@ -211,6 +223,22 @@ public HLocale getLocale()
return locale;
}

public String getVersionGroupSlug()
{
return versionGroupSlug;
}

public void setVersionGroupSlug(String versionGroupSlug)
{
this.versionGroupSlug = versionGroupSlug;
versionGroup = versionGroupServiceImpl.getBySlug(versionGroupSlug);
}

public HIterationGroup getVersionGroup()
{
return versionGroup;
}

private List<HPerson> coordinators;

private List<HPerson> getCoordinators()
Expand Down Expand Up @@ -281,6 +309,11 @@ else if (emailType.equals(EMAIL_TYPE_REQUEST_TO_JOIN))
sendToLanguageCoordinators(REQUEST_TO_JOIN_EMAIL_TEMPLATE);
return "success";
}
else if (emailType.equals(EMAIL_TYPE_REQUEST_TO_JOIN_GROUP))
{
sendToVersionGroupMaintainer(REQUEST_TO_JOIN_GROUP_EMAIL_TEMPLATE);
return "success";
}
else
{
throw new Exception("Invalid email type: " + emailType);
Expand Down Expand Up @@ -319,6 +352,26 @@ private void sendToLanguageCoordinators(String emailTemplate)
}
}

private void sendToVersionGroupMaintainer(String emailTemplate)
{
Set<HPerson> maintainers = versionGroup.getMaintainers();
if (!maintainers.isEmpty())
{
for (HPerson maintainer : maintainers)
{
toName = maintainer.getName();
toEmailAddr = maintainer.getEmail();
renderer.render(emailTemplate);
}
log.info("Sent version group maintainer email: fromName '{0}', fromLoginName '{1}', replyEmail '{2}', subject '{3}', message '{4}', language '{5}'", fromName, fromLoginName, replyEmail, subject, message, language);
FacesMessages.instance().add("#{messages['jsf.email.group.maintainer.SentNotification']}");
}
else
{
sendToAdminEmails(emailTemplate);
}
}

/**
* sends emails to configured admin emails for server, or admin users if no
* server emails are configured.
Expand Down
64 changes: 59 additions & 5 deletions zanata-war/src/main/java/org/zanata/action/VersionGroupAction.java
Expand Up @@ -21,19 +21,25 @@
package org.zanata.action;

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

import org.apache.lucene.queryParser.ParseException;
import org.h2.util.StringUtils;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.log.Log;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.zanata.common.EntityStatus;
import org.zanata.dao.ProjectDAO;
import org.zanata.model.HAccount;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HIterationProject;
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.service.VersionGroupService;

Expand All @@ -46,12 +52,18 @@ public class VersionGroupAction implements Serializable
@In
private VersionGroupService versionGroupServiceImpl;

@Logger
Log log;
@In
private ProjectDAO projectDAO;

@In(required = false, value = JpaIdentityStore.AUTHENTICATED_USER)
HAccount authenticatedAccount;

private List<HIterationGroup> allVersionGroups;

private List<HProjectIteration> searchResults;

private List<HProjectIteration> maintainedProjectVersions;

private HIterationGroup group;

private String searchTerm;
Expand All @@ -65,11 +77,44 @@ public void loadAllActiveGroupsOrIsMaintainer()
allVersionGroups = versionGroupServiceImpl.getAllActiveVersionGroupsOrIsMaintainer();
}

public void init(String slug)
public void init(String slug, String projectSlug, String iterationSlug)
{
group = versionGroupServiceImpl.getBySlug(slug);
executePreSearch(projectSlug, iterationSlug);
}

/**
* Run search on unique project version if projectSlug, iterationSlug exits
*/
private void executePreSearch(String projectSlug, String iterationSlug)
{
if (!StringUtils.isNullOrEmpty(projectSlug) && !StringUtils.isNullOrEmpty(iterationSlug))
{
HProjectIteration projectIteration = versionGroupServiceImpl.getProjectIterationBySlug(projectSlug, iterationSlug);
if (projectIteration != null)
{
getSearchResults().add(projectIteration);
}
}
}

public void searchMaintainedProjects()
{
Set<HProject> maintainedProjects = authenticatedAccount.getPerson().getMaintainerProjects();
for(HProject project:maintainedProjects)
{
getMaintainedProjectVersions().addAll(projectDAO.getAllIterations(project.getSlug()));
}
}

public List<HProjectIteration> getMaintainedProjectVersions()
{
if (maintainedProjectVersions == null)
{
maintainedProjectVersions = new ArrayList<HProjectIteration>();
}
return maintainedProjectVersions;
}
public String getSearchTerm()
{
return searchTerm;
Expand All @@ -82,6 +127,10 @@ public void setSearchTerm(String searchTerm)

public List<HProjectIteration> getSearchResults()
{
if (searchResults == null)
{
searchResults = new ArrayList<HProjectIteration>();
}
return searchResults;
}

Expand Down Expand Up @@ -155,6 +204,11 @@ else if (group.getStatus() == EntityStatus.ACTIVE)
return false;
}

public boolean isUserProjectMaintainer()
{
return authenticatedAccount != null && authenticatedAccount.getPerson().isMaintainerOfProjects();
}

public String getGroupNameFilter()
{
return groupNameFilter;
Expand Down
28 changes: 28 additions & 0 deletions zanata-war/src/main/java/org/zanata/action/VersionGroupHome.java
Expand Up @@ -30,8 +30,10 @@
import org.hibernate.criterion.NaturalIdentifier;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.log.Log;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.zanata.common.EntityStatus;
import org.zanata.model.HAccount;
Expand All @@ -49,13 +51,19 @@ public class VersionGroupHome extends SlugHome<HIterationGroup>
private static final long serialVersionUID = 1L;

private String slug;
private String projectSlug;
private String iterationSlug;

@In(required = false, value = JpaIdentityStore.AUTHENTICATED_USER)
HAccount authenticatedAccount;

@In
SlugEntityService slugEntityServiceImpl;


@Logger
Log log;

@Override
protected HIterationGroup loadInstance()
{
Expand Down Expand Up @@ -96,6 +104,26 @@ public void setSlug(String slug)
this.slug = slug;
}

public String getProjectSlug()
{
return projectSlug;
}

public void setProjectSlug(String projectSlug)
{
this.projectSlug = projectSlug;
}

public String getIterationSlug()
{
return iterationSlug;
}

public void setIterationSlug(String iterationSlug)
{
this.iterationSlug = iterationSlug;
}

public void validateSuppliedId()
{
getInstance(); // this will raise an EntityNotFound exception
Expand Down
9 changes: 9 additions & 0 deletions zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java
Expand Up @@ -119,6 +119,15 @@ private String constructFilterCondition(boolean filterActive, boolean filterRead
return condition.toString();
}

@SuppressWarnings("unchecked")
public List<HProjectIteration> getAllIterations(String slug)
{
Query q = getSession().createQuery("from HProjectIteration t where t.project.slug = :projectSlug");
q.setParameter("projectSlug", slug);
q.setCacheable(true).setComment("ProjectDAO.getAllIterations");
return q.list();
}

@SuppressWarnings("unchecked")
public List<HProjectIteration> getActiveIterations(String slug)
{
Expand Down
Expand Up @@ -47,4 +47,6 @@ public interface VersionGroupService
boolean joinVersionGroup(String slug, Long projectIterationId);

boolean leaveVersionGroup(String slug, Long projectIterationId);

HProjectIteration getProjectIterationBySlug(String projectSlug, String iterationSlug);
}
Expand Up @@ -78,6 +78,12 @@ public List<HIterationGroup> getAllActiveVersionGroupsOrIsMaintainer()
return activeVersions;
}

@Override
public HProjectIteration getProjectIterationBySlug(String projectSlug, String iterationSlug)
{
return projectIterationDAO.getBySlug(projectSlug, iterationSlug);
}

@Override
public HIterationGroup getBySlug(String slug)
{
Expand Down

0 comments on commit 4b0911e

Please sign in to comment.