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

Commit

Permalink
Multiple Projects can be selected (by admins) and made part of a pred…
Browse files Browse the repository at this point in the history
…efined group
  • Loading branch information
Alex Eng committed Jun 18, 2012
1 parent 4b0911e commit e98c7c0
Show file tree
Hide file tree
Showing 11 changed files with 176 additions and 73 deletions.
107 changes: 88 additions & 19 deletions zanata-war/src/main/java/org/zanata/action/VersionGroupAction.java
Expand Up @@ -25,20 +25,20 @@
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 @@ -58,50 +58,108 @@ public class VersionGroupAction implements Serializable
@In(required = false, value = JpaIdentityStore.AUTHENTICATED_USER)
HAccount authenticatedAccount;

@Logger
Log log;

private List<HIterationGroup> allVersionGroups;

private List<HProjectIteration> searchResults;
private List<SelectableHIterationProject> searchResults;

private List<HProjectIteration> maintainedProjectVersions;

private HIterationGroup group;

private String searchTerm;
private String searchTerm = "";
private String groupNameFilter;

private boolean showActiveGroups = true;
private boolean showObsoleteGroups = false;
private boolean selectAll = false;

public final class SelectableHIterationProject
{
private HProjectIteration projectIteration;
private boolean selected;

public SelectableHIterationProject(HProjectIteration projectIteration)
{
this.projectIteration = projectIteration;
selected = false;
}

public HProjectIteration getProjectIteration()
{
return projectIteration;
}

public boolean getSelected()
{
return selected;
}

public void setSelected(boolean selected)
{
this.selected = selected;
}
}

public void loadAllActiveGroupsOrIsMaintainer()
{
allVersionGroups = versionGroupServiceImpl.getAllActiveVersionGroupsOrIsMaintainer();
}

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

public void addSelected()
{
for (SelectableHIterationProject selectableVersion : getSearchResults())
{
if (selectableVersion.getSelected())
{
joinVersionGroup(selectableVersion.getProjectIteration().getId());
}
}
}

public void selectAll()
{
for (SelectableHIterationProject selectableVersion : getSearchResults())
{
if (!isVersionInGroup(selectableVersion.getProjectIteration().getId()))
{
selectableVersion.setSelected(selectAll);
}
}
}

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

}

public void searchMaintainedProjects()
{
Set<HProject> maintainedProjects = authenticatedAccount.getPerson().getMaintainerProjects();
for(HProject project:maintainedProjects)
for (HProject project : maintainedProjects)
{
getMaintainedProjectVersions().addAll(projectDAO.getAllIterations(project.getSlug()));
}
Expand All @@ -115,6 +173,7 @@ public List<HProjectIteration> getMaintainedProjectVersions()
}
return maintainedProjectVersions;
}

public String getSearchTerm()
{
return searchTerm;
Expand All @@ -125,11 +184,11 @@ public void setSearchTerm(String searchTerm)
this.searchTerm = searchTerm;
}

public List<HProjectIteration> getSearchResults()
public List<SelectableHIterationProject> getSearchResults()
{
if (searchResults == null)
{
searchResults = new ArrayList<HProjectIteration>();
searchResults = new ArrayList<SelectableHIterationProject>();
}
return searchResults;
}
Expand All @@ -154,20 +213,20 @@ public void joinVersionGroup(Long projectIterationId)
}

@Transactional
@Restrict("#{s:hasPermission(versionGroupHome.instance, 'update')}")
public void leaveVersionGroup(Long projectIterationId)
{
versionGroupServiceImpl.leaveVersionGroup(group.getSlug(), projectIterationId);
searchProjectAndVersion();
}

public void searchProjectAndVersion()
{
try
getSearchResults().clear();
List<HProjectIteration> result = versionGroupServiceImpl.searchLikeSlugOrProjectSlug(this.searchTerm);
for (HProjectIteration version : result)
{
this.searchResults = versionGroupServiceImpl.searchLikeSlugOrProjectSlug(this.searchTerm);
}
catch (ParseException e)
{
return;
getSearchResults().add(new SelectableHIterationProject(version));
}
}

Expand Down Expand Up @@ -248,4 +307,14 @@ public void setShowObsoleteGroups(boolean showObsoleteGroups)
{
this.showObsoleteGroups = showObsoleteGroups;
}

public boolean isSelectAll()
{
return selectAll;
}

public void setSelectAll(boolean selectAll)
{
this.selectAll = selectAll;
}
}
18 changes: 7 additions & 11 deletions zanata-war/src/main/java/org/zanata/dao/ProjectIterationDAO.java
Expand Up @@ -20,10 +20,12 @@
*/
package org.zanata.dao;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.util.Version;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.core.EntityTag;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
Expand All @@ -39,18 +41,12 @@
import org.zanata.common.LocaleId;
import org.zanata.common.TransUnitCount;
import org.zanata.common.TransUnitWords;
import org.zanata.hibernate.search.GroupSearchBridge;
import org.zanata.model.HIterationProject;
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.model.StatusCount;
import org.zanata.util.HashUtil;

import javax.ws.rs.core.EntityTag;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Name("projectIterationDAO")
@AutoCreate
@Scope(ScopeType.STATELESS)
Expand Down Expand Up @@ -298,7 +294,7 @@ public int getTotalObsoleteProjectIterCount()
return totalCount.intValue();
}

public List<HProjectIteration> searchLikeSlugOrProjectSlug(String searchTerm) throws ParseException
public List<HProjectIteration> searchLikeSlugOrProjectSlug(String searchTerm)
{
Query q = getSession().createQuery("from HProjectIteration t where t.slug LIKE :searchTerm OR t.project.slug LIKE :searchTerm");
q.setParameter("searchTerm", "%" + searchTerm + "%");
Expand Down
Expand Up @@ -22,7 +22,6 @@

import java.util.List;

import org.apache.lucene.queryParser.ParseException;
import org.zanata.model.HIterationGroup;
import org.zanata.model.HPerson;
import org.zanata.model.HProjectIteration;
Expand All @@ -36,7 +35,7 @@ public interface VersionGroupService

HIterationGroup getBySlug(String slug);

List<HProjectIteration> searchLikeSlugOrProjectSlug(String searchTerm) throws ParseException;
List<HProjectIteration> searchLikeSlugOrProjectSlug(String searchTerm);

List<HPerson> getMaintainerBySlug(String slug);

Expand Down
Expand Up @@ -23,7 +23,6 @@
import java.util.ArrayList;
import java.util.List;

import org.apache.lucene.queryParser.ParseException;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
Expand Down Expand Up @@ -91,7 +90,7 @@ public HIterationGroup getBySlug(String slug)
}

@Override
public List<HProjectIteration> searchLikeSlugOrProjectSlug(String searchTerm) throws ParseException
public List<HProjectIteration> searchLikeSlugOrProjectSlug(String searchTerm)
{
return projectIterationDAO.searchLikeSlugOrProjectSlug(searchTerm);
}
Expand Down
24 changes: 23 additions & 1 deletion zanata-war/src/main/webapp/META-INF/MANIFEST.MF
Expand Up @@ -21,5 +21,27 @@ Class-Path: zanata-common-api-1.6-SNAPSHOT.jar zanata-common-util-1.6-
ss-el-1.0_02.CR4.jar hibernate-search-3.1.1.GA.jar hsqldb-1.8.0.8-bre
w.jar zanata-adapter-po-1.6.0-alpha-2.jar jgettext-0.6.jar resteasy-a
tom-provider-2.1.0.GA.jar commons-beanutils-1.7.0.jar openprops-0.5.j
ar
ar zanata-model-1.6.1-SNAPSHOT.jar jboss-seam-ui-2.2.0.GA.jar jboss-s
eam-jul-2.2.0.GA.jar jboss-seam-debug-2.2.0.GA.jar jsf-facelets-1.1.1
5.B1.jar jboss-seam-mail-2.2.0.GA.jar jboss-seam-remoting-2.2.0.GA.ja
r jboss-seam-resteasy-2.2.0.GA.jar resteasy-jackson-provider-2.1.0.GA
.jar jackson-jaxrs-1.5.0.jar drools-core-5.0.1.jar mvel2-2.0.10.jar d
rools-api-5.0.1.jar joda-time-1.6.jar drools-compiler-5.0.1.jar antlr
-runtime-3.1.1.jar core-3.4.2.v_883_R34x.jar janino-2.5.15.jar richfa
ces-api-3.3.3.Final.jar richfaces-impl-3.3.3.Final.jar commons-digest
er-1.8.1.jar richfaces-ui-3.3.3.Final.jar ehcache-core-2.5.1.jar dbun
it-2.2.jar urlrewritefilter-3.0.4.jar jrobin-1.5.9.jar enunciate-core
-annotations-1.24.jar quartz-1.5.2.jar commons-fileupload-1.2.1.jar g
wt-servlet-2.4.0.jar gin-1.5.0.jar guice-3.0.jar javax.inject-1.jar a
opalliance-1.0.jar guice-assistedinject-3.0-rc2.jar gwt-dispatch-1.0.
0.jar gwt-log-3.1.7.jar gwteventservice-1.2.0.jar eventservice-rpc-1.
2.0.jar eventservice-1.2.0.jar liquibase-core-2.0.3.jar modify-column
-2.0.0.jar htmlparser-1.6.jar openid4java-0.9.5.jar openid4java-consu
mer-0.9.5.jar openid4java-nodeps-0.9.5.jar nekohtml-1.9.7.jar openid4
java-server-0.9.5.jar openid4java-server-JdbcServerAssociationStore-0
.9.5.jar spring-jdbc-2.0.6.jar spring-beans-2.0.6.jar spring-core-2.0
.6.jar spring-context-2.0.6.jar spring-dao-2.0.6.jar openid4java-cons
umer-SampleConsumer-0.9.5.jar openid4java-server-SampleServer-0.9.5.j
ar openxri-client-1.2.0.jar openxri-syntax-1.2.0.jar jug-1.1.2.jar xm
lsec-1.3.0.jar

3 changes: 2 additions & 1 deletion zanata-war/src/main/webapp/WEB-INF/pages.xml
Expand Up @@ -195,7 +195,8 @@
<param name="iterationSlug" value="#{versionGroupHome.iterationSlug}" />

<action execute="#{versionGroupHome.validateSuppliedId}" />
<action execute="#{versionGroupAction.init(versionGroupSlug,projectSlug,iterationSlug)}" />
<action execute="#{versionGroupAction.init(versionGroupSlug)}"/>
<action execute="#{versionGroupAction.executePreSearch(projectSlug,iterationSlug)}" on-postback="false" />
</page>

<page view-id="/version-group/edit.xhtml" login-required="true">
Expand Down
2 changes: 1 addition & 1 deletion zanata-war/src/main/webapp/project/home.xhtml
Expand Up @@ -35,7 +35,7 @@
page="#{projectAction.scrollerPage}" id="scroller" reRender="sc2" />
<rich:spacer height="15" />

<s:div styleClass="filter-options">
<s:div styleClass="float-right">
<a4j:region>
<h:selectBooleanCheckbox title="Filter active projects" value="#{projectAction.showActive}">
<a4j:support event="onchange" reRender="main_content" />
Expand Down
2 changes: 1 addition & 1 deletion zanata-war/src/main/webapp/stylesheet/zanata.css
Expand Up @@ -19,7 +19,7 @@
font-size: larger;
}

.filter-options {
.float-right {
float: right;
}

Expand Down
2 changes: 1 addition & 1 deletion zanata-war/src/main/webapp/version-group/home.xhtml
Expand Up @@ -36,7 +36,7 @@

<rich:spacer height="15" />

<s:div styleClass="filter-options">
<s:div styleClass="float-right">
<h:selectBooleanCheckbox title="Show active group" value="#{versionGroupAction.showActiveGroups}">
<a4j:support event="onchange" reRender="threads" />
</h:selectBooleanCheckbox>
Expand Down
Expand Up @@ -28,6 +28,7 @@
<a4j:commandButton id="addSelectedBtn"
value="#{messages['jsf.AddSelected']}"
reRender="searchResults" />

<h:commandButton value="#{messages['jsf.Close']}"
onclick="#{rich:component('maintainedProjectPanel')}.hide(); return false;" />
</p>
Expand Down

0 comments on commit e98c7c0

Please sign in to comment.