From be271ff025f55da7c46bbc7006cdf0f8a4aa875b Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Mon, 15 May 2017 16:29:25 +0300 Subject: [PATCH 1/9] CHE-3614: Rework Git commit window --- .../git/client/GitLocalizationConstant.java | 15 +- .../action/CompareWithBranchAction.java | 2 +- .../action/CompareWithLatestAction.java | 2 +- .../action/CompareWithRevisionAction.java | 2 +- .../git/client/commit/CommitPresenter.java | 248 +++++++++-------- .../ide/ext/git/client/commit/CommitView.java | 75 +++-- .../ext/git/client/commit/CommitViewImpl.java | 261 ++++++++++-------- .../git/client/commit/CommitViewImpl.ui.xml | 50 +--- .../BranchListPresenter.java | 4 +- .../BranchListView.java | 2 +- .../BranchListViewImpl.java | 2 +- .../BranchListViewImpl.ui.xml | 0 .../changedList/ChangedListPresenter.java | 169 ------------ .../changedlist/ChangedListPresenter.java | 120 ++++++++ .../compare/changedlist/ChangedListView.java | 49 ++++ .../changedlist/ChangedListViewImpl.java | 108 ++++++++ .../changedlist/ChangedListViewImpl.ui.xml | 19 ++ .../client/compare/changedpanel/CallBack.java | 24 ++ .../ChangedFileNode.java | 16 +- .../ChangedFolderNode.java | 20 +- .../changedpanel/ChangedPanelPresenter.java | 125 +++++++++ .../ChangedPanelView.java} | 67 ++--- .../ChangedPanelViewImpl.java} | 188 +++++-------- .../ChangedPanelViewImpl.ui.xml} | 4 +- .../RevisionListPresenter.java | 2 +- .../RevisionListView.java | 2 +- .../RevisionListViewImpl.java | 2 +- .../RevisionListViewImpl.ui.xml | 0 .../git/client/history/HistoryPresenter.java | 2 +- .../ext/git/client/inject/GitGinModule.java | 16 +- .../ext/git/client/pull/PullPresenter.java | 2 +- .../client/push/PushToRemotePresenter.java | 2 +- .../client/GitLocalizationConstant.properties | 5 +- .../eclipse/che/ide/ext/git/client/git.css | 7 +- .../che/ide/ext/git/client/BaseTest.java | 6 + .../client/commit/CommitPresenterTest.java | 145 +++++++--- .../client/history/HistoryPresenterTest.java | 2 +- 37 files changed, 1055 insertions(+), 710 deletions(-) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{branchList => branchlist}/BranchListPresenter.java (98%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{branchList => branchlist}/BranchListView.java (97%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{branchList => branchlist}/BranchListViewImpl.java (98%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{branchList => branchlist}/BranchListViewImpl.ui.xml (100%) delete mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListPresenter.java create mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListPresenter.java create mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListView.java create mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.java create mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.ui.xml create mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/CallBack.java rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedList => changedpanel}/ChangedFileNode.java (90%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedList => changedpanel}/ChangedFolderNode.java (86%) create mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedList/ChangedListView.java => changedpanel/ChangedPanelView.java} (66%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedList/ChangedListViewImpl.java => changedpanel/ChangedPanelViewImpl.java} (62%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedList/ChangedListViewImpl.ui.xml => changedpanel/ChangedPanelViewImpl.ui.xml} (88%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{revisionsList => revisionslist}/RevisionListPresenter.java (99%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{revisionsList => revisionslist}/RevisionListView.java (97%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{revisionsList => revisionslist}/RevisionListViewImpl.java (99%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{revisionsList => revisionslist}/RevisionListViewImpl.ui.xml (100%) diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.java index 4ccace0af59..ab0c80bee1a 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.java @@ -355,15 +355,6 @@ public interface GitLocalizationConstant extends Messages { @Key("view.commit.title") String commitTitle(); - @Key("view.commit.all_field_title") - String commitAddAllFieldTitle(); - - @Key("view.commit.selection_field_title") - String commitSelectionFieldTitle(); - - @Key("view.commit.all_project_field_title") - String commitAllFieldTitle(); - @Key("view.commit.amend_field_title") String commitAmendFieldTitle(); @@ -376,6 +367,12 @@ public interface GitLocalizationConstant extends Messages { @Key("view.commit.grid.comment") String commitGridComment(); + @Key("view.commit.push.checkbox.title") + String commitPushCheckboxTitle(); + + @Key("view.commit.nothing_to_commit.text") + String commitNothingToCommitMessageText(); + @Key("view.push.title") String pushViewTitle(); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithBranchAction.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithBranchAction.java index 556fd0832c9..1b28a7b9045 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithBranchAction.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithBranchAction.java @@ -18,7 +18,7 @@ import org.eclipse.che.ide.api.resources.Project; import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; -import org.eclipse.che.ide.ext.git.client.compare.branchList.BranchListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.branchlist.BranchListPresenter; import static com.google.common.base.Preconditions.checkState; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithLatestAction.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithLatestAction.java index e126ebac687..2537378b196 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithLatestAction.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithLatestAction.java @@ -27,7 +27,7 @@ import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; -import org.eclipse.che.ide.ext.git.client.compare.changedList.ChangedListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListPresenter; import org.eclipse.che.ide.api.dialogs.DialogFactory; import java.util.HashMap; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithRevisionAction.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithRevisionAction.java index 270211d66af..dc5373b22a0 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithRevisionAction.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithRevisionAction.java @@ -19,7 +19,7 @@ import org.eclipse.che.ide.api.resources.Project; import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; -import org.eclipse.che.ide.ext.git.client.compare.revisionsList.RevisionListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.revisionslist.RevisionListPresenter; import javax.validation.constraints.NotNull; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java index 6ef2fb322ae..5c21cbd3a59 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java @@ -10,37 +10,45 @@ *******************************************************************************/ package org.eclipse.che.ide.ext.git.client.commit; -import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.che.api.core.ErrorCodes; -import org.eclipse.che.api.git.shared.LogResponse; import org.eclipse.che.api.git.shared.Revision; -import org.eclipse.che.api.promises.client.Operation; -import org.eclipse.che.api.promises.client.OperationException; -import org.eclipse.che.api.promises.client.PromiseError; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.api.dialogs.DialogFactory; import org.eclipse.che.ide.api.git.GitServiceClient; +import org.eclipse.che.ide.api.machine.DevMachine; import org.eclipse.che.ide.api.notification.NotificationManager; import org.eclipse.che.ide.api.resources.Project; -import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.commons.exception.ServerException; import org.eclipse.che.ide.ext.git.client.DateTimeFormatter; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; +import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsole; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsoleFactory; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelPresenter; import org.eclipse.che.ide.processes.panel.ProcessesPanelPresenter; import org.eclipse.che.ide.resource.Path; import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkState; +import static java.util.Arrays.stream; +import static java.util.Collections.singletonList; +import static org.eclipse.che.api.git.shared.BranchListMode.LIST_REMOTE; +import static org.eclipse.che.api.git.shared.DiffType.NAME_STATUS; import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.FLOAT_MODE; import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.NOT_EMERGE_MODE; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; +import static org.eclipse.che.ide.api.notification.StatusNotification.Status.SUCCESS; +import static org.eclipse.che.ide.ext.git.client.compare.FileStatus.defineStatus; import static org.eclipse.che.ide.util.ExceptionUtils.getErrorCode; /** @@ -54,6 +62,7 @@ public class CommitPresenter implements CommitView.ActionDelegate { private static final String COMMIT_COMMAND_NAME = "Git commit"; + private final ChangedPanelPresenter changedPanelPresenter; private final DialogFactory dialogFactory; private final AppContext appContext; private final CommitView view; @@ -64,11 +73,14 @@ public class CommitPresenter implements CommitView.ActionDelegate { private final GitOutputConsoleFactory gitOutputConsoleFactory; private final ProcessesPanelPresenter consolesPanelPresenter; - private Project project; + private Project project; + private Set allFiles; + private List filesToCommit; @Inject - public CommitPresenter(CommitView view, + public CommitPresenter(final CommitView view, GitServiceClient service, + ChangedPanelPresenter changedPanelPresenter, GitLocalizationConstant constant, NotificationManager notificationManager, DialogFactory dialogFactory, @@ -77,6 +89,7 @@ public CommitPresenter(CommitView view, GitOutputConsoleFactory gitOutputConsoleFactory, ProcessesPanelPresenter processesPanelPresenter) { this.view = view; + this.changedPanelPresenter = changedPanelPresenter; this.dialogFactory = dialogFactory; this.appContext = appContext; this.dateTimeFormatter = dateTimeFormatter; @@ -86,83 +99,145 @@ public CommitPresenter(CommitView view, this.service = service; this.constant = constant; this.notificationManager = notificationManager; + + this.filesToCommit = new ArrayList<>(); + this.view.setChangedPanelView(changedPanelPresenter.getView()); } public void showDialog(Project project) { this.project = project; - view.setAddAllExceptNew(false); - view.setAddSelectedFiles(false); - view.setCommitAllFiles(false); - view.setAmend(false); - view.setEnableCommitButton(!view.getMessage().isEmpty()); - view.showDialog(); - view.focusInMessageField(); + checkState(project != null, "Null project occurred"); + checkState(project.getLocation().isPrefixOf(appContext.getResource().getLocation()), + "Given selected item is not descendant of given project"); + + service.diff(appContext.getDevMachine(), project.getLocation(), null, NAME_STATUS, false, 0, "HEAD", false) + .then(diff -> { + if (diff.isEmpty()) { + dialogFactory.createMessageDialog(constant.commitTitle(), constant.commitNothingToCommitMessageText(), null).show(); + } else { + final String[] changedFiles = diff.split("\n"); + Map items = new HashMap<>(); + for (String item : changedFiles) { + items.put(item.substring(2, item.length()), defineStatus(item.substring(0, 1))); + } + filesToCommit.clear(); + allFiles = items.keySet(); + + view.setEnableCommitButton(!view.getMessage().isEmpty()); + view.focusInMessageField(); + view.showDialog(); + view.checkCheckBoxes(stream(appContext.getResources()).map(resource -> resource.getLocation().removeFirstSegments(1)) + .collect(Collectors.toSet())); + changedPanelPresenter.show(items, null); + } + }) + .catchError(arg -> { + notificationManager.notify(constant.diffFailed(), FAIL, FLOAT_MODE); + }); + + service.branchList(appContext.getDevMachine(), project.getLocation(), LIST_REMOTE) + .then(view::setRemoteBranchesList) + .catchError(error -> { + notificationManager.notify(constant.branchesListFailed(), FAIL, FLOAT_MODE); + }); } - /** {@inheritDoc} */ @Override public void onCommitClicked() { - final String message = view.getMessage(); - final boolean addAll = view.isAddAllExceptNew(); - final boolean addSelected = view.isAddSelectedFiles(); - final boolean commitAll = view.isCommitAllFiles(); - final boolean amend = view.isAmend(); - - if (addSelected) { - addSelectedAndCommit(message, commitAll, amend); - } else { - doCommit(message, addAll, commitAll, amend); - } - } + DevMachine devMachine = appContext.getDevMachine(); + Path location = project.getLocation(); + Path[] filesToCommitArray = new Path[filesToCommit.size()]; + filesToCommit.forEach(file -> filesToCommitArray[filesToCommit.indexOf(file)] = Path.valueOf(file)); - private void addSelectedAndCommit(final String message, final boolean commitAll, final boolean amend) { - service.add(appContext.getDevMachine(), project.getLocation(), false, toRelativePaths(appContext.getResources())) - .then(new Operation() { - @Override - public void apply(Void ignored) throws OperationException { - doCommit(message, false, commitAll, amend); - } + service.add(devMachine, location, false, filesToCommitArray) + .then(arg -> { + service.commit(devMachine, + location, + view.getMessage(), + false, + filesToCommitArray, + view.isAmend()) + .then(revision -> { + onCommitSuccess(revision); + if (view.isPushAfterCommit()) { + String remoteBranch = view.getRemoteBranch(); + String remote = remoteBranch.split("/")[0]; + String branch = remoteBranch.split("/")[1]; + service.push(devMachine, + location, + singletonList(branch), + remote, + false) + .then(result -> { + notificationManager.notify(constant.pushSuccess(remote), SUCCESS, FLOAT_MODE); + }) + .catchError(error -> { + notificationManager.notify(constant.pushFail(), FAIL, FLOAT_MODE); + }); + } + view.close(); + }) + .catchError(error -> { + handleError(error.getCause()); + }); + }) + .catchError(error -> { + notificationManager.notify(constant.addFailed(), FAIL, FLOAT_MODE); }); } - private Path[] toRelativePaths(Resource[] resources) { - final Path[] paths = new Path[resources.length]; - - for (int i = 0; i < resources.length; i++) { - checkState(project.getLocation().isPrefixOf(resources[i].getLocation())); - paths[i] = resources[i].getLocation().removeFirstSegments(project.getLocation().segmentCount()); - } + @Override + public void onCancelClicked() { + view.close(); + } - return paths; + @Override + public void onValueChanged() { + view.setEnableCommitButton(!view.getMessage().isEmpty() && (!filesToCommit.isEmpty() || view.isAmend())); } - @VisibleForTesting - void doCommit(final String message, final boolean addAll, final boolean commitAll, final boolean amend) { - final Resource[] resources = appContext.getResources(); - checkState(resources != null); - service.commit(appContext.getDevMachine(), - project.getLocation(), - message, - addAll, - commitAll ? new Path[]{} : toRelativePaths(resources), - amend) - .then(new Operation() { - @Override - public void apply(Revision revision) throws OperationException { - onCommitSuccess(revision); - view.close(); + @Override + public void setAmendCommitMessage() { + service.log(appContext.getDevMachine(), project.getLocation(), null, false) + .then(log -> { + final List commits = log.getCommits(); + String message = ""; + if (commits != null && (!commits.isEmpty())) { + final Revision tip = commits.get(0); + if (tip != null) { + message = tip.getMessage(); + } } + CommitPresenter.this.view.setMessage(message); + CommitPresenter.this.view.setEnableCommitButton(!message.isEmpty()); }) - .catchError(new Operation() { - @Override - public void apply(PromiseError error) throws OperationException { - handleError(error.getCause()); - view.close(); + .catchError(error -> { + if (getErrorCode(error.getCause()) == ErrorCodes.INIT_COMMIT_WAS_NOT_PERFORMED) { + dialogFactory.createMessageDialog(constant.commitTitle(), + constant.initCommitWasNotPerformed(), + null).show(); + } else { + CommitPresenter.this.view.setMessage(""); + notificationManager.notify(constant.logFailed(), FAIL, NOT_EMERGE_MODE); } }); } + @Override + public void onFileNodeCheckBoxValueChanged(Path path, boolean newCheckBoxValue) { + if (newCheckBoxValue) { + filesToCommit.add(path.toString()); + } else { + filesToCommit.remove(path.toString()); + } + } + + @Override + public Set getChangedFiles() { + return allFiles; + } + private void onCommitSuccess(@NotNull final Revision revision) { String date = dateTimeFormatter.getFormattedDate(revision.getCommitTime()); String message = constant.commitMessage(revision.getId(), date); @@ -191,51 +266,4 @@ private void handleError(@NotNull Throwable exception) { consolesPanelPresenter.addCommandOutput(appContext.getDevMachine().getId(), console); notificationManager.notify(constant.commitFailed(), errorMessage, FAIL, FLOAT_MODE); } - - /** {@inheritDoc} */ - @Override - public void onCancelClicked() { - view.close(); - } - - /** {@inheritDoc} */ - @Override - public void onValueChanged() { - String message = view.getMessage(); - view.setEnableCommitButton(!message.isEmpty()); - } - - /** {@inheritDoc} */ - @Override - public void setAmendCommitMessage() { - service.log(appContext.getDevMachine(), project.getLocation(), null, false) - .then(new Operation() { - @Override - public void apply(LogResponse log) throws OperationException { - final List commits = log.getCommits(); - String message = ""; - if (commits != null && (!commits.isEmpty())) { - final Revision tip = commits.get(0); - if (tip != null) { - message = tip.getMessage(); - } - } - CommitPresenter.this.view.setMessage(message); - CommitPresenter.this.view.setEnableCommitButton(!message.isEmpty()); - } - }) - .catchError(new Operation() { - @Override - public void apply(PromiseError error) throws OperationException { - if (getErrorCode(error.getCause()) == ErrorCodes.INIT_COMMIT_WAS_NOT_PERFORMED) { - dialogFactory.createMessageDialog(constant.commitTitle(), - constant.initCommitWasNotPerformed(), - null).show(); - } else { - CommitPresenter.this.view.setMessage(""); - notificationManager.notify(constant.logFailed(), FAIL, NOT_EMERGE_MODE); - } - } - }); - } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java index 01d60ed4a89..f3e5c6946ed 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java @@ -10,9 +10,14 @@ *******************************************************************************/ package org.eclipse.che.ide.ext.git.client.commit; +import org.eclipse.che.api.git.shared.Branch; import org.eclipse.che.ide.api.mvp.View; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; +import org.eclipse.che.ide.resource.Path; import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Set; /** * The view of {@link CommitPresenter}. @@ -31,10 +36,14 @@ interface ActionDelegate { /** Performs any actions appropriate in response to the user having changed something. */ void onValueChanged(); - /** - * Set the commit message for an amend commit. - */ + /** Performs any actions appropriate in response to the user having clicked on changed file check-box. */ + void onFileNodeCheckBoxValueChanged(Path path, boolean newCheckBoxValue); + + /** Set the commit message for an amend commit. */ void setAmendCommitMessage(); + + /** Get list of changed files paths. */ + Set getChangedFiles(); } /** @return entered message */ @@ -42,59 +51,36 @@ interface ActionDelegate { String getMessage(); /** - * Set content into message field. + * Mark check-boxes of given paths as checked. * - * @param message - * text what need to insert - */ - void setMessage(@NotNull String message); - - /** - * Returns true if need to add all changes to index except from new files before commit, and false otherwise + * @param paths + * pats of nodes */ - boolean isAddAllExceptNew(); + void checkCheckBoxes(Set paths); /** - * Set status of flag that represents add all changes to index except from new files before commit. - * - * @param addAllExceptNew - * true if need to add all changes to index except from new files before commit, - * false otherwise + * Returns selected remote branch from branches drop-down list. */ - void setAddAllExceptNew(boolean addAllExceptNew); - - /** Returns true if the selection must be added to index before commit, and false otherwise. */ - boolean isAddSelectedFiles(); + String getRemoteBranch(); /** - * Sets the status of flag that represents add selected files. + * Set content into message field. * - * @param addSelectedFiles - * true if need to add selected files before commit, false otherwise + * @param message + * text what need to insert */ - void setAddSelectedFiles(boolean addSelectedFiles); - - /** Returns true if need to commit all files in the project, and false otherwise. */ - boolean isCommitAllFiles(); + void setMessage(@NotNull String message); /** - * Sets the status of flag that represents add selected files. - * - * @param commitAllFiles - * true if need to add selected files before commit, false otherwise + * Set list of remote branches to drop-down. */ - void setCommitAllFiles(boolean commitAllFiles); + void setRemoteBranchesList(List branches); - /** Returns true if need to amend the last commit, and false otherwise. */ + /** Returns true if need to amend the last commit, and false otherwise */ boolean isAmend(); - /** - * Set status of amend the last commit. - * - * @param isAmend - * true need to amend the last commit, false need to create new commit - */ - void setAmend(boolean isAmend); + /** Returns true if need to push after commit, and false otherwise */ + boolean isPushAfterCommit(); /** * Change the enable state of the commit button. @@ -112,4 +98,9 @@ interface ActionDelegate { /** Show dialog. */ void showDialog(); -} \ No newline at end of file + + /** + * Initialize changed panel. + */ + void setChangedPanelView(ChangedPanelView changedPanelView); +} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java index b7162e20be4..4c7ea76c5d6 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java @@ -10,28 +10,44 @@ *******************************************************************************/ package org.eclipse.che.ide.ext.git.client.commit; +import org.eclipse.che.api.git.shared.Branch; +import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.GitResources; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedFileNode; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedFolderNode; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; +import org.eclipse.che.ide.resource.Path; import org.eclipse.che.ide.ui.ShiftableTextArea; +import org.eclipse.che.ide.ui.smartTree.Tree; +import org.eclipse.che.ide.ui.smartTree.presentation.DefaultPresentationRenderer; import org.eclipse.che.ide.ui.window.Window; 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.dom.client.Element; +import com.google.gwt.dom.client.InputElement; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.google.inject.Singleton; import javax.validation.constraints.NotNull; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; /** * The implementation of {@link CommitView}. @@ -43,76 +59,59 @@ public class CommitViewImpl extends Window implements CommitView { interface CommitViewImplUiBinder extends UiBinder { } - private static CommitViewImplUiBinder ourUiBinder = GWT.create(CommitViewImplUiBinder.class); + private static CommitViewImplUiBinder uiBinder = GWT.create(CommitViewImplUiBinder.class); - /** - * The add all uncommited change field. - */ - @UiField - CheckBox addAll; - /** - * The 'add to index selected files' selection in commit field. - */ + @UiField(provided = true) + final TextArea message; @UiField - CheckBox addSelection; - /** - * The 'commit only selection' field. - */ + FlowPanel changedPanel; @UiField - CheckBox commitAllSelection; - - /** - * The amend commit flag. - */ - @UiField - CheckBox amend; - - /** - * The commit message input field. - */ + CheckBox amend; @UiField(provided = true) - TextArea message; - Button btnCommit; - Button btnCancel; + final GitResources res; @UiField(provided = true) - final GitResources res; - @UiField(provided = true) - final GitLocalizationConstant locale; - private ActionDelegate delegate; + final GitLocalizationConstant locale; + + private ListBox remoteBranches; + private CheckBox pushAfterCommit; + private Button btnCommit; + private Button btnCancel; + private ActionDelegate delegate; + private ChangedPanelRender render; + private ChangedPanelView changedPanelView; /** * Create view. - * - * @param res - * @param locale */ @Inject - protected CommitViewImpl(GitResources res, GitLocalizationConstant locale) { + protected CommitViewImpl(GitResources res, + GitLocalizationConstant locale, + ChangedPanelView changedPanelView) { this.res = res; this.locale = locale; + this.changedPanelView = changedPanelView; this.message = new ShiftableTextArea(); this.ensureDebugId("git-commit-window"); - Widget widget = ourUiBinder.createAndBindUi(this); - this.setTitle(locale.commitTitle()); + + Widget widget = uiBinder.createAndBindUi(this); this.setWidget(widget); - btnCancel = createButton(locale.buttonCancel(), "git-commit-cancel", new ClickHandler() { + btnCancel = createButton(locale.buttonCancel(), "git-commit-cancel", event -> delegate.onCancelClicked()); + btnCommit = createButton(locale.buttonCommit(), "git-commit-commit", event -> delegate.onCommitClicked()); + btnCommit.addStyleName(resources.windowCss().primaryButton()); - @Override - public void onClick(ClickEvent event) { - delegate.onCancelClicked(); - } - }); - btnCommit = createButton(locale.buttonCommit(), "git-commit-commit", new ClickHandler() { + remoteBranches = new ListBox(); + remoteBranches.setEnabled(false); - @Override - public void onClick(ClickEvent event) { - delegate.onCommitClicked(); - } - }); - btnCommit.addStyleName(resources.windowCss().primaryButton()); + pushAfterCommit = new CheckBox(); + pushAfterCommit.setHTML(locale.commitPushCheckboxTitle()); + pushAfterCommit.addValueChangeHandler(event -> remoteBranches.setEnabled(event.getValue())); + + pushAfterCommit.addStyleName(res.gitCSS().spacing()); + getFooter().add(pushAfterCommit); + getFooter().add(remoteBranches); addButtonToFooter(btnCommit); addButtonToFooter(btnCancel); @@ -130,70 +129,38 @@ protected void onEnterClicked() { } } - /** {@inheritDoc} */ @NotNull @Override public String getMessage() { return message.getText(); } - /** {@inheritDoc} */ @Override public void setMessage(@NotNull String message) { this.message.setText(message); } - /** {@inheritDoc} */ - @Override - public boolean isAddAllExceptNew() { - return this.addAll.getValue(); - } - - /** {@inheritDoc} */ @Override - public void setAddAllExceptNew(boolean isAddAllExceptNew) { - this.addAll.setValue(isAddAllExceptNew); + public void setRemoteBranchesList(List branches) { + remoteBranches.clear(); + branches.forEach(branch -> remoteBranches.addItem(branch.getDisplayName())); } - /** {@inheritDoc} */ @Override public boolean isAmend() { return amend.getValue(); } - /** {@inheritDoc} */ - @Override - public void setAmend(boolean isAmend) { - amend.setValue(isAmend); - } - - @Override - public boolean isAddSelectedFiles() { - return this.addSelection.getValue(); - } - - @Override - public void setAddSelectedFiles(final boolean includeSelection) { - this.addSelection.setValue(includeSelection); - } - @Override - public boolean isCommitAllFiles() { - return this.commitAllSelection.getValue(); + public boolean isPushAfterCommit() { + return pushAfterCommit.getValue(); } - @Override - public void setCommitAllFiles(final boolean onlySelection) { - this.commitAllSelection.setValue(onlySelection); - } - - /** {@inheritDoc} */ @Override public void setEnableCommitButton(boolean enable) { btnCommit.setEnabled(enable); } - /** {@inheritDoc} */ @Override public void focusInMessageField() { new Timer() { @@ -204,19 +171,16 @@ public void run() { }.schedule(300); } - /** {@inheritDoc} */ @Override public void close() { this.hide(); } - /** {@inheritDoc} */ @Override public void showDialog() { this.show(); } - /** {@inheritDoc} */ @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; @@ -227,32 +191,109 @@ public void onMessageChanged(KeyUpEvent event) { delegate.onValueChanged(); } - @UiHandler("addAll") - public void onAddAllValueChange(final ValueChangeEvent event) { + @UiHandler("amend") + public void onAmendValueChange(final ValueChangeEvent event) { if (event.getValue()) { - this.addSelection.setValue(false); + this.delegate.setAmendCommitMessage(); + } else { + this.message.setValue(""); } + delegate.onValueChanged(); } - @UiHandler("addSelection") - public void onAddSelectionValueChange(final ValueChangeEvent event) { - if (event.getValue()) { - this.addAll.setValue(false); - } + @Override + public void setChangedPanelView(ChangedPanelView changedPanelView) { + this.render = new ChangedPanelRender(changedPanelView); + this.changedPanelView = changedPanelView; + changedPanelView.setTreeRender(render); + this.changedPanel.add(changedPanelView); } - @UiHandler("commitAllSelection") - public void onOnlySelectionValueChange(final ValueChangeEvent event) { - this.commitAllSelection.setValue(event.getValue()); + @Override + public void + checkCheckBoxes(Set paths) { + render.setNodePaths(changedPanelView.getNodePaths()); + paths.forEach(path -> render.handleNodeCheckBox(path, false)); } - @UiHandler("amend") - public void onAmendValueChange(final ValueChangeEvent event) { - if (event.getValue()) { - this.delegate.setAmendCommitMessage(); - } else { - this.message.setValue(""); - this.setEnableCommitButton(false); + @Override + public String getRemoteBranch() { + return remoteBranches.getSelectedValue(); + } + + private class ChangedPanelRender extends DefaultPresentationRenderer { + + private final ChangedPanelView changedPanelView; + private final Set unselectedNodePaths; + + private Set allNodePaths; + + ChangedPanelRender(ChangedPanelView changedPanelView) { + super(changedPanelView.getTreeStyles()); + this.changedPanelView = changedPanelView; + this.unselectedNodePaths = new HashSet<>(); + this.allNodePaths = new HashSet<>(); + } + + @Override + public Element render(final Node node, final String domID, final Tree.Joint joint, final int depth) { + Element rootContainer = super.render(node, domID, joint, depth); + Element nodeContainer = rootContainer.getFirstChildElement(); + final Element checkBoxElement = new CheckBox().getElement(); + final InputElement checkBoxInputElement = (InputElement)checkBoxElement.getElementsByTagName("input").getItem(0); + final Path nodePath = node instanceof ChangedFileNode ? Path.valueOf(node.getName()) : ((ChangedFolderNode)node).getPath(); + checkBoxInputElement.setChecked(!unselectedNodePaths.contains(nodePath)); + Event.sinkEvents(checkBoxElement, Event.ONCLICK); + Event.setEventListener(checkBoxElement, event -> { + if (Event.ONCLICK == event.getTypeInt() && event.getTarget().getTagName().equalsIgnoreCase("label")) { + handleNodeCheckBox(nodePath, checkBoxInputElement.isChecked()); + + changedPanelView.refreshNodes(); + delegate.onValueChanged(); + } + }); + + nodeContainer.insertAfter(checkBoxElement, nodeContainer.getFirstChild()); + return rootContainer; + } + + void setNodePaths(Set paths) { + allNodePaths = paths; + unselectedNodePaths.clear(); + unselectedNodePaths.addAll(paths); + } + + void handleNodeCheckBox(Path nodePath, boolean value) { + allNodePaths.stream() + .sorted(Comparator.comparing(Path::toString)) + .filter(path -> !(path.equals(nodePath) || path.isEmpty()) && path.isPrefixOf(nodePath) && + !hasSelectedChildes(path)) + .forEach(path -> saveCheckBoxSelection(value, path)); + + allNodePaths.stream().sorted((path1, path2) -> path2.toString().compareTo(path1.toString())) + .filter(path -> !path.isEmpty() && + (nodePath.isPrefixOf(path) || path.isPrefixOf(nodePath) && !hasSelectedChildes(path))) + .forEach(path -> saveCheckBoxSelection(value, path)); + } + + private void saveCheckBoxSelection(boolean checkBoxValue, Path path) { + if (checkBoxValue) { + unselectedNodePaths.add(path); + } else { + unselectedNodePaths.remove(path); + } + if (delegate.getChangedFiles().contains(path.toString())) { + delegate.onFileNodeCheckBoxValueChanged(path, !checkBoxValue); + } + } + + private boolean hasSelectedChildes(Path givenPath) { + Optional optional = allNodePaths.stream() + .filter(path -> givenPath.isPrefixOf(path) && + !path.equals(givenPath) && + !unselectedNodePaths.contains(path)) + .findAny(); + return optional.isPresent(); } } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml index 67c33370623..79874468a19 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml @@ -16,46 +16,22 @@ - .spacing { - margin-bottom: 5px; - } - - .mainPanel { - min-width: 350px; - min-height: 220px; - } - .emptyBorder { - margin: 1px; - } - - .checkBoxesSection { - display: -webkit-flex; - display: flex; - -webkit-flex-direction: column; - flex-direction: column; - align-items: flex-start; - -webkit-align-items: flex-start; + margin: 6px; } - -
- - - - -
- -
+ + + + + + + + + + + + diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListPresenter.java similarity index 98% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListPresenter.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListPresenter.java index 4b55571274f..d7bf8fab1a7 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListPresenter.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.branchList; +package org.eclipse.che.ide.ext.git.client.compare.branchlist; import com.google.common.base.Optional; import com.google.inject.Inject; @@ -28,7 +28,7 @@ import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; -import org.eclipse.che.ide.ext.git.client.compare.changedList.ChangedListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListPresenter; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsole; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsoleFactory; import org.eclipse.che.ide.processes.panel.ProcessesPanelPresenter; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListView.java similarity index 97% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListView.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListView.java index 8be4ac28eb5..813b33946b7 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListView.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.branchList; +package org.eclipse.che.ide.ext.git.client.compare.branchlist; import org.eclipse.che.api.git.shared.Branch; import org.eclipse.che.ide.api.mvp.View; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListViewImpl.java similarity index 98% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListViewImpl.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListViewImpl.java index 4f46a51809e..b78558d5dd3 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListViewImpl.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.branchList; +package org.eclipse.che.ide.ext.git.client.compare.branchlist; import elemental.dom.Element; import elemental.html.TableCellElement; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListViewImpl.ui.xml similarity index 100% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchList/BranchListViewImpl.ui.xml rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListViewImpl.ui.xml diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListPresenter.java deleted file mode 100644 index 780a941d868..00000000000 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListPresenter.java +++ /dev/null @@ -1,169 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012-2017 Codenvy, S.A. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Codenvy, S.A. - initial API and implementation - *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedList; - -import com.google.common.base.Optional; -import com.google.inject.Inject; -import com.google.inject.Singleton; - -import org.eclipse.che.api.promises.client.Operation; -import org.eclipse.che.api.promises.client.OperationException; -import org.eclipse.che.api.promises.client.PromiseError; -import org.eclipse.che.commons.annotation.Nullable; -import org.eclipse.che.ide.api.data.tree.Node; -import org.eclipse.che.ide.api.notification.NotificationManager; -import org.eclipse.che.ide.api.resources.File; -import org.eclipse.che.ide.api.resources.Project; -import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; -import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; -import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; -import org.eclipse.che.ide.resource.Path; - -import javax.validation.constraints.NotNull; - -import java.util.Map; - -import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.NOT_EMERGE_MODE; -import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; - -/** - * Presenter for displaying list of changed files. - * - * @author Igor Vinokur - * @author Vlad Zhukovskyi - */ -@Singleton -public class ChangedListPresenter implements ChangedListView.ActionDelegate { - private final ChangedListView view; - private final NotificationManager notificationManager; - private final GitLocalizationConstant locale; - private final ComparePresenter comparePresenter; - - private Map changedFiles; - private Project project; - private String file; - private String revisionA; - private String revisionB; - private Status status; - private boolean treeViewEnabled; - - @Inject - public ChangedListPresenter(ChangedListView view, - ComparePresenter comparePresenter, - NotificationManager notificationManager, - GitLocalizationConstant locale) { - this.comparePresenter = comparePresenter; - this.view = view; - this.notificationManager = notificationManager; - this.locale = locale; - this.view.setDelegate(this); - } - - /** - * Show window with changed files. - * - * @param changedFiles - * Map with files and their status - * @param revisionA - * hash of the first revision or branch. - * If it is set to {@code null}, compare with empty repository state will be performed - * @param revisionB - * hash of the second revision or branch. - * If it is set to {@code null}, compare with latest repository state will be performed - */ - public void show(Map changedFiles, @Nullable String revisionA, @Nullable String revisionB, Project project) { - this.changedFiles = changedFiles; - this.project = project; - this.revisionA = revisionA; - this.revisionB = revisionB; - - view.setEnableCompareButton(false); - view.setEnableExpandCollapseButtons(treeViewEnabled); - - view.showDialog(); - viewChangedFiles(); - } - - @Override - public void onCloseClicked() { - view.close(); - } - - @Override - public void onCompareClicked() { - showCompare(); - } - - @Override - public void onFileNodeDoubleClicked() { - showCompare(); - } - - @Override - public void onChangeViewModeButtonClicked() { - treeViewEnabled = !treeViewEnabled; - viewChangedFiles(); - view.setEnableExpandCollapseButtons(treeViewEnabled); - } - - @Override - public void onExpandButtonClicked() { - view.expandAllDirectories(); - } - - @Override - public void onCollapseButtonClicked() { - view.collapseAllDirectories(); - } - - @Override - public void onNodeSelected(@NotNull Node node) { - if (node instanceof ChangedFolderNode) { - view.setEnableCompareButton(false); - return; - } - view.setEnableCompareButton(true); - this.file = node.getName(); - this.status = ((ChangedFileNode)node).getStatus(); - } - - private void viewChangedFiles() { - if (treeViewEnabled) { - view.viewChangedFilesAsTree(changedFiles); - view.setTextToChangeViewModeButton(locale.changeListRowListViewButtonText()); - } else { - view.viewChangedFilesAsList(changedFiles); - view.setTextToChangeViewModeButton(locale.changeListGroupByDirectoryButtonText()); - } - } - - private void showCompare() { - if (revisionB == null) { - project.getFile(file) - .then(new Operation>() { - @Override - public void apply(Optional file) throws OperationException { - if (file.isPresent()) { - comparePresenter.showCompareWithLatest(file.get(), status, revisionA); - } - } - }) - .catchError(new Operation() { - @Override - public void apply(PromiseError error) throws OperationException { - notificationManager.notify(error.getMessage(), FAIL, NOT_EMERGE_MODE); - } - }); - } else { - comparePresenter.showCompareBetweenRevisions(Path.valueOf(file), status, revisionA, revisionB); - } - } -} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListPresenter.java new file mode 100644 index 00000000000..a0738e8738d --- /dev/null +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListPresenter.java @@ -0,0 +1,120 @@ +/******************************************************************************* + * Copyright (c) 2012-2017 Codenvy, S.A. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ +package org.eclipse.che.ide.ext.git.client.compare.changedlist; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import org.eclipse.che.commons.annotation.Nullable; +import org.eclipse.che.ide.api.notification.NotificationManager; +import org.eclipse.che.ide.api.resources.Project; +import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; +import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedFileNode; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedFolderNode; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.CallBack; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelPresenter; +import org.eclipse.che.ide.resource.Path; + +import java.util.Map; + +import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.NOT_EMERGE_MODE; +import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; + +/** + * Presenter for displaying list of changed files. + * + * @author Igor Vinokur + * @author Vlad Zhukovskyi + */ +@Singleton +public class ChangedListPresenter implements ChangedListView.ActionDelegate { + private final ChangedListView view; + private final NotificationManager notificationManager; + private final ChangedPanelPresenter changedPanelPresenter; + private final ComparePresenter comparePresenter; + private final CallBack callBack; + + private Project project; + private String file; + private String revisionA; + private String revisionB; + private Status status; + + @Inject + public ChangedListPresenter(final ChangedListView view, + ComparePresenter comparePresenter, + NotificationManager notificationManager, + ChangedPanelPresenter changedPanelPresenter) { + this.comparePresenter = comparePresenter; + this.view = view; + this.notificationManager = notificationManager; + this.changedPanelPresenter = changedPanelPresenter; + this.view.setDelegate(this); + + callBack = node -> { + if (node instanceof ChangedFolderNode) { + ChangedListPresenter.this.view.setEnableCompareButton(false); + return; + } + ChangedListPresenter.this.view.setEnableCompareButton(true); + ChangedListPresenter.this.file = node.getName(); + ChangedListPresenter.this.status = ((ChangedFileNode)node).getStatus(); + }; + + this.view.setChangedPanelView(changedPanelPresenter.getView()); + } + + /** + * Show window with changed files. + * + * @param changedFiles + * Map with files and their status + * @param revisionA + * hash of the first revision or branch. + * If it is set to {@code null}, compare with empty repository state will be performed + * @param revisionB + * hash of the second revision or branch. + * If it is set to {@code null}, compare with latest repository state will be performed + */ + public void show(Map changedFiles, @Nullable String revisionA, @Nullable String revisionB, Project project) { + this.project = project; + this.revisionA = revisionA; + this.revisionB = revisionB; + + view.setEnableCompareButton(false); + view.showDialog(); + + changedPanelPresenter.show(changedFiles, callBack); + } + + @Override + public void onCloseClicked() { + view.close(); + } + + @Override + public void onCompareClicked() { + if (revisionB == null) { + project.getFile(file) + .then(file -> { + if (file.isPresent()) { + comparePresenter.showCompareWithLatest(file.get(), status, revisionA); + } + }) + .catchError(error -> { + notificationManager.notify(error.getMessage(), FAIL, NOT_EMERGE_MODE); + }); + } else { + comparePresenter.showCompareBetweenRevisions(Path.valueOf(file), status, revisionA, revisionB); + } + } +} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListView.java new file mode 100644 index 00000000000..acd54a091e4 --- /dev/null +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListView.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2012-2017 Codenvy, S.A. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ +package org.eclipse.che.ide.ext.git.client.compare.changedlist; + +import org.eclipse.che.ide.api.mvp.View; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; + +/** + * The view of {@link ChangedListPresenter}. + * + * @author Igor Vinokur + */ +public interface ChangedListView extends View { + /** Needs for delegate some function into Changed list view. */ + interface ActionDelegate { + /** Performs any actions appropriate in response to the user having pressed the 'Close' button. */ + void onCloseClicked(); + + /** Performs any actions appropriate in response to the user having pressed the 'Compare' button. */ + void onCompareClicked(); + } + + /** Close dialog. */ + void close(); + + /** Show dialog. */ + void showDialog(); + + /** + * Change the enable state of the compare button. + * + * @param enabled + * true to enable the button, false to disable it + */ + void setEnableCompareButton(boolean enabled); + + /** + * Initialize changed panel. + */ + void setChangedPanelView(ChangedPanelView changedPanelView); +} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.java new file mode 100644 index 00000000000..b4ca6ccfa13 --- /dev/null +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * Copyright (c) 2012-2017 Codenvy, S.A. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ +package org.eclipse.che.ide.ext.git.client.compare.changedlist; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; +import org.eclipse.che.ide.ui.window.Window; + +/** + * Implementation of {@link ChangedListView}. + * + * @author Igor Vinokur + */ +@Singleton +public class ChangedListViewImpl extends Window implements ChangedListView { + + @UiField + FlowPanel changedPanel; + + interface ChangedListViewImplUiBinder extends UiBinder { + } + + private static ChangedListViewImplUiBinder uiBinder = GWT.create(ChangedListViewImplUiBinder.class); + + private final GitLocalizationConstant locale; + + private ActionDelegate delegate; + private Button btnCompare; + + @Inject + protected ChangedListViewImpl(GitLocalizationConstant locale) { + this.locale = locale; + this.setTitle(locale.changeListTitle()); + + Widget widget = uiBinder.createAndBindUi(this); + this.setWidget(widget); + + createButtons(); + + SafeHtmlBuilder shb = new SafeHtmlBuilder(); + + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant(""); + shb.appendHtmlConstant("
modifieddeletedaddedcopied
"); + + getFooter().add(new HTML(shb.toSafeHtml())); + } + + @Override + public void setEnableCompareButton(boolean enableCompareButton) { + btnCompare.setEnabled(enableCompareButton); + } + + @Override + public void setDelegate(ActionDelegate delegate) { + this.delegate = delegate; + } + + @Override + public void close() { + this.hide(); + } + + @Override + public void showDialog() { + this.show(); + } + + @Override + public void setChangedPanelView(ChangedPanelView changedPanelView) { + changedPanel.add(changedPanelView); + } + + private void createButtons() { + Button btnClose = createButton(locale.buttonClose(), "git-compare-btn-close", event -> delegate.onCloseClicked()); + btnCompare = createButton(locale.buttonCompare(), "git-compare-btn-compare", event -> delegate.onCompareClicked()); + + addButtonToFooter(btnClose); + addButtonToFooter(btnCompare); + } +} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.ui.xml new file mode 100644 index 00000000000..939bd4d0694 --- /dev/null +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.ui.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/CallBack.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/CallBack.java new file mode 100644 index 00000000000..af7a3e75569 --- /dev/null +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/CallBack.java @@ -0,0 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2012-2017 Codenvy, S.A. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ +package org.eclipse.che.ide.ext.git.client.compare.changedpanel; + +import org.eclipse.che.ide.api.data.tree.Node; + +/** + * Callback for triggering actions in changed files panel. + */ +public interface CallBack { + + /** + * Trigger node selected event. + */ + void onNodeSelected(Node node); +} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedFileNode.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFileNode.java similarity index 90% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedFileNode.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFileNode.java index 904550f8997..8f731f97129 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedFileNode.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFileNode.java @@ -8,15 +8,15 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedList; +package org.eclipse.che.ide.ext.git.client.compare.changedpanel; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.js.Promises; import org.eclipse.che.ide.api.data.tree.AbstractTreeNode; import org.eclipse.che.ide.api.data.tree.HasAction; import org.eclipse.che.ide.api.data.tree.Node; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView.ActionDelegate; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; -import org.eclipse.che.ide.ext.git.client.compare.changedList.ChangedListView.ActionDelegate; import org.eclipse.che.ide.project.shared.NodesResources; import org.eclipse.che.ide.resource.Path; import org.eclipse.che.ide.ui.smartTree.presentation.HasPresentation; @@ -56,11 +56,11 @@ public class ChangedFileNode extends AbstractTreeNode implements HasPresentation * true if it is needed to view file name with its full path, * and false if it is needed to view only name of the file */ - public ChangedFileNode(String pathName, - Status status, - NodesResources nodesResources, - ActionDelegate actionDelegate, - boolean viewPath) { + ChangedFileNode(String pathName, + Status status, + NodesResources nodesResources, + ActionDelegate actionDelegate, + boolean viewPath) { this.pathName = pathName; this.status = status; this.nodesResources = nodesResources; @@ -127,6 +127,6 @@ public NodePresentation getPresentation(boolean update) { @Override public void actionPerformed() { - actionDelegate.onFileNodeDoubleClicked(); + actionDelegate.onFileNodeDoubleClicked(pathName, status); } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedFolderNode.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFolderNode.java similarity index 86% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedFolderNode.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFolderNode.java index 70960e87f28..f620a8abe02 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedFolderNode.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFolderNode.java @@ -8,13 +8,14 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedList; +package org.eclipse.che.ide.ext.git.client.compare.changedpanel; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.js.Promises; import org.eclipse.che.ide.api.data.tree.AbstractTreeNode; import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.project.shared.NodesResources; +import org.eclipse.che.ide.resource.Path; import org.eclipse.che.ide.ui.smartTree.presentation.HasPresentation; import org.eclipse.che.ide.ui.smartTree.presentation.NodePresentation; @@ -28,11 +29,12 @@ */ public class ChangedFolderNode extends AbstractTreeNode implements HasPresentation { - private String name; - private NodePresentation nodePresentation; - + private final Path path; + private final String name; private final NodesResources nodesResources; + private NodePresentation nodePresentation; + /** * Create instance of ChangedFolderNode. * @@ -41,8 +43,9 @@ public class ChangedFolderNode extends AbstractTreeNode implements HasPresentati * @param nodesResources * resources that contain icons */ - public ChangedFolderNode(String name, NodesResources nodesResources) { + ChangedFolderNode(String name, Path path, NodesResources nodesResources) { this.name = name; + this.path = path; this.nodesResources = nodesResources; } @@ -79,4 +82,11 @@ public NodePresentation getPresentation(boolean update) { } return nodePresentation; } + + /** + * Returns path of the node. + */ + public Path getPath() { + return path; + } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java new file mode 100644 index 00000000000..34f49301ca9 --- /dev/null +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java @@ -0,0 +1,125 @@ +/******************************************************************************* + * Copyright (c) 2012-2017 Codenvy, S.A. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ +package org.eclipse.che.ide.ext.git.client.compare.changedpanel; + +import com.google.inject.Inject; + +import org.eclipse.che.commons.annotation.Nullable; +import org.eclipse.che.ide.api.app.AppContext; +import org.eclipse.che.ide.api.data.tree.Node; +import org.eclipse.che.ide.api.notification.NotificationManager; +import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; +import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; +import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; + +import java.util.Map; + +import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.NOT_EMERGE_MODE; +import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; + +/** + * Presenter for displaying list of changed files. + * + * @author Igor Vinokur + * @author Vlad Zhukovskyi + */ +public class ChangedPanelPresenter implements ChangedPanelView.ActionDelegate { + private final ChangedPanelView view; + private final AppContext appContext; + private final NotificationManager notificationManager; + private final ComparePresenter comparePresenter; + private final GitLocalizationConstant locale; + + private Map changedFiles; + private CallBack callBack; + private boolean treeViewEnabled; + + @Inject + public ChangedPanelPresenter(GitLocalizationConstant locale, + ChangedPanelView view, + AppContext appContext, + NotificationManager notificationManager, + ComparePresenter comparePresenter) { + this.locale = locale; + this.view = view; + this.appContext = appContext; + this.notificationManager = notificationManager; + this.comparePresenter = comparePresenter; + this.view.setDelegate(this); + this.treeViewEnabled = true; + } + + /** + * Show panel with changed files. + * + * @param changedFiles + * Map with files and their status + */ + public void show(Map changedFiles, @Nullable CallBack callBack) { + this.changedFiles = changedFiles; + this.callBack = callBack; + view.setEnableExpandCollapseButtons(treeViewEnabled); + + viewChangedFiles(); + } + + public ChangedPanelView getView() { + return view; + } + + @Override + public void onFileNodeDoubleClicked(String path, final Status status) { + appContext.getRootProject() + .getFile(path) + .then(file -> { + if (file.isPresent()) { + comparePresenter.showCompareWithLatest(file.get(), status, "HEAD"); + } + }) + .catchError(error -> { + notificationManager.notify(error.getMessage(), FAIL, NOT_EMERGE_MODE); + }); + } + + @Override + public void onChangeViewModeButtonClicked() { + treeViewEnabled = !treeViewEnabled; + viewChangedFiles(); + view.setEnableExpandCollapseButtons(treeViewEnabled); + } + + @Override + public void onExpandButtonClicked() { + view.expandAllDirectories(); + } + + @Override + public void onCollapseButtonClicked() { + view.collapseAllDirectories(); + } + + @Override + public void onNodeSelected(Node node) { + if (callBack != null) { + callBack.onNodeSelected(node); + } + } + + private void viewChangedFiles() { + if (treeViewEnabled) { + view.viewChangedFilesAsTree(changedFiles); + view.setTextToChangeViewModeButton(locale.changeListRowListViewButtonText()); + } else { + view.viewChangedFilesAsList(changedFiles); + view.setTextToChangeViewModeButton(locale.changeListGroupByDirectoryButtonText()); + } + } +} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java similarity index 66% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListView.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java index 962b5b2890f..911f19ce66f 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java @@ -8,28 +8,27 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedList; +package org.eclipse.che.ide.ext.git.client.compare.changedpanel; -import org.eclipse.che.ide.api.mvp.View; import org.eclipse.che.ide.api.data.tree.Node; +import org.eclipse.che.ide.api.mvp.View; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; +import org.eclipse.che.ide.resource.Path; +import org.eclipse.che.ide.ui.smartTree.Tree; +import org.eclipse.che.ide.ui.smartTree.TreeStyles; +import org.eclipse.che.ide.ui.smartTree.presentation.PresentationRenderer; -import javax.validation.constraints.NotNull; import java.util.Map; +import java.util.Set; /** - * The view of {@link ChangedListPresenter}. + * The view of {@link ChangedPanelPresenter}. * * @author Igor Vinokur */ -public interface ChangedListView extends View { +public interface ChangedPanelView extends View { /** Needs for delegate some function into Changed list view. */ interface ActionDelegate { - /** Performs any actions appropriate in response to the user having pressed the 'Close' button. */ - void onCloseClicked(); - - /** Performs any actions appropriate in response to the user having pressed the 'Compare' button. */ - void onCompareClicked(); /** * Performs any actions appropriate in response to the user having pressed the button that changes view mode of changed files. @@ -48,10 +47,10 @@ interface ActionDelegate { * @param node * selected node */ - void onNodeSelected(@NotNull Node node); + void onNodeSelected(Node node); /** Performs any actions appropriate in response to the user double clicked on the file node. */ - void onFileNodeDoubleClicked(); + void onFileNodeDoubleClicked(String file, Status status); } /** @@ -60,7 +59,7 @@ interface ActionDelegate { * @param files * Map of changed files with their status */ - void viewChangedFilesAsList(@NotNull Map files); + void viewChangedFilesAsList(Map files); /** * View changed files as tree. @@ -68,28 +67,14 @@ interface ActionDelegate { * @param files * Map of changed files with their status */ - void viewChangedFilesAsTree(@NotNull Map files); + void viewChangedFilesAsTree(Map files); - /** Expand all directories in tree. */ + /** Expand all directories. */ void expandAllDirectories(); - /** Collapse all directories in tree. */ + /** Collapse all directories. */ void collapseAllDirectories(); - /** Close dialog. */ - void close(); - - /** Show dialog. */ - void showDialog(); - - /** - * Change the enable state of the compare button. - * - * @param enabled - * true to enable the button, false to disable it - */ - void setEnableCompareButton(boolean enabled); - /** * Change the enable state of the 'Expand/Collapse all directories' buttons. * @@ -104,5 +89,25 @@ interface ActionDelegate { * @param text * text that will be displayed in the button */ - void setTextToChangeViewModeButton(@NotNull String text); + void setTextToChangeViewModeButton(String text); + + /** + * Set custom presentation render for nodes in the panel. + */ + void setTreeRender(PresentationRenderer render); + + /** + * Returns style of the {@link Tree} widget in the panel. + */ + TreeStyles getTreeStyles(); + + /** + * Refresh all nodes in the panel. + */ + void refreshNodes(); + + /** + * Returns paths of all shown nodes e.g. paths of the files and their parent folders. + */ + Set getNodePaths(); } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java similarity index 62% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListViewImpl.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java index 544ef1b6fae..af4dddc1d54 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java @@ -8,64 +8,59 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedList; +package org.eclipse.che.ide.ext.git.client.compare.changedpanel; 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.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.DockLayoutPanel; -import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.LayoutPanel; import com.google.inject.Inject; -import com.google.inject.Singleton; +import org.eclipse.che.ide.FontAwesome; import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.GitResources; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; import org.eclipse.che.ide.project.shared.NodesResources; import org.eclipse.che.ide.resource.Path; -import org.eclipse.che.ide.FontAwesome; import org.eclipse.che.ide.ui.smartTree.NodeLoader; import org.eclipse.che.ide.ui.smartTree.NodeStorage; import org.eclipse.che.ide.ui.smartTree.SelectionModel; import org.eclipse.che.ide.ui.smartTree.Tree; +import org.eclipse.che.ide.ui.smartTree.TreeStyles; import org.eclipse.che.ide.ui.smartTree.compare.NameComparator; -import org.eclipse.che.ide.ui.smartTree.event.SelectionChangedEvent; -import org.eclipse.che.ide.ui.window.Window; +import org.eclipse.che.ide.ui.smartTree.presentation.PresentationRenderer; import javax.validation.constraints.NotNull; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** - * Implementation of {@link ChangedListView}. + * Implementation of {@link ChangedPanelView}. * * @author Igor Vinokur */ -@Singleton -public class ChangedListViewImpl extends Window implements ChangedListView { - interface ChangedListViewImplUiBinder extends UiBinder { +public class ChangedPanelViewImpl extends Composite implements ChangedPanelView { + interface TreeViewImplUiBinder extends UiBinder { } - private static ChangedListViewImplUiBinder uiBinder = GWT.create(ChangedListViewImplUiBinder.class); + private static TreeViewImplUiBinder uiBinder = GWT.create(TreeViewImplUiBinder.class); @UiField - LayoutPanel changedFilesPanel; + LayoutPanel changedPanel; @UiField Button changeViewModeButton; @UiField Button expandButton; @UiField Button collapseButton; - @UiField(provided = true) final GitLocalizationConstant locale; @UiField(provided = true) @@ -73,58 +68,37 @@ interface ChangedListViewImplUiBinder extends UiBinder nodePaths; private final NodesResources nodesResources; @Inject - protected ChangedListViewImpl(GitResources resources, - GitLocalizationConstant locale, - NodesResources nodesResources) { + public ChangedPanelViewImpl(GitResources resources, + GitLocalizationConstant locale, + NodesResources nodesResources) { this.res = resources; this.locale = locale; this.nodesResources = nodesResources; + this.nodePaths = new HashSet<>(); - DockLayoutPanel widget = uiBinder.createAndBindUi(this); - - this.setTitle(locale.changeListTitle()); - this.setWidget(widget); + initWidget(uiBinder.createAndBindUi(this)); NodeStorage nodeStorage = new NodeStorage(); NodeLoader nodeLoader = new NodeLoader(); tree = new Tree(nodeStorage, nodeLoader); - tree.getSelectionModel().setSelectionMode(SelectionModel.Mode.SINGLE); - tree.getSelectionModel().addSelectionChangedHandler(new SelectionChangedEvent.SelectionChangedHandler() { - @Override - public void onSelectionChanged(SelectionChangedEvent event) { - List selection = event.getSelection(); - if (!selection.isEmpty()) { - delegate.onNodeSelected(selection.get(0)); - } + SelectionModel selectionModel = tree.getSelectionModel(); + selectionModel.setSelectionMode(SelectionModel.Mode.SINGLE); + selectionModel.addSelectionChangedHandler(event -> { + List selection = event.getSelection(); + if (!selection.isEmpty()) { + delegate.onNodeSelected(selection.get(0)); } }); - changedFilesPanel.add(tree); + changedPanel.add(tree); createButtons(); - - SafeHtmlBuilder shb = new SafeHtmlBuilder(); - - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant(""); - shb.appendHtmlConstant("
modifieddeletedaddedcopied
"); - - getFooter().add(new HTML(shb.toSafeHtml())); } - /** {@inheritDoc} */ @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; @@ -132,24 +106,17 @@ public void setDelegate(ActionDelegate delegate) { @Override public void viewChangedFilesAsList(@NotNull Map items) { - tree.getNodeStorage().clear(); - for (String file : items.keySet()) { - tree.getNodeStorage().add(new ChangedFileNode(file, items.get(file), nodesResources, delegate, false)); - } + NodeStorage nodeStorage = tree.getNodeStorage(); + nodeStorage.clear(); + items.keySet().forEach(file -> nodeStorage.add(new ChangedFileNode(file, items.get(file), nodesResources, delegate, false))); } @Override public void viewChangedFilesAsTree(@NotNull Map items) { - tree.getNodeStorage().clear(); - List nodes = getGroupedNodes(items); - if (nodes.size() == 1) { - tree.getNodeStorage().add(nodes); - tree.setExpanded(nodes.get(0), true); - } else { - for (Node node : nodes) { - tree.getNodeStorage().add(node); - } - } + NodeStorage nodeStorage = tree.getNodeStorage(); + nodeStorage.clear(); + fetchGroupedNodes(items).forEach(nodeStorage::add); + tree.expandAll(); } @Override @@ -162,91 +129,63 @@ public void expandAllDirectories() { tree.expandAll(); } - /** {@inheritDoc} */ @Override - public void close() { - this.hide(); + public void setEnableExpandCollapseButtons(boolean enabled) { + expandButton.setEnabled(enabled); + collapseButton.setEnabled(enabled); } - /** {@inheritDoc} */ @Override - public void showDialog() { - this.show(); + public void setTextToChangeViewModeButton(String text) { + changeViewModeButton.setText(text); } - /** {@inheritDoc} */ @Override - public void setEnableCompareButton(boolean enabled) { - btnCompare.setEnabled(enabled); + public void setTreeRender(PresentationRenderer render) { + tree.setPresentationRenderer(render); } @Override - public void setEnableExpandCollapseButtons(boolean enabled) { - expandButton.setEnabled(enabled); - collapseButton.setEnabled(enabled); + public TreeStyles getTreeStyles() { + return tree.getTreeStyles(); } @Override - public void setTextToChangeViewModeButton(String text) { - changeViewModeButton.setText(text); + public void refreshNodes() { + tree.getAllChildNodes(tree.getRootNodes(), false).forEach(node -> tree.refresh(node)); + } + + @Override + public Set getNodePaths() { + return nodePaths; } private void createButtons() { - changeViewModeButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent clickEvent) { - delegate.onChangeViewModeButtonClicked(); - } - }); + changeViewModeButton.addClickHandler(clickEvent -> delegate.onChangeViewModeButtonClicked()); expandButton.setTitle(locale.changeListExpandCollapseAllButtonTitle()); expandButton.getElement().setInnerHTML(FontAwesome.EXPAND); - expandButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent clickEvent) { - delegate.onExpandButtonClicked(); - } - }); + expandButton.addClickHandler(clickEvent -> delegate.onExpandButtonClicked()); collapseButton.setTitle(locale.changeListCollapseAllButtonTitle()); collapseButton.getElement().setInnerHTML(FontAwesome.COMPRESS); - collapseButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent clickEvent) { - delegate.onCollapseButtonClicked(); - } - }); - - Button btnClose = createButton(locale.buttonClose(), "git-compare-btn-close", new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - delegate.onCloseClicked(); - } - }); - addButtonToFooter(btnClose); - - btnCompare = createButton(locale.buttonCompare(), "git-compare-btn-compare", new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - delegate.onCompareClicked(); - } - }); - addButtonToFooter(btnCompare); + collapseButton.addClickHandler(clickEvent -> delegate.onCollapseButtonClicked()); } - private List getGroupedNodes(Map items) { + private List fetchGroupedNodes(Map items) { List allFiles = new ArrayList<>(items.keySet()); - List allPaths = new ArrayList<>(); + List allFolders = new ArrayList<>(); for (String file : allFiles) { + nodePaths.add(Path.valueOf(file)); String path = file.substring(0, file.lastIndexOf("/")); - if (!allPaths.contains(path)) { - allPaths.add(path); + if (!allFolders.contains(path)) { + allFolders.add(path); } } - List commonPaths = getCommonPaths(allPaths); + List commonPaths = getCommonPaths(allFolders); for (String commonPath : commonPaths) { - if (!allPaths.contains(commonPath)) { - allPaths.add(commonPath); + if (!allFolders.contains(commonPath)) { + allFolders.add(commonPath); } } @@ -272,11 +211,12 @@ private List getGroupedNodes(Map items) { } //Map child files to related folders of current nesting level or just create a common folder - for (String path : allPaths) { + for (String path : allFolders) { + nodePaths.add(Path.valueOf(path)); if (!(Path.valueOf(path).segmentCount() == i - 1)) { continue; } - Node folder = new ChangedFolderNode(getTransitFolderName(allPaths, path), nodesResources); + Node folder = new ChangedFolderNode(getTransitFolderName(allFolders, path), Path.valueOf(path), nodesResources); if (currentChildNodes.keySet().contains(path)) { folder.setChildren(currentChildNodes.get(path)); } @@ -295,7 +235,7 @@ private List getGroupedNodes(Map items) { if (nodesToNest.isEmpty()) { continue; } - Collections.sort(nodesToNest, new NameComparator()); + nodesToNest.sort(new NameComparator()); if (currentChildNodes.keySet().contains(parentPath)) { nodesToNest.addAll(currentChildNodes.get(parentPath)); } @@ -307,7 +247,7 @@ private List getGroupedNodes(Map items) { } } ArrayList nodes = new ArrayList<>(preparedNodes.values()); - Collections.sort(nodes, new NameComparator()); + nodes.sort(new NameComparator()); return new ArrayList<>(nodes); } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml similarity index 88% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListViewImpl.ui.xml rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml index df6d803b00b..cd69a1de781 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedList/ChangedListViewImpl.ui.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml @@ -21,7 +21,7 @@ } - + @@ -30,7 +30,7 @@ - + diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListPresenter.java similarity index 99% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListPresenter.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListPresenter.java index 93f593d5c61..9e89f4161f4 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListPresenter.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.revisionsList; +package org.eclipse.che.ide.ext.git.client.compare.revisionslist; import com.google.common.base.Optional; import com.google.inject.Inject; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListView.java similarity index 97% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListView.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListView.java index caa60e14fd0..ac523e8202a 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListView.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.revisionsList; +package org.eclipse.che.ide.ext.git.client.compare.revisionslist; import org.eclipse.che.api.git.shared.Revision; import org.eclipse.che.ide.api.mvp.View; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListViewImpl.java similarity index 99% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListViewImpl.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListViewImpl.java index 36425f5d99c..21ef08d7bf9 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListViewImpl.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.revisionsList; +package org.eclipse.che.ide.ext.git.client.compare.revisionslist; import com.google.gwt.cell.client.TextCell; import com.google.gwt.core.client.GWT; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListViewImpl.ui.xml similarity index 100% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionsList/RevisionListViewImpl.ui.xml rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/revisionslist/RevisionListViewImpl.ui.xml diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java index 27811ad113a..67644cf4c8b 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java @@ -27,7 +27,7 @@ import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; import org.eclipse.che.ide.ext.git.client.compare.FileStatus; -import org.eclipse.che.ide.ext.git.client.compare.changedList.ChangedListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListPresenter; import org.eclipse.che.ide.resource.Path; import javax.validation.constraints.NotNull; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java index 77a4aa5dfb2..054ed319beb 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java @@ -25,12 +25,12 @@ import org.eclipse.che.ide.ext.git.client.branch.BranchViewImpl; import org.eclipse.che.ide.ext.git.client.commit.CommitView; import org.eclipse.che.ide.ext.git.client.commit.CommitViewImpl; -import org.eclipse.che.ide.ext.git.client.compare.branchList.BranchListView; -import org.eclipse.che.ide.ext.git.client.compare.branchList.BranchListViewImpl; -import org.eclipse.che.ide.ext.git.client.compare.changedList.ChangedListView; -import org.eclipse.che.ide.ext.git.client.compare.changedList.ChangedListViewImpl; -import org.eclipse.che.ide.ext.git.client.compare.revisionsList.RevisionListView; -import org.eclipse.che.ide.ext.git.client.compare.revisionsList.RevisionListViewImpl; +import org.eclipse.che.ide.ext.git.client.compare.branchlist.BranchListView; +import org.eclipse.che.ide.ext.git.client.compare.branchlist.BranchListViewImpl; +import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListView; +import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListViewImpl; +import org.eclipse.che.ide.ext.git.client.compare.revisionslist.RevisionListView; +import org.eclipse.che.ide.ext.git.client.compare.revisionslist.RevisionListViewImpl; import org.eclipse.che.ide.ext.git.client.fetch.FetchView; import org.eclipse.che.ide.ext.git.client.fetch.FetchViewImpl; import org.eclipse.che.ide.ext.git.client.history.HistoryView; @@ -58,6 +58,8 @@ import org.eclipse.che.ide.ext.git.client.reset.commit.ResetToCommitViewImpl; import org.eclipse.che.ide.ext.git.client.reset.files.ResetFilesView; import org.eclipse.che.ide.ext.git.client.reset.files.ResetFilesViewImpl; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelViewImpl; /** @author Andrey Plotnikov */ @ExtensionGinModule @@ -86,7 +88,7 @@ protected void configure() { bind(PullView.class).to(PullViewImpl.class).in(Singleton.class); bind(HistoryView.class).to(HistoryViewImpl.class).in(Singleton.class); bind(GitOutputPartView.class).to(GitOutputPartViewImpl.class); - + bind(ChangedPanelView.class).to(ChangedPanelViewImpl.class); install(new GinFactoryModuleBuilder().implement(GitOutputConsole.class, GitOutputConsolePresenter.class) .build(GitOutputConsoleFactory.class)); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/pull/PullPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/pull/PullPresenter.java index 3120cb48f12..d57089767ea 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/pull/PullPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/pull/PullPresenter.java @@ -42,7 +42,7 @@ import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.PROGRESS; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.SUCCESS; -import static org.eclipse.che.ide.ext.git.client.compare.branchList.BranchListPresenter.BRANCH_LIST_COMMAND_NAME; +import static org.eclipse.che.ide.ext.git.client.compare.branchlist.BranchListPresenter.BRANCH_LIST_COMMAND_NAME; import static org.eclipse.che.ide.ext.git.client.remote.RemotePresenter.REMOTE_REPO_COMMAND_NAME; import static org.eclipse.che.ide.util.ExceptionUtils.getErrorCode; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/push/PushToRemotePresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/push/PushToRemotePresenter.java index c9af1097d77..fceef861d52 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/push/PushToRemotePresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/push/PushToRemotePresenter.java @@ -48,7 +48,7 @@ import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.PROGRESS; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.SUCCESS; -import static org.eclipse.che.ide.ext.git.client.compare.branchList.BranchListPresenter.BRANCH_LIST_COMMAND_NAME; +import static org.eclipse.che.ide.ext.git.client.compare.branchlist.BranchListPresenter.BRANCH_LIST_COMMAND_NAME; import static org.eclipse.che.ide.ext.git.client.remote.RemotePresenter.REMOTE_REPO_COMMAND_NAME; /** diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties index 47bb778c02a..7a6be60378e 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties @@ -146,13 +146,12 @@ view.remove_from_index.title=Remove From Index... view.commit.commit_message=Committed with revision \#{0} at time {1} view.commit.commit_user= by user {0} view.commit.title=Commit to repository -view.commit.all_field_title=Add all changes except of new files -view.commit.selection_field_title=Add selected files -view.commit.all_project_field_title=Commit all files in the project view.commit.amend_field_title=Amend previous commit view.commit.grid.date=Date view.commit.grid.commiter=Committer view.commit.grid.comment=Comment +view.commit.push.checkbox.title=Push commited changes to : +view.commit.nothing_to_commit.text=Nothing to commit, working directory clean #Create view.create.title=Initialize local repository diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/git.css b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/git.css index efa4fbef13b..976da1984b4 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/git.css +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/git.css @@ -54,4 +54,9 @@ margin-bottom: 9px; display: inline; float: left; -} \ No newline at end of file +} + +.spacing { + margin-top: 6px; + margin-right: 5px; +} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/BaseTest.java b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/BaseTest.java index a809e381e83..817602789d4 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/BaseTest.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/BaseTest.java @@ -15,6 +15,7 @@ import org.eclipse.che.api.git.shared.Branch; import org.eclipse.che.api.git.shared.LogResponse; import org.eclipse.che.api.git.shared.MergeResult; +import org.eclipse.che.api.git.shared.PushResponse; import org.eclipse.che.api.git.shared.Remote; import org.eclipse.che.api.git.shared.Revision; import org.eclipse.che.api.git.shared.ShowFileContentResponse; @@ -137,6 +138,11 @@ public abstract class BaseTest { @Captor protected ArgumentCaptor>> branchListCaptor; + @Mock + protected Promise pushPromise; + @Captor + protected ArgumentCaptor> pushPromiseCaptor; + @Mock protected Promise branchPromise; @Captor diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java index 6f38a5a022f..ef79ea57f23 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java @@ -10,27 +10,35 @@ *******************************************************************************/ package org.eclipse.che.ide.ext.git.client.commit; +import org.eclipse.che.api.git.shared.BranchListMode; +import org.eclipse.che.api.git.shared.DiffType; import org.eclipse.che.api.git.shared.GitUser; import org.eclipse.che.api.git.shared.Revision; import org.eclipse.che.api.promises.client.Operation; +import org.eclipse.che.ide.api.dialogs.MessageDialog; import org.eclipse.che.ide.api.machine.DevMachine; import org.eclipse.che.ide.api.resources.Project; import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.ext.git.client.BaseTest; import org.eclipse.che.ide.ext.git.client.DateTimeFormatter; +import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelPresenter; import org.eclipse.che.ide.resource.Path; import org.junit.Test; import org.mockito.Mock; +import static java.util.Collections.singletonMap; import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.FLOAT_MODE; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; +import static org.eclipse.che.ide.api.notification.StatusNotification.Status.SUCCESS; +import static org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status.MODIFIED; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyList; +import static org.mockito.Matchers.anySet; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -40,17 +48,18 @@ * * @author Andrey Plotnikov * @author Vlad Zhukovskyi + * @author Igor Vinokur */ public class CommitPresenterTest extends BaseTest { - private static final boolean ALL_FILE_INCLUDES = true; - private static final boolean IS_OVERWRITTEN = true; - private static final String COMMIT_TEXT = "commit text"; + private static final String COMMIT_TEXT = "commit text"; @Mock - private CommitView view; + private CommitView view; @Mock - private DateTimeFormatter dateTimeFormatter; + private DateTimeFormatter dateTimeFormatter; + @Mock + private ChangedPanelPresenter changedPanelPresenter; private CommitPresenter presenter; @@ -60,6 +69,7 @@ public void disarm() { presenter = spy(new CommitPresenter(view, service, + changedPanelPresenter, constant, notificationManager, dialogFactory, @@ -70,7 +80,10 @@ public void disarm() { when(view.getMessage()).thenReturn(EMPTY_TEXT); + Resource resource = mock(Resource.class); when(appContext.getResources()).thenReturn(new Resource[]{}); + when(appContext.getResource()).thenReturn(resource); + when(resource.getLocation()).thenReturn(Path.valueOf("test/location")); when(appContext.getDevMachine()).thenReturn(mock(DevMachine.class)); when(appContext.getRootProject()).thenReturn(mock(Project.class)); @@ -78,45 +91,73 @@ public void disarm() { when(voidPromise.catchError(any(Operation.class))).thenReturn(voidPromise); when(revisionPromise.then(any(Operation.class))).thenReturn(revisionPromise); when(revisionPromise.catchError(any(Operation.class))).thenReturn(revisionPromise); + when(stringPromise.then(any(Operation.class))).thenReturn(stringPromise); + when(stringPromise.catchError(any(Operation.class))).thenReturn(stringPromise); + when(branchListPromise.then(any(Operation.class))).thenReturn(branchListPromise); + when(branchListPromise.catchError(any(Operation.class))).thenReturn(branchListPromise); + when(pushPromise.then(any(Operation.class))).thenReturn(pushPromise); when(service.add(any(DevMachine.class), any(Path.class), anyBoolean(), any(Path[].class))).thenReturn(voidPromise); when(service.commit(any(DevMachine.class), any(Path.class), anyString(), anyBoolean(), any(Path[].class), anyBoolean())) .thenReturn(revisionPromise); + when(service.diff(any(DevMachine.class), + any(Path.class), + eq(null), + any(DiffType.class), + anyBoolean(), + anyInt(), + anyString(), + anyBoolean())).thenReturn(stringPromise); + when(service.branchList(any(DevMachine.class), any(Path.class), any(BranchListMode.class))).thenReturn(branchListPromise); + when(service.push(any(DevMachine.class), any(Path.class), anyList(), anyString(), anyBoolean())).thenReturn(pushPromise); } @Test - public void testShowDialog() throws Exception { + public void shouldShowMessageWhenNothingToCommit() throws Exception { + MessageDialog dialog = mock(MessageDialog.class); + when(dialogFactory.createMessageDialog(anyString(), anyString(), eq(null))).thenReturn(dialog); + presenter.showDialog(project); + verify(stringPromise).then(stringCaptor.capture()); + stringCaptor.getValue().apply(""); + + verify(dialog).show(); + } - verify(view).setAmend(eq(!IS_OVERWRITTEN)); - verify(view).setAddAllExceptNew(eq(!ALL_FILE_INCLUDES)); + @Test + public void shouldShowDialog() throws Exception { + presenter.showDialog(project); + + verify(stringPromise).then(stringCaptor.capture()); + stringCaptor.getValue().apply("M file"); + + verify(changedPanelPresenter).show(eq(singletonMap("file", MODIFIED)), eq(null)); verify(view).focusInMessageField(); verify(view).setEnableCommitButton(eq(DISABLE_BUTTON)); verify(view).getMessage(); verify(view).showDialog(); + verify(view).checkCheckBoxes(anySet()); } @Test - public void testShowDialogWithExistingMessage() throws Exception { + public void shouldEnableCommitButton() throws Exception { when(view.getMessage()).thenReturn("foo"); presenter.showDialog(project); - verify(view).setAmend(eq(!IS_OVERWRITTEN)); - verify(view).setAddAllExceptNew(eq(!ALL_FILE_INCLUDES)); - verify(view).focusInMessageField(); + verify(stringPromise).then(stringCaptor.capture()); + stringCaptor.getValue().apply("M file"); + verify(view).setEnableCommitButton(eq(ENABLE_BUTTON)); - verify(view).getMessage(); - verify(view).showDialog(); } @Test - public void testOnCancelClicked() throws Exception { + public void shouldCloseWhenCancelButtonClicked() throws Exception { presenter.onCancelClicked(); verify(view).close(); } @Test - public void testOnValueChangedWhenCommitMessageEmpty() throws Exception { + public void shouldDisableCommitButtonOnEmptyMessage() throws Exception { when(view.getMessage()).thenReturn(EMPTY_TEXT); presenter.onValueChanged(); @@ -125,7 +166,17 @@ public void testOnValueChangedWhenCommitMessageEmpty() throws Exception { } @Test - public void shouldPrintSuccessMessageOnCommitSuccess() throws Exception { + public void shouldEnableCommitButtonOnAmendAndNoFilesChecked() throws Exception { + when(view.getMessage()).thenReturn(COMMIT_TEXT); + when(view.isAmend()).thenReturn(true); + + presenter.onValueChanged(); + + verify(view).setEnableCommitButton(eq(ENABLE_BUTTON)); + } + + @Test + public void shouldPrintSuccessMessageOnAddToIndexAndCommitSuccess() throws Exception { Revision revision = mock(Revision.class); GitUser gitUser = mock(GitUser.class); when(gitUser.getName()).thenReturn("commiterName"); @@ -135,20 +186,25 @@ public void shouldPrintSuccessMessageOnCommitSuccess() throws Exception { when(constant.commitUser(anyString())).thenReturn("commitUser"); presenter.showDialog(project); - presenter.doCommit(COMMIT_TEXT, true, true, true); + presenter.onCommitClicked(); + verify(voidPromise).then(voidPromiseCaptor.capture()); + voidPromiseCaptor.getValue().apply(null); verify(revisionPromise).then(revisionCaptor.capture()); revisionCaptor.getValue().apply(revision); verify(console).print("commitMessage commitUser"); verify(notificationManager).notify("commitMessage commitUser"); + verify(view).close(); } @Test - public void shouldPrintFailMessageOnCommitFailed() throws Exception { + public void shouldPrintFailMessageOnOnAddToIndexSuccessButCommitFailed() throws Exception { when(constant.commitFailed()).thenReturn("commitFailed"); presenter.showDialog(project); - presenter.doCommit(COMMIT_TEXT, true, true, true); + presenter.onCommitClicked(); + verify(voidPromise).then(voidPromiseCaptor.capture()); + voidPromiseCaptor.getValue().apply(null); verify(revisionPromise).catchError(promiseErrorCaptor.capture()); promiseErrorCaptor.getValue().apply(promiseError); @@ -157,37 +213,50 @@ public void shouldPrintFailMessageOnCommitFailed() throws Exception { } @Test - public void shouldAddAndCommitIfAddSelectedIsSetToTrue() throws Exception { - when(view.isAddSelectedFiles()).thenReturn(true); - doNothing().when(presenter).doCommit(anyString(), anyBoolean(), anyBoolean(), anyBoolean()); + public void shouldShowErrorNotificationOnAddToIndexFailed() throws Exception { + when(constant.addFailed()).thenReturn("addFailed"); presenter.showDialog(project); presenter.onCommitClicked(); - verify(voidPromise).then(voidPromiseCaptor.capture()); - voidPromiseCaptor.getValue().apply(null); + verify(voidPromise).catchError(promiseErrorCaptor.capture()); + promiseErrorCaptor.getValue().apply(promiseError); - verify(service).add(any(DevMachine.class), any(Path.class), anyBoolean(), any(Path[].class)); - verify(presenter).doCommit(anyString(), anyBoolean(), anyBoolean(), anyBoolean()); + verify(notificationManager).notify(eq("addFailed"), eq(FAIL), eq(FLOAT_MODE)); } @Test - public void shouldNotAddBeforeCommitIfAddSelectedIsSetToFalse() throws Exception { - when(view.isAddSelectedFiles()).thenReturn(false); - doNothing().when(presenter).doCommit(anyString(), anyBoolean(), anyBoolean(), anyBoolean()); + public void shouldShowPushSuccessNotificationIfPushAfterCommitChecked() throws Exception { + when(constant.pushSuccess(anyString())).thenReturn("pushSuccess"); + when(view.isPushAfterCommit()).thenReturn(true); + when(view.getRemoteBranch()).thenReturn("origin/master"); presenter.showDialog(project); presenter.onCommitClicked(); + verify(voidPromise).then(voidPromiseCaptor.capture()); + voidPromiseCaptor.getValue().apply(null); + verify(revisionPromise).then(revisionCaptor.capture()); + revisionCaptor.getValue().apply(mock(Revision.class)); + verify(pushPromise).then(pushPromiseCaptor.capture()); + pushPromiseCaptor.getValue().apply(null); - verify(service, never()).add(any(DevMachine.class), any(Path.class), anyBoolean(), any(Path[].class)); - verify(presenter).doCommit(anyString(), anyBoolean(), anyBoolean(), anyBoolean()); + verify(notificationManager).notify(eq("pushSuccess"), eq(SUCCESS), eq(FLOAT_MODE)); } @Test - public void testOnValueChanged() throws Exception { - when(view.getMessage()).thenReturn(COMMIT_TEXT); + public void shouldShowPushFailedNotification() throws Exception { + when(constant.pushFail()).thenReturn("pushFail"); + when(view.isPushAfterCommit()).thenReturn(true); + when(view.getRemoteBranch()).thenReturn("origin/master"); - presenter.onValueChanged(); + presenter.showDialog(project); + presenter.onCommitClicked(); + verify(voidPromise).then(voidPromiseCaptor.capture()); + voidPromiseCaptor.getValue().apply(null); + verify(revisionPromise).then(revisionCaptor.capture()); + revisionCaptor.getValue().apply(mock(Revision.class)); + verify(pushPromise).catchError(promiseErrorCaptor.capture()); + promiseErrorCaptor.getValue().apply(promiseError); - verify(view).setEnableCommitButton(eq(!DISABLE_BUTTON)); + verify(notificationManager).notify(eq("pushFail"), eq(FAIL), eq(FLOAT_MODE)); } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenterTest.java b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenterTest.java index e0ea0072baa..208e6f6d2ad 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenterTest.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenterTest.java @@ -24,7 +24,7 @@ import org.eclipse.che.ide.commons.exception.ServerException; import org.eclipse.che.ide.ext.git.client.BaseTest; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; -import org.eclipse.che.ide.ext.git.client.compare.changedList.ChangedListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListPresenter; import org.eclipse.che.ide.resource.Path; import org.junit.Test; import org.mockito.InjectMocks; From ffd4f3f884bb67a0c0ba9f5b370fe40a0371c06e Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Wed, 17 May 2017 09:30:41 +0300 Subject: [PATCH 2/9] fixup! CHE-3614: Rework Git commit window --- .../git/client/commit/CommitPresenter.java | 76 ++++++++++++++----- .../ide/ext/git/client/commit/CommitView.java | 30 ++++++++ .../ext/git/client/commit/CommitViewImpl.java | 25 ++++++ .../changedpanel/ChangedPanelPresenter.java | 15 +++- .../changedpanel/ChangedPanelView.java | 13 ++++ .../changedpanel/ChangedPanelViewImpl.java | 10 +++ .../client/GitLocalizationConstant.properties | 6 +- .../client/commit/CommitPresenterTest.java | 69 +++++++++++++++-- 8 files changed, 213 insertions(+), 31 deletions(-) diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java index 5c21cbd3a59..8dd0ce7b45c 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java @@ -15,6 +15,7 @@ import org.eclipse.che.api.core.ErrorCodes; import org.eclipse.che.api.git.shared.Revision; +import org.eclipse.che.commons.annotation.Nullable; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.api.dialogs.DialogFactory; import org.eclipse.che.ide.api.git.GitServiceClient; @@ -40,8 +41,10 @@ import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkState; +import static com.google.common.base.Strings.isNullOrEmpty; import static java.util.Arrays.stream; import static java.util.Collections.singletonList; +import static java.util.stream.Collectors.joining; import static org.eclipse.che.api.git.shared.BranchListMode.LIST_REMOTE; import static org.eclipse.che.api.git.shared.DiffType.NAME_STATUS; import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.FLOAT_MODE; @@ -111,26 +114,45 @@ public void showDialog(Project project) { checkState(project.getLocation().isPrefixOf(appContext.getResource().getLocation()), "Given selected item is not descendant of given project"); + view.setValueToAmendCheckBox(false); + view.setValueToPushAfterCommitCheckBox(false); + view.setEnableAmendCheckBox(true); + view.setEnablePushAfterCommitCheckBox(true); + view.setEnableRemoteBranchesDropDownLis(false); service.diff(appContext.getDevMachine(), project.getLocation(), null, NAME_STATUS, false, 0, "HEAD", false) .then(diff -> { - if (diff.isEmpty()) { - dialogFactory.createMessageDialog(constant.commitTitle(), constant.commitNothingToCommitMessageText(), null).show(); - } else { - final String[] changedFiles = diff.split("\n"); - Map items = new HashMap<>(); - for (String item : changedFiles) { - items.put(item.substring(2, item.length()), defineStatus(item.substring(0, 1))); - } - filesToCommit.clear(); - allFiles = items.keySet(); - - view.setEnableCommitButton(!view.getMessage().isEmpty()); - view.focusInMessageField(); - view.showDialog(); - view.checkCheckBoxes(stream(appContext.getResources()).map(resource -> resource.getLocation().removeFirstSegments(1)) - .collect(Collectors.toSet())); - changedPanelPresenter.show(items, null); - } + service.log(appContext.getDevMachine(), project.getLocation(), null, -1, -1, false) + .then(arg -> { + if (diff.isEmpty()) { + dialogFactory.createConfirmDialog(constant.commitTitle(), + constant.commitNothingToCommitMessageText(), + constant.buttonYes(), + constant.buttonNo(), + () -> { + view.setValueToAmendCheckBox(true); + view.setEnablePushAfterCommitCheckBox(false); + setAmendCommitMessage(); + show(null); + }, + null) + .show(); + } else { + show(diff); + } + }) + .catchError(error -> { + if (getErrorCode(error.getCause()) == ErrorCodes.INIT_COMMIT_WAS_NOT_PERFORMED) { + service.getStatus(appContext.getDevMachine(), project.getLocation()).then( + status -> { + view.setEnableAmendCheckBox(false); + view.setEnablePushAfterCommitCheckBox(false); + List newFiles = new ArrayList<>(); + newFiles.addAll(status.getAdded()); + newFiles.addAll(status.getUntracked()); + show(newFiles.stream().collect(joining("\nA ", "A ", ""))); + }); + } + }); }) .catchError(arg -> { notificationManager.notify(constant.diffFailed(), FAIL, FLOAT_MODE); @@ -143,6 +165,22 @@ public void showDialog(Project project) { }); } + private void show(@Nullable String diff) { + Map items = new HashMap<>(); + if (!isNullOrEmpty(diff)) { + stream(diff.split("\n")).forEach(item -> items.put(item.substring(2, item.length()), defineStatus(item.substring(0, 1)))); + } + filesToCommit.clear(); + allFiles = items.keySet(); + + view.setEnableCommitButton(!view.getMessage().isEmpty()); + view.focusInMessageField(); + view.showDialog(); + changedPanelPresenter.show(items, null); + view.checkCheckBoxes(stream(appContext.getResources()).map(resource -> resource.getLocation().removeFirstSegments(1)) + .collect(Collectors.toSet())); + } + @Override public void onCommitClicked() { DevMachine devMachine = appContext.getDevMachine(); @@ -199,7 +237,7 @@ public void onValueChanged() { @Override public void setAmendCommitMessage() { - service.log(appContext.getDevMachine(), project.getLocation(), null, false) + service.log(appContext.getDevMachine(), project.getLocation(), null, -1, -1, false) .then(log -> { final List commits = log.getCommits(); String message = ""; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java index f3e5c6946ed..a00ae49b1d4 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java @@ -79,6 +79,36 @@ interface ActionDelegate { /** Returns true if need to amend the last commit, and false otherwise */ boolean isAmend(); + /** Set checked or unchecked the 'Amend' checkbox. */ + void setValueToAmendCheckBox(boolean value); + + /** Set checked or unchecked the 'Push after commit' checkbox. */ + void setValueToPushAfterCommitCheckBox(boolean value); + + /** + * Change the enable state of the 'Amend' check-box. + * + * @param enable + * true to enable the check-box, false to disable it + */ + void setEnableAmendCheckBox(boolean enable); + + /** + * Change the enable state of the 'Push after commit' check-box. + * + * @param enable + * true to enable the check-box, false to disable it + */ + void setEnablePushAfterCommitCheckBox(boolean enable); + + /** + * Change the enable state of the 'Remote branches' drop-down list. + * + * @param enable + * true to enable the drop-down list, false to disable it + */ + void setEnableRemoteBranchesDropDownLis(boolean enable); + /** Returns true if need to push after commit, and false otherwise */ boolean isPushAfterCommit(); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java index 4c7ea76c5d6..6ee61296d18 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java @@ -151,6 +151,31 @@ public boolean isAmend() { return amend.getValue(); } + @Override + public void setValueToAmendCheckBox(boolean value) { + amend.setValue(value); + } + + @Override + public void setValueToPushAfterCommitCheckBox(boolean value) { + pushAfterCommit.setValue(value); + } + + @Override + public void setEnableAmendCheckBox(boolean enable) { + amend.setEnabled(enable); + } + + @Override + public void setEnablePushAfterCommitCheckBox(boolean enable) { + pushAfterCommit.setEnabled(enable); + } + + @Override + public void setEnableRemoteBranchesDropDownLis(boolean enable) { + remoteBranches.setEnabled(enable); + } + @Override public boolean isPushAfterCommit() { return pushAfterCommit.getValue(); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java index 34f49301ca9..486144b2382 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java @@ -58,7 +58,7 @@ public ChangedPanelPresenter(GitLocalizationConstant locale, } /** - * Show panel with changed files. + * Show panel with changed files. If empty map with changed files is received, all buttons would be disabled. * * @param changedFiles * Map with files and their status @@ -66,9 +66,16 @@ public ChangedPanelPresenter(GitLocalizationConstant locale, public void show(Map changedFiles, @Nullable CallBack callBack) { this.changedFiles = changedFiles; this.callBack = callBack; - view.setEnableExpandCollapseButtons(treeViewEnabled); - - viewChangedFiles(); + if (changedFiles.isEmpty()) { + view.setTextToChangeViewModeButton(locale.changeListRowListViewButtonText()); + view.setEnabledChangeViewModeButton(false); + view.setEnableExpandCollapseButtons(false); + view.clearNodeStorage(); + } else { + view.setEnabledChangeViewModeButton(true); + view.setEnableExpandCollapseButtons(treeViewEnabled); + viewChangedFiles(); + } } public ChangedPanelView getView() { diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java index 911f19ce66f..322f8d24cd3 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java @@ -61,6 +61,11 @@ interface ActionDelegate { */ void viewChangedFilesAsList(Map files); + /** + * Clear panel from old nodes. + */ + void clearNodeStorage(); + /** * View changed files as tree. * @@ -83,6 +88,14 @@ interface ActionDelegate { */ void setEnableExpandCollapseButtons(boolean enabled); + /** + * Change the enable state of the button that changes view mode of changed files. + * + * @param enabled + * true to enable the button, false to disable it + */ + void setEnabledChangeViewModeButton(boolean enabled); + /** * Set displayed text to button that changes view mode of changed files. * diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java index af4dddc1d54..13d11a6a9df 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java @@ -111,6 +111,11 @@ public void viewChangedFilesAsList(@NotNull Map items) { items.keySet().forEach(file -> nodeStorage.add(new ChangedFileNode(file, items.get(file), nodesResources, delegate, false))); } + @Override + public void clearNodeStorage() { + tree.getNodeStorage().clear(); + } + @Override public void viewChangedFilesAsTree(@NotNull Map items) { NodeStorage nodeStorage = tree.getNodeStorage(); @@ -135,6 +140,11 @@ public void setEnableExpandCollapseButtons(boolean enabled) { collapseButton.setEnabled(enabled); } + @Override + public void setEnabledChangeViewModeButton(boolean enabled) { + changeViewModeButton.setEnabled(enabled); + } + @Override public void setTextToChangeViewModeButton(String text) { changeViewModeButton.setText(text); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties index 7a6be60378e..eb25f92042e 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties @@ -151,7 +151,7 @@ view.commit.grid.date=Date view.commit.grid.commiter=Committer view.commit.grid.comment=Comment view.commit.push.checkbox.title=Push commited changes to : -view.commit.nothing_to_commit.text=Nothing to commit, working directory clean +view.commit.nothing_to_commit.text=Nothing to commit, working directory clean, Would you like to perform amend commit? #Create view.create.title=Initialize local repository @@ -235,8 +235,8 @@ control.branches.title=Branches... control.branches.prompt=Work With Branches... control.delete.title=Delete Repository... control.delete.prompt=Delete Git Repository... -control.commit.title=Commit selected... -control.commit.prompt=Commit selected... +control.commit.title=Commit ... +control.commit.prompt=Commit ... control.fetch.title=Fetch... control.fetch.prompt=Fetch Data from Remote Repository... control.init.title=Initialize Repository... diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java index ef79ea57f23..9112d9fdf1d 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java @@ -10,15 +10,20 @@ *******************************************************************************/ package org.eclipse.che.ide.ext.git.client.commit; +import org.eclipse.che.api.core.ErrorCodes; import org.eclipse.che.api.git.shared.BranchListMode; import org.eclipse.che.api.git.shared.DiffType; import org.eclipse.che.api.git.shared.GitUser; import org.eclipse.che.api.git.shared.Revision; +import org.eclipse.che.api.git.shared.Status; import org.eclipse.che.api.promises.client.Operation; -import org.eclipse.che.ide.api.dialogs.MessageDialog; +import org.eclipse.che.api.promises.client.PromiseError; +import org.eclipse.che.ide.api.dialogs.ConfirmCallback; +import org.eclipse.che.ide.api.dialogs.ConfirmDialog; import org.eclipse.che.ide.api.machine.DevMachine; import org.eclipse.che.ide.api.resources.Project; import org.eclipse.che.ide.api.resources.Resource; +import org.eclipse.che.ide.commons.exception.ServerException; import org.eclipse.che.ide.ext.git.client.BaseTest; import org.eclipse.che.ide.ext.git.client.DateTimeFormatter; import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelPresenter; @@ -26,10 +31,12 @@ import org.junit.Test; import org.mockito.Mock; +import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.FLOAT_MODE; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.SUCCESS; +import static org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status.ADDED; import static org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status.MODIFIED; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; @@ -96,6 +103,9 @@ public void disarm() { when(branchListPromise.then(any(Operation.class))).thenReturn(branchListPromise); when(branchListPromise.catchError(any(Operation.class))).thenReturn(branchListPromise); when(pushPromise.then(any(Operation.class))).thenReturn(pushPromise); + when(logPromise.then(any(Operation.class))).thenReturn(logPromise); + when(logPromise.catchError(any(Operation.class))).thenReturn(logPromise); + when(statusPromise.then(any(Operation.class))).thenReturn(statusPromise); when(service.add(any(DevMachine.class), any(Path.class), anyBoolean(), any(Path[].class))).thenReturn(voidPromise); when(service.commit(any(DevMachine.class), any(Path.class), anyString(), anyBoolean(), any(Path[].class), anyBoolean())) .thenReturn(revisionPromise); @@ -109,27 +119,47 @@ public void disarm() { anyBoolean())).thenReturn(stringPromise); when(service.branchList(any(DevMachine.class), any(Path.class), any(BranchListMode.class))).thenReturn(branchListPromise); when(service.push(any(DevMachine.class), any(Path.class), anyList(), anyString(), anyBoolean())).thenReturn(pushPromise); + when(service.log(any(DevMachine.class), any(Path.class), eq(null), anyInt(), anyInt(), anyBoolean())).thenReturn(logPromise); + when(service.getStatus(any(DevMachine.class), any(Path.class))).thenReturn(statusPromise); } @Test public void shouldShowMessageWhenNothingToCommit() throws Exception { - MessageDialog dialog = mock(MessageDialog.class); - when(dialogFactory.createMessageDialog(anyString(), anyString(), eq(null))).thenReturn(dialog); + ConfirmDialog dialog = mock(ConfirmDialog.class); + when(dialogFactory.createConfirmDialog(anyString(), + anyString(), + anyString(), + anyString(), + any(ConfirmCallback.class), + eq(null))).thenReturn(dialog); presenter.showDialog(project); verify(stringPromise).then(stringCaptor.capture()); stringCaptor.getValue().apply(""); + verify(logPromise).then(logCaptor.capture()); + logCaptor.getValue().apply(null); verify(dialog).show(); } @Test public void shouldShowDialog() throws Exception { - presenter.showDialog(project); + ConfirmDialog dialog = mock(ConfirmDialog.class); + when(dialogFactory.createConfirmDialog(anyString(), + anyString(), + anyString(), + anyString(), + any(ConfirmCallback.class), + eq(null))).thenReturn(dialog); + presenter.showDialog(project); verify(stringPromise).then(stringCaptor.capture()); stringCaptor.getValue().apply("M file"); + verify(logPromise).then(logCaptor.capture()); + logCaptor.getValue().apply(null); + verify(view).setEnableAmendCheckBox(true); + verify(view).setEnablePushAfterCommitCheckBox(true); verify(changedPanelPresenter).show(eq(singletonMap("file", MODIFIED)), eq(null)); verify(view).focusInMessageField(); verify(view).setEnableCommitButton(eq(DISABLE_BUTTON)); @@ -138,13 +168,42 @@ public void shouldShowDialog() throws Exception { verify(view).checkCheckBoxes(anySet()); } + @Test + public void shouldShowUntrackedFilesOnInitialCommit() throws Exception { + PromiseError error = mock(PromiseError.class); + ServerException exception = mock(ServerException.class); + when(exception.getErrorCode()).thenReturn(ErrorCodes.INIT_COMMIT_WAS_NOT_PERFORMED); + when(error.getCause()).thenReturn(exception); + Status status = mock(Status.class); + when(status.getUntracked()).thenReturn(singletonList("file")); + + presenter.showDialog(project); + verify(stringPromise).then(stringCaptor.capture()); + stringCaptor.getValue().apply(null); + verify(logPromise).catchError(promiseErrorCaptor.capture()); + promiseErrorCaptor.getValue().apply(error); + verify(statusPromise).then(statusPromiseCaptor.capture()); + statusPromiseCaptor.getValue().apply(status); + + verify(view).setEnableAmendCheckBox(false); + verify(view).setEnablePushAfterCommitCheckBox(false); + verify(changedPanelPresenter).show(eq(singletonMap("file", ADDED)), eq(null)); + verify(view).focusInMessageField(); + verify(view).setEnableCommitButton(eq(DISABLE_BUTTON)); + verify(view).getMessage(); + verify(view).showDialog(); + verify(view).checkCheckBoxes(anySet()); + } + @Test public void shouldEnableCommitButton() throws Exception { when(view.getMessage()).thenReturn("foo"); - presenter.showDialog(project); + presenter.showDialog(project); verify(stringPromise).then(stringCaptor.capture()); stringCaptor.getValue().apply("M file"); + verify(logPromise).then(logCaptor.capture()); + logCaptor.getValue().apply(null); verify(view).setEnableCommitButton(eq(ENABLE_BUTTON)); } From 0aaa755f4c1fe6b6f74a9fc325547636b035e935 Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Fri, 19 May 2017 09:40:22 +0300 Subject: [PATCH 3/9] fixup! CHE-3614: Rework Git commit window --- .../che/ide/ext/git/client/commit/CommitViewImpl.java | 1 + .../che/ide/ext/git/client/commit/CommitViewImpl.ui.xml | 2 +- .../client/compare/changedpanel/ChangedPanelViewImpl.java | 7 +++---- .../compare/changedpanel/ChangedPanelViewImpl.ui.xml | 2 +- .../ide/ext/git/client/GitLocalizationConstant.properties | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java index 6ee61296d18..e34749adf61 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java @@ -107,6 +107,7 @@ protected CommitViewImpl(GitResources res, pushAfterCommit = new CheckBox(); pushAfterCommit.setHTML(locale.commitPushCheckboxTitle()); + pushAfterCommit.ensureDebugId("git-commit-push_after_commit"); pushAfterCommit.addValueChangeHandler(event -> remoteBranches.setEnabled(event.getValue())); pushAfterCommit.addStyleName(res.gitCSS().spacing()); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml index 79874468a19..b4dc86854e1 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml @@ -26,7 +26,7 @@ - + diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java index 13d11a6a9df..7036e7d05e6 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java @@ -36,6 +36,7 @@ import javax.validation.constraints.NotNull; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -242,7 +243,7 @@ private List fetchGroupedNodes(Map items) { nodesToNest.add(preparedNodes.remove(nestedItem)); } } - if (nodesToNest.isEmpty()) { + if (nodesToNest.isEmpty() && !parentPath.isEmpty()) { continue; } nodesToNest.sort(new NameComparator()); @@ -256,9 +257,7 @@ private List fetchGroupedNodes(Map items) { } } } - ArrayList nodes = new ArrayList<>(preparedNodes.values()); - nodes.sort(new NameComparator()); - return new ArrayList<>(nodes); + return null; } private String getTransitFolderName(List allPaths, String comparedPath) { diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml index cd69a1de781..ae461ed7638 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml @@ -30,7 +30,7 @@ - + diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties index eb25f92042e..fbac4ca3127 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties @@ -173,7 +173,7 @@ view.compare.read.only.title=(Read-only) #ChangeList view.change.list.title=Git Compare -view.change.list.group.by.directory.button.text=Group by directory +view.change.list.group.by.directory.button.text=Group by directories view.change.list.row.list.view.button.text=View as list view.change.list.expand.all.button.title=Expand all directories view.change.list.collapse.all.button.title=Collapse all directories From 163907f1fb5e856f3f5c068796eae081cc1333be Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Fri, 19 May 2017 13:28:23 +0300 Subject: [PATCH 4/9] fixup! CHE-3614: Rework Git commit window --- .../git/client/compare/changedpanel/ChangedPanelViewImpl.java | 4 +++- .../client/compare/changedpanel/ChangedPanelViewImpl.ui.xml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java index 7036e7d05e6..5bf1e529544 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java @@ -257,7 +257,9 @@ private List fetchGroupedNodes(Map items) { } } } - return null; + ArrayList nodes = new ArrayList<>(preparedNodes.values()); + nodes.sort(new NameComparator()); + return new ArrayList<>(nodes); } private String getTransitFolderName(List allPaths, String comparedPath) { diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml index ae461ed7638..39b15dfcd96 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml @@ -24,7 +24,7 @@ - + From 942e659bdbe3c879c82e5f0e2634165fe484cea8 Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Mon, 22 May 2017 11:17:29 +0300 Subject: [PATCH 5/9] fixup! CHE-3614: Rework Git commit window --- .../git/client/commit/CommitPresenter.java | 104 ++++++++++-------- .../ext/git/client/commit/CommitViewImpl.java | 24 ++-- .../client/GitLocalizationConstant.properties | 4 +- 3 files changed, 74 insertions(+), 58 deletions(-) diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java index 8dd0ce7b45c..18887869287 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java @@ -40,8 +40,8 @@ import java.util.Set; import java.util.stream.Collectors; -import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Strings.isNullOrEmpty; +import static com.google.common.collect.Iterables.getFirst; import static java.util.Arrays.stream; import static java.util.Collections.singletonList; import static java.util.stream.Collectors.joining; @@ -110,10 +110,6 @@ public CommitPresenter(final CommitView view, public void showDialog(Project project) { this.project = project; - checkState(project != null, "Null project occurred"); - checkState(project.getLocation().isPrefixOf(appContext.getResource().getLocation()), - "Given selected item is not descendant of given project"); - view.setValueToAmendCheckBox(false); view.setValueToPushAfterCommitCheckBox(false); view.setEnableAmendCheckBox(true); @@ -121,21 +117,10 @@ public void showDialog(Project project) { view.setEnableRemoteBranchesDropDownLis(false); service.diff(appContext.getDevMachine(), project.getLocation(), null, NAME_STATUS, false, 0, "HEAD", false) .then(diff -> { - service.log(appContext.getDevMachine(), project.getLocation(), null, -1, -1, false) + service.log(appContext.getDevMachine(), project.getLocation(), null, -1, 1, false) .then(arg -> { if (diff.isEmpty()) { - dialogFactory.createConfirmDialog(constant.commitTitle(), - constant.commitNothingToCommitMessageText(), - constant.buttonYes(), - constant.buttonNo(), - () -> { - view.setValueToAmendCheckBox(true); - view.setEnablePushAfterCommitCheckBox(false); - setAmendCommitMessage(); - show(null); - }, - null) - .show(); + showAskForAmendDialog(); } else { show(diff); } @@ -165,28 +150,47 @@ public void showDialog(Project project) { }); } + private void showAskForAmendDialog() { + dialogFactory.createConfirmDialog(constant.commitTitle(), + constant.commitNothingToCommitMessageText(), + constant.buttonYes(), + constant.buttonNo(), + () -> { + view.setValueToAmendCheckBox(true); + view.setEnablePushAfterCommitCheckBox(false); + setAmendCommitMessage(); + show(null); + }, + null) + .show(); + } + private void show(@Nullable String diff) { - Map items = new HashMap<>(); - if (!isNullOrEmpty(diff)) { - stream(diff.split("\n")).forEach(item -> items.put(item.substring(2, item.length()), defineStatus(item.substring(0, 1)))); - } + Map files = toFileStatusMap(diff); filesToCommit.clear(); - allFiles = items.keySet(); + allFiles = files.keySet(); view.setEnableCommitButton(!view.getMessage().isEmpty()); view.focusInMessageField(); view.showDialog(); - changedPanelPresenter.show(items, null); + changedPanelPresenter.show(files, null); view.checkCheckBoxes(stream(appContext.getResources()).map(resource -> resource.getLocation().removeFirstSegments(1)) .collect(Collectors.toSet())); } + private Map toFileStatusMap(@Nullable String diff) { + Map items = new HashMap<>(); + if (!isNullOrEmpty(diff)) { + stream(diff.split("\n")).forEach(item -> items.put(item.substring(2, item.length()), defineStatus(item.substring(0, 1)))); + } + return items; + } + @Override public void onCommitClicked() { DevMachine devMachine = appContext.getDevMachine(); Path location = project.getLocation(); - Path[] filesToCommitArray = new Path[filesToCommit.size()]; - filesToCommit.forEach(file -> filesToCommitArray[filesToCommit.indexOf(file)] = Path.valueOf(file)); + Path[] filesToCommitArray = getFilesToCommitArray(); service.add(devMachine, location, false, filesToCommitArray) .then(arg -> { @@ -199,20 +203,7 @@ public void onCommitClicked() { .then(revision -> { onCommitSuccess(revision); if (view.isPushAfterCommit()) { - String remoteBranch = view.getRemoteBranch(); - String remote = remoteBranch.split("/")[0]; - String branch = remoteBranch.split("/")[1]; - service.push(devMachine, - location, - singletonList(branch), - remote, - false) - .then(result -> { - notificationManager.notify(constant.pushSuccess(remote), SUCCESS, FLOAT_MODE); - }) - .catchError(error -> { - notificationManager.notify(constant.pushFail(), FAIL, FLOAT_MODE); - }); + push(devMachine, location); } view.close(); }) @@ -225,6 +216,30 @@ public void onCommitClicked() { }); } + private Path[] getFilesToCommitArray() { + Path[] filesToCommitArray = new Path[filesToCommit.size()]; + filesToCommit.forEach(file -> filesToCommitArray[filesToCommit.indexOf(file)] = Path.valueOf(file)); + + return filesToCommitArray; + } + + private void push(DevMachine devMachine, Path location) { + String remoteBranch = view.getRemoteBranch(); + String remote = remoteBranch.split("/")[0]; + String branch = remoteBranch.split("/")[1]; + service.push(devMachine, + location, + singletonList(branch), + remote, + false) + .then(result -> { + notificationManager.notify(constant.pushSuccess(remote), SUCCESS, FLOAT_MODE); + }) + .catchError(error -> { + notificationManager.notify(constant.pushFail(), FAIL, FLOAT_MODE); + }); + } + @Override public void onCancelClicked() { view.close(); @@ -239,13 +254,10 @@ public void onValueChanged() { public void setAmendCommitMessage() { service.log(appContext.getDevMachine(), project.getLocation(), null, -1, -1, false) .then(log -> { - final List commits = log.getCommits(); String message = ""; - if (commits != null && (!commits.isEmpty())) { - final Revision tip = commits.get(0); - if (tip != null) { - message = tip.getMessage(); - } + final Revision revision = getFirst(log.getCommits(), null); + if (revision != null) { + message = revision.getMessage(); } CommitPresenter.this.view.setMessage(message); CommitPresenter.this.view.setEnableCommitButton(!message.isEmpty()); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java index e34749adf61..44731439eba 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java @@ -46,13 +46,13 @@ import java.util.Comparator; import java.util.HashSet; import java.util.List; -import java.util.Optional; import java.util.Set; /** * The implementation of {@link CommitView}. * * @author Andrey Plotnikov + * @author Igor Vinokur */ @Singleton public class CommitViewImpl extends Window implements CommitView { @@ -263,23 +263,29 @@ private class ChangedPanelRender extends DefaultPresentationRenderer { @Override public Element render(final Node node, final String domID, final Tree.Joint joint, final int depth) { - Element rootContainer = super.render(node, domID, joint, depth); - Element nodeContainer = rootContainer.getFirstChildElement(); + //Initialize HTML elements. + final Element rootContainer = super.render(node, domID, joint, depth); + final Element nodeContainer = rootContainer.getFirstChildElement(); final Element checkBoxElement = new CheckBox().getElement(); final InputElement checkBoxInputElement = (InputElement)checkBoxElement.getElementsByTagName("input").getItem(0); + + //Set check-box state. final Path nodePath = node instanceof ChangedFileNode ? Path.valueOf(node.getName()) : ((ChangedFolderNode)node).getPath(); checkBoxInputElement.setChecked(!unselectedNodePaths.contains(nodePath)); + + //Add check-box click handler. Event.sinkEvents(checkBoxElement, Event.ONCLICK); Event.setEventListener(checkBoxElement, event -> { if (Event.ONCLICK == event.getTypeInt() && event.getTarget().getTagName().equalsIgnoreCase("label")) { handleNodeCheckBox(nodePath, checkBoxInputElement.isChecked()); - changedPanelView.refreshNodes(); delegate.onValueChanged(); } }); + //Paste check-box element to node container. nodeContainer.insertAfter(checkBoxElement, nodeContainer.getFirstChild()); + return rootContainer; } @@ -314,12 +320,10 @@ private void saveCheckBoxSelection(boolean checkBoxValue, Path path) { } private boolean hasSelectedChildes(Path givenPath) { - Optional optional = allNodePaths.stream() - .filter(path -> givenPath.isPrefixOf(path) && - !path.equals(givenPath) && - !unselectedNodePaths.contains(path)) - .findAny(); - return optional.isPresent(); + return allNodePaths.stream() + .anyMatch(path -> givenPath.isPrefixOf(path) && + !path.equals(givenPath) && + !unselectedNodePaths.contains(path)); } } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties index fbac4ca3127..5c832f41c16 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties @@ -150,8 +150,8 @@ view.commit.amend_field_title=Amend previous commit view.commit.grid.date=Date view.commit.grid.commiter=Committer view.commit.grid.comment=Comment -view.commit.push.checkbox.title=Push commited changes to : -view.commit.nothing_to_commit.text=Nothing to commit, working directory clean, Would you like to perform amend commit? +view.commit.push.checkbox.title=Push committed changes to : +view.commit.nothing_to_commit.text=Nothing to commit, working directory is clean, Would you like to perform amend commit? #Create view.create.title=Initialize local repository From 670237a3bebf36256578490641b902b016a3b3a1 Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Mon, 22 May 2017 15:12:55 +0300 Subject: [PATCH 6/9] fixup! CHE-3614: Rework Git commit window --- .../eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java index 44731439eba..aa7e7b433e5 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java @@ -236,8 +236,7 @@ public void setChangedPanelView(ChangedPanelView changedPanelView) { } @Override - public void - checkCheckBoxes(Set paths) { + public void checkCheckBoxes(Set paths) { render.setNodePaths(changedPanelView.getNodePaths()); paths.forEach(path -> render.handleNodeCheckBox(path, false)); } From ad233c0a191062ff6627162ab30af00ec4124e89 Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Wed, 24 May 2017 10:18:58 +0300 Subject: [PATCH 7/9] fixup! CHE-3614: Rework Git commit window --- .../action/CompareWithLatestAction.java | 10 ++-- .../git/client/commit/CommitPresenter.java | 18 +++--- .../ide/ext/git/client/commit/CommitView.java | 6 +- .../ext/git/client/commit/CommitViewImpl.java | 60 ++++++++++--------- .../git/client/commit/CommitViewImpl.ui.xml | 2 +- .../branchlist/BranchListPresenter.java | 10 ++-- .../client/compare/changedpanel/CallBack.java | 24 -------- .../ChangesListPresenter.java} | 46 ++++++++------ .../ChangesListView.java} | 12 ++-- .../ChangesListViewImpl.java} | 20 +++---- .../ChangesListViewImpl.ui.xml} | 2 +- .../ChangedFileNode.java | 4 +- .../ChangedFolderNode.java | 2 +- .../ChangesPanelPresenter.java} | 50 ++++++---------- .../ChangesPanelView.java} | 38 ++++-------- .../ChangesPanelViewImpl.java} | 51 ++++++++-------- .../ChangesPanelViewImpl.ui.xml} | 2 +- .../client/compare/changespanel/ViewMode.java | 11 ++++ .../git/client/history/HistoryPresenter.java | 10 ++-- .../ext/git/client/inject/GitGinModule.java | 12 ++-- .../client/GitLocalizationConstant.properties | 2 +- .../client/commit/CommitPresenterTest.java | 14 ++--- .../client/history/HistoryPresenterTest.java | 6 +- 23 files changed, 189 insertions(+), 223 deletions(-) delete mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/CallBack.java rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedlist/ChangedListPresenter.java => changeslist/ChangesListPresenter.java} (69%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedlist/ChangedListView.java => changeslist/ChangesListView.java} (79%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedlist/ChangedListViewImpl.java => changeslist/ChangesListViewImpl.java} (82%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedlist/ChangedListViewImpl.ui.xml => changeslist/ChangesListViewImpl.ui.xml} (92%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedpanel => changespanel}/ChangedFileNode.java (96%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedpanel => changespanel}/ChangedFolderNode.java (97%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedpanel/ChangedPanelPresenter.java => changespanel/ChangesPanelPresenter.java} (71%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedpanel/ChangedPanelView.java => changespanel/ChangesPanelView.java} (77%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedpanel/ChangedPanelViewImpl.java => changespanel/ChangesPanelViewImpl.java} (89%) rename plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/{changedpanel/ChangedPanelViewImpl.ui.xml => changespanel/ChangesPanelViewImpl.ui.xml} (95%) create mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ViewMode.java diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithLatestAction.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithLatestAction.java index 2537378b196..a018b163340 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithLatestAction.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/action/CompareWithLatestAction.java @@ -27,7 +27,7 @@ import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; -import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changeslist.ChangesListPresenter; import org.eclipse.che.ide.api.dialogs.DialogFactory; import java.util.HashMap; @@ -49,7 +49,7 @@ @Singleton public class CompareWithLatestAction extends GitAction { private final ComparePresenter comparePresenter; - private final ChangedListPresenter changedListPresenter; + private final ChangesListPresenter changesListPresenter; private final DialogFactory dialogFactory; private final NotificationManager notificationManager; private final GitServiceClient service; @@ -59,7 +59,7 @@ public class CompareWithLatestAction extends GitAction { @Inject public CompareWithLatestAction(ComparePresenter presenter, - ChangedListPresenter changedListPresenter, + ChangesListPresenter changesListPresenter, AppContext appContext, DialogFactory dialogFactory, NotificationManager notificationManager, @@ -67,7 +67,7 @@ public CompareWithLatestAction(ComparePresenter presenter, GitLocalizationConstant constant) { super(constant.compareWithLatestTitle(), constant.compareWithLatestTitle(), null, appContext); this.comparePresenter = presenter; - this.changedListPresenter = changedListPresenter; + this.changesListPresenter = changesListPresenter; this.dialogFactory = dialogFactory; this.notificationManager = notificationManager; this.service = service; @@ -117,7 +117,7 @@ public void apply(Optional file) throws OperationException { for (String item : changedFiles) { items.put(item.substring(2, item.length()), defineStatus(item.substring(0, 1))); } - changedListPresenter.show(items, REVISION, null, project); + changesListPresenter.show(items, REVISION, null, project); } } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java index 18887869287..1f22262ab76 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenter.java @@ -28,7 +28,7 @@ import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsole; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsoleFactory; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelPresenter; import org.eclipse.che.ide.processes.panel.ProcessesPanelPresenter; import org.eclipse.che.ide.resource.Path; @@ -65,7 +65,7 @@ public class CommitPresenter implements CommitView.ActionDelegate { private static final String COMMIT_COMMAND_NAME = "Git commit"; - private final ChangedPanelPresenter changedPanelPresenter; + private final ChangesPanelPresenter changesPanelPresenter; private final DialogFactory dialogFactory; private final AppContext appContext; private final CommitView view; @@ -81,9 +81,9 @@ public class CommitPresenter implements CommitView.ActionDelegate { private List filesToCommit; @Inject - public CommitPresenter(final CommitView view, + public CommitPresenter(CommitView view, GitServiceClient service, - ChangedPanelPresenter changedPanelPresenter, + ChangesPanelPresenter changesPanelPresenter, GitLocalizationConstant constant, NotificationManager notificationManager, DialogFactory dialogFactory, @@ -92,7 +92,7 @@ public CommitPresenter(final CommitView view, GitOutputConsoleFactory gitOutputConsoleFactory, ProcessesPanelPresenter processesPanelPresenter) { this.view = view; - this.changedPanelPresenter = changedPanelPresenter; + this.changesPanelPresenter = changesPanelPresenter; this.dialogFactory = dialogFactory; this.appContext = appContext; this.dateTimeFormatter = dateTimeFormatter; @@ -104,7 +104,7 @@ public CommitPresenter(final CommitView view, this.notificationManager = notificationManager; this.filesToCommit = new ArrayList<>(); - this.view.setChangedPanelView(changedPanelPresenter.getView()); + this.view.setChangesPanelView(changesPanelPresenter.getView()); } public void showDialog(Project project) { @@ -173,9 +173,9 @@ private void show(@Nullable String diff) { view.setEnableCommitButton(!view.getMessage().isEmpty()); view.focusInMessageField(); view.showDialog(); - changedPanelPresenter.show(files, null); - view.checkCheckBoxes(stream(appContext.getResources()).map(resource -> resource.getLocation().removeFirstSegments(1)) - .collect(Collectors.toSet())); + changesPanelPresenter.show(files); + view.setMarkedCheckBoxes(stream(appContext.getResources()).map(resource -> resource.getLocation().removeFirstSegments(1)) + .collect(Collectors.toSet())); } private Map toFileStatusMap(@Nullable String diff) { diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java index a00ae49b1d4..ff22690e214 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitView.java @@ -12,7 +12,7 @@ import org.eclipse.che.api.git.shared.Branch; import org.eclipse.che.ide.api.mvp.View; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelView; import org.eclipse.che.ide.resource.Path; import javax.validation.constraints.NotNull; @@ -56,7 +56,7 @@ interface ActionDelegate { * @param paths * pats of nodes */ - void checkCheckBoxes(Set paths); + void setMarkedCheckBoxes(Set paths); /** * Returns selected remote branch from branches drop-down list. @@ -132,5 +132,5 @@ interface ActionDelegate { /** * Initialize changed panel. */ - void setChangedPanelView(ChangedPanelView changedPanelView); + void setChangesPanelView(ChangesPanelView changesPanelView); } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java index aa7e7b433e5..4bed1ded2b8 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.java @@ -14,9 +14,9 @@ import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.GitResources; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedFileNode; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedFolderNode; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangedFileNode; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangedFolderNode; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelView; import org.eclipse.che.ide.resource.Path; import org.eclipse.che.ide.ui.ShiftableTextArea; import org.eclipse.che.ide.ui.smartTree.Tree; @@ -64,7 +64,7 @@ interface CommitViewImplUiBinder extends UiBinder { @UiField(provided = true) final TextArea message; @UiField - FlowPanel changedPanel; + FlowPanel changesPanel; @UiField CheckBox amend; @UiField(provided = true) @@ -77,19 +77,17 @@ interface CommitViewImplUiBinder extends UiBinder { private Button btnCommit; private Button btnCancel; private ActionDelegate delegate; - private ChangedPanelRender render; - private ChangedPanelView changedPanelView; + private ChangesPanelRender render; + private ChangesPanelView changesPanelView; /** * Create view. */ @Inject protected CommitViewImpl(GitResources res, - GitLocalizationConstant locale, - ChangedPanelView changedPanelView) { + GitLocalizationConstant locale) { this.res = res; this.locale = locale; - this.changedPanelView = changedPanelView; this.message = new ShiftableTextArea(); this.ensureDebugId("git-commit-window"); @@ -107,7 +105,7 @@ protected CommitViewImpl(GitResources res, pushAfterCommit = new CheckBox(); pushAfterCommit.setHTML(locale.commitPushCheckboxTitle()); - pushAfterCommit.ensureDebugId("git-commit-push_after_commit"); + pushAfterCommit.ensureDebugId("push-after-commit-check-box"); pushAfterCommit.addValueChangeHandler(event -> remoteBranches.setEnabled(event.getValue())); pushAfterCommit.addStyleName(res.gitCSS().spacing()); @@ -228,17 +226,17 @@ public void onAmendValueChange(final ValueChangeEvent event) { } @Override - public void setChangedPanelView(ChangedPanelView changedPanelView) { - this.render = new ChangedPanelRender(changedPanelView); - this.changedPanelView = changedPanelView; - changedPanelView.setTreeRender(render); - this.changedPanel.add(changedPanelView); + public void setChangesPanelView(ChangesPanelView changesPanelView) { + this.render = new ChangesPanelRender(changesPanelView); + this.changesPanelView = changesPanelView; + changesPanelView.setTreeRender(render); + this.changesPanel.add(changesPanelView); } @Override - public void checkCheckBoxes(Set paths) { - render.setNodePaths(changedPanelView.getNodePaths()); - paths.forEach(path -> render.handleNodeCheckBox(path, false)); + public void setMarkedCheckBoxes(Set paths) { + render.setNodePaths(changesPanelView.getNodePaths()); + paths.forEach(path -> render.handleCheckBoxSelection(path, false)); } @Override @@ -246,16 +244,16 @@ public String getRemoteBranch() { return remoteBranches.getSelectedValue(); } - private class ChangedPanelRender extends DefaultPresentationRenderer { + private class ChangesPanelRender extends DefaultPresentationRenderer { - private final ChangedPanelView changedPanelView; + private final ChangesPanelView changesPanelView; private final Set unselectedNodePaths; private Set allNodePaths; - ChangedPanelRender(ChangedPanelView changedPanelView) { - super(changedPanelView.getTreeStyles()); - this.changedPanelView = changedPanelView; + ChangesPanelRender(ChangesPanelView changesPanelView) { + super(changesPanelView.getTreeStyles()); + this.changesPanelView = changesPanelView; this.unselectedNodePaths = new HashSet<>(); this.allNodePaths = new HashSet<>(); } @@ -276,8 +274,8 @@ public Element render(final Node node, final String domID, final Tree.Joint join Event.sinkEvents(checkBoxElement, Event.ONCLICK); Event.setEventListener(checkBoxElement, event -> { if (Event.ONCLICK == event.getTypeInt() && event.getTarget().getTagName().equalsIgnoreCase("label")) { - handleNodeCheckBox(nodePath, checkBoxInputElement.isChecked()); - changedPanelView.refreshNodes(); + handleCheckBoxSelection(nodePath, checkBoxInputElement.isChecked()); + changesPanelView.refreshNodes(); delegate.onValueChanged(); } }); @@ -294,20 +292,24 @@ void setNodePaths(Set paths) { unselectedNodePaths.addAll(paths); } - void handleNodeCheckBox(Path nodePath, boolean value) { + /** + * Mark all related to node check-boxes checked or unchecked according to node path and value. + * E.g. if parent check-box is marked as checked, all child check-boxes will be checked too, and vise-versa. + */ + void handleCheckBoxSelection(Path nodePath, boolean value) { allNodePaths.stream() .sorted(Comparator.comparing(Path::toString)) .filter(path -> !(path.equals(nodePath) || path.isEmpty()) && path.isPrefixOf(nodePath) && !hasSelectedChildes(path)) - .forEach(path -> saveCheckBoxSelection(value, path)); + .forEach(path -> saveCheckBoxSelection(path, value)); allNodePaths.stream().sorted((path1, path2) -> path2.toString().compareTo(path1.toString())) .filter(path -> !path.isEmpty() && (nodePath.isPrefixOf(path) || path.isPrefixOf(nodePath) && !hasSelectedChildes(path))) - .forEach(path -> saveCheckBoxSelection(value, path)); + .forEach(path -> saveCheckBoxSelection(path, value)); } - private void saveCheckBoxSelection(boolean checkBoxValue, Path path) { + private void saveCheckBoxSelection(Path path, boolean checkBoxValue) { if (checkBoxValue) { unselectedNodePaths.add(path); } else { diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml index b4dc86854e1..00cfa821433 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/commit/CommitViewImpl.ui.xml @@ -23,7 +23,7 @@ - + diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListPresenter.java index d7bf8fab1a7..90e983e046d 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/branchlist/BranchListPresenter.java @@ -28,7 +28,7 @@ import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; -import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changeslist.ChangesListPresenter; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsole; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsoleFactory; import org.eclipse.che.ide.processes.panel.ProcessesPanelPresenter; @@ -56,7 +56,7 @@ public class BranchListPresenter implements BranchListView.ActionDelegate { public static final String BRANCH_LIST_COMMAND_NAME = "Git list of branches"; private final ComparePresenter comparePresenter; - private final ChangedListPresenter changedListPresenter; + private final ChangesListPresenter changesListPresenter; private final GitOutputConsoleFactory gitOutputConsoleFactory; private final ProcessesPanelPresenter consolesPanelPresenter; private final BranchListView view; @@ -73,7 +73,7 @@ public class BranchListPresenter implements BranchListView.ActionDelegate { @Inject public BranchListPresenter(BranchListView view, ComparePresenter comparePresenter, - ChangedListPresenter changedListPresenter, + ChangesListPresenter changesListPresenter, GitServiceClient service, GitLocalizationConstant locale, AppContext appContext, @@ -83,7 +83,7 @@ public BranchListPresenter(BranchListView view, ProcessesPanelPresenter processesPanelPresenter) { this.view = view; this.comparePresenter = comparePresenter; - this.changedListPresenter = changedListPresenter; + this.changesListPresenter = changesListPresenter; this.dialogFactory = dialogFactory; this.service = service; this.locale = locale; @@ -152,7 +152,7 @@ public void apply(Optional file) throws OperationException { for (String item : changedFiles) { items.put(item.substring(2, item.length()), defineStatus(item.substring(0, 1))); } - changedListPresenter.show(items, selectedBranch.getName(), null, project); + changesListPresenter.show(items, selectedBranch.getName(), null, project); } } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/CallBack.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/CallBack.java deleted file mode 100644 index af7a3e75569..00000000000 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/CallBack.java +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012-2017 Codenvy, S.A. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Codenvy, S.A. - initial API and implementation - *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedpanel; - -import org.eclipse.che.ide.api.data.tree.Node; - -/** - * Callback for triggering actions in changed files panel. - */ -public interface CallBack { - - /** - * Trigger node selected event. - */ - void onNodeSelected(Node node); -} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListPresenter.java similarity index 69% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListPresenter.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListPresenter.java index a0738e8738d..926135d2312 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListPresenter.java @@ -8,24 +8,27 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedlist; +package org.eclipse.che.ide.ext.git.client.compare.changeslist; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.che.commons.annotation.Nullable; +import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.api.notification.NotificationManager; import org.eclipse.che.ide.api.resources.Project; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedFileNode; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedFolderNode; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.CallBack; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangedFileNode; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangedFolderNode; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelView; import org.eclipse.che.ide.resource.Path; +import org.eclipse.che.ide.ui.smartTree.event.SelectionChangedEvent.SelectionChangedHandler; import java.util.Map; +import static com.google.common.collect.Iterables.getFirst; import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.NOT_EMERGE_MODE; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; @@ -36,12 +39,11 @@ * @author Vlad Zhukovskyi */ @Singleton -public class ChangedListPresenter implements ChangedListView.ActionDelegate { - private final ChangedListView view; +public class ChangesListPresenter implements ChangesListView.ActionDelegate { + private final ChangesListView view; private final NotificationManager notificationManager; - private final ChangedPanelPresenter changedPanelPresenter; + private final ChangesPanelPresenter changesPanelPresenter; private final ComparePresenter comparePresenter; - private final CallBack callBack; private Project project; private String file; @@ -50,27 +52,33 @@ public class ChangedListPresenter implements ChangedListView.ActionDelegate { private Status status; @Inject - public ChangedListPresenter(final ChangedListView view, + public ChangesListPresenter(ChangesListView view, ComparePresenter comparePresenter, NotificationManager notificationManager, - ChangedPanelPresenter changedPanelPresenter) { + ChangesPanelPresenter changesPanelPresenter) { this.comparePresenter = comparePresenter; this.view = view; this.notificationManager = notificationManager; - this.changedPanelPresenter = changedPanelPresenter; + this.changesPanelPresenter = changesPanelPresenter; this.view.setDelegate(this); - callBack = node -> { + SelectionChangedHandler handler = event -> { + Node node = getFirst(event.getSelection(), null); + if (node == null) { + return; + } if (node instanceof ChangedFolderNode) { - ChangedListPresenter.this.view.setEnableCompareButton(false); + ChangesListPresenter.this.view.setEnableCompareButton(false); return; } - ChangedListPresenter.this.view.setEnableCompareButton(true); - ChangedListPresenter.this.file = node.getName(); - ChangedListPresenter.this.status = ((ChangedFileNode)node).getStatus(); + ChangesListPresenter.this.view.setEnableCompareButton(true); + ChangesListPresenter.this.file = node.getName(); + ChangesListPresenter.this.status = ((ChangedFileNode)node).getStatus(); }; - this.view.setChangedPanelView(changedPanelPresenter.getView()); + ChangesPanelView changesPanelView = changesPanelPresenter.getView(); + changesPanelView.addSelectionHandler(handler); + this.view.setChangesPanelView(changesPanelView); } /** @@ -93,7 +101,7 @@ public void show(Map changedFiles, @Nullable String revisionA, @ view.setEnableCompareButton(false); view.showDialog(); - changedPanelPresenter.show(changedFiles, callBack); + changesPanelPresenter.show(changedFiles); } @Override diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListView.java similarity index 79% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListView.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListView.java index acd54a091e4..8bb86b1888e 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListView.java @@ -8,17 +8,17 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedlist; +package org.eclipse.che.ide.ext.git.client.compare.changeslist; import org.eclipse.che.ide.api.mvp.View; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelView; /** - * The view of {@link ChangedListPresenter}. + * The view of {@link ChangesListPresenter}. * * @author Igor Vinokur */ -public interface ChangedListView extends View { +public interface ChangesListView extends View { /** Needs for delegate some function into Changed list view. */ interface ActionDelegate { /** Performs any actions appropriate in response to the user having pressed the 'Close' button. */ @@ -43,7 +43,7 @@ interface ActionDelegate { void setEnableCompareButton(boolean enabled); /** - * Initialize changed panel. + * Initialize changes panel. */ - void setChangedPanelView(ChangedPanelView changedPanelView); + void setChangesPanelView(ChangesPanelView changesPanelView); } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.java similarity index 82% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.java index b4ca6ccfa13..3e7fddac3cf 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedlist/ChangedListViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedlist; +package org.eclipse.che.ide.ext.git.client.compare.changeslist; import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; @@ -22,24 +22,24 @@ import com.google.inject.Singleton; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelView; import org.eclipse.che.ide.ui.window.Window; /** - * Implementation of {@link ChangedListView}. + * Implementation of {@link ChangesListView}. * * @author Igor Vinokur */ @Singleton -public class ChangedListViewImpl extends Window implements ChangedListView { +public class ChangesListViewImpl extends Window implements ChangesListView { @UiField - FlowPanel changedPanel; + FlowPanel changesPanel; - interface ChangedListViewImplUiBinder extends UiBinder { + interface ChangesListViewImplUiBinder extends UiBinder { } - private static ChangedListViewImplUiBinder uiBinder = GWT.create(ChangedListViewImplUiBinder.class); + private static ChangesListViewImplUiBinder uiBinder = GWT.create(ChangesListViewImplUiBinder.class); private final GitLocalizationConstant locale; @@ -47,7 +47,7 @@ interface ChangedListViewImplUiBinder extends UiBinder - + diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFileNode.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangedFileNode.java similarity index 96% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFileNode.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangedFileNode.java index 8f731f97129..ab009601371 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFileNode.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangedFileNode.java @@ -8,14 +8,14 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedpanel; +package org.eclipse.che.ide.ext.git.client.compare.changespanel; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.js.Promises; import org.eclipse.che.ide.api.data.tree.AbstractTreeNode; import org.eclipse.che.ide.api.data.tree.HasAction; import org.eclipse.che.ide.api.data.tree.Node; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView.ActionDelegate; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelView.ActionDelegate; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; import org.eclipse.che.ide.project.shared.NodesResources; import org.eclipse.che.ide.resource.Path; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFolderNode.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangedFolderNode.java similarity index 97% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFolderNode.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangedFolderNode.java index f620a8abe02..82918135e7b 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedFolderNode.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangedFolderNode.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedpanel; +package org.eclipse.che.ide.ext.git.client.compare.changespanel; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.js.Promises; diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelPresenter.java similarity index 71% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelPresenter.java index 486144b2382..c96d0444f29 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelPresenter.java @@ -8,13 +8,11 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedpanel; +package org.eclipse.che.ide.ext.git.client.compare.changespanel; import com.google.inject.Inject; -import org.eclipse.che.commons.annotation.Nullable; import org.eclipse.che.ide.api.app.AppContext; -import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.api.notification.NotificationManager; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; @@ -24,6 +22,8 @@ import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.NOT_EMERGE_MODE; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; +import static org.eclipse.che.ide.ext.git.client.compare.changespanel.ViewMode.LIST; +import static org.eclipse.che.ide.ext.git.client.compare.changespanel.ViewMode.TREE; /** * Presenter for displaying list of changed files. @@ -31,20 +31,20 @@ * @author Igor Vinokur * @author Vlad Zhukovskyi */ -public class ChangedPanelPresenter implements ChangedPanelView.ActionDelegate { - private final ChangedPanelView view; +public class ChangesPanelPresenter implements ChangesPanelView.ActionDelegate { + + private final ChangesPanelView view; private final AppContext appContext; private final NotificationManager notificationManager; private final ComparePresenter comparePresenter; private final GitLocalizationConstant locale; private Map changedFiles; - private CallBack callBack; - private boolean treeViewEnabled; + private ViewMode viewMode; @Inject - public ChangedPanelPresenter(GitLocalizationConstant locale, - ChangedPanelView view, + public ChangesPanelPresenter(GitLocalizationConstant locale, + ChangesPanelView view, AppContext appContext, NotificationManager notificationManager, ComparePresenter comparePresenter) { @@ -54,7 +54,7 @@ public ChangedPanelPresenter(GitLocalizationConstant locale, this.notificationManager = notificationManager; this.comparePresenter = comparePresenter; this.view.setDelegate(this); - this.treeViewEnabled = true; + this.viewMode = TREE; } /** @@ -63,22 +63,21 @@ public ChangedPanelPresenter(GitLocalizationConstant locale, * @param changedFiles * Map with files and their status */ - public void show(Map changedFiles, @Nullable CallBack callBack) { + public void show(Map changedFiles) { this.changedFiles = changedFiles; - this.callBack = callBack; if (changedFiles.isEmpty()) { view.setTextToChangeViewModeButton(locale.changeListRowListViewButtonText()); view.setEnabledChangeViewModeButton(false); view.setEnableExpandCollapseButtons(false); - view.clearNodeStorage(); + view.resetPanelState(); } else { view.setEnabledChangeViewModeButton(true); - view.setEnableExpandCollapseButtons(treeViewEnabled); + view.setEnableExpandCollapseButtons(viewMode == TREE); viewChangedFiles(); } } - public ChangedPanelView getView() { + public ChangesPanelView getView() { return view; } @@ -98,9 +97,9 @@ public void onFileNodeDoubleClicked(String path, final Status status) { @Override public void onChangeViewModeButtonClicked() { - treeViewEnabled = !treeViewEnabled; + viewMode = viewMode == TREE ? LIST : TREE; + view.setEnableExpandCollapseButtons(viewMode == TREE); viewChangedFiles(); - view.setEnableExpandCollapseButtons(treeViewEnabled); } @Override @@ -113,20 +112,9 @@ public void onCollapseButtonClicked() { view.collapseAllDirectories(); } - @Override - public void onNodeSelected(Node node) { - if (callBack != null) { - callBack.onNodeSelected(node); - } - } - private void viewChangedFiles() { - if (treeViewEnabled) { - view.viewChangedFilesAsTree(changedFiles); - view.setTextToChangeViewModeButton(locale.changeListRowListViewButtonText()); - } else { - view.viewChangedFilesAsList(changedFiles); - view.setTextToChangeViewModeButton(locale.changeListGroupByDirectoryButtonText()); - } + view.viewChangedFiles(changedFiles, viewMode); + view.setTextToChangeViewModeButton(viewMode == TREE ? locale.changeListRowListViewButtonText() + : locale.changeListGroupByDirectoryButtonText()); } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelView.java similarity index 77% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelView.java index 322f8d24cd3..d0ef8b32a82 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelView.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelView.java @@ -8,26 +8,27 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedpanel; +package org.eclipse.che.ide.ext.git.client.compare.changespanel; -import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.api.mvp.View; import org.eclipse.che.ide.ext.git.client.compare.FileStatus.Status; import org.eclipse.che.ide.resource.Path; import org.eclipse.che.ide.ui.smartTree.Tree; import org.eclipse.che.ide.ui.smartTree.TreeStyles; +import org.eclipse.che.ide.ui.smartTree.event.SelectionChangedEvent.SelectionChangedHandler; import org.eclipse.che.ide.ui.smartTree.presentation.PresentationRenderer; import java.util.Map; import java.util.Set; /** - * The view of {@link ChangedPanelPresenter}. + * The view of {@link ChangesPanelPresenter}. * * @author Igor Vinokur */ -public interface ChangedPanelView extends View { - /** Needs for delegate some function into Changed list view. */ +public interface ChangesPanelView extends View { + + /** Needs for delegate some function into Changes list view. */ interface ActionDelegate { /** @@ -41,38 +42,21 @@ interface ActionDelegate { /** Performs any actions appropriate in response to the user having pressed the 'Collapse all directories' button. */ void onCollapseButtonClicked(); - /** - * Performs any action in response to the user having select any node. - * - * @param node - * selected node - */ - void onNodeSelected(Node node); - /** Performs any actions appropriate in response to the user double clicked on the file node. */ void onFileNodeDoubleClicked(String file, Status status); } /** - * View changed files as list. - * - * @param files - * Map of changed files with their status + * Add selection changed handler. */ - void viewChangedFilesAsList(Map files); + void addSelectionHandler(SelectionChangedHandler handler); - /** - * Clear panel from old nodes. - */ - void clearNodeStorage(); + void viewChangedFiles(Map files, ViewMode viewMode); /** - * View changed files as tree. - * - * @param files - * Map of changed files with their status + * Clear panel from old nodes. */ - void viewChangedFilesAsTree(Map files); + void resetPanelState(); /** Expand all directories. */ void expandAllDirectories(); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelViewImpl.java similarity index 89% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelViewImpl.java index 5bf1e529544..2464d7a6213 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelViewImpl.java @@ -8,7 +8,7 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.ext.git.client.compare.changedpanel; +package org.eclipse.che.ide.ext.git.client.compare.changespanel; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; @@ -32,30 +32,31 @@ import org.eclipse.che.ide.ui.smartTree.Tree; import org.eclipse.che.ide.ui.smartTree.TreeStyles; import org.eclipse.che.ide.ui.smartTree.compare.NameComparator; +import org.eclipse.che.ide.ui.smartTree.event.SelectionChangedEvent.SelectionChangedHandler; import org.eclipse.che.ide.ui.smartTree.presentation.PresentationRenderer; -import javax.validation.constraints.NotNull; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import static org.eclipse.che.ide.ext.git.client.compare.changespanel.ViewMode.TREE; + /** - * Implementation of {@link ChangedPanelView}. + * Implementation of {@link ChangesPanelView}. * * @author Igor Vinokur */ -public class ChangedPanelViewImpl extends Composite implements ChangedPanelView { - interface TreeViewImplUiBinder extends UiBinder { +public class ChangesPanelViewImpl extends Composite implements ChangesPanelView { + interface TreeViewImplUiBinder extends UiBinder { } private static TreeViewImplUiBinder uiBinder = GWT.create(TreeViewImplUiBinder.class); @UiField - LayoutPanel changedPanel; + LayoutPanel changesPanel; @UiField Button changeViewModeButton; @UiField @@ -74,7 +75,7 @@ interface TreeViewImplUiBinder extends UiBinder { - List selection = event.getSelection(); - if (!selection.isEmpty()) { - delegate.onNodeSelected(selection.get(0)); - } - }); - changedPanel.add(tree); + changesPanel.add(tree); createButtons(); } @@ -106,23 +101,25 @@ public void setDelegate(ActionDelegate delegate) { } @Override - public void viewChangedFilesAsList(@NotNull Map items) { - NodeStorage nodeStorage = tree.getNodeStorage(); - nodeStorage.clear(); - items.keySet().forEach(file -> nodeStorage.add(new ChangedFileNode(file, items.get(file), nodesResources, delegate, false))); + public void addSelectionHandler(SelectionChangedHandler handler) { + tree.getSelectionModel().addSelectionChangedHandler(handler); } @Override - public void clearNodeStorage() { - tree.getNodeStorage().clear(); + public void viewChangedFiles(Map files, ViewMode viewMode) { + NodeStorage nodeStorage = tree.getNodeStorage(); + nodeStorage.clear(); + if (viewMode == TREE) { + getGroupedNodes(files).forEach(nodeStorage::add); + tree.expandAll(); + } else { + files.keySet().forEach(file -> nodeStorage.add(new ChangedFileNode(file, files.get(file), nodesResources, delegate, false))); + } } @Override - public void viewChangedFilesAsTree(@NotNull Map items) { - NodeStorage nodeStorage = tree.getNodeStorage(); - nodeStorage.clear(); - fetchGroupedNodes(items).forEach(nodeStorage::add); - tree.expandAll(); + public void resetPanelState() { + tree.getNodeStorage().clear(); } @Override @@ -183,7 +180,7 @@ private void createButtons() { collapseButton.addClickHandler(clickEvent -> delegate.onCollapseButtonClicked()); } - private List fetchGroupedNodes(Map items) { + private List getGroupedNodes(Map items) { List allFiles = new ArrayList<>(items.keySet()); List allFolders = new ArrayList<>(); for (String file : allFiles) { diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelViewImpl.ui.xml similarity index 95% rename from plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml rename to plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelViewImpl.ui.xml index 39b15dfcd96..47958e392ae 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changedpanel/ChangedPanelViewImpl.ui.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ChangesPanelViewImpl.ui.xml @@ -30,7 +30,7 @@ - + diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ViewMode.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ViewMode.java new file mode 100644 index 00000000000..feb455fe548 --- /dev/null +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ViewMode.java @@ -0,0 +1,11 @@ +package org.eclipse.che.ide.ext.git.client.compare.changespanel; + +/** + * View mode of changed files. + * + * @author Igor Vinokur + */ +public enum ViewMode { + LIST, + TREE +} diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java index 67644cf4c8b..557b07cf6c5 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java @@ -27,7 +27,7 @@ import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; import org.eclipse.che.ide.ext.git.client.compare.FileStatus; -import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changeslist.ChangesListPresenter; import org.eclipse.che.ide.resource.Path; import javax.validation.constraints.NotNull; @@ -54,7 +54,7 @@ public class HistoryPresenter implements HistoryView.ActionDelegate { private final ComparePresenter comparePresenter; - private final ChangedListPresenter changedListPresenter; + private final ChangesListPresenter changesListPresenter; private final DialogFactory dialogFactory; private final HistoryView view; private final GitServiceClient service; @@ -71,7 +71,7 @@ public class HistoryPresenter implements HistoryView.ActionDelegate { @Inject public HistoryPresenter(HistoryView view, ComparePresenter comparePresenter, - ChangedListPresenter changedListPresenter, + ChangesListPresenter changesListPresenter, GitServiceClient service, GitLocalizationConstant locale, NotificationManager notificationManager, @@ -79,7 +79,7 @@ public HistoryPresenter(HistoryView view, AppContext appContext) { this.view = view; this.comparePresenter = comparePresenter; - this.changedListPresenter = changedListPresenter; + this.changesListPresenter = changesListPresenter; this.dialogFactory = dialogFactory; this.service = service; this.locale = locale; @@ -197,7 +197,7 @@ public void apply(final String diff) throws OperationException { for (String item : changedFiles) { items.put(item.substring(2, item.length()), defineStatus(item.substring(0, 1))); } - changedListPresenter.show(items, revisionA, revisionB, project); + changesListPresenter.show(items, revisionA, revisionB, project); } } }) diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java index b959cf61fa3..d4221ad56ee 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/inject/GitGinModule.java @@ -27,8 +27,8 @@ import org.eclipse.che.ide.ext.git.client.commit.CommitViewImpl; import org.eclipse.che.ide.ext.git.client.compare.branchlist.BranchListView; import org.eclipse.che.ide.ext.git.client.compare.branchlist.BranchListViewImpl; -import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListView; -import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListViewImpl; +import org.eclipse.che.ide.ext.git.client.compare.changeslist.ChangesListView; +import org.eclipse.che.ide.ext.git.client.compare.changeslist.ChangesListViewImpl; import org.eclipse.che.ide.ext.git.client.compare.revisionslist.RevisionListView; import org.eclipse.che.ide.ext.git.client.compare.revisionslist.RevisionListViewImpl; import org.eclipse.che.ide.ext.git.client.fetch.FetchView; @@ -58,8 +58,8 @@ import org.eclipse.che.ide.ext.git.client.reset.commit.ResetToCommitViewImpl; import org.eclipse.che.ide.ext.git.client.reset.files.ResetFilesView; import org.eclipse.che.ide.ext.git.client.reset.files.ResetFilesViewImpl; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelView; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelViewImpl; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelView; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelViewImpl; /** @author Andrey Plotnikov */ @ExtensionGinModule @@ -76,7 +76,7 @@ protected void configure() { bind(RemoveFromIndexView.class).to(RemoveFromIndexViewImpl.class).in(Singleton.class); bind(RevisionListView.class).to(RevisionListViewImpl.class).in(Singleton.class); bind(CommitView.class).to(CommitViewImpl.class).in(Singleton.class); - bind(ChangedListView.class).to(ChangedListViewImpl.class).in(Singleton.class); + bind(ChangesListView.class).to(ChangesListViewImpl.class).in(Singleton.class); bind(BranchView.class).to(BranchViewImpl.class).in(Singleton.class); bind(BranchListView.class).to(BranchListViewImpl.class).in(Singleton.class); bind(MergeView.class).to(MergeViewImpl.class).in(Singleton.class); @@ -88,7 +88,7 @@ protected void configure() { bind(PullView.class).to(PullViewImpl.class).in(Singleton.class); bind(HistoryView.class).to(HistoryViewImpl.class).in(Singleton.class); bind(GitOutputPartView.class).to(GitOutputPartViewImpl.class); - bind(ChangedPanelView.class).to(ChangedPanelViewImpl.class); + bind(ChangesPanelView.class).to(ChangesPanelViewImpl.class); install(new GinFactoryModuleBuilder().implement(GitOutputConsole.class, GitOutputConsolePresenter.class) .build(GitOutputConsoleFactory.class)); diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties index 5c832f41c16..3eefd01e0f6 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/resources/org/eclipse/che/ide/ext/git/client/GitLocalizationConstant.properties @@ -151,7 +151,7 @@ view.commit.grid.date=Date view.commit.grid.commiter=Committer view.commit.grid.comment=Comment view.commit.push.checkbox.title=Push committed changes to : -view.commit.nothing_to_commit.text=Nothing to commit, working directory is clean, Would you like to perform amend commit? +view.commit.nothing_to_commit.text=Nothing to commit, working directory is clean. Would you like to perform amend commit? #Create view.create.title=Initialize local repository diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java index 9112d9fdf1d..3458a0c283a 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/commit/CommitPresenterTest.java @@ -26,7 +26,7 @@ import org.eclipse.che.ide.commons.exception.ServerException; import org.eclipse.che.ide.ext.git.client.BaseTest; import org.eclipse.che.ide.ext.git.client.DateTimeFormatter; -import org.eclipse.che.ide.ext.git.client.compare.changedpanel.ChangedPanelPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changespanel.ChangesPanelPresenter; import org.eclipse.che.ide.resource.Path; import org.junit.Test; import org.mockito.Mock; @@ -66,7 +66,7 @@ public class CommitPresenterTest extends BaseTest { @Mock private DateTimeFormatter dateTimeFormatter; @Mock - private ChangedPanelPresenter changedPanelPresenter; + private ChangesPanelPresenter changesPanelPresenter; private CommitPresenter presenter; @@ -76,7 +76,7 @@ public void disarm() { presenter = spy(new CommitPresenter(view, service, - changedPanelPresenter, + changesPanelPresenter, constant, notificationManager, dialogFactory, @@ -160,12 +160,12 @@ public void shouldShowDialog() throws Exception { verify(view).setEnableAmendCheckBox(true); verify(view).setEnablePushAfterCommitCheckBox(true); - verify(changedPanelPresenter).show(eq(singletonMap("file", MODIFIED)), eq(null)); + verify(changesPanelPresenter).show(eq(singletonMap("file", MODIFIED))); verify(view).focusInMessageField(); verify(view).setEnableCommitButton(eq(DISABLE_BUTTON)); verify(view).getMessage(); verify(view).showDialog(); - verify(view).checkCheckBoxes(anySet()); + verify(view).setMarkedCheckBoxes(anySet()); } @Test @@ -187,12 +187,12 @@ public void shouldShowUntrackedFilesOnInitialCommit() throws Exception { verify(view).setEnableAmendCheckBox(false); verify(view).setEnablePushAfterCommitCheckBox(false); - verify(changedPanelPresenter).show(eq(singletonMap("file", ADDED)), eq(null)); + verify(changesPanelPresenter).show(eq(singletonMap("file", ADDED))); verify(view).focusInMessageField(); verify(view).setEnableCommitButton(eq(DISABLE_BUTTON)); verify(view).getMessage(); verify(view).showDialog(); - verify(view).checkCheckBoxes(anySet()); + verify(view).setMarkedCheckBoxes(anySet()); } @Test diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenterTest.java b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenterTest.java index 208e6f6d2ad..41886b1643d 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenterTest.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/test/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenterTest.java @@ -24,7 +24,7 @@ import org.eclipse.che.ide.commons.exception.ServerException; import org.eclipse.che.ide.ext.git.client.BaseTest; import org.eclipse.che.ide.ext.git.client.compare.ComparePresenter; -import org.eclipse.che.ide.ext.git.client.compare.changedlist.ChangedListPresenter; +import org.eclipse.che.ide.ext.git.client.compare.changeslist.ChangesListPresenter; import org.eclipse.che.ide.resource.Path; import org.junit.Test; import org.mockito.InjectMocks; @@ -56,7 +56,7 @@ public class HistoryPresenterTest extends BaseTest { @Mock private ComparePresenter comparePresenter; @Mock - private ChangedListPresenter changedListPresenter; + private ChangesListPresenter changesListPresenter; @InjectMocks private HistoryPresenter presenter; @@ -184,7 +184,7 @@ public void shouldShowChangedListWhenSeveralFilesChangedInSelectedRevision() thr verify(stringPromise).then(stringCaptor.capture()); stringCaptor.getValue().apply("M file1\nM file2"); - verify(changedListPresenter).show(anyMap(), eq("commitB"), eq("commitA"), any(Project.class)); + verify(changesListPresenter).show(anyMap(), eq("commitB"), eq("commitA"), any(Project.class)); } @Test From d0ec0a744062cf5e2b47d201af5d2c3a362facb1 Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Wed, 24 May 2017 13:28:19 +0300 Subject: [PATCH 8/9] fixup! CHE-3614: Rework Git commit window --- .../ext/git/client/compare/changespanel/ViewMode.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ViewMode.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ViewMode.java index feb455fe548..d169ab266cd 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ViewMode.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changespanel/ViewMode.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2012-2017 Codenvy, S.A. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Codenvy, S.A. - initial API and implementation + *******************************************************************************/ package org.eclipse.che.ide.ext.git.client.compare.changespanel; /** From e6563e65009304e2478586557d6599c97c5538c5 Mon Sep 17 00:00:00 2001 From: Igor Vinokur Date: Wed, 24 May 2017 15:47:05 +0300 Subject: [PATCH 9/9] fixup! CHE-3614: Rework Git commit window --- .../changeslist/ChangesListViewImpl.java | 17 +---------------- .../changeslist/ChangesListViewImpl.ui.xml | 19 ------------------- 2 files changed, 1 insertion(+), 35 deletions(-) delete mode 100644 plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.ui.xml diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.java index 3e7fddac3cf..04ea1ba6056 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.java @@ -10,12 +10,8 @@ *******************************************************************************/ package org.eclipse.che.ide.ext.git.client.compare.changeslist; -import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; @@ -33,14 +29,6 @@ @Singleton public class ChangesListViewImpl extends Window implements ChangesListView { - @UiField - FlowPanel changesPanel; - - interface ChangesListViewImplUiBinder extends UiBinder { - } - - private static ChangesListViewImplUiBinder uiBinder = GWT.create(ChangesListViewImplUiBinder.class); - private final GitLocalizationConstant locale; private ActionDelegate delegate; @@ -51,9 +39,6 @@ protected ChangesListViewImpl(GitLocalizationConstant locale) { this.locale = locale; this.setTitle(locale.changeListTitle()); - Widget widget = uiBinder.createAndBindUi(this); - this.setWidget(widget); - createButtons(); SafeHtmlBuilder shb = new SafeHtmlBuilder(); @@ -95,7 +80,7 @@ public void showDialog() { @Override public void setChangesPanelView(ChangesPanelView changesPanelView) { - changesPanel.add(changesPanelView); + this.setWidget((Widget)changesPanelView); } private void createButtons() { diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.ui.xml deleted file mode 100644 index 811bdb9a4d7..00000000000 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/compare/changeslist/ChangesListViewImpl.ui.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -