From abc53432c29b3deb5957cb5bda9c17c5b30b8814 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Tue, 6 Dec 2011 11:51:32 +1000 Subject: [PATCH] Integrate 'Run validate' button to validate against selected TransUnit, implement HTML and XML tag validation --- .../editor/table/InlineTargetCellEditor.java | 56 +++++++++++---- .../client/editor/table/TableResources.java | 2 + .../client/events/ValidationEvent.java | 19 ++--- .../client/presenter/AppPresenter.java | 26 +++++-- .../presenter/ValidationDetailsPresenter.java | 29 ++------ .../client/resources/NavigationMessages.java | 6 ++ .../webtrans/client/resources/Resources.java | 3 + .../client/resources/TableEditorMessages.java | 4 +- .../client/ui/ShortcutConfigPanel.java | 43 ------------ .../client/ui/TransUnitCountBar.ui.xml | 2 +- .../client/ui/UserConfigConstants.java | 4 ++ .../webtrans/client/ui/UserOptionsPanel.java | 17 +++++ .../client/validation/ValidationService.java | 11 ++- .../zanata/webtrans/client/view/AppView.java | 27 +++++--- .../webtrans/client/view/AppView.ui.xml | 2 +- .../client/view/TransUnitNavigationView.java | 31 +++++---- .../client/view/ValidationDetailsView.java | 65 ++++++++++++++++-- .../shared/validation/ValidationObject.java | 7 +- .../action/HtmlXmlTagValidation.java | 37 +++++++--- .../validation/action/ValidationAction.java | 34 ++++++--- .../crystal_project/_16x16/apps/alert.png | Bin 0 -> 3575 bytes .../org/zanata/webtrans/images/validate.png | Bin 0 -> 615 bytes 22 files changed, 273 insertions(+), 152 deletions(-) create mode 100755 server/zanata-war/src/main/resources/org/zanata/webtrans/images/crystal_project/_16x16/apps/alert.png create mode 100644 server/zanata-war/src/main/resources/org/zanata/webtrans/images/validate.png diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/InlineTargetCellEditor.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/InlineTargetCellEditor.java index 14f2c94a09..65645fd0a5 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/InlineTargetCellEditor.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/InlineTargetCellEditor.java @@ -28,6 +28,7 @@ import org.zanata.webtrans.client.editor.CheckKey; import org.zanata.webtrans.client.editor.CheckKeyImpl; import org.zanata.webtrans.client.events.EditTransUnitEvent; +import org.zanata.webtrans.client.events.ValidationEvent; import org.zanata.webtrans.client.events.NavTransUnitEvent.NavigationType; import org.zanata.webtrans.client.resources.NavigationMessages; import org.zanata.webtrans.client.ui.UserConfigConstants; @@ -48,6 +49,7 @@ import com.google.gwt.gen2.table.client.CellEditor; import com.google.gwt.gen2.table.override.client.HTMLTable; import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; @@ -153,7 +155,7 @@ public void onClick(ClickEvent event) private String saveButtonShortcuts; private String saveButtonwithEnterShortcuts; - private PushButton saveButton, fuzzyButton, cancelButton; + private PushButton saveButton, fuzzyButton, cancelButton, validateButton; /* * The minimum height of the target editor @@ -265,6 +267,21 @@ else if (checkKey.isUserTyping()) TableResources images = GWT.create(TableResources.class); + validateButton = new PushButton(new Image(images.cellEditorValidate())); + validateButton.setStyleName("gwt-Button"); + validateButton.setTitle(messages.runValidation()); + validateButton.addClickHandler(new ClickHandler() + { + @Override + public void onClick(ClickEvent event) + { + if (cellValue != null) + { + eventBus.fireEvent(new ValidationEvent(cellValue.getSource(), textArea.getText())); + } + } + }); + saveButton = new PushButton(new Image(images.cellEditorAccept())); saveButton.setStyleName("gwt-Button"); saveButtonShortcuts = messages.editSaveShortcut(); @@ -281,14 +298,16 @@ else if (checkKey.isUserTyping()) cancelButton.setStyleName("gwt-Button"); cancelButton.setTitle(messages.editCancelShortcut()); cancelButton.addClickHandler(cancelHandler); - cancelButton.addFocusHandler(new FocusHandler(){ + cancelButton.addFocusHandler(new FocusHandler() + { @Override public void onFocus(FocusEvent event) { isCancelButtonFocused = true; } }); - cancelButton.addBlurHandler(new BlurHandler(){ + cancelButton.addBlurHandler(new BlurHandler() + { @Override public void onBlur(BlurEvent event) @@ -297,6 +316,7 @@ public void onBlur(BlurEvent event) } }); + operationsPanel.add(validateButton); operationsPanel.add(saveButton); operationsPanel.add(fuzzyButton); operationsPanel.add(cancelButton); @@ -471,7 +491,7 @@ public void saveAndMoveRow(NavigationType nav) public void saveAndMoveNextState(NavigationType nav) { savePendingChange(true); - + if (untranslatedMode && fuzzyMode) { gotoFuzzyAndNewRow(nav); @@ -610,25 +630,35 @@ public void autoSize() public void setShowOperationButtons(boolean showButtons) { - operationsPanel.setVisible(showButtons); + operationsPanel.setVisible(showButtons); } public void updateKeyBehaviour(Map configMap) { - untranslatedMode = configMap.get(UserConfigConstants.BUTTON_UNTRANSLATED); - fuzzyMode = configMap.get(UserConfigConstants.BUTTON_FUZZY); + if (configMap.containsKey(UserConfigConstants.BUTTON_FUZZY) && configMap.containsKey(UserConfigConstants.BUTTON_UNTRANSLATED)) + { + untranslatedMode = configMap.get(UserConfigConstants.BUTTON_UNTRANSLATED); + fuzzyMode = configMap.get(UserConfigConstants.BUTTON_FUZZY); + } - isEnterKeySavesEnabled = configMap.get(UserConfigConstants.BUTTON_ENTER); - if (isEnterKeySavesEnabled) + if (configMap.containsKey(UserConfigConstants.BUTTON_ENTER)) { - saveButton.setTitle(saveButtonwithEnterShortcuts); + isEnterKeySavesEnabled = configMap.get(UserConfigConstants.BUTTON_ENTER); + if (isEnterKeySavesEnabled) + { + saveButton.setTitle(saveButtonwithEnterShortcuts); + } + else + { + saveButton.setTitle(saveButtonShortcuts); + } } - else + + if (configMap.containsKey(UserConfigConstants.BUTTON_ESC)) { - saveButton.setTitle(saveButtonShortcuts); + isEscKeyCloseEditor = configMap.get(UserConfigConstants.BUTTON_ESC); } - isEscKeyCloseEditor = configMap.get(UserConfigConstants.BUTTON_ESC); } public boolean isCancelButtonFocused() diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableResources.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableResources.java index 7ffefbe8cc..12326c20f2 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableResources.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableResources.java @@ -45,4 +45,6 @@ public interface TableResources extends ClientBundle @Source("org/zanata/webtrans/images/crystal_project/_16x16/actions/2rightarrow.png") ImageResource copySrcButton(); + @Source("org/zanata/webtrans/images/validate.png") + ImageResource cellEditorValidate(); } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/ValidationEvent.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/ValidationEvent.java index f4cd3c0035..ad62414f46 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/ValidationEvent.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/ValidationEvent.java @@ -20,8 +20,6 @@ */ package org.zanata.webtrans.client.events; -import org.zanata.webtrans.shared.model.TransUnit; - import com.google.gwt.event.shared.GwtEvent; /** @@ -46,12 +44,12 @@ public static Type getType() return TYPE != null ? TYPE : (TYPE = new Type()); } - // TransUnit that to be validate - private TransUnit transUnit; + private String source, target; - public ValidationEvent(TransUnit tu) + public ValidationEvent(String source, String target) { - this.transUnit = tu; + this.source = source; + this.target = target; } @Override @@ -67,9 +65,14 @@ protected void dispatch(ValidationEventHandler handler) handler.onValidate(this); } - public TransUnit getTransUnit() + public String getSource() + { + return source; + } + + public String getTarget() { - return transUnit; + return target; } } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java index d24c1e8b10..b61ffb840e 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java @@ -42,6 +42,8 @@ import org.zanata.webtrans.client.presenter.AppPresenter.Display.StatsType; import org.zanata.webtrans.client.resources.WebTransMessages; import org.zanata.webtrans.client.rpc.CachingDispatchAsync; +import org.zanata.webtrans.client.ui.ShortcutConfigPanel; +import org.zanata.webtrans.client.ui.UserOptionsPanel; import org.zanata.webtrans.shared.auth.Identity; import org.zanata.webtrans.shared.model.DocumentId; import org.zanata.webtrans.shared.model.DocumentInfo; @@ -94,7 +96,9 @@ enum StatsType HasClickHandlers getDocumentsLink(); - HasClickHandlers getEditorButtonsCheckbox(); + HasClickHandlers getOptionsLink(); + + Widget getOptionsLinkObject(); void setUserLabel(String userLabel); @@ -142,6 +146,8 @@ enum StatsType private final TranslationStats selectedDocumentStats = new TranslationStats(); private final TranslationStats projectStats = new TranslationStats(); + private final UserOptionsPanel userOptionsPanel = new UserOptionsPanel(true, eventBus); + @Inject public AppPresenter(Display display, EventBus eventBus, CachingDispatchAsync dispatcher, final TranslationPresenter translationPresenter, final DocumentListPresenter documentListPresenter, final Identity identity, final WorkspaceContext workspaceContext, final WebTransMessages messages) { @@ -154,6 +160,7 @@ public AppPresenter(Display display, EventBus eventBus, CachingDispatchAsync dis this.workspaceContext = workspaceContext; } + @Override protected void onBind() { @@ -240,16 +247,27 @@ public void onClick(ClickEvent event) } })); - registerHandler(display.getEditorButtonsCheckbox().addClickHandler(new ClickHandler() + registerHandler(display.getOptionsLink().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - boolean showButtons = ((CheckBox) display.getEditorButtonsCheckbox()).getValue(); - eventBus.fireEvent(new ButtonDisplayChangeEvent(showButtons)); + userOptionsPanel.toggleDisplay(display.getOptionsLinkObject()); } })); + // registerHandler(display.getEditorButtonsCheckbox().addClickHandler(new + // ClickHandler() + // { + // @Override + // public void onClick(ClickEvent event) + // { + // boolean showButtons = ((CheckBox) + // display.getEditorButtonsCheckbox()).getValue(); + // eventBus.fireEvent(new ButtonDisplayChangeEvent(showButtons)); + // } + // })); + display.setUserLabel(identity.getPerson().getName()); display.setWorkspaceNameLabel(workspaceContext.getWorkspaceName()); diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/ValidationDetailsPresenter.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/ValidationDetailsPresenter.java index adee9b26d7..974018ea9f 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/ValidationDetailsPresenter.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/ValidationDetailsPresenter.java @@ -24,19 +24,13 @@ import net.customware.gwt.presenter.client.widget.WidgetDisplay; import net.customware.gwt.presenter.client.widget.WidgetPresenter; -import org.zanata.webtrans.client.events.ButtonDisplayChangeEvent; import org.zanata.webtrans.client.events.DocumentSelectionEvent; import org.zanata.webtrans.client.events.DocumentSelectionHandler; import org.zanata.webtrans.client.events.TransUnitSelectionEvent; import org.zanata.webtrans.client.events.TransUnitSelectionHandler; -import org.zanata.webtrans.client.events.TransUnitUpdatedEvent; -import org.zanata.webtrans.client.events.TransUnitUpdatedEventHandler; import org.zanata.webtrans.client.events.ValidationEvent; import org.zanata.webtrans.client.events.ValidationEventHandler; -import org.zanata.webtrans.client.presenter.AppPresenter.Display.StatsType; -import org.zanata.webtrans.shared.model.TransUnit; -import com.google.gwt.user.client.Window; import com.google.inject.Inject; /** @@ -48,7 +42,7 @@ public class ValidationDetailsPresenter extends WidgetPresenter configMap = new HashMap(); @@ -75,16 +68,6 @@ private void init() optionsList.addItem(UserConfigConstants.OPTION_UNTRANSLATED); mainPanel.add(optionsList); - HorizontalPanel enteroptHP = new HorizontalPanel(); - enteroptHP.setSpacing(5); - enteroptHP.add(enterChk); - mainPanel.add(enteroptHP); - - HorizontalPanel escoptHP = new HorizontalPanel(); - escoptHP.setSpacing(5); - escoptHP.add(escChk); - mainPanel.add(escoptHP); - this.add(mainPanel); } @@ -114,40 +97,14 @@ else if (selectedOption.equals(UserConfigConstants.OPTION_UNTRANSLATED)) eventBus.fireEvent(new UserConfigChangeEvent(configMap)); } }); - - enterChk.addValueChangeHandler(new ValueChangeHandler() - { - @Override - public void onValueChange(ValueChangeEvent event) - { - Log.info("Enable 'Enter' Key to save and move to next string: " + event.getValue()); - configMap.put(UserConfigConstants.BUTTON_ENTER, event.getValue()); - eventBus.fireEvent(new UserConfigChangeEvent(configMap)); - } - }); - - escChk.addValueChangeHandler(new ValueChangeHandler() - { - @Override - public void onValueChange(ValueChangeEvent event) - { - Log.info("Enable 'Esc' Key to close editor: " + event.getValue()); - configMap.put(UserConfigConstants.BUTTON_ESC, event.getValue()); - eventBus.fireEvent(new UserConfigChangeEvent(configMap)); - } - }); } private void setDefaultValue() { optionsList.setSelectedIndex(0); - enterChk.setValue(false); - escChk.setValue(false); configMap.put(UserConfigConstants.BUTTON_FUZZY, true); configMap.put(UserConfigConstants.BUTTON_UNTRANSLATED, true); - configMap.put(UserConfigConstants.BUTTON_ENTER, false); - configMap.put(UserConfigConstants.BUTTON_ESC, false); } public void toggleDisplay(final UIObject target) diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.ui.xml b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.ui.xml index 87a7cbcd8c..d693401d97 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.ui.xml +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.ui.xml @@ -24,7 +24,7 @@ .label { font-weight: bold; text-align: center; - z-index: 1; + z-index: 0; } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/UserConfigConstants.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/UserConfigConstants.java index 23adc7cf68..0e791d0b3a 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/UserConfigConstants.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/UserConfigConstants.java @@ -35,10 +35,14 @@ public class UserConfigConstants public static final String LABEL_ENTER_BUTTON_SAVE = "'Enter' key saves immediately"; public static final String LABEL_ESC_KEY_CLOSE = "'Esc' key closes editor"; public static final String LABEL_NAV_OPTION = "Navigation key/button options:"; + public static final String LABEL_EDITOR_BUTTONS = "Editor Buttons"; + public static final String LABEL_USER_OPTIONS = "User Options"; + public static final String LABEL_LIVE_VALIDATION = "Live Validation"; public static final String OPTION_FUZZY_UNTRANSLATED = "Next Fuzzy/Untranslated"; public static final String OPTION_FUZZY = "Next Fuzzy"; public static final String OPTION_UNTRANSLATED = "Next Untranslated"; + } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/UserOptionsPanel.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/UserOptionsPanel.java index ea9f5a1634..777a75175f 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/UserOptionsPanel.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/UserOptionsPanel.java @@ -48,6 +48,7 @@ public class UserOptionsPanel extends DecoratedPopupPanel private final CheckBox enterChk = new CheckBox(UserConfigConstants.LABEL_ENTER_BUTTON_SAVE); private final CheckBox escChk = new CheckBox(UserConfigConstants.LABEL_ESC_KEY_CLOSE); private final CheckBox editorButtonsChk = new CheckBox(UserConfigConstants.LABEL_EDITOR_BUTTONS); + private final CheckBox liveValidationChk = new CheckBox(UserConfigConstants.LABEL_LIVE_VALIDATION); private Map configMap = new HashMap(); @@ -72,6 +73,11 @@ private void init() editorButtonsHP.add(editorButtonsChk); mainPanel.add(editorButtonsHP); + HorizontalPanel liveValidationButtonsHP = new HorizontalPanel(); + liveValidationButtonsHP.setSpacing(5); + liveValidationButtonsHP.add(liveValidationChk); + // mainPanel.add(liveValidationButtonsHP); + HorizontalPanel enteroptHP = new HorizontalPanel(); enteroptHP.setSpacing(5); enteroptHP.add(enterChk); @@ -118,6 +124,16 @@ public void onValueChange(ValueChangeEvent event) eventBus.fireEvent(new UserConfigChangeEvent(configMap)); } }); + + liveValidationChk.addValueChangeHandler(new ValueChangeHandler() + { + @Override + public void onValueChange(ValueChangeEvent event) + { + Log.info("Enable live validation: " + event.getValue()); + } + }); + } private void setDefaultValue() @@ -125,6 +141,7 @@ private void setDefaultValue() enterChk.setValue(false); escChk.setValue(false); editorButtonsChk.setValue(true); + liveValidationChk.setValue(false); configMap.put(UserConfigConstants.BUTTON_ENTER, false); configMap.put(UserConfigConstants.BUTTON_ESC, false); diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/validation/ValidationService.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/validation/ValidationService.java index 1e0109009e..c5363d8a33 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/validation/ValidationService.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/validation/ValidationService.java @@ -57,7 +57,7 @@ public ValidationService(final EventBus eventBus, final TableEditorMessages mess * * @param tu */ - public void execute(TransUnit tu) + public void execute(String source, String target) { for (String key : validationMap.keySet()) { @@ -65,7 +65,9 @@ public void execute(TransUnit tu) if (action != null && action.isEnabled()) { - validationMap.get(key).execute(tu); + action.clearErrorMessage(); + action.validate(source, target); + action.showErrorMessage(); } } } @@ -88,6 +90,9 @@ public List getValidationList() return new ArrayList(validationMap.values()); } + /** + * Clear all validation plugin's error message + */ public void clearAllMessage() { for (String key : validationMap.keySet()) @@ -96,7 +101,7 @@ public void clearAllMessage() if (action != null) { - action.clearMessage(); + action.clearErrorMessage(); } } } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java index 241984062a..44f6af4a39 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java @@ -40,7 +40,6 @@ import com.google.gwt.user.client.History; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.LayoutPanel; import com.google.gwt.user.client.ui.Widget; @@ -58,7 +57,7 @@ interface AppViewUiBinder extends UiBinder private final int NOTIFICATION_TIME = 2500; @UiField - Anchor signOutLink, leaveLink, helpLink, documentsLink; + Anchor signOutLink, leaveLink, helpLink, documentsLink, optionsLink; @UiField(provided = true) TransUnitCountBar translationStatsBar; @@ -66,8 +65,8 @@ interface AppViewUiBinder extends UiBinder private final TranslationStats documentStats, projectStats; private StatsType showingStats; - @UiField - CheckBox editorButtonsCheckbox; + // @UiField + // CheckBox editorButtonsCheckbox; @UiField Label notificationMessage; @@ -113,7 +112,7 @@ public AppView(Resources resources, WebTransMessages messages) helpLink.setHref(messages.hrefHelpLink()); helpLink.setTarget("_BLANK"); - editorButtonsCheckbox.setValue(true); + // editorButtonsCheckbox.setValue(true); } @@ -177,12 +176,6 @@ public HasClickHandlers getLeaveWorkspaceLink() return leaveLink; } - @Override - public HasClickHandlers getEditorButtonsCheckbox() - { - return editorButtonsCheckbox; - } - @Override public HasClickHandlers getSignOutLink() { @@ -195,6 +188,12 @@ public HasClickHandlers getDocumentsLink() return documentsLink; } + @Override + public HasClickHandlers getOptionsLink() + { + return optionsLink; + } + @Override public void setUserLabel(String userLabel) { @@ -298,4 +297,10 @@ private void updateStatsDisplay() break; } } + + @Override + public Widget getOptionsLinkObject() + { + return optionsLink; + } } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.ui.xml b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.ui.xml index 2fab663191..8c8fe66929 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.ui.xml +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.ui.xml @@ -79,7 +79,7 @@ | Help | - Editor Buttons + Options | Leave Workspace | diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitNavigationView.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitNavigationView.java index 0f68bc0cc9..fe1ca984f3 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitNavigationView.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitNavigationView.java @@ -20,7 +20,6 @@ */ package org.zanata.webtrans.client.view; - import java.util.Map; import org.zanata.webtrans.client.presenter.TransUnitNavigationPresenter; @@ -71,20 +70,23 @@ public TransUnitNavigationView(final NavigationMessages messages, final Resource public void setNavModeTooltip(Map configMap) { - boolean fuzzyMode = configMap.get(UserConfigConstants.BUTTON_FUZZY); - boolean untranslatedMode = configMap.get(UserConfigConstants.BUTTON_UNTRANSLATED); - - if (fuzzyMode && !untranslatedMode) - { - setFuzzyModeTooltip(); - } - else if (untranslatedMode && !fuzzyMode) + if (configMap.containsKey(UserConfigConstants.BUTTON_FUZZY) && configMap.containsKey(UserConfigConstants.BUTTON_UNTRANSLATED)) { - setUntranslatedModeTooltip(); - } - else if (untranslatedMode && fuzzyMode) - { - setFuzzyUntranslatedModeTooltip(); + boolean fuzzyMode = configMap.get(UserConfigConstants.BUTTON_FUZZY); + boolean untranslatedMode = configMap.get(UserConfigConstants.BUTTON_UNTRANSLATED); + + if (fuzzyMode && !untranslatedMode) + { + setFuzzyModeTooltip(); + } + else if (untranslatedMode && !fuzzyMode) + { + setUntranslatedModeTooltip(); + } + else if (untranslatedMode && fuzzyMode) + { + setFuzzyUntranslatedModeTooltip(); + } } } @@ -142,7 +144,6 @@ public HasClickHandlers getLastEntryButton() return lastEntry; } - @Override public Widget asWidget() { diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/ValidationDetailsView.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/ValidationDetailsView.java index c840b4123a..b060bc1e92 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/ValidationDetailsView.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/view/ValidationDetailsView.java @@ -1,20 +1,25 @@ package org.zanata.webtrans.client.view; import org.zanata.webtrans.client.presenter.ValidationDetailsPresenter; +import org.zanata.webtrans.client.resources.NavigationMessages; import org.zanata.webtrans.client.resources.Resources; -import org.zanata.webtrans.client.resources.WebTransMessages; import org.zanata.webtrans.client.validation.ValidationService; -import org.zanata.webtrans.shared.model.TransUnit; import org.zanata.webtrans.shared.validation.ValidationObject; import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.LayoutPanel; +import com.google.gwt.user.client.ui.PushButton; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; @@ -25,6 +30,9 @@ public class ValidationDetailsView extends Composite implements ValidationDetail private final ValidationService validationService; private static ValidationDetailsViewUiBinder uiBinder = GWT.create(ValidationDetailsViewUiBinder.class); + private final Resources resources; + private final NavigationMessages messages; + interface ValidationDetailsViewUiBinder extends UiBinder { } @@ -36,14 +44,26 @@ interface ValidationDetailsViewUiBinder extends UiBinder() { @@ -54,7 +74,38 @@ public void onValueChange(ValueChangeEvent event) } }); chk.setTitle(action.getDescription()); - contentPanel.add(chk); + + PushButton btn = new PushButton(new Image(resources.alertButton())); + btn.setStyleName("gwt-Button"); + btn.setTitle(messages.clickHereForMoreInfo()); + + if (action.hasError()) + { + btn.addClickHandler(new ClickHandler() + { + @Override + public void onClick(ClickEvent event) + { + StringBuilder sb = new StringBuilder(); + for (String error : action.getError()) + { + sb.append(error); + sb.append("\n"); + } + Window.alert(sb.toString()); + } + }); + btn.setVisible(true); + } + else + { + btn.setVisible(false); + } + + hp.add(chk); + hp.add(btn); + + contentPanel.add(hp); } } @@ -65,14 +116,16 @@ public Widget asWidget() } @Override - public void validate(TransUnit tu) + public void validate(String source, String target) { - validationService.execute(tu); + validationService.execute(source, target); + refreshValidationList(); } @Override public void clearAllMessage() { validationService.clearAllMessage(); + refreshValidationList(); } } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/ValidationObject.java b/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/ValidationObject.java index 77949c580d..71d7b15fdb 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/ValidationObject.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/ValidationObject.java @@ -20,6 +20,8 @@ */ package org.zanata.webtrans.shared.validation; +import java.util.List; + /** * * @author Alex Eng aeng@redhat.com @@ -34,7 +36,6 @@ public interface ValidationObject boolean isEnabled(); boolean hasError(); -} - - \ No newline at end of file + List getError(); +} diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/action/HtmlXmlTagValidation.java b/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/action/HtmlXmlTagValidation.java index 9370bf8b7f..44db4e7306 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/action/HtmlXmlTagValidation.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/action/HtmlXmlTagValidation.java @@ -20,15 +20,21 @@ */ package org.zanata.webtrans.shared.validation.action; +import java.util.ArrayList; +import java.util.List; + import net.customware.gwt.presenter.client.EventBus; import org.zanata.webtrans.client.resources.TableEditorMessages; -import org.zanata.webtrans.shared.model.TransUnit; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.regexp.shared.MatchResult; +import com.google.gwt.regexp.shared.RegExp; /** - * + * * @author Alex Eng aeng@redhat.com - * + * **/ public class HtmlXmlTagValidation extends ValidationAction { @@ -37,17 +43,28 @@ public HtmlXmlTagValidation(String id, String description, final EventBus eventB super(id, description, eventBus, messages); } + // private final static String tagRegex = "<[^>]+>[^<]*]+>"; + private final static String tagRegex = "<[^>]+>"; + // private final static String tagRegex = "<[^>]+>"; + + private final static RegExp regExp = RegExp.compile(tagRegex, "g"); + @Override - public void execute(TransUnit tu) + public void validate(String source, String target) { - clearMessage(); + Log.info("Source:" + source); + Log.info("target:" + target); - if (tu.getSource().equals(tu.getSource())) + MatchResult result = regExp.exec(source); + while (result != null) { - showError("sample test on validation"); + String node = result.getGroup(0); + Log.info("Found Node:" + node); + if (!target.contains(node)) + { + addError("Tag " + node + " not found in target"); + } + result = regExp.exec(source); } } } - - - \ No newline at end of file diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/action/ValidationAction.java b/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/action/ValidationAction.java index 21b2d45f34..7273308f1d 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/action/ValidationAction.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/shared/validation/action/ValidationAction.java @@ -20,12 +20,14 @@ */ package org.zanata.webtrans.shared.validation.action; +import java.util.ArrayList; +import java.util.List; + import net.customware.gwt.presenter.client.EventBus; import org.zanata.webtrans.client.events.NotificationEvent; import org.zanata.webtrans.client.events.NotificationEvent.Severity; import org.zanata.webtrans.client.resources.TableEditorMessages; -import org.zanata.webtrans.shared.model.TransUnit; import org.zanata.webtrans.shared.validation.ValidationObject; /** @@ -43,9 +45,9 @@ public abstract class ValidationAction implements ValidationObject private final EventBus eventBus; private final TableEditorMessages messages; - private String errorMsg; + private List errorList = new ArrayList(); - public abstract void execute(TransUnit tu); + public abstract void validate(String source, String target); public ValidationAction(String id, String description, final EventBus eventBus, final TableEditorMessages messages) { @@ -55,11 +57,12 @@ public ValidationAction(String id, String description, final EventBus eventBus, this.messages = messages; } - public void showError(String errorMessage) + public void showErrorMessage() { - errorMsg = messages.notifyValidationError(getId(), errorMessage); - - eventBus.fireEvent(new NotificationEvent(Severity.Info, errorMsg)); + if (hasError()) + { + eventBus.fireEvent(new NotificationEvent(Severity.Info, messages.notifyValidationError())); + } } @Override @@ -88,12 +91,23 @@ public String getDescription() @Override public boolean hasError() { - return errorMsg != null; + return !errorList.isEmpty(); + } + + @Override + public List getError() + { + return errorList; + } + + public void clearErrorMessage() + { + errorList.clear(); } - public void clearMessage() + public void addError(String error) { - errorMsg = null; + errorList.add(error); } } diff --git a/server/zanata-war/src/main/resources/org/zanata/webtrans/images/crystal_project/_16x16/apps/alert.png b/server/zanata-war/src/main/resources/org/zanata/webtrans/images/crystal_project/_16x16/apps/alert.png new file mode 100755 index 0000000000000000000000000000000000000000..b5b93b7518d27538045d4084a9956b10c00372f0 GIT binary patch literal 3575 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 literal 0 HcmV?d00001 diff --git a/server/zanata-war/src/main/resources/org/zanata/webtrans/images/validate.png b/server/zanata-war/src/main/resources/org/zanata/webtrans/images/validate.png new file mode 100644 index 0000000000000000000000000000000000000000..89b94eb45fcffd37da94427a8aa607aa098fc7ef GIT binary patch literal 615 zcmV-t0+{`YP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipt< z1sWfMu2L?OKt5B>)pM6d|Of|6_s{wU4Ti(;)(VLb$YXB)Meq-hOpnqNaU?QJmA` z&CEC7n>Ql>VzHRwA4en-5dfawiEudl*PG+=t=e`}i-r&a03ifxA=Rpb z$Fr>g)&NMFCZRxpbautf2?U7sHHSKOZVm|RI@QuD2luwPr`8MvQp#Gqp_~Rl+%V`n zeFi&MT2I!M0^r@sKo5l|FRyT5kJe-$s9C7342(pAfX`1RUv}#jbtb8=ub9mwImYp3 zfKm!w*D3uh(z#nA*A%3z8BBkC&UE@AraguEebNQUdVpaVC=?G~KVl~Ro=l;_T)s>) zHG@@r$;k38Z0#Mz)}>~E<2ZzZL9RZ&!oGINQ~N&cI~=A`qga(m?m2g86T9f|9AL03 z`e%d0_&BT85@TQPa`eOzqUL3CZ9jP1VWAcUJTExaIKSfuOoN&3Cl$ShPgZ=