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

Commit

Permalink
WIP: Project setting page - translation tab(validation section)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Jan 23, 2014
1 parent 516529f commit 9bcc434
Show file tree
Hide file tree
Showing 13 changed files with 220 additions and 182 deletions.
111 changes: 87 additions & 24 deletions zanata-war/src/main/java/org/zanata/action/ProjectHome.java
Expand Up @@ -21,21 +21,18 @@
package org.zanata.action;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.annotation.Nullable;
import javax.faces.event.ValueChangeEvent;
import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException;

import lombok.Getter;
import lombok.Setter;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Session;
import org.hibernate.criterion.NaturalIdentifier;
Expand Down Expand Up @@ -63,14 +60,19 @@
import org.zanata.security.ZanataIdentity;
import org.zanata.service.LocaleService;
import org.zanata.service.SlugEntityService;
import org.zanata.service.ValidationService;
import org.zanata.util.ZanataMessages;
import org.zanata.webtrans.shared.model.ValidationAction;

import org.zanata.webtrans.shared.model.ValidationId;
import org.zanata.webtrans.shared.validation.ValidationFactory;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import lombok.Getter;
import lombok.Setter;

@Name("projectHome")
public class ProjectHome extends SlugHome<HProject> {
private static final long serialVersionUID = 1L;
Expand All @@ -95,10 +97,6 @@ public class ProjectHome extends SlugHome<HProject> {
@In(required = false)
private Boolean overrideLocales;

/* Outjected from ValidationOptionsAction */
@In(required = false)
private Collection<ValidationAction> customizedValidations;

@In
private LocaleService localeServiceImpl;

Expand All @@ -117,8 +115,14 @@ public class ProjectHome extends SlugHome<HProject> {
@In
private AccountRoleDAO accountRoleDAO;

@In
private ValidationService validationServiceImpl;

private Map<String, Boolean> roleRestrictions;

private Map<ValidationId, ValidationAction> availableValidations = Maps
.newHashMap();

public void setSelectedProjectType(String selectedProjectType) {
if (!StringUtils.isEmpty(selectedProjectType)) {
ProjectType projectType = ProjectType.valueOf(selectedProjectType);
Expand Down Expand Up @@ -176,8 +180,11 @@ public void onSelectItemAction() {
personDAO.findByUsername(getSelectedItem());
getInstance().getMaintainers().add(maintainer);
update();
addMessage(StatusMessage.Severity.INFO,
zanataMessages.getMessage(
"jsf.MaintainerAddedToProject",
maintainer.getName()));
reset();

}
};

Expand Down Expand Up @@ -220,7 +227,6 @@ public String persist() {

if (authenticatedAccount != null) {
updateOverrideLocales();
updateOverrideValidations();
getInstance().addMaintainer(authenticatedAccount.getPerson());
retValue = super.persist();
Events.instance().raiseEvent("projectAdded");
Expand Down Expand Up @@ -271,9 +277,12 @@ public void updateRoles() {
zanataMessages.getMessage("jsf.RolesUpdated"));
}

@Restrict("#{s:hasPermission(projectHome.instance, 'update')}")
public void setStatus(char initial) {
getInstance().setStatus(EntityStatus.valueOf(initial));
update();
addMessage(StatusMessage.Severity.INFO, zanataMessages.getMessage(
"jsf.project.status.updated", EntityStatus.valueOf(initial)));
}

public Map<String, Boolean> getRoleRestrictions() {
Expand Down Expand Up @@ -303,7 +312,7 @@ public int compare(HAccountRole o1, HAccountRole o2) {
/**
* Use FlashScopeBean to store message in page. Multiple ajax requests for
* re-rendering statistics after updating will clear FacesMessages.
*
*
* @param severity
* @param message
*/
Expand Down Expand Up @@ -412,11 +421,76 @@ public Object getId() {
return slug;
}

private Map<ValidationId, ValidationAction> getValidations() {
if (availableValidations.isEmpty()) {
Collection<ValidationAction> validationList =
validationServiceImpl.getValidationActions(slug);

for (ValidationAction validationAction : validationList) {
availableValidations.put(validationAction.getId(),
validationAction);
}
}

return availableValidations;
}

@Restrict("#{s:hasPermission(projectHome.instance, 'update')}")
public void updateValidationOption(String name, String state) {

for (Map.Entry<String, String> entry : getInstance()
.getCustomizedValidations().entrySet()) {
if (entry.getKey().equals(name)) {
entry.setValue(state);
getValidations().get(ValidationId.valueOf(name)).setState(
ValidationAction.State.valueOf(state));
break;
}
}
ensureMutualExclusivity(getValidations()
.get(ValidationId.valueOf(name)));

update();
addMessage(StatusMessage.Severity.INFO, zanataMessages.getMessage(
"jsf.project.validation.updated", name, state));
}

public List<ValidationAction> getValidationList() {
List<ValidationAction> sortedList =
new ArrayList<ValidationAction>(getValidations().values());
Collections.sort(sortedList,
ValidationFactory.ValidationActionComparator);
return sortedList;
}

/**
* If this action is enabled(Warning or Error), then it's exclusive
* validation will be turn off
*
* @param selectedValidationAction
*/
private void ensureMutualExclusivity(
ValidationAction selectedValidationAction) {
if (selectedValidationAction.getState() != ValidationAction.State.Off) {
for (ValidationAction exclusiveValAction : selectedValidationAction
.getExclusiveValidations()) {
getInstance().getCustomizedValidations().put(
exclusiveValAction.getId().name(),
ValidationAction.State.Off.name());
getValidations().get(exclusiveValAction.getId()).setState(
ValidationAction.State.Off);
}
}
}

public List<ValidationAction.State> getValidationStates() {
return Arrays.asList(ValidationAction.State.values());
}

@Override
public String update() {
clearMessage();
updateOverrideLocales();
updateOverrideValidations();
String state = super.update();
Events.instance().raiseEvent(PROJECT_UPDATE, getInstance());

Expand Down Expand Up @@ -459,17 +533,6 @@ private void updateOverrideLocales() {
}
}

private void updateOverrideValidations() {
// edit project page code won't have customized validations outjected
if (customizedValidations != null) {
getInstance().getCustomizedValidations().clear();
for (ValidationAction action : customizedValidations) {
getInstance().getCustomizedValidations().put(
action.getId().name(), action.getState().name());
}
}
}

public boolean isProjectActive() {
return getInstance().getStatus() == EntityStatus.ACTIVE;
}
Expand Down

This file was deleted.

Expand Up @@ -18,7 +18,7 @@ public interface ValidationMessages extends Messages {
String notifyValidationError();

// Newline validator
@DefaultMessage("Check for consistent leading and trailing newline (\\n)")
@DefaultMessage("Check for consistent leading and trailing newline (\\n).")
String newLineValidatorDesc();

@DefaultMessage("Leading newline (\\n) is missing")
Expand All @@ -34,7 +34,7 @@ public interface ValidationMessages extends Messages {
String trailingNewlineAdded();

// Tab validator
@DefaultMessage("Check whether source and target have the same number of tabs")
@DefaultMessage("Check whether source and target have the same number of tabs.")
String tabValidatorDesc();

@DefaultMessage("Target has fewer tabs (\\t) than source (source: {0}, target: {1})")
Expand All @@ -50,7 +50,7 @@ public interface ValidationMessages extends Messages {
String linesRemoved(int expected, int actual);

// Printf variables validator
@DefaultMessage("Check that printf style (%x) variables are consistent")
@DefaultMessage("Check that printf style (%x) variables are consistent.")
String printfVariablesValidatorDesc();

@DefaultMessage("Variable {0} position is out of range")
Expand All @@ -63,7 +63,7 @@ public interface ValidationMessages extends Messages {
String varPositionDuplicated(Collection<String> vars);

// Java variables validator
@DefaultMessage("Check that java style ('{x}') variables are consistent")
@DefaultMessage("Check that java style ('{x}') variables are consistent.")
String javaVariablesValidatorDesc();

@Description("Lists variables that appear a different number of times between source and target strings")
Expand All @@ -81,7 +81,7 @@ public interface ValidationMessages extends Messages {
String quotedCharsAdded();

// Shared variables validator messages
@DefaultMessage("Check that positional printf style (%n$x) variables are consistent")
@DefaultMessage("Check that positional printf style (%n$x) variables are consistent.")
String printfXSIExtensionValidationDesc();

@Description("Lists the variables that are in the original string but have not been included in the target")
Expand All @@ -106,7 +106,7 @@ public interface ValidationMessages extends Messages {
String varsAddedQuoted(@PluralCount List<String> vars);

// XHM/HTML tag validator
@DefaultMessage("Check that XML/HTML tags are consistent")
@DefaultMessage("Check that XML/HTML tags are consistent.")
String xmlHtmlValidatorDesc();

@Description("Lists the xml or html tags that are in the target but are not in the original string")
Expand All @@ -124,7 +124,7 @@ public interface ValidationMessages extends Messages {
String tagsWrongOrder(@PluralCount List<String> tags);

// XML Entity validator
@DefaultMessage("Check that XML entity are complete")
@DefaultMessage("Check that XML entity are complete.")
String xmlEntityValidatorDesc();

@DefaultMessage("Invalid XML entity [ {0} ]")
Expand Down
Expand Up @@ -232,12 +232,12 @@ private StringInfo analyseString(String inString) {

@Override
public String getSourceExample() {
return null; //To change body of implemented methods use File | Settings | File Templates.
return "value must be between {0} and {1}";
}

@Override
public String getTargetExample() {
return null; //To change body of implemented methods use File | Settings | File Templates.
return "value must be between {0} and <span class='js-example__target txt--warning'>{2}</span>";
}

/**
Expand Down
Expand Up @@ -132,6 +132,6 @@ public String getSourceExample() {

@Override
public String getTargetExample() {
return "&lt;strong&gt;\\n hello world with lead new line&lt;/stong&gt;";
return "<span class='js-example__target txt--warning'>missing \\n</span> hello world with lead new line";
}
}
Expand Up @@ -124,11 +124,11 @@ protected ArrayList<String> findVars(String inString) {

@Override
public String getSourceExample() {
return "";
return "value must be between %x and %y";
}

@Override
public String getTargetExample() {
return "";
return "value must be between %x and <span class='js-example__target txt--warning'>%z</span>";
}
}

0 comments on commit 9bcc434

Please sign in to comment.