/******************************************************************************* * Copyright (c) 2004, 2013 IBM Corporation and others. * Copyright (C) 2007, Martin Oberhuber (martin.oberhuber@windriver.com) * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> * Copyright (C) 2009, Mykola Nikishov <mn@mn.com.ua> * Copyright (C) 2010, Wim Jongman <wim.jongman@remainsoftware.com> * Copyright (C) 2010, Benjamin Muskalla <bmuskalla@eclipsesource.com> * Copyright (C) 2011, Mathias Kinzler <mathias.kinzler@sap.com> * * 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 org.eclipse.egit.ui.internal.clone; import java.io.File; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.osgi.util.NLS; /** * Used for creating projects out of .project files */ public class ProjectRecord { private final File projectSystemFile; private String projectName; private IProjectDescription description; /** * Create a record for a project based on the info in the file. * * @param file */ public ProjectRecord(File file) { projectSystemFile = file; IPath path = new Path(projectSystemFile.getPath()); try { // If the file is in the default location, use the directory // name as the project name. Otherwise we will get an error like // "foo overlaps the location of another project foo" when importing // in case the directory name and the name in .project do not match. if (isDefaultLocation(path)) { projectName = path.segment(path.segmentCount() - 2); description = ResourcesPlugin.getWorkspace() .newProjectDescription(projectName); } else { description = ResourcesPlugin.getWorkspace() .loadProjectDescription(path); projectName = description.getName(); } } catch (CoreException e) { description = null; projectName = path.lastSegment(); } } /** * Get the name of the project * * @return String */ public String getProjectName() { return projectName; } /** * Gets the label to be used when rendering this project record in the UI. * * @return String the label */ public String getProjectLabel() { String path = projectSystemFile.getParent(); return NLS.bind("{0} ({1})", projectName, path); //$NON-NLS-1$ } /** * @return the project description */ public IProjectDescription getProjectDescription() { return description; } /** * @param description */ public void setProjectDescription(IProjectDescription description) { this.description = description; } /** * @return the file used in the constructor */ public File getProjectSystemFile() { return projectSystemFile; } @Override public String toString() { return projectName; } /** * Returns whether the given project description file path is in the default * location for a project * * @param path * The path to examine * @return Whether the given path is the default location for a project */ private boolean isDefaultLocation(IPath path) { // The project description file must at least be within the project, // which is within the workspace location if (path.segmentCount() < 2) return false; return path.removeLastSegments(2).toFile() .equals(Platform.getLocation().toFile()); } }