/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* 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:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.core.utils;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import melnorme.lang.ide.core.EclipseCore;
import melnorme.lang.ide.core.LangCoreMessages;
import melnorme.lang.utils.validators.AbstractValidator;
import melnorme.utilbox.status.StatusException;
public class ProjectValidator extends AbstractValidator {
protected final String natureId;
public ProjectValidator() {
this(null);
}
public ProjectValidator(String natureId) {
this.natureId = natureId;
}
public IProject getProjectHandle(String projectName) throws StatusException {
if(projectName == null || projectName.isEmpty()) {
throw error(msg_ProjectNotSpecified());
}
EclipseUtils.validate(
() -> ResourceUtils.getWorkspace().validateName(projectName, IResource.PROJECT));
return ResourceUtils.getWorkspaceRoot().getProject(projectName);
}
public IProject getProject(String projectName) throws StatusException {
IProject project = getProjectHandle(projectName);
return validateProject(project);
}
public IProject validateProject(IProject project) throws StatusException {
checkProjectNotNull(project);
checkProjectExists(project);
try {
if(natureId != null && !project.hasNature(natureId)) {
throw error(msg_NotAValidLangProject());
}
return project;
} catch(CoreException ce) {
EclipseCore.logStatus(ce);
throw error(ce.getMessage());
}
}
public void checkProjectNotNull(IProject project) throws StatusException {
if(project == null) {
throw error(msg_ProjectNotSpecified());
}
}
public void checkProjectExists(IProject project) throws StatusException {
if(!project.exists()) {
throw error(msg_ProjectDoesNotExist());
}
}
public String msg_ProjectNotSpecified(){
return LangCoreMessages.error_selectProject;
}
public String msg_ProjectDoesNotExist() {
return LangCoreMessages.error_projectDoesNotExist;
}
public String msg_NotAValidLangProject() {
return LangCoreMessages.error_notAValidProject;
}
}