| /* |
| * Copyright 2000-2009 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.jetbrains.idea.svn.checkout; |
| |
| import com.intellij.openapi.progress.ProgressIndicator; |
| import com.intellij.openapi.progress.ProgressManager; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.wm.StatusBar; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.idea.svn.SvnBundle; |
| import org.jetbrains.idea.svn.SvnVcs; |
| import org.jetbrains.idea.svn.api.EventAction; |
| import org.jetbrains.idea.svn.api.ProgressEvent; |
| import org.jetbrains.idea.svn.api.ProgressTracker; |
| import org.tmatesoft.svn.core.SVNCancelException; |
| import org.tmatesoft.svn.core.SVNErrorCode; |
| import org.tmatesoft.svn.core.SVNErrorMessage; |
| |
| public class CheckoutEventHandler implements ProgressTracker { |
| @Nullable private final ProgressIndicator myIndicator; |
| private int myExternalsCount; |
| @NotNull private final SvnVcs myVCS; |
| private final boolean myIsExport; |
| private int myCnt; |
| |
| public CheckoutEventHandler(@NotNull SvnVcs vcs, boolean isExport, @Nullable ProgressIndicator indicator) { |
| myIndicator = indicator; |
| myVCS = vcs; |
| myExternalsCount = 1; |
| myIsExport = isExport; |
| myCnt = 0; |
| } |
| |
| public void consume(ProgressEvent event) { |
| if (event.getPath() == null) { |
| return; |
| } |
| if (event.getAction() == EventAction.UPDATE_EXTERNAL) { |
| myExternalsCount++; |
| progress(SvnBundle.message("progress.text2.fetching.external.location", event.getFile().getAbsolutePath())); |
| } |
| else if (event.getAction() == EventAction.UPDATE_ADD) { |
| progress2(SvnBundle.message(myIsExport ? "progress.text2.exported" : "progress.text2.checked.out", event.getFile().getName(), myCnt)); |
| ++ myCnt; |
| } |
| else if (event.getAction() == EventAction.UPDATE_COMPLETED) { |
| myExternalsCount--; |
| progress2( |
| (SvnBundle.message(myIsExport ? "progress.text2.exported.revision" : "progress.text2.checked.out.revision", event.getRevision()))); |
| if (myExternalsCount == 0 && event.getRevision() >= 0) { |
| myExternalsCount = 1; |
| Project project = myVCS.getProject(); |
| if (project != null) { |
| StatusBar.Info.set(SvnBundle.message(myIsExport ? "progress.text2.exported.revision" : "status.text.checked.out.revision", event.getRevision()), project); |
| } |
| } |
| } else if (event.getAction() == EventAction.COMMIT_ADDED) { |
| progress2((SvnBundle.message("progress.text2.adding", event.getPath()))); |
| } else if (event.getAction() == EventAction.COMMIT_DELTA_SENT) { |
| progress2((SvnBundle.message("progress.text2.transmitting.delta", event.getPath()))); |
| } |
| } |
| |
| public void checkCancelled() throws SVNCancelException { |
| if (myIndicator != null && myIndicator.isCanceled()) { |
| throw new SVNCancelException(SVNErrorMessage.create(SVNErrorCode.CANCELLED, "Operation cancelled")); |
| } |
| } |
| |
| private void progress(@NotNull String text) { |
| if (myIndicator != null) { |
| myIndicator.checkCanceled(); |
| myIndicator.setText(text); |
| myIndicator.setText2(""); |
| } else { |
| ProgressManager.progress(text); |
| } |
| } |
| |
| private void progress2(@NotNull String text) { |
| if (myIndicator != null) { |
| myIndicator.checkCanceled(); |
| myIndicator.setText2(text); |
| } else { |
| ProgressManager.progress2(text); |
| } |
| } |
| } |