package org.hibernate.eclipse.console.wizards;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceProxy;
import org.eclipse.core.resources.IResourceProxyVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IJavaProject;
/**
* A visitor class that will make a "best guess" on which files the user
* want for the properties and config file.
*
* @author max
*
*/
public class BestGuessConsoleConfigurationVisitor implements IResourceProxyVisitor {
private IPath propertyFile;
private IPath configFile;
private IPath persistencexml;
private IJavaProject javaProject;
private List<IPath> classpath = new ArrayList<IPath>();
private List<IPath> mappings = new ArrayList<IPath>();
public IPath getPropertyFile() {
return propertyFile;
}
public IPath getConfigFile() {
return configFile;
}
public IPath getPersistencexml() {
return persistencexml;
}
public IJavaProject getJavaProject() {
return javaProject;
}
public List<IPath> getClasspath() {
return classpath;
}
public List<IPath> getMappings() {
return mappings;
}
public boolean visit(IResourceProxy proxy) throws CoreException {
// System.out.println("visit: " + proxy.getName() );
IPath fullPath = proxy.requestFullPath();
if (proxy.getType() == IResource.FILE) {
if ("hibernate.properties".equals(proxy.getName())) { //$NON-NLS-1$
propertyFile = fullPath;
return false;
}
if ("hibernate.cfg.xml".equals(proxy.getName())) { //$NON-NLS-1$
configFile = fullPath;
mappings.clear(); // we prefer af cfg.xml over mappings
return false;
}
if ("persistence.xml".equals(proxy.getName())) { //$NON-NLS-1$
if (javaProject != null
&& javaProject.isOnClasspath(proxy
.requestResource())) {
persistencexml = fullPath;
mappings.clear();
return false;
}
}
// only add mappings if we don't have a config file.
if ((configFile == null || persistencexml == null)
&& proxy.getName().endsWith(".hbm.xml")) { //$NON-NLS-1$
mappings.add(fullPath);
return false;
}
} else if (proxy.getType() == IResource.FOLDER) {
if (javaProject != null && javaProject.exists()) {
if (javaProject.getOutputLocation().isPrefixOf(fullPath)) {
// classpath.add(fullPath);
return false; // skip output locations
}
}
}
return true;
}
public void setJavaProject(IJavaProject project) {
javaProject = project;
}
}