package org.hibernate.eclipse.mapper.editors; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; import org.hibernate.console.ConsoleConfiguration; import org.hibernate.eclipse.console.common.HibernateExtension; import org.hibernate.eclipse.mapper.MapperPlugin; import org.hibernate.eclipse.nature.HibernateNature; import org.jboss.tools.hibernate.runtime.spi.IService; import org.jboss.tools.hibernate.runtime.spi.ServiceLookup; public class StructuredTextViewerConfigurationUtil { static public IJavaProject findJavaProject(ITextViewer viewer) { if(viewer==null) return null; IStructuredModel existingModelForRead = StructuredModelManager.getModelManager().getExistingModelForRead(viewer.getDocument()); if(existingModelForRead==null) return null; IJavaProject javaProject = null; try { String baseLocation = existingModelForRead.getBaseLocation(); // 20041129 (pa) the base location changed for XML model // because of FileBuffers, so this code had to be updated // https://bugs.eclipse.org/bugs/show_bug.cgi?id=79686 IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IPath filePath = new Path(baseLocation); IProject project = null; if (filePath.segmentCount() > 0) { project = root.getProject(filePath.segment(0)); } if (project != null) { javaProject = JavaCore.create(project); } } catch (Exception ex) { MapperPlugin.getDefault().logException(ex); } return javaProject; } static public IJavaProject findJavaProject(IDocument doc) { IResource resource = getProject(doc); if(resource!=null) { IProject project = resource.getProject(); if(project!=null) { return JavaCore.create(project); } } return null; } static public IJavaProject findJavaProject(ContentAssistRequest request) { IResource resource = getProject(request); if(resource!=null) { IProject project = resource.getProject(); if(project!=null) { return JavaCore.create(project); } } return null; } static public IProject getProject(ContentAssistRequest request) { if (request != null) { IStructuredDocumentRegion region = request.getDocumentRegion(); if (region != null) { IDocument document = region.getParentDocument(); return getProject( document ); } } return null; } static public IProject getProject(IDocument document) { IStructuredModel model = null; try { model = StructuredModelManager.getModelManager().getExistingModelForRead(document); if (model != null) { String baselocation = model.getBaseLocation(); if (baselocation != null) { // copied from JSPTranslationAdapter#getJavaProject IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IPath filePath = new Path(baselocation); if (filePath.segmentCount() > 0) { return root.getProject(filePath.segment(0)); } } } return null; } finally { if (model != null) model.releaseFromRead(); } } public static IService getService(ISourceViewer sourceViewer) { IJavaProject javaProject = findJavaProject(sourceViewer); HibernateNature hibnat = HibernateNature.getHibernateNature(javaProject); if (hibnat != null) { ConsoleConfiguration cc = hibnat.getDefaultConsoleConfiguration(); if (cc != null) { HibernateExtension extension = cc.getHibernateExtension(); if (extension != null) { return extension.getHibernateService(); } } } return ServiceLookup.getDefault(); } }