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

Commit

Permalink
disable replace buttons in read-only mode
Browse files Browse the repository at this point in the history
  • Loading branch information
davidmason committed May 26, 2012
1 parent 78f01bd commit e222b42
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 6 deletions.
Expand Up @@ -35,6 +35,8 @@
import org.zanata.webtrans.client.events.NotificationEvent.Severity;
import org.zanata.webtrans.client.events.TransUnitUpdatedEvent;
import org.zanata.webtrans.client.events.TransUnitUpdatedEventHandler;
import org.zanata.webtrans.client.events.WorkspaceContextUpdateEvent;
import org.zanata.webtrans.client.events.WorkspaceContextUpdateEventHandler;
import org.zanata.webtrans.client.history.History;
import org.zanata.webtrans.client.history.HistoryToken;
import org.zanata.webtrans.client.resources.WebTransMessages;
Expand All @@ -43,6 +45,7 @@
import org.zanata.webtrans.shared.model.TransUnitId;
import org.zanata.webtrans.shared.model.TransUnitUpdateInfo;
import org.zanata.webtrans.shared.model.TransUnitUpdatePreview;
import org.zanata.webtrans.shared.model.WorkspaceContext;
import org.zanata.webtrans.shared.rpc.GetProjectTransUnitLists;
import org.zanata.webtrans.shared.rpc.GetProjectTransUnitListsResult;
import org.zanata.webtrans.shared.rpc.PreviewReplaceText;
Expand Down Expand Up @@ -114,6 +117,8 @@ public interface Display extends WidgetDisplay

void setReplaceAllButtonEnabled(boolean enabled);

void setReplaceAllButtonVisible(boolean visible);

HasValue<Boolean> getRequirePreviewChk();

void setRequirePreview(boolean required);
Expand Down Expand Up @@ -150,6 +155,7 @@ HasData<TransUnitReplaceInfo> addDocument(

private final WebTransMessages messages;
private final CachingDispatchAsync dispatcher;
private final WorkspaceContext workspaceContext;
private final History history;
private AsyncCallback<GetProjectTransUnitListsResult> projectSearchCallback;
private Delegate<TransUnitReplaceInfo> previewButtonDelegate;
Expand Down Expand Up @@ -178,12 +184,13 @@ HasData<TransUnitReplaceInfo> addDocument(


@Inject
public SearchResultsPresenter(Display display, EventBus eventBus, CachingDispatchAsync dispatcher, History history, final WebTransMessages webTransMessages)
public SearchResultsPresenter(Display display, EventBus eventBus, CachingDispatchAsync dispatcher, History history, final WebTransMessages webTransMessages, final WorkspaceContext workspaceContext)
{
super(display, eventBus);
messages = webTransMessages;
this.history = history;
this.dispatcher = dispatcher;
this.workspaceContext = workspaceContext;
}

@Override
Expand All @@ -198,6 +205,7 @@ protected void onBind()
documentSelectionModels = new HashMap<Long, MultiSelectionModel<TransUnitReplaceInfo>>();
allReplaceInfos = new HashMap<TransUnitId, TransUnitReplaceInfo>();
setUiForNothingSelected();
display.setReplaceAllButtonVisible(!workspaceContext.isReadOnly());

// TODO use explicit 'search' button and add enter key press event for
// text box
Expand Down Expand Up @@ -359,7 +367,7 @@ public void onTransUnitUpdated(final TransUnitUpdatedEvent event)
if (replaceInfo.getReplaceState() == ReplacementState.Replaced && replaceInfo.getTransUnit().getVerNum() != updateInfo.getTransUnit().getVerNum())
{
// can't undo after additional update
replaceInfo.setReplaceState(ReplacementState.NotReplaced);
setReplaceState(replaceInfo, ReplacementState.NotReplaced);
replaceInfo.setReplaceInfo(null);
replaceInfo.setPreviewState(PreviewState.NotFetched);
replaceInfo.setPreview(null);
Expand All @@ -380,6 +388,31 @@ public void onTransUnitUpdated(final TransUnitUpdatedEvent event)
}
}));

registerHandler(eventBus.addHandler(WorkspaceContextUpdateEvent.getType(), new WorkspaceContextUpdateEventHandler()
{
@Override
public void onWorkspaceContextUpdated(WorkspaceContextUpdateEvent event)
{
display.setReplaceAllButtonVisible(!event.isReadOnly());

for (TransUnitReplaceInfo info : allReplaceInfos.values())
{
if (event.isReadOnly())
{
setReplaceState(info, ReplacementState.NotAllowed);
}
else if (info.getReplaceInfo() == null)
{
setReplaceState(info, ReplacementState.NotReplaced);
}
else
{
setReplaceState(info, ReplacementState.Replaced);
}
refreshInfoDisplay(info);
}
}
}));
}

private void showDocInEditor(String doc, boolean runSearch)
Expand Down Expand Up @@ -612,6 +645,12 @@ public void onSuccess(final PreviewReplaceTextResult result)
*/
private void fireReplaceTextEvent(List<TransUnitReplaceInfo> toReplace)
{
if (workspaceContext.isReadOnly())
{
eventBus.fireEvent(new NotificationEvent(Severity.Warning, messages.cannotReplaceInReadOnlyMode()));
return;
}

if (toReplace.isEmpty())
{
eventBus.fireEvent(new NotificationEvent(Severity.Warning, messages.noTextFlowsSelected()));
Expand All @@ -624,7 +663,7 @@ private void fireReplaceTextEvent(List<TransUnitReplaceInfo> toReplace)
{
case NotReplaced:
transUnits.add(info.getTransUnit());
info.setReplaceState(ReplacementState.Replacing);
setReplaceState(info, ReplacementState.Replacing);
info.setPreviewState(PreviewState.Hide);
refreshInfoDisplay(info);
break;
Expand Down Expand Up @@ -681,6 +720,12 @@ public void onClick(ClickEvent event)
*/
private void fireUndoEvent(List<TransUnitUpdateInfo> updateInfoList)
{
if (workspaceContext.isReadOnly())
{
eventBus.fireEvent(new NotificationEvent(Severity.Warning, messages.cannotUndoInReadOnlyMode()));
return;
}

// TODO only fire undo for flows that are undoable?
// rpc method should cope with this anyway, so no big deal

Expand All @@ -693,7 +738,7 @@ private void fireUndoEvent(List<TransUnitUpdateInfo> updateInfoList)
// may be null if another search has been performed since the replacement
if (replaceInfo != null)
{
replaceInfo.setReplaceState(ReplacementState.Undoing);
setReplaceState(replaceInfo, ReplacementState.Undoing);
refreshInfoDisplay(replaceInfo);
}
}
Expand All @@ -713,7 +758,7 @@ public void onSuccess(UpdateTransUnitResult result)
for (TransUnitUpdateInfo info : result.getUpdateInfoList())
{
TransUnitReplaceInfo replaceInfo = allReplaceInfos.get(info.getTransUnit().getId());
replaceInfo.setReplaceState(ReplacementState.NotReplaced);
setReplaceState(replaceInfo, ReplacementState.NotReplaced);
if (replaceInfo.getPreview() == null)
{
replaceInfo.setPreviewState(PreviewState.NotFetched);
Expand Down Expand Up @@ -750,7 +795,8 @@ private int processSuccessfulReplacements(final List<TransUnitUpdateInfo> update
if (replaceInfo != null)
{
replaceInfo.setReplaceInfo(updateInfo);
replaceInfo.setReplaceState(ReplacementState.Replaced);
ReplacementState replaceState = ReplacementState.Replaced;
setReplaceState(replaceInfo, replaceState);
// this should be done when the TU update event comes in
// anyway may want to remove this
replaceInfo.setTransUnit(updateInfo.getTransUnit());
Expand Down Expand Up @@ -828,6 +874,8 @@ private void displayDocumentResults(Long docId, final String docPathName, List<T
for (TransUnit tu : transUnits)
{
TransUnitReplaceInfo info = new TransUnitReplaceInfo(docId, tu);
// default state is NotReplaced, this call triggers read-only check
setReplaceState(info, ReplacementState.NotReplaced);
data.add(info);
allReplaceInfos.put(tu.getId(), info);
}
Expand Down Expand Up @@ -981,4 +1029,25 @@ private int countSelectedFlows()
return selectedFlows;
}

/**
* Set the replace state for a {@link TransUnitReplaceInfo}, adjusting to
* {@link ReplacementState#NotAllowed} if the workspace is read-only.
*
* @param replaceInfo
* @param replaceState to set, ignored if workspace is read-only
*/
private void setReplaceState(TransUnitReplaceInfo replaceInfo, ReplacementState replaceState)
{
// TODO check that context is updated properly (becomes read-only when read-only event comes in)
Log.debug("Workspace read-only: " + workspaceContext.isReadOnly());
if (workspaceContext.isReadOnly())
{
replaceInfo.setReplaceState(ReplacementState.NotAllowed);
}
else
{
replaceInfo.setReplaceState(replaceState);
}
}

}
Expand Up @@ -199,6 +199,9 @@ public interface WebTransMessages extends Messages
@DefaultMessage("No replacements to make")
String noReplacementsToMake();

@DefaultMessage("Replace not possible in read-only workspace")
String cannotReplaceInReadOnlyMode();

@DefaultMessage("View in editor")
String viewDocInEditor();

Expand Down Expand Up @@ -235,6 +238,9 @@ public interface WebTransMessages extends Messages
@DefaultMessage("Undo successful")
String undoSuccess();

@DefaultMessage("Undo not possible in read-only workspace")
String cannotUndoInReadOnlyMode();

@DefaultMessage("Select entire document")
String selectAllInDocument();

Expand Down
Expand Up @@ -189,6 +189,12 @@ public void setReplaceAllButtonEnabled(boolean enabled)
}
}

@Override
public void setReplaceAllButtonVisible(boolean visible)
{
replaceAllButton.setVisible(visible);
}

@Override
public HasValue<Boolean> getRequirePreviewChk()
{
Expand Down
Expand Up @@ -530,6 +530,7 @@ tr.ApprovedStateDecoration td.TableEditorCell-Target .TableEditorContent-Edit
.projectWideSearchSelectionInfo
{
font-size: 1.3em;
white-space: nowrap;
}

.projectWideReplacementButton
Expand Down

0 comments on commit e222b42

Please sign in to comment.