/** * Returns a list of project names referenced in the team project set <code>input</code> for the * provider <code>prooviderType</code>. * * @throws CoreException */ public static List<String> readProjectReferences( InputStream input, RepositoryProviderType providerType) throws CoreException { try { List<String> referenceStrings = new ArrayList<String>(); XmlMemento[] providers = importProjectSet(input); for (XmlMemento provider : providers) { if (provider.getString("id").equals(providerType.getID())) { // $NON-NLS-1$ XmlMemento[] projects = provider.getChildren("project"); // $NON-NLS-1$ for (XmlMemento project : projects) { referenceStrings.add(project.getString("reference")); // $NON-NLS-1$ } } } return referenceStrings; } catch (Exception e) { throw new CoreException( new Status( IStatus.ERROR, ScmInternal.ID_PLUGIN, "Unexpected error reading project sets.", e)); //$NON-NLS-1$ } }
/** * Returns a team project set for <code>projects</code>. * * @param projects the projects to include * @return an XML document * @throws CoreException indicates that the team project set could not be created */ public static ByteArrayOutputStream exportProjectSet(List<IProject> projects) throws CoreException { Map<String, Set<IProject>> map = new HashMap<String, Set<IProject>>(); for (IProject project : projects) { RepositoryProvider provider = RepositoryProvider.getProvider(project); if (provider != null) { String id = provider.getID(); Set<IProject> list = map.get(id); if (list == null) { list = new TreeSet<IProject>( new Comparator<IProject>() { public int compare(IProject o1, IProject o2) { return o1.getName().toLowerCase().compareTo(o2.getName().toLowerCase()); } }); map.put(id, list); } list.add(project); } } BufferedWriter writer = null; ByteArrayOutputStream output = new ByteArrayOutputStream(); try { writer = new BufferedWriter(new OutputStreamWriter(output, "UTF-8")); // $NON-NLS-1$ XmlMemento xmlMemento = getXMLMementoRoot(); Iterator<String> it = map.keySet().iterator(); while (it.hasNext()) { String id = it.next(); XmlMemento memento = xmlMemento.createChild("provider"); // $NON-NLS-1$ memento.putString("id", id); // $NON-NLS-1$ Set<IProject> list = map.get(id); IProject[] projectArray = list.toArray(new IProject[list.size()]); RepositoryProviderType providerType = RepositoryProviderType.getProviderType(id); ProjectSetCapability serializer = providerType.getProjectSetCapability(); ProjectSetCapability.ensureBackwardsCompatible(providerType, serializer); if (serializer != null) { String[] references = serializer.asReference(projectArray, null, null); for (String reference : references) { XmlMemento proj = memento.createChild("project"); // $NON-NLS-1$ proj.putString("reference", reference); // $NON-NLS-1$ } } } xmlMemento.save(writer); return output; } catch (Exception e) { throw new CoreException( new Status( IStatus.ERROR, ScmInternal.ID_PLUGIN, "Unexpected error exporting project sets.", e)); //$NON-NLS-1$ } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { // ignore } } } }