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

Commit

Permalink
Implemented settings -> maintainers tab
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Nov 11, 2013
1 parent 3d96c3e commit 7c40d1c
Show file tree
Hide file tree
Showing 9 changed files with 536 additions and 345 deletions.
74 changes: 73 additions & 1 deletion zanata-war/src/main/java/org/zanata/action/VersionGroupHome.java
Expand Up @@ -44,10 +44,12 @@
import org.jboss.seam.security.management.JpaIdentityStore;
import org.zanata.common.EntityStatus;
import org.zanata.common.LocaleId;
import org.zanata.dao.PersonDAO;
import org.zanata.dao.ProjectIterationDAO;
import org.zanata.model.HAccount;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HLocale;
import org.zanata.model.HPerson;
import org.zanata.model.HProjectIteration;
import org.zanata.service.LocaleService;
import org.zanata.service.SlugEntityService;
Expand Down Expand Up @@ -81,6 +83,9 @@ public class VersionGroupHome extends SlugHome<HIterationGroup> {
@In
private LocaleService localeServiceImpl;

@In
private PersonDAO personDAO;

@In
private VersionGroupService versionGroupServiceImpl;

Expand All @@ -96,13 +101,19 @@ public class VersionGroupHome extends SlugHome<HIterationGroup> {

@Getter
@Setter
// locale id
private String newLanguage;

@Getter
@Setter
// Slug of project [space] version
private String newVersion;

@Getter
@Setter
// username
private String newMaintainer;

public void verifySlugAvailable(ValueChangeEvent e) {
String slug = (String) e.getNewValue();
validateSlug(slug, e.getComponent().getId());
Expand Down Expand Up @@ -145,6 +156,10 @@ public List<SelectItem> getStatusList() {
return getAvailableStatus();
}

public void setStatus(char initial) {
getInstance().setStatus(EntityStatus.valueOf(initial));
}

public List<HLocale> suggestLocales(final String query) {
if (supportedLocales == null) {
supportedLocales = localeServiceImpl.getSupportedLocales();
Expand All @@ -154,7 +169,9 @@ public List<HLocale> suggestLocales(final String query) {
Collections2.filter(supportedLocales, new Predicate<HLocale>() {
@Override
public boolean apply(@Nullable HLocale input) {
return input.getLocaleId().getId().startsWith(query);
return input.getLocaleId().getId().startsWith(query)
|| input.retrieveDisplayName().toLowerCase()
.contains(query.toLowerCase());
}
});

Expand All @@ -165,6 +182,10 @@ public List<HProjectIteration> suggestVersions(final String query) {
return versionGroupServiceImpl.searchLikeSlugOrProjectSlug(query);
}

public List<HPerson> suggestMaintainers(final String query) {
return personDAO.findAllContainingName(query);
}

@Restrict("#{s:hasPermission(versionGroupHome.instance, 'update')}")
public void addLanguage() {
if (!validateLanguageName("newLanguage")) {
Expand Down Expand Up @@ -196,6 +217,20 @@ public void addVersion() {
version.getSlug()));
}

@Restrict("#{s:hasPermission(versionGroupHome.instance, 'update')}")
public void addMaintainer() {
if (!validateMaintainer("newMaintainer")) {
return; // not success
}
HPerson maintainer = personDAO.findByUsername(newMaintainer);
getInstance().getMaintainers().add(maintainer);
super.update();

FacesMessages.instance().add(
zanataMessages.getMessage("jsf.MaintainerAddedToGroup",
maintainer.getName()));
}

@Restrict("#{s:hasPermission(versionGroupHome.instance, 'update')}")
public void removeLanguage(HLocale locale) {
getInstance().getActiveLocales().remove(locale);
Expand All @@ -215,6 +250,15 @@ public void removeVersion(HProjectIteration version) {
version.getSlug()));
}

@Restrict("#{s:hasPermission(versionGroupHome.instance, 'update')}")
public void removeMaintainer(HPerson maintainer) {
getInstance().getMaintainers().remove(maintainer);
super.update();
FacesMessages.instance().add(
zanataMessages.getMessage("jsf.MaintainerRemoveFromGroup",
maintainer.getName()));
}

public List<HLocale> getInstanceActiveLocales() {
List<HLocale> activeLocales =
Lists.newArrayList(getInstance().getActiveLocales());
Expand Down Expand Up @@ -256,6 +300,10 @@ public List<HProjectIteration> getInstanceProjectIterations() {
.getProjectIterations());
}

public List<HPerson> getInstanceMaintainers() {
return new ArrayList<HPerson>(getInstance().getMaintainers());
}

@Override
public NaturalIdentifier getNaturalId() {
return Restrictions.naturalId().set("slug", slug);
Expand Down Expand Up @@ -349,4 +397,28 @@ public boolean validateVersion(String componentId) {

return true;
}

public boolean validateMaintainer(String componentId) {
if (StringUtils.isEmpty(newMaintainer)) {
return false;
}

// check if username exist
HPerson person = personDAO.findByUsername(newMaintainer);
if (person == null) {
FacesMessages.instance().addToControl(componentId,
zanataMessages.getMessage("jsf.InvalidUsername"));
return false;
}

// check if person is already a maintainer
if (getInstanceMaintainers().contains(person)) {
FacesMessages.instance().addToControl(
componentId,
zanataMessages.getMessage("jsf.UserIsAMaintainer",
newMaintainer));
return false;
}
return true;
}
}
Expand Up @@ -389,4 +389,11 @@ public List<HProjectIteration> getProjectIterations() {
Collections.sort(projectIterations, versionComparator);
return projectIterations;
}

// reset all page cached statistics
public void resetPageData() {
projectIterations = null;
activeLocales = null;
loadStatistic();
}
}
11 changes: 10 additions & 1 deletion zanata-war/src/main/resources/messages.properties
Expand Up @@ -399,6 +399,9 @@ jsf.groups.ShowObsoleteGroups=Show obsolete groups
jsf.CreateNewGroup=Create New Group
jsf.TotalSourceContains=Total source contains:
jsf.AddLanguages=Add languages
jsf.AddALanguage=Add a Language
jsf.AddAProject=Add a Project
jsf.AddAMaintainer=Add a Maintainer
jsf.ActiveLanguages=Active Languages
jsf.NoActiveLanguages=No languages currently active.
jsf.NoProjectsInGroup=No projects in group.
Expand All @@ -410,7 +413,13 @@ jsf.LanguageAddedToGroup=Language '{0}' has been added to group.
jsf.VersionAddedToGroup=Version '{0}' has been added to group.
jsf.LanguageAlreadyInGroup=Language '{0}' is already added to group.
jsf.InvalidProjectVersion=Invalid project version
jsf.VersionAlreadyInGroup=Version '{0}' is already added group.
jsf.VersionAlreadyInGroup=Version '{0}' is already added to group.
jsf.ArchiveThisGroup=Archive this Group
jsf.ActivateThisGroup=Activate this Group
jsf.MaintainerRemoveFromGroup=Maintainer '{0}' has been removed from group.
jsf.MaintainerAddedToGroup=Maintainer '{0}' has been added to group.
jsf.InvalidUsername=Invalid username.
jsf.UserIsAMaintainer=User '{0}' is already a maintainer of group.

#------ [home] > Groups > Create New Group ------
#------ [home] > Groups > [group-id] Edit Group ------
Expand Down
Expand Up @@ -41,13 +41,19 @@
value="#{versionGroupHome.instance.description}"/>
</s:decorate>
</div>
<div class="l--push-top-half form__item">
<h:outputLabel for="status">#{messages['jsf.GroupStatus']}</h:outputLabel>
<s:decorate id="statusField" template="../field.xhtml">
<h:selectOneRadio value="#{versionGroupHome.instance.status}"
id="status">
<f:selectItems value="#{versionGroupHome.statusList}"/>
</h:selectOneRadio>
</s:decorate>
</div>

<a4j:outputPanel id="status">
<a4j:commandLink styleClass="txt--warning"
action="#{versionGroupHome.setStatus('O')}" render="status"
rendered="#{versionGroupHome.instance.status == 'ACTIVE'}">
#{messages['jsf.ArchiveThisGroup']}
</a4j:commandLink>

<a4j:commandLink styleClass="txt--warning"
action="#{versionGroupHome.setStatus('A')}" render="status"
rendered="#{versionGroupHome.instance.status != 'ACTIVE'}">
#{messages['jsf.ActivateThisGroup']}
</a4j:commandLink>
</a4j:outputPanel>

</s:fragment>
Expand Up @@ -6,7 +6,7 @@
xmlns:a4j="http://richfaces.org/a4j"
xmlns:f="http://java.sun.com/jsf/core">

<div class="panels--2 panel__active-2">
<div class="panels--2">
<div class="g--collapsed">
<div class="g__item w--1-2 w--1-2-s panels__panel">
<div class="bg--pop-high">
Expand All @@ -27,15 +27,15 @@
</div>
</div>
</div>
<h:form id="languages-language_list">
<h:form id="languages-language_list" styleClass="l--push-bottom-0">
<s:fragment
rendered="#{versionGroupHomeAction.getActiveLocales().isEmpty()}">
<div class="l--pad-all-half">
<p class="txt--meta">#{messages['jsf.NoActiveLanguages']}</p>
<s:fragment
rendered="#{s:hasPermission(versionGroupHome.instance, 'update')}">
<p>
<a href="#settings" class="button--primary">
<a href="#settings" class="button--primary" onclick="checkHashUrl()">
#{messages['jsf.AddLanguages']}
</a>
</p>
Expand Down Expand Up @@ -89,7 +89,7 @@
</div>
</div>

<div class="g__item w--1-2 w--1-2-s panels__panel is-active">
<div class="g__item w--1-2 w--1-2-s panels__panel">
<s:div styleClass="bg--pop-higher">
<div class="panels__panel__header">
<div class="g--tight">
Expand Down Expand Up @@ -117,7 +117,7 @@
</div>
</div>
</div>
<h:form id="languages-project_list">
<h:form id="languages-project_list" styleClass="l--push-bottom-0">
<s:fragment
rendered="#{versionGroupHomeAction.selectedLocale == null}">
<div class="l--pad-all-half">
Expand All @@ -127,14 +127,14 @@
</div>
</s:fragment>
<s:fragment
rendered="#{versionGroupHomeAction.getProjectIterations().isEmpty()}">
rendered="#{versionGroupHomeAction.selectedLocale != null and versionGroupHomeAction.getProjectIterations().isEmpty()}">
<div class="l--pad-all-half">
<p class="txt--meta">#{messages['jsf.NoProjectsInGroup']}</p>

<s:fragment
rendered="#{s:hasPermission(versionGroupHome.instance, 'update')}">
<p>
<a href="#settings" class="button--primary">
<a href="#settings" class="button--primary" onclick="checkHashUrl()">
#{messages['jsf.AddProjectVersions']}
</a>
</p>
Expand All @@ -153,11 +153,6 @@
<div class="list__item">
<div class="list__item__info">
<span class="list__title">
<s:link value="#{version.project.name}"
view="/project/project.xhtml">
<f:param name="slug"
value="#{version.project.slug}"/>
</s:link>
<h:outputLink
value="#{request.contextPath}/webtrans/Application.seam">
<f:param name="project"
Expand All @@ -168,7 +163,7 @@
value="#{versionGroupHomeAction.selectedLocale.localeId}"/>
<f:param name="locale"
value="#{locale.language}"/>
<i class="i i--version"></i> #{version.slug}
#{version.project.name} <i class="i i--version"></i> #{version.slug}
</h:outputLink>
</span>
</div>
Expand Down
@@ -1,9 +1,5 @@
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.org/schema/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:zanata="http://java.sun.com/jsf/composite/zanata"
xmlns:a4j="http://richfaces.org/a4j">
xmlns:ui="http://java.sun.com/jsf/facelets">
<div class="bg--pop-high">
<div class="panels__panel__header">
<div class="g--tight">
Expand All @@ -22,7 +18,7 @@
<ui:repeat value="#{versionGroupHomeAction.maintainers}" var="maintainer">
<li class="l--pad-all-half">
<span class="w--r-1 bx--round l--push-right-quarter">
<img src="#{gravatarServiceImpl.getUserImageUrl(48)}"
<img src="#{gravatarServiceImpl.getUserImageUrl(48, maintainer.email)}"
alt="#{maintainer.name}"/>
</span>
#{maintainer.name}
Expand Down

0 comments on commit 7c40d1c

Please sign in to comment.