/******************************************************************************* * Copyright (c) 2001, 2011 IBM Corporation 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: * IBM Corporation - initial API and implementation * Jens Lukowski/Innoopract - initial renaming/restructuring * *******************************************************************************/ package org.eclipse.wst.sse.ui.internal.provisional.extensions; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.core.runtime.content.IContentTypeManager; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.part.MultiPageEditorSite; public class ConfigurationPointCalculator { public static final String DESIGN = ".design"; //$NON-NLS-1$ public static final String SOURCE = ".source"; //$NON-NLS-1$ public static String[] getConfigurationPoints(IEditorPart part, String contentType, String subContext, Class rootClass) { ConfigurationPointCalculator calculator = new ConfigurationPointCalculator(); calculator.setContentType(contentType); calculator.setPart(part); calculator.setRootClass(rootClass); calculator.setSubContext(subContext); return calculator.getConfigurationPoints(); } protected String fContentType = null; protected IWorkbenchPart fPart = null; protected Class fRootClass = null; protected String fSubContext = null; /** * */ public ConfigurationPointCalculator() { super(); } public String[] getConfigurationPoints() { List points = new ArrayList(2); IWorkbenchPartSite site = null; if (fPart != null) { site = fPart.getSite(); if (site != null) { String id = site.getId(); if (id != null && id.length() > 0 && !id.equals(fRootClass.getName())) points.add(id); } if (site instanceof MultiPageEditorSite) { String multipageID = ((MultiPageEditorSite) site).getMultiPageEditor().getSite().getId(); if (!points.contains(multipageID)) points.add(multipageID); String sourcePageID = ((MultiPageEditorSite) site).getMultiPageEditor().getSite().getId() + ".source"; //$NON-NLS-1$ if (!points.contains(sourcePageID)) points.add(sourcePageID); } if (site instanceof MultiPageEditorSite) { String multipageClassName = ((MultiPageEditorSite) site).getMultiPageEditor().getClass().getName(); if (!points.contains(multipageClassName)) points.add(multipageClassName); } Class editorClass = fPart.getClass(); while (editorClass != null && fRootClass != null && !editorClass.equals(fRootClass)) { if (!points.contains(editorClass.getName())) points.add(editorClass.getName()); editorClass = editorClass.getSuperclass(); } } if (fContentType != null) { IContentType contentType = Platform.getContentTypeManager().getContentType(fContentType); while (contentType != null && !contentType.getId().equals(IContentTypeManager.CT_TEXT)) { if (!points.contains(contentType.getId())) points.add(contentType.getId()); contentType = contentType.getBaseType(); } } if (fRootClass != null && !points.contains(fRootClass.getName())) points.add(fRootClass.getName()); return (String[]) points.toArray(new String[0]); } /** * @return Returns the contentType. */ public String getContentType() { return fContentType; } /** * @return Returns the part. */ public IWorkbenchPart getPart() { return fPart; } /** * @return Returns the rootClass. */ public Class getRootClass() { return fRootClass; } /** * @return Returns the subContext. */ public String getSubContext() { return fSubContext; } /** * @param contentType * The contentType to set. */ public void setContentType(String contentType) { fContentType = contentType; } /** * @param part * The part to set. */ public void setPart(IWorkbenchPart part) { fPart = part; } /** * @param rootClass * The rootClass to set. */ public void setRootClass(Class rootClass) { fRootClass = rootClass; } /** * @param subContext * The subContext to set. */ public void setSubContext(String subContext) { fSubContext = subContext; } }