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

Commit

Permalink
Project iteration grouping: work in progress, implementing search
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Apr 16, 2012
1 parent 3ddf15f commit 08bdf8e
Show file tree
Hide file tree
Showing 16 changed files with 286 additions and 38 deletions.
Expand Up @@ -20,13 +20,10 @@
*/
package org.zanata.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
Expand All @@ -45,9 +42,10 @@ public class HIterationGroup extends SlugEntityBase
private String name;

private String description;

private Set<HPerson> maintainers;

private Set<HProjectIteration> projectIterations;

@Length(max = 80)
@NotEmpty
Expand All @@ -73,13 +71,15 @@ public void setDescription(String description)
{
this.description = 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;
}

Expand All @@ -90,10 +90,31 @@ public void setMaintainers(Set<HPerson> maintainers)
{
this.maintainers = maintainers;
}
public void addMaintainer( HPerson maintainer )

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 setProjectIterations(Set<HProjectIteration> projectIterations)
{
this.projectIterations = projectIterations;
}

public void addProjectIteration(HProjectIteration iteration)
{
this.getProjectIterations().add(iteration);
}
}
@@ -0,0 +1,143 @@
/*
* Copyright 2010, Red Hat, Inc. and individual contributors as indicated by the
* @author tags. See the copyright.txt file in the distribution for a full
* listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package org.zanata.action;

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

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.log.Log;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HProjectIteration;
import org.zanata.security.BaseSecurityChecker;
import org.zanata.service.VersionGroupService;

@Name("versionGroupAction")
@Scope(ScopeType.PAGE)
public class VersionGroupAction extends BaseSecurityChecker implements Serializable
{
private static final long serialVersionUID = 1L;

@In
private VersionGroupService versionGroupServiceImpl;

@Logger
Log log;

private HIterationGroup group;
private String searchTerm;
private List<HProjectIteration> searchResults;

public void init(String slug)
{
group = versionGroupServiceImpl.getBySlug(slug);
}

public String getSearchTerm()
{
return searchTerm;
}

public void setSearchTerm(String searchTerm)
{
this.searchTerm = searchTerm;
}

public List<HProjectIteration> getSearchResults()
{
return searchResults;
}

/*
* public boolean isVersionInGroup(HProjectIteration projectIteration) { if
* (projectIteration == null) { return false; } for (HLocaleMember lm :
* this.locale.getMembers()) { if
* (lm.getPerson().getId().equals(projectIteration.getId())) { return true; }
* } return false; }
*
*
* @Transactional
*
* @Restrict("#{s:hasRole('admin')}") public void joinGroup() {
* log.debug("starting join tribe"); if (authenticatedAccount == null) {
* log.error("failed to load auth person"); return; } try {
* languageTeamServiceImpl.joinLanguageTeam(this.language,
* authenticatedAccount.getPerson().getId());
* Events.instance().raiseEvent("personJoinedTribe");
* log.info("{0} joined tribe {1}", authenticatedAccount.getUsername(),
* this.language);
* FacesMessages.instance().add("You are now a member of the {0} language team"
* , this.locale.retrieveNativeName()); } catch (Exception e) {
* FacesMessages.instance().add(Severity.ERROR, e.getMessage()); } }
*
* @Transactional public void leaveGroup() {
* log.debug("starting leave tribe"); if (authenticatedAccount == null) {
* log.error("failed to load auth person"); return; }
* languageTeamServiceImpl.leaveLanguageTeam(this.language,
* authenticatedAccount.getPerson().getId());
* Events.instance().raiseEvent("personLeftTribe");
* log.info("{0} left tribe {1}", authenticatedAccount.getUsername(),
* this.language);
* FacesMessages.instance().add("You have left the {0} language team",
* this.locale.retrieveNativeName()); }
*
* @Restrict("#{languageTeamAction.checkPermission('manage-language-team')}")
* public void saveTeamCoordinator(HLocaleMember member) {
* this.localeDAO.makePersistent(this.locale); this.localeDAO.flush(); if
* (member.isCoordinator()) {
* FacesMessages.instance().add("{0} has been made a Team Coordinator",
* member.getPerson().getAccount().getUsername()); } else {
* FacesMessages.instance
* ().add("{0} has been removed from Team Coordinators",
* member.getPerson().getAccount().getUsername()); } }
*
* @Restrict("#{languageTeamAction.checkPermission('manage-language-team')}")
* public void addTeamMember(final Long personId) {
* this.languageTeamServiceImpl.joinLanguageTeam(this.language, personId); //
* reload the locale for changes this.locale =
* localeServiceImpl.getByLocaleId(new LocaleId(language)); }
*
* @Restrict("#{languageTeamAction.checkPermission('manage-language-team')}")
* public void removeMembership(HLocaleMember member) {
* this.languageTeamServiceImpl.leaveLanguageTeam(this.language,
* member.getPerson().getId()); this.locale.getMembers().remove(member); }
*
* public boolean isPersonInTeam(final Long personId) { for (HLocaleMember lm
* : this.locale.getMembers()) { if (lm.getPerson().getId().equals(personId))
* { return true; } } return false; }
*/

public void searchForProjects()
{
this.searchResults = versionGroupServiceImpl.findAllContainingName(this.searchTerm);
}

@Override
public Object getSecuredEntity()
{
return group;
}

}
Expand Up @@ -31,7 +31,6 @@
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.core.Events;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.zanata.common.EntityStatus;
Expand Down Expand Up @@ -68,7 +67,7 @@ protected HIterationGroup loadInstance()

public void loadAllActiveGroups()
{
allVersionGroups = versionGroupServiceImpl.getAllActiveversionGroups();
allVersionGroups = versionGroupServiceImpl.getAllActiveVersionGroups();
}

@Override
Expand Down
Expand Up @@ -33,6 +33,7 @@
import org.zanata.common.EntityStatus;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HPerson;
import org.zanata.model.HProjectIteration;

/**
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
Expand All @@ -52,7 +53,7 @@ public VersionGroupDAO(Session session)
super(HIterationGroup.class, session);
}

public List<HIterationGroup> getAllActiveversionGroups()
public List<HIterationGroup> getAllActiveVersionGroups()
{
Query query = getSession().createQuery("from HIterationGroup g where g.status = :status");
query.setParameter("status", EntityStatus.ACTIVE);
Expand All @@ -73,4 +74,9 @@ public List<HPerson> getMaintainerBySlug(String slug)
q.setParameter("slug", slug);
return q.list();
}

public List<HProjectIteration> findAllContainingName(String searrunJchTerm)
{
return null;
}
}
Expand Up @@ -23,11 +23,16 @@
import java.util.List;

import org.zanata.model.HIterationGroup;
import org.zanata.model.HProjectIteration;

/**
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
*/
public interface VersionGroupService
{
List<HIterationGroup> getAllActiveversionGroups();
List<HIterationGroup> getAllActiveVersionGroups();

HIterationGroup getBySlug(String slug);

List<HProjectIteration> findAllContainingName(String searchTerm);
}
Expand Up @@ -29,6 +29,7 @@
import org.jboss.seam.annotations.Scope;
import org.zanata.dao.VersionGroupDAO;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HProjectIteration;
import org.zanata.service.VersionGroupService;

/**
Expand All @@ -43,8 +44,20 @@ public class VersionGroupServiceImpl implements VersionGroupService
private VersionGroupDAO versionGroupDAO;

@Override
public List<HIterationGroup> getAllActiveversionGroups()
public List<HIterationGroup> getAllActiveVersionGroups()
{
return versionGroupDAO.getAllActiveversionGroups();
return versionGroupDAO.getAllActiveVersionGroups();
}

@Override
public HIterationGroup getBySlug(String slug)
{
return versionGroupDAO.getBySlug(slug);
}

@Override
public List<HProjectIteration> findAllContainingName(String searchTerm)
{
return versionGroupDAO.findAllContainingName(searchTerm);
}
}
12 changes: 6 additions & 6 deletions server/zanata-war/src/main/resources/messages.properties
Expand Up @@ -100,6 +100,7 @@ jsf.Add=Add
jsf.AddLocale=Add >
jsf.AddMaintainer=Add Maintainer
jsf.AddTeamMember=Add Team Member
jsf.AddProjectVersions=Add Project Versions
jsf.Administration=Administration
jsf.AdminName=Administrator
jsf.AlreadyInTeam=Already in Team
Expand Down Expand Up @@ -135,7 +136,7 @@ jsf.contactLanguageTeamCoordinator=Contact Team Coordinators
jsf.contactLanguageTeamCoordinatorForLocale=Contact #{sendEmail.locale.localeId.id} (#{sendEmail.locale.retrieveNativeName()}) Language Team Coordinators
jsf.CountryCode=Country Code
jsf.CreateANewProject=Create a New Project
jsf.CreateNewVersionGroup=Create New Version Group
jsf.CreateNewGroup=Create New Group
jsf.CreateNewUser=Create new user
jsf.CreateProject=Create project
jsf.CreateRole=Create Role
Expand All @@ -154,7 +155,7 @@ jsf.EditHelpPageContent= Edit Help Page Content
jsf.EditProfile=Edit Profile
jsf.EditProject=Edit Project
jsf.EditVersion=Edit Version
jsf.EditVersionGroup=Edit Version Group
jsf.EditGroup=Edit Group
jsf.email.admin.Administrator=Administrator
jsf.email.admin.DearAdmin=Dear #{messages['jsf.email.admin.Administrator']},
jsf.email.admin.SentNotification=Your message has been sent to the administrator
Expand Down Expand Up @@ -217,6 +218,9 @@ jsf.GenerateProjectConfig=Generate project configuration file (zanata.xml)
jsf.Glossary=Glossary
jsf.GlossaryEntries=Glossary entries
jsf.GlossaryStatistics=Glossary Statistics
jsf.GroupId=Group Id
jsf.GroupIdExample=Example: my-group
jsf.Groups=Groups
jsf.Help=Help
jsf.HelpUrl=Help URL
jsf.HelpUrlToolTip=The help URL for the server (shown on welcome page and every page's header)
Expand Down Expand Up @@ -370,10 +374,6 @@ jsf.YouDoNotHavePermissionToAccessThisResource=You do not have permission to acc
jsf.YourSessionHasTimedOutPleaseTryAgain=Your session has timed out. Please try again.
jsf.YourCurrentApiKeyIs=Your current API key is
jsf.YourLanguageMissing=Your language missing?
jsf.VersionGroups=Version Groups
jsf.VersionGroupId=Version Group Id
jsf.VersionGroupMaintainers=Version Group Maintainers
jsf.VersionGroupIdExample=Example: my-group
jsf.Zanata=Zanata
jsf.ZanataAdministrator=Zanata Administrator
jsf.ZanataMainTitle=#{messages['jsf.Zanata']}
Expand Down
Expand Up @@ -19,7 +19,7 @@
</s:link> </li>
<li id="tab_version_groups" class="ui-tabs-nav-issues">
<s:link id="version-groups" view="/version-group/home.xhtml" propagation="none">
<span><img src="#{request.contextPath}/public-img/silk/photos.png" />#{messages['jsf.VersionGroups']}</span>
<span><img src="#{request.contextPath}/public-img/silk/photos.png" />#{messages['jsf.Groups']}</span>
</s:link>
</li>
<li id="tab_tribes"><s:link id="Languages"
Expand Down
Expand Up @@ -11,7 +11,7 @@
<s:token allowMultiplePosts="true" />
<rich:panel>
<s:decorate id="slugField" template="edit.xhtml">
<ui:define name="label">#{messages['jsf.VersionGroupId']}</ui:define>
<ui:define name="label">#{messages['jsf.GroupId']}</ui:define>
<h:outputText rendered="#{versionGroupHome.managed}" value="#{versionGroupHome.instance.slug}" />
<h:inputText rendered="#{not versionGroupHome.managed}"
id="slug" required="true"
Expand All @@ -21,7 +21,7 @@
</h:inputText>
<h:graphicImage id="slugHelp" value="/public-img/msginfo.png" styleClass="input_help">
<rich:toolTip>
<em><code>#{messages['jsf.VersionGroupIdExample']}</code></em>
<em><code>#{messages['jsf.GroupIdExample']}</code></em>
</rich:toolTip>
</h:graphicImage>
</s:decorate>
Expand Down

0 comments on commit 08bdf8e

Please sign in to comment.