refactor: simplify collection.toArray()
[egit/eclipse.git] / org.eclipse.egit.core / src / org / eclipse / egit / core / synchronize / GitRemoteFolder.java
blob801b36faece81c31c34bb3231ddb0216c7e5ad17
1 /*******************************************************************************
2 * Copyright (C) 2011, 2017 Dariusz Luksza <dariusz@luksza.org> and others.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License 2.0
6 * which accompanies this distribution, and is available at
7 * https://www.eclipse.org/legal/epl-2.0/
9 * SPDX-License-Identifier: EPL-2.0
10 *******************************************************************************/
11 package org.eclipse.egit.core.synchronize;
13 import java.util.ArrayList;
14 import java.util.Collection;
15 import java.util.List;
17 import org.eclipse.core.runtime.IProgressMonitor;
18 import org.eclipse.egit.core.internal.CoreText;
19 import org.eclipse.jgit.lib.ObjectId;
20 import org.eclipse.jgit.lib.Repository;
21 import org.eclipse.jgit.revwalk.RevCommit;
22 import org.eclipse.osgi.util.NLS;
23 import org.eclipse.team.core.TeamException;
24 import org.eclipse.team.core.variants.IResourceVariant;
26 class GitRemoteFolder extends GitRemoteResource {
28 private final GitSyncObjectCache cachedData;
29 private final Repository repo;
31 /**
33 * @param repo
34 * @param cachedData
35 * @param commitId
36 * @param objectId
37 * given object sha-1 id or {@code null} if this object doesn't
38 * exist in remote
39 * @param path
41 GitRemoteFolder(Repository repo, GitSyncObjectCache cachedData,
42 RevCommit commitId, ObjectId objectId, String path) {
43 super(commitId, objectId, path);
44 this.repo = repo;
45 this.cachedData = cachedData;
48 @Override
49 public boolean isContainer() {
50 return true;
53 @Override
54 protected void fetchContents(IProgressMonitor monitor) throws TeamException {
55 // should be never used on folder
58 @Override
59 public boolean equals(Object object) {
60 if (object == this)
61 return true;
63 if (object instanceof GitRemoteFolder) {
64 GitRemoteFolder that = (GitRemoteFolder) object;
66 return getPath().equals(that.getPath())
67 && getObjectId().equals(that.getObjectId());
70 return false;
73 @Override
74 public int hashCode() {
75 return getObjectId().hashCode() ^ getPath().hashCode();
78 GitRemoteResource[] members(IProgressMonitor monitor) {
79 Collection<GitSyncObjectCache> members = cachedData.members();
80 if (members == null || members.size() == 0)
81 return new GitRemoteResource[0];
83 List<IResourceVariant> result = new ArrayList<IResourceVariant>();
85 monitor.beginTask(
86 NLS.bind(CoreText.GitRemoteFolder_fetchingMembers, getPath()),
87 cachedData.membersCount());
88 try {
89 for (GitSyncObjectCache member : members) {
90 ThreeWayDiffEntry diffEntry = member.getDiffEntry();
91 String memberPath = diffEntry.getPath();
93 GitRemoteResource obj;
94 ObjectId id = diffEntry.getRemoteId().toObjectId();
95 if (diffEntry.isTree()) {
96 obj = new GitRemoteFolder(repo, member, getCommitId(), id,
97 memberPath);
98 } else {
99 obj = new GitRemoteFile(repo, getCommitId(), id, memberPath,
100 diffEntry.getMetadata());
102 result.add(obj);
103 monitor.worked(1);
105 } finally {
106 monitor.done();
109 return result.toArray(new GitRemoteResource[0]);