| /******************************************************************************* |
| * Copyright (c) 2009 Standards for Technology in Automotive Retail and others. |
| * 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: |
| * David Carver (bug 264788) - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.xsl.core.internal.util; |
| |
| import java.util.*; |
| |
| import org.eclipse.core.runtime.*; |
| import org.eclipse.core.runtime.content.*; |
| |
| /** |
| * XMLContetType handles the gathering of XML content type related information |
| * between the platforms xml content type and WTP's specific version. |
| * |
| * @author David Carver |
| * @since 1.0 |
| * |
| */ |
| public class XMLContentType { |
| private static final String XMLSOURCE_CONTENTTYPE = "org.eclipse.wst.xml.core.xmlsource"; //$NON-NLS-1$ |
| private static final String PLATFORM_XMLSOURCE_CONTENTTYPE = "org.eclipse.core.runtime.xml"; //$NON-NLS-1$ |
| |
| private IContentTypeManager contentTypeManager = null; |
| |
| public XMLContentType() { |
| contentTypeManager = Platform.getContentTypeManager(); |
| IContentType contentType; |
| } |
| |
| /** |
| * Returns all the extensions associated with an XML Content Type. |
| * @return The array of file extensions |
| * @since 1.0 |
| */ |
| public String[] getFileExtensions() { |
| IContentType[] contentTypes = getAllXMLContentTypes(); |
| ArrayList<String> xmlFileExtensions = new ArrayList<String>(); |
| if (contentTypes.length > 0) { |
| for (int cnt = 0; cnt < contentTypes.length; cnt++) { |
| String[] exts = getFileSpecs(contentTypes[cnt]); |
| if (exts != null) { |
| for (int sub = 0; sub < exts.length; sub++) { |
| if (!xmlFileExtensions.contains(exts[sub])) { |
| xmlFileExtensions.add(exts[sub]); |
| } |
| } |
| } |
| } |
| } |
| |
| String[] fileExtensions = new String[xmlFileExtensions.size()]; |
| xmlFileExtensions.toArray(fileExtensions); |
| return fileExtensions; |
| } |
| |
| private IContentType[] getAllXMLContentTypes() { |
| ArrayList<IContentType> arrayList = new ArrayList<IContentType>(Arrays.asList(contentTypeManager.getAllContentTypes())); |
| ArrayList<IContentType> copyContents = (ArrayList)arrayList.clone(); |
| |
| for(IContentType contentType : arrayList) { |
| if (!isXMLContentType(contentType)) { |
| copyContents.remove(contentType); |
| } |
| } |
| IContentType[] contentTypes = new IContentType[copyContents.size()]; |
| copyContents.toArray(contentTypes); |
| return contentTypes; |
| } |
| |
| private boolean isXMLContentType(IContentType contentType) { |
| return contentType.getId().equals(PLATFORM_XMLSOURCE_CONTENTTYPE) || |
| contentType.getId().equals(XMLSOURCE_CONTENTTYPE) || |
| isKindOfWTPXML(contentType) || |
| isKindOfXMLSource(contentType); |
| } |
| |
| private boolean isKindOfXMLSource(IContentType contentType) { |
| IContentType platformContentType = contentTypeManager.getContentType(PLATFORM_XMLSOURCE_CONTENTTYPE); |
| boolean returnValue = false; |
| if (platformContentType != null) { |
| returnValue = contentType.isKindOf(platformContentType); |
| } |
| return returnValue; |
| } |
| |
| private boolean isKindOfWTPXML(IContentType contentType) { |
| IContentType wtpContentType = contentTypeManager.getContentType(XMLSOURCE_CONTENTTYPE); |
| boolean returnValue = false; |
| if (wtpContentType != null) { |
| returnValue = contentType.isKindOf(wtpContentType); |
| } |
| return returnValue; |
| } |
| |
| private String[] getFileSpecs(IContentType contentType) { |
| return contentType.getFileSpecs(IContentType.FILE_EXTENSION_SPEC); |
| } |
| } |