Skip to main content
summaryrefslogblamecommitdiffstats
blob: dbbec780faf73c9cce2c7170f41305262bdba0d6 (plain) (tree)



























































































                                                                                                                            


                                




















                                                                                                                   


                                  
















                                                                                              



                                            










                                                                                             
/*******************************************************************************
 * Copyright (c) 2006 Sybase, Inc. 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:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.pagedesigner.properties.internal;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor;
import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptorProvider;

/**
 * The DesignerTagPropertySectionDescriptorProvider will provide the section
 * descriptiors. Now section descriptor come from two sources.
 * 
 * One is reading from the "org.eclipse.jst.pagedesigner.propertyContributor"
 * extension point. This extension point will contribute additional section
 * providers, which provides a set of sections.
 * 
 * One is reading from the "org.eclipse.jst.pagedesigner.propertySections"
 * extension point. This extension provide a single section.
 * 
 * @author mengbo
 * @version 1.5
 */
public class DesignerTabPropertySectionDescriptorProvider implements
		ISectionDescriptorProvider {
	private static final String EXTPT_SECTIONS = "propertySections"; //$NON-NLS-1$

	private static final String ELEMENT_SECTION = "propertySection"; //$NON-NLS-1$

	private static final String EXTPT_SECTIONDESCRIPTORPROVIDER = "propertyContributor";

	private static final String ELEMENT_PROPERTYCONTRIBUTOR = "propertyContributor";

	private static final String ATTR_SECTIONDESCRIPTORPROVIDER = "sectionDescriptorProvider";

	ISectionDescriptor[] _descriptors = null;

	/**
	 * 
	 */
	public DesignerTabPropertySectionDescriptorProvider() {
		super();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptorProvider#getSectionDescriptors()
	 */
	public ISectionDescriptor[] getSectionDescriptors() {
		if (_descriptors == null) {
			List result = new ArrayList();
			List contributedSections = readSectionDescriptors();
			result.addAll(contributedSections);

			List providers = readAdditionalSectionDescriptorProviders();
			for (int i = 0, size = providers.size(); i < size; i++) {
				try {
					ISectionDescriptorProvider provider = (ISectionDescriptorProvider) providers
							.get(i);
					ISectionDescriptor[] sections = provider
							.getSectionDescriptors();
					if (sections != null) {
						result.addAll(Arrays.asList(sections));
					}
				} catch (Exception ex) {
					// ignore
					ex.printStackTrace();
				}
			}
			_descriptors = new ISectionDescriptor[result.size()];
			result.toArray(_descriptors);
		}
		return _descriptors;
	}

	/**
	 * @return the providers
	 */
	protected List readAdditionalSectionDescriptorProviders() {
		List result = new ArrayList();
		IConfigurationElement[] extensions = getConfigurationElements(EXTPT_SECTIONDESCRIPTORPROVIDER);
		for (int i = 0; i < extensions.length; i++) {
			IConfigurationElement extension = extensions[i];
			if (ELEMENT_PROPERTYCONTRIBUTOR.equals(extension.getName())) {
				IConfigurationElement contributor = extension;
				try {
					Object obj = contributor
							.createExecutableExtension(ATTR_SECTIONDESCRIPTORPROVIDER);
					if (obj instanceof ISectionDescriptorProvider) {
						result.add(obj);
					}
				} catch (CoreException ex) {
					ex.printStackTrace();
				}
			}
		}
		return result;
	}

	/**
	 * @return the descriptors
	 */
	protected List readSectionDescriptors() {
		List result = new ArrayList();
		IConfigurationElement[] extensions = getConfigurationElements(EXTPT_SECTIONS);
		for (int i = 0; i < extensions.length; i++) {
			IConfigurationElement extension = extensions[i];
			IConfigurationElement[] sections = extension
					.getChildren(ELEMENT_SECTION);
			for (int j = 0; j < sections.length; j++) {
				IConfigurationElement section = sections[j];
				ISectionDescriptor descriptor = new DesignerSectionDescriptor(
						section);
				result.add(descriptor);
			}
		}
		return result;
	}

	/**
	 * @param extensionPointId
	 * @return the configuration element
	 */
	public static IConfigurationElement[] getConfigurationElements(
			String extensionPointId) {
		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
				.getExtensionPoint(PDPlugin.getPluginId(), extensionPointId);

		if (extensionPoint == null) {
			return null;
		}
		return extensionPoint.getConfigurationElements();
	}
}

Back to the top