/******************************************************************************* * Copyright (c) 2008-2010 Sonatype, Inc. * 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 * * Contributors: * Sonatype, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.m2e.core.project; import java.util.regex.Matcher; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.osgi.util.NLS; import org.apache.maven.model.Model; import org.eclipse.m2e.core.internal.IMavenConstants; import org.eclipse.m2e.core.internal.Messages; /** * Project import configuration bean. */ public class ProjectImportConfiguration { private static final String GROUP_ID = "\\[groupId\\]"; //$NON-NLS-1$ private static final String ARTIFACT_ID = "\\[artifactId\\]"; //$NON-NLS-1$ private static final String VERSION = "\\[version\\]"; //$NON-NLS-1$ private static final String NAME = "\\[name\\]"; //$NON-NLS-1$ /** resolver configuration bean */ private ResolverConfiguration resolverConfiguration; /** the project name template */ private String projectNameTemplate = ""; //$NON-NLS-1$ /** Creates a new configuration. */ public ProjectImportConfiguration(ResolverConfiguration resolverConfiguration) { this.resolverConfiguration = resolverConfiguration; } /** Creates a new configuration. */ public ProjectImportConfiguration() { this(new ResolverConfiguration()); } /** Returns the resolver configuration bean. */ public ResolverConfiguration getResolverConfiguration() { return resolverConfiguration; } /** Sets the project name template. */ public void setProjectNameTemplate(String projectNameTemplate) { this.projectNameTemplate = projectNameTemplate; } /** Returns the project name template. */ public String getProjectNameTemplate() { return projectNameTemplate; } /** * Calculates the project name for the given model. * * @deprecated This method does not take into account MavenProjectInfo.basedirRename */ public String getProjectName(Model model) { // XXX should use resolved MavenProject or Model if(projectNameTemplate.length() == 0) { return cleanProjectNameComponent(model.getArtifactId(), false); } String artifactId = model.getArtifactId(); String groupId = model.getGroupId(); if(groupId == null && model.getParent() != null) { groupId = model.getParent().getGroupId(); } String version = model.getVersion(); if(version == null && model.getParent() != null) { version = model.getParent().getVersion(); } String name = model.getName(); if(name == null || name.trim().isEmpty()) { name = artifactId; } // XXX needs MavenProjectManager update to resolve groupId and version return projectNameTemplate.replaceAll(GROUP_ID, cleanProjectNameComponent(groupId, true)) .replaceAll(ARTIFACT_ID, cleanProjectNameComponent(artifactId, true)) .replaceAll(NAME, cleanProjectNameComponent(name, true)) .replaceAll(VERSION, version == null ? "" : cleanProjectNameComponent(version, true)); //$NON-NLS-1$ } private static final String cleanProjectNameComponent(String value, boolean quote) { // remove property placeholders value = value.replaceAll("\\$\\{[^\\}]++\\}", ""); //$NON-NLS-1$ $NON-NLS-2$ if(quote) { value = Matcher.quoteReplacement(value); } return value; } /** * @deprecated This method does not take into account MavenProjectInfo.basedirRename. Use * IMavenProjectImportResult#getProject instead */ public IProject getProject(IWorkspaceRoot root, Model model) { return root.getProject(getProjectName(model)); } /** * @deprecated business logic does not belong to a value object */ public IStatus validateProjectName(Model model) { String projectName = getProjectName(model); IWorkspace workspace = ResourcesPlugin.getWorkspace(); // check if the project name is valid IStatus nameStatus = workspace.validateName(projectName, IResource.PROJECT); if(!nameStatus.isOK()) { return nameStatus; } // check if project already exists if(workspace.getRoot().getProject(projectName).exists()) { return new Status(IStatus.ERROR, IMavenConstants.PLUGIN_ID, 0, NLS.bind(Messages.importProjectExists, projectName), null); //$NON-NLS-1$ } return Status.OK_STATUS; } }