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

Commit

Permalink
rhbz891485 - Refactor Language Team membership page.
Browse files Browse the repository at this point in the history
LocaleMemberDAO's makeTransient method does not generate a 'delete' statement (could be because of the entity's composite primary key). Override this method to make sure HLocaleMember entities get deleted.
  • Loading branch information
Carlos Munoz committed Jan 7, 2013
1 parent a2d8554 commit c3b577a
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 16 deletions.
21 changes: 6 additions & 15 deletions zanata-war/src/main/java/org/zanata/action/LanguageTeamAction.java
Expand Up @@ -70,7 +70,6 @@ public class LanguageTeamAction implements Serializable
Log log;

private String language;
private HLocale locale;
private String searchTerm;
private List<HPerson> searchResults;

Expand Down Expand Up @@ -99,12 +98,6 @@ public List<HPerson> getSearchResults()
return searchResults;
}

public void initLocale()
{
locale = localeServiceImpl.getByLocaleId(new LocaleId(language));
log.debug("init language: {0}", locale.getLocaleId().getId());
}

public boolean isUserInTeam()
{
return authenticatedAccount != null && this.isPersonInTeam( this.authenticatedAccount.getId() );
Expand All @@ -119,9 +112,10 @@ public HLocale getLocale()
* access the 'members' collection from inside the security listener's postLoad method to
* evaluate rules.
*/
HLocale locale = localeServiceImpl.getByLocaleId(new LocaleId(language));
if( locale != null )
{
this.locale.getMembers();
locale.getMembers();
}
return locale;
}
Expand All @@ -141,7 +135,7 @@ public void joinTribe()
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());
FacesMessages.instance().add("You are now a member of the {0} language team", getLocale().retrieveNativeName());
}
catch (Exception e)
{
Expand All @@ -161,13 +155,13 @@ public void leaveTribe()
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());
FacesMessages.instance().add("You have left the {0} language team", getLocale().retrieveNativeName());
}

@Restrict("#{s:hasPermission(languageTeamAction.locale, 'manage-language-team')}")
public void saveTeamCoordinator( HLocaleMember member )
{
this.localeDAO.makePersistent(this.locale);
this.localeDAO.makePersistent(getLocale());
this.localeDAO.flush();
if( member.isCoordinator() )
{
Expand All @@ -183,20 +177,17 @@ public void saveTeamCoordinator( HLocaleMember member )
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("#{s:hasPermission(languageTeamAction.locale, '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() )
for( HLocaleMember lm : getLocale().getMembers() )
{
if( lm.getPerson().getId().equals( personId ) )
{
Expand Down
15 changes: 15 additions & 0 deletions zanata-war/src/main/java/org/zanata/dao/LocaleMemberDAO.java
Expand Up @@ -76,4 +76,19 @@ public boolean isLocaleMember( Long personId, LocaleId localeId )
query.setComment("LocaleMemberDAO.isLocaleMember");
return query.list().size() > 0;
}

/*
* NB: Override the base class method because it is not generating a 'delete' statement.
* By having an HQL statement, this is guaranteed. THis could be because of the entity in question
* having a composite primary key. Need to try this in a later version of Hibernate.
*/
@Override
public void makeTransient(HLocaleMember entity)
{
getSession().createQuery("delete HLocaleMember as m where m.id.supportedLanguage = :locale " +
"and m.id.person = :person")
.setParameter("locale", entity.getSupportedLanguage())
.setParameter("person", entity.getPerson())
.executeUpdate();
}
}
Expand Up @@ -86,6 +86,7 @@ public boolean leaveLanguageTeam(String locale, Long personId)
if (membership != null)
{
localeMemberDAO.makeTransient(membership);
lang.getMembers().remove(membership);
localeMemberDAO.flush();
return true;
}
Expand Down
1 change: 0 additions & 1 deletion zanata-war/src/main/webapp/WEB-INF/pages.xml
Expand Up @@ -797,7 +797,6 @@

<page view-id="/language/language.xhtml">
<param name="id" value="#{languageTeamAction.language}" />
<action execute="#{languageTeamAction.initLocale()}" />
<action execute="#{breadcrumbs.clear}"/>
<action execute="#{breadcrumbs.addLocation('/language/list', messages['jsf.Languages'])}"/>
<action execute="#{breadcrumbs.addLocation('', languageTeamAction.language)}"/>
Expand Down

0 comments on commit c3b577a

Please sign in to comment.