diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFileContentRegistry.java')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFileContentRegistry.java | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFileContentRegistry.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFileContentRegistry.java new file mode 100644 index 0000000000..054f61261d --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaFileContentRegistry.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2007 Oracle. 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: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.core.internal; + +import java.io.IOException; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.content.IContentType; + +public class JpaFileContentRegistry +{ + private JpaFileContentRegistry() { + super(); + } + + public static IJpaFile getFile(IJpaProject jpaProject, IFile file) { + //attempting to get the contentType based on the file contents. + //have to check the file contents instead of just the file name + //because for xml we base it on the rootElement name + IContentType contentType = null; + try { + contentType = (file == null) ? + null : + Platform.getContentTypeManager().findContentTypeFor(file.getContents(), file.getName()); + } + catch (IOException e) { + JpaCorePlugin.log(e); + } + catch (CoreException e) { + JpaCorePlugin.log(e); + } + if (contentType == null) { + return null; + } + String contentTypeId = contentType.getId(); + IJpaRootContentNode content = buildContent(jpaProject, file, contentTypeId); + + if (content == null) { + return null; + } + JpaFile jpaFile = JpaCoreFactory.eINSTANCE.createJpaFile(); + jpaFile.setFile(file); + jpaFile.setContentId(contentTypeId); + jpaFile.setContent(content); + + return jpaFile; + } + + private static IJpaRootContentNode buildContent(IJpaProject jpaProject, IFile file, String contentTypeId) { + for (IJpaFileContentProvider provider : jpaProject.getPlatform().jpaFileContentProviders()) { + if (provider.contentType().equals(contentTypeId)) { + return provider.buildRootContent(file); + } + } + return null; + } +} |