blob: 1aa8ae410daff37ec7c6fa350f6142a6179ba1ff [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2008 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();
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;
}
}