From 867dc8426032ba12a0b4ca508bf0209cfe30d5a8 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Wed, 4 Jan 2012 09:04:47 +1000 Subject: [PATCH] Work in progress --- .../main/java/org/zanata/model/HProject.java | 16 ----- .../org/zanata/model/HProjectIteration.java | 24 ------- .../java/org/zanata/model/SlugEntityBase.java | 17 +++++ .../org/zanata/model/type/StatusType.java | 34 +++++++++ .../java/org/zanata/action/ProjectAction.java | 71 +++++++------------ .../zanata/action/ProjectIterationAction.java | 30 -------- .../action/ProjectPagedListDataModel.java | 17 +++-- .../main/java/org/zanata/dao/ProjectDAO.java | 5 +- .../service/TranslationResourcesService.java | 5 +- .../server/rpc/GetTransMemoryHandler.java | 4 +- .../db/changelogs/db.changelog-1.6.xml | 45 ++++++++++++ .../src/main/resources/db/db.changelog.xml | 1 + .../src/main/resources/messages.properties | 5 -- .../src/main/resources/security.drl | 33 +++------ .../layout/iteration_view_inline.xhtml | 8 --- .../src/main/webapp/project/home.xhtml | 25 ++----- 16 files changed, 161 insertions(+), 179 deletions(-) create mode 100644 server/zanata-model/src/main/java/org/zanata/model/type/StatusType.java create mode 100644 server/zanata-war/src/main/resources/db/changelogs/db.changelog-1.6.xml diff --git a/server/zanata-model/src/main/java/org/zanata/model/HProject.java b/server/zanata-model/src/main/java/org/zanata/model/HProject.java index b060ecc4df..302afe5438 100644 --- a/server/zanata-model/src/main/java/org/zanata/model/HProject.java +++ b/server/zanata-model/src/main/java/org/zanata/model/HProject.java @@ -60,8 +60,6 @@ public abstract class HProject extends SlugEntityBase implements Serializable private Set maintainers; - private boolean obsolete = false; - @Length(max = 80) @NotEmpty @Field(index = Index.TOKENIZED) @@ -136,20 +134,6 @@ public void setCustomizedLocales(Set locales) this.customizedLocales = locales; } - public boolean isObsolete() - { - return obsolete; - } - - /** - * - * @param obsolete - */ - public void setObsolete(boolean obsolete) - { - this.obsolete = obsolete; - } - @Override public String toString() { diff --git a/server/zanata-model/src/main/java/org/zanata/model/HProjectIteration.java b/server/zanata-model/src/main/java/org/zanata/model/HProjectIteration.java index ff154d6555..56b74a3cd2 100644 --- a/server/zanata-model/src/main/java/org/zanata/model/HProjectIteration.java +++ b/server/zanata-model/src/main/java/org/zanata/model/HProjectIteration.java @@ -54,8 +54,6 @@ public class HProjectIteration extends SlugEntityBase private HIterationProject project; - private boolean active = true; - private HProjectIteration parent; private List children; @@ -65,18 +63,6 @@ public class HProjectIteration extends SlugEntityBase private boolean overrideLocales = false; private Set customizedLocales; - private boolean obsolete = false; - - public void setActive(boolean active) - { - this.active = active; - } - - public boolean getActive() - { - return active; - } - public void setOverrideLocales(boolean var) { this.overrideLocales = var; @@ -169,16 +155,6 @@ public void setDocuments(Map documents) this.documents = documents; } - public boolean isObsolete() - { - return obsolete; - } - - public void setObsolete(boolean obsolete) - { - this.obsolete = obsolete; - } - @Override public String toString() { diff --git a/server/zanata-model/src/main/java/org/zanata/model/SlugEntityBase.java b/server/zanata-model/src/main/java/org/zanata/model/SlugEntityBase.java index c4f297ef5a..7f6fcddac5 100644 --- a/server/zanata-model/src/main/java/org/zanata/model/SlugEntityBase.java +++ b/server/zanata-model/src/main/java/org/zanata/model/SlugEntityBase.java @@ -20,12 +20,15 @@ */ package org.zanata.model; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.MappedSuperclass; import org.hibernate.annotations.NaturalId; import org.hibernate.search.annotations.Field; import org.hibernate.validator.Length; import org.hibernate.validator.NotNull; +import org.zanata.model.type.StatusType; import org.zanata.model.validator.Slug; @MappedSuperclass @@ -33,6 +36,9 @@ public class SlugEntityBase extends ModelEntityBase { private String slug; + @Enumerated(EnumType.STRING) + private StatusType status; + @NaturalId @Length(min = 1, max = 40) @Slug @@ -48,6 +54,17 @@ public void setSlug(String slug) this.slug = slug; } + public StatusType getStatus() + { + return status; + } + + public void setStatus(StatusType status) + { + this.status = status; + } + + @Override public String toString() { diff --git a/server/zanata-model/src/main/java/org/zanata/model/type/StatusType.java b/server/zanata-model/src/main/java/org/zanata/model/type/StatusType.java new file mode 100644 index 0000000000..dd0aa073fd --- /dev/null +++ b/server/zanata-model/src/main/java/org/zanata/model/type/StatusType.java @@ -0,0 +1,34 @@ +/* + * Copyright 2011, 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.model.type; + +/** + * + * @author Alex Eng aeng@redhat.com + * + **/ +public enum StatusType +{ + Current, Retired, Obsolete +} + + + \ No newline at end of file diff --git a/server/zanata-war/src/main/java/org/zanata/action/ProjectAction.java b/server/zanata-war/src/main/java/org/zanata/action/ProjectAction.java index 338ae9af9a..47798784e0 100644 --- a/server/zanata-war/src/main/java/org/zanata/action/ProjectAction.java +++ b/server/zanata-war/src/main/java/org/zanata/action/ProjectAction.java @@ -29,7 +29,6 @@ import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; -import org.jboss.seam.faces.FacesMessages; import org.jboss.seam.log.Log; import org.jboss.seam.security.Identity; import org.zanata.dao.ProjectDAO; @@ -41,8 +40,9 @@ public class ProjectAction extends BaseSecurityChecker implements Serializable { private static final long serialVersionUID = 1L; - private ProjectPagedListDataModel projectPagedListDataModel = new ProjectPagedListDataModel(false); + private ProjectPagedListDataModel filteredProjectPagedListDataModel = new ProjectPagedListDataModel(true); + private ProjectPagedListDataModel projectPagedListDataModel = new ProjectPagedListDataModel(false); private int scrollerPage = 1; @@ -55,32 +55,45 @@ public class ProjectAction extends BaseSecurityChecker implements Serializable @In Identity identity; - private boolean showObsolete = false; - private HProject securedEntity = null; public boolean getEmpty() { - if (checkViewObsoleteOption() && showObsolete) + if (checkViewObsolete()) { return projectDAO.getProjectSize() == 0; - } else { + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("===========here3========="); return projectDAO.getFilteredProjectSize() == 0; } } public int getPageSize() { - if (checkViewObsoleteOption() && showObsolete) + if (checkViewObsolete()) { - return filteredProjectPagedListDataModel.getPageSize(); + return projectPagedListDataModel.getPageSize(); } else { - return projectPagedListDataModel.getPageSize(); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("===========here2========="); + return filteredProjectPagedListDataModel.getPageSize(); } } @@ -96,44 +109,14 @@ public void setScrollerPage(int scrollerPage) public DataModel getProjectPagedListDataModel() { - if (checkViewObsoleteOption() && showObsolete) - { - return filteredProjectPagedListDataModel; - } - else + if (checkViewObsolete()) { return projectPagedListDataModel; } - } - - public void updateObsolete(HProject project) - { - securedEntity = project; - if (checkPermission("mark-obsolete")) + else { - projectDAO.makePersistent(project); - projectDAO.flush(); - - if (project.isObsolete()) - { - FacesMessages.instance().add("Marked {0} as obsolete", project.getName()); - } - else - { - FacesMessages.instance().add("Marked {0} as current", project.getName()); - } + return filteredProjectPagedListDataModel; } - securedEntity = null; - } - - public boolean isShowObsolete() - { - return showObsolete; - } - - public void setShowObsolete(boolean showObsolete) - { - this.showObsolete = showObsolete; } @Override @@ -148,9 +131,9 @@ public Object getSecuredEntity() * @param operation * @return */ - public boolean checkViewObsoleteOption() + public boolean checkViewObsolete() { - return identity != null && identity.hasPermission("HProject", "view-obsolete-option", null); + return identity != null && identity.hasPermission("HProject", "view-obsolete", null); } } diff --git a/server/zanata-war/src/main/java/org/zanata/action/ProjectIterationAction.java b/server/zanata-war/src/main/java/org/zanata/action/ProjectIterationAction.java index 4101eba7a3..b714d49fbc 100644 --- a/server/zanata-war/src/main/java/org/zanata/action/ProjectIterationAction.java +++ b/server/zanata-war/src/main/java/org/zanata/action/ProjectIterationAction.java @@ -51,42 +51,12 @@ public class ProjectIterationAction extends BaseSecurityChecker implements Seria private HProjectIteration securedEntity = null; - public void markProjectIterationObsolete(HProjectIteration projectIteration) - { - securedEntity = projectIteration; - if (checkPermission("mark-obsolete")) - { - projectIteration.setObsolete(true); - - projectIterationDAO.makePersistent(projectIteration); - projectIterationDAO.flush(); - FacesMessages.instance().add("Marked iteration {0} as obsolete", projectIteration.getSlug()); - } - } - - public void markProjectIterationCurrent(HProjectIteration projectIteration) - { - securedEntity = projectIteration; - if (checkPermission("mark-obsolete")) - { - projectIteration.setObsolete(false); - - projectIterationDAO.makePersistent(projectIteration); - projectIterationDAO.flush(); - FacesMessages.instance().add("Marked iteration {0} as current", projectIteration.getSlug()); - } - } public boolean checkViewObsolete() { return Identity.instance() != null && Identity.instance().hasPermission("HProjectIteration", "view-obsolete", null); } - public boolean checkViewObsoleteOption() - { - return Identity.instance() != null && Identity.instance().hasPermission("HProjectIteration", "view-obsolete-option", null); - } - @Override public Object getSecuredEntity() { diff --git a/server/zanata-war/src/main/java/org/zanata/action/ProjectPagedListDataModel.java b/server/zanata-war/src/main/java/org/zanata/action/ProjectPagedListDataModel.java index 7878578413..97afbeba9d 100644 --- a/server/zanata-war/src/main/java/org/zanata/action/ProjectPagedListDataModel.java +++ b/server/zanata-war/src/main/java/org/zanata/action/ProjectPagedListDataModel.java @@ -30,11 +30,11 @@ public class ProjectPagedListDataModel extends PagedListDataModel { - boolean selectAll = false; + boolean filterList; - public ProjectPagedListDataModel(boolean selectAll) + public ProjectPagedListDataModel(boolean filterList) { - this.selectAll = selectAll; + this.filterList = filterList; } @Override @@ -43,13 +43,22 @@ public DataPage fetchPage(int startRow, int pageSize) ProjectDAO projectDAO = (ProjectDAO) Component.getInstance(ProjectDAO.class, ScopeType.STATELESS); List proj = null; - if (selectAll) + if (!filterList) { proj = projectDAO.getOffsetListByCreateDate(startRow, pageSize); return new DataPage(projectDAO.getProjectSize(), startRow, proj); } else { + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("============================"); + System.out.println("===========here5========="); + proj = projectDAO.getFilteredOffsetListByCreateDate(startRow, pageSize); return new DataPage(projectDAO.getFilteredProjectSize(), startRow, proj); } diff --git a/server/zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java b/server/zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java index 1a4b5abdf5..4e2d87902a 100644 --- a/server/zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java +++ b/server/zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java @@ -12,6 +12,7 @@ import org.jboss.seam.annotations.Scope; import org.zanata.model.HPerson; import org.zanata.model.HProject; +import org.zanata.model.type.StatusType; @Name("projectDAO") @AutoCreate @@ -51,12 +52,12 @@ public List getOffsetListByCreateDate(int offset, int count) @SuppressWarnings("unchecked") public List getFilteredOffsetListByCreateDate(int offset, int count) { - return getSession().createCriteria(HProject.class).addOrder(Order.desc(ORDERBY_TIMESTAMP)).add(Restrictions.eq("obsolete", false)).setMaxResults(count).setFirstResult(offset).setComment("ProjectDAO.getOffsetListByCreateDate").list(); + return getSession().createCriteria(HProject.class).addOrder(Order.desc(ORDERBY_TIMESTAMP)).add(Restrictions.eq("status", StatusType.Obsolete)).setMaxResults(count).setFirstResult(offset).setComment("ProjectDAO.getOffsetListByCreateDate").list(); } public int getFilteredProjectSize() { - Long totalCount = (Long) getSession().createQuery("select count(*) from HProject as p where p.obsolete = :obsolete").setParameter("obsolete", false).uniqueResult(); + Long totalCount = (Long) getSession().createQuery("select count(*) from HProject as p where p.status <> :status").setParameter("status", StatusType.Obsolete).uniqueResult(); if (totalCount == null) return 0; return totalCount.intValue(); diff --git a/server/zanata-war/src/main/java/org/zanata/rest/service/TranslationResourcesService.java b/server/zanata-war/src/main/java/org/zanata/rest/service/TranslationResourcesService.java index cc4a7f1db1..d03e747b0b 100644 --- a/server/zanata-war/src/main/java/org/zanata/rest/service/TranslationResourcesService.java +++ b/server/zanata-war/src/main/java/org/zanata/rest/service/TranslationResourcesService.java @@ -83,8 +83,9 @@ import org.zanata.model.HProjectIteration; import org.zanata.model.HTextFlow; import org.zanata.model.HTextFlowTarget; +import org.zanata.model.SlugEntityBase; +import org.zanata.model.type.StatusType; import org.zanata.rest.NoSuchEntityException; -import org.zanata.rest.dto.extensions.gettext.HeaderEntry; import org.zanata.rest.dto.extensions.gettext.PoHeader; import org.zanata.rest.dto.extensions.gettext.PotEntryHeader; import org.zanata.rest.dto.resource.Resource; @@ -883,7 +884,7 @@ private HProjectIteration retrieveIteration() HProject hProject = projectDAO.getBySlug(projectSlug); - if (hProjectIteration != null && !hProjectIteration.isObsolete() && !hProject.isObsolete()) + if (hProjectIteration != null && !hProjectIteration.getStatus().equals(StatusType.Obsolete) && !hProject.getStatus().equals(StatusType.Obsolete)) { return hProjectIteration; } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransMemoryHandler.java b/server/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransMemoryHandler.java index c5a8af898d..c4c0d0010f 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransMemoryHandler.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransMemoryHandler.java @@ -43,6 +43,8 @@ import org.zanata.model.HLocale; import org.zanata.model.HTextFlow; import org.zanata.model.HTextFlowTarget; +import org.zanata.model.SlugEntityBase; +import org.zanata.model.type.StatusType; import org.zanata.search.LevenshteinUtil; import org.zanata.security.ZanataIdentity; import org.zanata.service.LocaleService; @@ -93,7 +95,7 @@ public GetTranslationMemoryResult execute(GetTranslationMemory action, Execution { float score = (Float) match[0]; HTextFlow textFlow = (HTextFlow) match[1]; - if (textFlow == null || textFlow.getDocument().getProjectIteration().isObsolete() || textFlow.getDocument().getProjectIteration().getProject().isObsolete()) + if (textFlow == null || textFlow.getDocument().getProjectIteration().getStatus().equals(StatusType.Obsolete) || textFlow.getDocument().getProjectIteration().getProject().getStatus().equals(StatusType.Obsolete)) { continue; } diff --git a/server/zanata-war/src/main/resources/db/changelogs/db.changelog-1.6.xml b/server/zanata-war/src/main/resources/db/changelogs/db.changelog-1.6.xml new file mode 100644 index 0000000000..086996ca40 --- /dev/null +++ b/server/zanata-war/src/main/resources/db/changelogs/db.changelog-1.6.xml @@ -0,0 +1,45 @@ + + + + + Alter HProjectIteration/HProject - add status column + + + + + + + + + + + + + + + Insert HProjectIteration/HProject status column with 'Current' + + UPDATE HProjectIteration SET status='Current' + UPDATE HProject SET status='Current' + + + + + Alter HProjectIteration - removed active column + + + + + Alter HProjectIteration/HProject - removed obsolete column + + + + + + + + + + diff --git a/server/zanata-war/src/main/resources/db/db.changelog.xml b/server/zanata-war/src/main/resources/db/db.changelog.xml index c2c7185466..b9e2e0adf9 100644 --- a/server/zanata-war/src/main/resources/db/db.changelog.xml +++ b/server/zanata-war/src/main/resources/db/db.changelog.xml @@ -6,4 +6,5 @@ + diff --git a/server/zanata-war/src/main/resources/messages.properties b/server/zanata-war/src/main/resources/messages.properties index cdeae20e9b..cad0f29474 100644 --- a/server/zanata-war/src/main/resources/messages.properties +++ b/server/zanata-war/src/main/resources/messages.properties @@ -246,10 +246,6 @@ jsf.ManageLanguage=Manage Languages jsf.ManageMaintainers=Manage Maintainers jsf.ManageSearch=Manage Search jsf.ManageUsers=Manage Users -jsf.MarkProjectCurrent=Mark Project Current -jsf.MarkProjectObsolete=Mark Project Obsolete -jsf.MarkCurrent=Mark Current -jsf.MarkObsolete=Mark Obsolete jsf.Members=Members jsf.MemberOf=Member of jsf.Membership=Membership @@ -320,7 +316,6 @@ jsf.server.EditHomePageCode.tooltip=Edit the home page code as persisted. Useful jsf.ServerConfiguration=Server Configuration jsf.ServerUrl=Server URL jsf.Script=Script -jsf.ShowObsolete=Show obsolete jsf.SignIn=Sign In jsf.SignOut=Sign Out jsf.SignUp=Sign Up diff --git a/server/zanata-war/src/main/resources/security.drl b/server/zanata-war/src/main/resources/security.drl index b306df4c4a..9a799edcca 100644 --- a/server/zanata-war/src/main/resources/security.drl +++ b/server/zanata-war/src/main/resources/security.drl @@ -292,7 +292,7 @@ end /***************************************************************************************** - Mark Project and Project Iteration Obsolete rules + View Obsolete Project and Project Iteration rules ******************************************************************************************/ @@ -306,16 +306,22 @@ then check.grant(); end -rule ViewProjectObsoleteOption +rule ViewObsoleteProjectIteration no-loop activation-group "permissions" when - check: PermissionCheck(target == "HProject", action == "view-obsolete-option", granted == false) + check: PermissionCheck(target == "HProjectIteration", action == "view-obsolete", granted == false) Role(name == "admin") then check.grant(); end +/***************************************************************************************** + + Mark Project and Project Iteration obsolete rules + +******************************************************************************************/ + rule MarkProjectObsolete no-loop activation-group "permissions" @@ -327,27 +333,6 @@ then check.grant(); end - -rule ViewObsoleteProjectIteration - no-loop - activation-group "permissions" -when - check: PermissionCheck(target == "HProjectIteration", action == "view-obsolete", granted == false) - Role(name == "admin") -then - check.grant(); -end - -rule ViewObsoleteProjectIterationOption - no-loop - activation-group "permissions" -when - check: PermissionCheck(target == "HProjectIteration", action == "view-obsolete-option", granted == false) - Role(name == "admin") -then - check.grant(); -end - rule MarkProjectIterationObsolete no-loop activation-group "permissions" diff --git a/server/zanata-war/src/main/webapp/WEB-INF/layout/iteration_view_inline.xhtml b/server/zanata-war/src/main/webapp/WEB-INF/layout/iteration_view_inline.xhtml index 94a2994ec5..34b9892379 100644 --- a/server/zanata-war/src/main/webapp/WEB-INF/layout/iteration_view_inline.xhtml +++ b/server/zanata-war/src/main/webapp/WEB-INF/layout/iteration_view_inline.xhtml @@ -29,14 +29,6 @@ - - #{messages['jsf.MarkObsolete']} - - - - #{messages['jsf.MarkCurrent']} diff --git a/server/zanata-war/src/main/webapp/project/home.xhtml b/server/zanata-war/src/main/webapp/project/home.xhtml index 36b9976266..5df692ca41 100644 --- a/server/zanata-war/src/main/webapp/project/home.xhtml +++ b/server/zanata-war/src/main/webapp/project/home.xhtml @@ -24,7 +24,7 @@ - + @@ -33,15 +33,6 @@ page="#{projectAction.scrollerPage}" id="scroller" reRender="sc2" /> - - - - - - - - - @@ -49,12 +40,12 @@ Project Name + view="/project/project.xhtml" rendered="#{project.status != 'Obsolete'}"> + view="/project/project.xhtml" rendered="#{project.status == 'Obsolete'}"> @@ -69,13 +60,9 @@ - - Obsolete - - - + + Status +