diff --git a/zanata-war/src/main/java/org/zanata/action/VersionGroupAction.java b/zanata-war/src/main/java/org/zanata/action/VersionGroupAction.java index b006b08bee..f3b1bf902e 100644 --- a/zanata-war/src/main/java/org/zanata/action/VersionGroupAction.java +++ b/zanata-war/src/main/java/org/zanata/action/VersionGroupAction.java @@ -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; @@ -58,50 +58,108 @@ public class VersionGroupAction implements Serializable @In(required = false, value = JpaIdentityStore.AUTHENTICATED_USER) HAccount authenticatedAccount; + @Logger + Log log; + private List allVersionGroups; - private List searchResults; + private List searchResults; private List 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 maintainedProjects = authenticatedAccount.getPerson().getMaintainerProjects(); - for(HProject project:maintainedProjects) + for (HProject project : maintainedProjects) { getMaintainedProjectVersions().addAll(projectDAO.getAllIterations(project.getSlug())); } @@ -115,6 +173,7 @@ public List getMaintainedProjectVersions() } return maintainedProjectVersions; } + public String getSearchTerm() { return searchTerm; @@ -125,11 +184,11 @@ public void setSearchTerm(String searchTerm) this.searchTerm = searchTerm; } - public List getSearchResults() + public List getSearchResults() { if (searchResults == null) { - searchResults = new ArrayList(); + searchResults = new ArrayList(); } return searchResults; } @@ -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 result = versionGroupServiceImpl.searchLikeSlugOrProjectSlug(this.searchTerm); + for (HProjectIteration version : result) { - this.searchResults = versionGroupServiceImpl.searchLikeSlugOrProjectSlug(this.searchTerm); - } - catch (ParseException e) - { - return; + getSearchResults().add(new SelectableHIterationProject(version)); } } @@ -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; + } } diff --git a/zanata-war/src/main/java/org/zanata/dao/ProjectIterationDAO.java b/zanata-war/src/main/java/org/zanata/dao/ProjectIterationDAO.java index fe4616f6ae..892d5833b7 100644 --- a/zanata-war/src/main/java/org/zanata/dao/ProjectIterationDAO.java +++ b/zanata-war/src/main/java/org/zanata/dao/ProjectIterationDAO.java @@ -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; @@ -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) @@ -298,7 +294,7 @@ public int getTotalObsoleteProjectIterCount() return totalCount.intValue(); } - public List searchLikeSlugOrProjectSlug(String searchTerm) throws ParseException + public List 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 + "%"); diff --git a/zanata-war/src/main/java/org/zanata/service/VersionGroupService.java b/zanata-war/src/main/java/org/zanata/service/VersionGroupService.java index 9c7d14ce6d..a69e7b1ca9 100644 --- a/zanata-war/src/main/java/org/zanata/service/VersionGroupService.java +++ b/zanata-war/src/main/java/org/zanata/service/VersionGroupService.java @@ -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; @@ -36,7 +35,7 @@ public interface VersionGroupService HIterationGroup getBySlug(String slug); - List searchLikeSlugOrProjectSlug(String searchTerm) throws ParseException; + List searchLikeSlugOrProjectSlug(String searchTerm); List getMaintainerBySlug(String slug); diff --git a/zanata-war/src/main/java/org/zanata/service/impl/VersionGroupServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/VersionGroupServiceImpl.java index 980cb42be3..ac7ef6a55b 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/VersionGroupServiceImpl.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/VersionGroupServiceImpl.java @@ -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; @@ -91,7 +90,7 @@ public HIterationGroup getBySlug(String slug) } @Override - public List searchLikeSlugOrProjectSlug(String searchTerm) throws ParseException + public List searchLikeSlugOrProjectSlug(String searchTerm) { return projectIterationDAO.searchLikeSlugOrProjectSlug(searchTerm); } diff --git a/zanata-war/src/main/webapp/META-INF/MANIFEST.MF b/zanata-war/src/main/webapp/META-INF/MANIFEST.MF index b1e8cd9c3f..a68b91683c 100644 --- a/zanata-war/src/main/webapp/META-INF/MANIFEST.MF +++ b/zanata-war/src/main/webapp/META-INF/MANIFEST.MF @@ -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 diff --git a/zanata-war/src/main/webapp/WEB-INF/pages.xml b/zanata-war/src/main/webapp/WEB-INF/pages.xml index b8b3f0f1a3..42415f170e 100644 --- a/zanata-war/src/main/webapp/WEB-INF/pages.xml +++ b/zanata-war/src/main/webapp/WEB-INF/pages.xml @@ -195,7 +195,8 @@ - + + diff --git a/zanata-war/src/main/webapp/project/home.xhtml b/zanata-war/src/main/webapp/project/home.xhtml index 1f47f06560..a9015e63a6 100644 --- a/zanata-war/src/main/webapp/project/home.xhtml +++ b/zanata-war/src/main/webapp/project/home.xhtml @@ -35,7 +35,7 @@ page="#{projectAction.scrollerPage}" id="scroller" reRender="sc2" /> - + diff --git a/zanata-war/src/main/webapp/stylesheet/zanata.css b/zanata-war/src/main/webapp/stylesheet/zanata.css index 570fedad89..f932430785 100644 --- a/zanata-war/src/main/webapp/stylesheet/zanata.css +++ b/zanata-war/src/main/webapp/stylesheet/zanata.css @@ -19,7 +19,7 @@ font-size: larger; } -.filter-options { +.float-right { float: right; } diff --git a/zanata-war/src/main/webapp/version-group/home.xhtml b/zanata-war/src/main/webapp/version-group/home.xhtml index 9c9b7e07f9..fda5943d9d 100644 --- a/zanata-war/src/main/webapp/version-group/home.xhtml +++ b/zanata-war/src/main/webapp/version-group/home.xhtml @@ -36,7 +36,7 @@ - + diff --git a/zanata-war/src/main/webapp/version-group/request_to_join.xhtml b/zanata-war/src/main/webapp/version-group/request_to_join.xhtml index a3606fa109..f17d3ff2a9 100644 --- a/zanata-war/src/main/webapp/version-group/request_to_join.xhtml +++ b/zanata-war/src/main/webapp/version-group/request_to_join.xhtml @@ -28,6 +28,7 @@ +

diff --git a/zanata-war/src/main/webapp/version-group/version_group.xhtml b/zanata-war/src/main/webapp/version-group/version_group.xhtml index f87ce0e74a..120472f314 100644 --- a/zanata-war/src/main/webapp/version-group/version_group.xhtml +++ b/zanata-war/src/main/webapp/version-group/version_group.xhtml @@ -49,7 +49,7 @@ #{messages['jsf.Actions']} + action="#{versionGroupAction.leaveVersionGroup(_iteration.id)}" reRender="iterationsDataTable, searchResults" /> @@ -93,7 +93,7 @@ - +

Find Project Version

@@ -103,42 +103,58 @@ - + + +

- - - - - - #{messages['jsf.SearchResults']} - - #{messages['jsf.ProjectName']} - #{projectIteration.project.name} - - - #{messages['jsf.Version']} - #{projectIteration.slug} - - - - #{messages['jsf.Actions']} - - - - - - - - + + + + + #{messages['jsf.SearchResults']} + + + #{messages['jsf.ProjectName']} + #{selectableVersion.projectIteration.project.name} + + + #{messages['jsf.Version']} + #{selectableVersion.projectIteration.slug} + + + + #{messages['jsf.Actions']} + + + + + + + + + + + + + + + + + + + + +