1 11 package org.eclipse.team.internal.ccvs.ui.tags; 12 13 import java.util.ArrayList ; 14 import java.util.Arrays ; 15 import java.util.HashSet ; 16 import java.util.List ; 17 import java.util.Set ; 18 19 import org.eclipse.core.resources.IProject; 20 import org.eclipse.core.resources.ResourcesPlugin; 21 import org.eclipse.core.runtime.IProgressMonitor; 22 import org.eclipse.osgi.util.NLS; 23 import org.eclipse.team.core.RepositoryProvider; 24 import org.eclipse.team.core.TeamException; 25 import org.eclipse.team.internal.ccvs.core.*; 26 import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot; 27 import org.eclipse.team.internal.ccvs.ui.CVSUIMessages; 28 import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; 29 30 33 public class LocalProjectTagSource extends TagSource { 34 35 public static TagSource create(IProject seedProject) { 36 try { 37 ICVSRemoteFolder seedFolder = ((ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(seedProject)); 38 ICVSRemoteFolder[] remoteFolders = getProjectRemoteFolders(); 39 if (remoteFolders.length == 1) { 40 return null; 42 } 43 return new LocalProjectTagSource(seedFolder, remoteFolders); 44 } catch (CVSException e) { 45 CVSUIPlugin.log(e); 47 return null; 48 } 49 } 50 51 private ICVSRemoteFolder seedFolder; 52 private ICVSRemoteFolder[] remoteFolders; 53 54 private LocalProjectTagSource(ICVSRemoteFolder seedFolder, ICVSRemoteFolder[] remoteFolders) { 55 this.seedFolder = seedFolder; 56 this.remoteFolders = remoteFolders; 57 } 58 59 62 private static ICVSRemoteFolder[] getProjectRemoteFolders() { 63 IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); 64 List result = new ArrayList (); 65 for (int i = 0; i < projects.length; i++) { 66 IProject project = projects[i]; 67 try { 68 if (project.isAccessible() && RepositoryProvider.isShared(project)) { 69 ICVSRemoteFolder remote = (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(project); 70 if (remote != null) { 71 result.add(remote); 72 } 73 } 74 } catch (CVSException e) { 75 CVSUIPlugin.log(e); 77 } 78 } 79 return (ICVSRemoteFolder[]) result.toArray(new ICVSRemoteFolder[result.size()]); 80 } 81 82 85 public CVSTag[] refresh(boolean bestEffort, IProgressMonitor monitor) throws TeamException { 86 return new CVSTag[0]; 88 } 89 90 93 public ICVSRepositoryLocation getLocation() { 94 return seedFolder.getRepository(); 95 } 96 97 100 public String getShortDescription() { 101 return NLS.bind(CVSUIMessages.LocalProjectTagSource_0, new String [] { Integer.toString(remoteFolders.length) }); 102 } 103 104 107 public void commit(CVSTag[] tags, boolean replace, IProgressMonitor monitor) throws CVSException { 108 } 110 111 114 public ICVSResource[] getCVSResources() { 115 return remoteFolders; 116 } 117 118 121 public CVSTag[] getTags(int type) { 122 if (type == CVSTag.HEAD || type == BASE) { 123 return super.getTags(type); 124 } 125 Set allTags = new HashSet (); 127 for (int i = 0; i < remoteFolders.length; i++) { 128 ICVSRemoteFolder folder = remoteFolders[i]; 129 CVSTag[] tags = SingleFolderTagSource.getTags(folder, type); 130 allTags.addAll(Arrays.asList(tags)); 131 } 132 CVSTag[] tags = SingleFolderTagSource.getTags(seedFolder, type); 134 allTags.removeAll(Arrays.asList(tags)); 135 return (CVSTag[]) allTags.toArray(new CVSTag[allTags.size()]); 136 } 137 138 } 139 | Popular Tags |