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; } }