/******************************************************************************* * Copyright (c) 2008 Scott Stanchfield * 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 *******************************************************************************/ package com.javadude.workingsets.m2eclipse; import java.util.Set; import java.util.regex.Pattern; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkingSet; import org.maven.ide.eclipse.MavenPlugin; import org.maven.ide.eclipse.embedder.ArtifactKey; import org.maven.ide.eclipse.project.IMavenProjectChangedListener; import org.maven.ide.eclipse.project.IMavenProjectFacade; import org.maven.ide.eclipse.project.MavenProjectChangedEvent; import org.maven.ide.eclipse.project.MavenProjectManager; import com.javadude.workingsets.DynamicWorkingSetUpdater; /** * An updater for regex working sets. This defines the working set it * and a filter that specifies which projects should be included. * @author Scott Stanchfield */ public class M2EclipseWorkingSetUpdater extends DynamicWorkingSetUpdater { public M2EclipseWorkingSetUpdater() { super("Maven: "); MavenProjectManager projectManager = MavenPlugin.getDefault().getMavenProjectManager(); projectManager.addMavenProjectChangedListener(new IMavenProjectChangedListener() { public void mavenProjectChanged(MavenProjectChangedEvent[] events, IProgressMonitor arg1) { for (MavenProjectChangedEvent event : events) { IProject p = event.getMavenProject().getProject(); Set<IWorkingSet> setsContainingProject = setsContainingProject(p); // add to appropriate working sets addToWorkingSets(p, setsContainingProject); for (IWorkingSet workingSet : setsContainingProject) { removeFromWorkingSet(workingSet, p); } } } }); } @Override protected boolean shouldInclude(IResource resource, String workingSetId) { if (!(resource instanceof IProject)) { return false; } IProject project = (IProject) resource; String stuff = workingSetId.substring("group=".length()); int i = stuff.indexOf('\n'); String group = stuff.substring(0, i); String artifact = stuff.substring(i + 10); Pattern groupPattern = null; Pattern artifactPattern = null; if (!"".equals(group) && !".*".equals(group)) { groupPattern = Pattern.compile(group); } if (!"".equals(artifact) && !".*".equals(artifact)) { artifactPattern = Pattern.compile(artifact); } try { if (!project.isOpen() || !project.hasNature("org.maven.ide.eclipse.maven2Nature")) { return false; } } catch (CoreException e) { throw new RuntimeException(e); } MavenProjectManager projectManager = MavenPlugin.getDefault().getMavenProjectManager(); IMavenProjectFacade facade = projectManager.create(project, null); if (facade!=null) { ArtifactKey artifactKey = facade.getArtifactKey(); if (groupPattern != null && !groupPattern.matcher(artifactKey.getGroupId()).matches()) { return false; } if (artifactPattern != null && !artifactPattern.matcher(artifactKey.getArtifactId()).matches()) { return false; } } return true; } }