blob: fb513d2e5d6ed712fc6c0bafaef1c1a21081b8b7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 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
*******************************************************************************/
package org.eclipse.wst.common.snippets.internal.palette;
import java.util.Iterator;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.PluginVersionIdentifier;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.wst.common.snippets.core.ISnippetCategory;
import org.eclipse.wst.common.snippets.core.ISnippetVariable;
import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
import org.eclipse.wst.common.snippets.internal.Logger;
import org.eclipse.wst.common.snippets.internal.PluginRecord;
import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
import org.eclipse.wst.common.snippets.internal.util.StringUtils;
import org.osgi.framework.Bundle;
public class ModelFactoryForPlugins extends AbstractModelFactory {
private static ModelFactoryForPlugins instance = null;
public synchronized static ModelFactoryForPlugins getInstance() {
if (instance == null)
instance = new ModelFactoryForPlugins();
return instance;
}
public ModelFactoryForPlugins() {
super();
}
protected void addDefinitionFromExtension(SnippetDefinitions definitions, IConfigurationElement element) {
String name = element.getName();
if (name.equals(SnippetsPlugin.NAMES.CATEGORY)) {
ISnippetCategory category = createCategory(element);
if (category != null) {
assignSource(category, definitions, element);
definitions.getCategories().add(category);
if (Logger.DEBUG_DEFINITION_PERSISTENCE) {
System.out.println("Plugin reader creating category " + ((SnippetPaletteDrawer) category).getId()); //$NON-NLS-1$
}
// add items for category
IConfigurationElement[] children = element.getChildren(SnippetsPlugin.NAMES.ITEM);
for (int i = 0; i < children.length; i++) {
IConfigurationElement child = children[i];
SnippetPaletteItem item = createItem(child);
if (item != null) {
// add item's associated category
setProperty(item, SnippetsPlugin.NAMES.CATEGORY, element.getAttribute(SnippetsPlugin.NAMES.ID));
assignSource(item, definitions, element);
definitions.getItems().add(item);
if (Logger.DEBUG_DEFINITION_PERSISTENCE)
System.out.println("Plugin reader creating item " + item.getId()); //$NON-NLS-1$
}
}
}
}
}
protected void assignSource(ISnippetsEntry entry, SnippetDefinitions definitions, IConfigurationElement element) {
PluginRecord record = getPluginRecordFor(definitions, element);
if (entry instanceof SnippetPaletteItem) {
((SnippetPaletteItem) entry).setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS);
((SnippetPaletteItem) entry).setSourceDescriptor(record);
}
if (entry instanceof SnippetPaletteDrawer) {
((SnippetPaletteDrawer) entry).setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS);
((SnippetPaletteDrawer) entry).setSourceDescriptor(record);
}
((PaletteEntry) entry).setUserModificationPermission(PaletteEntry.PERMISSION_HIDE_ONLY);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.common.snippets.internal.palette.AbstractModelFactory#createCategory(java.lang.Object)
*/
public SnippetPaletteDrawer createCategory(Object source) {
SnippetPaletteDrawer result = super.createCategory(source);
if (result != null)
result.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED);
return result;
}
protected String[] getDefaultFilters() {
return new String[]{"*"}; //$NON-NLS-1$
}
protected String getID(Object source) {
if (source instanceof IConfigurationElement)
return ((IConfigurationElement) source).getAttribute(SnippetsPlugin.NAMES.ID);
return null;
}
protected PluginRecord getPluginRecordFor(SnippetDefinitions definitions, IConfigurationElement element) {
String id = element.getDeclaringExtension().getNamespace();
Bundle bundle = Platform.getBundle(id);
String version = (String) bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
PluginVersionIdentifier identifier = new PluginVersionIdentifier(version);
PluginRecord record = new PluginRecord();
record.setPluginName(id);
record.setPluginVersion(identifier.toString());
if (Logger.DEBUG_DEFINITION_PERSISTENCE)
System.out.println("Plugin reader creating plugin record for " + record.getPluginName() + "/" + record.getPluginVersion()); //$NON-NLS-1$ //$NON-NLS-2$
return record;
}
public SnippetDefinitions loadCurrent() {
IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
IExtensionPoint point = extensionRegistry.getExtensionPoint(SnippetsPlugin.BUNDLE_ID, SnippetsPlugin.NAMES.EXTENSION_POINT_ID);
SnippetDefinitions definitions = new SnippetDefinitions();
if (point != null) {
IConfigurationElement[] elements = point.getConfigurationElements();
for (int i = 0; i < elements.length; i++) {
addDefinitionFromExtension(definitions, elements[i]);
}
}
connectItemsAndCategories(definitions);
return definitions;
}
protected void setProperties(SnippetPaletteDrawer category, Object source) {
if (!(source instanceof IConfigurationElement))
return;
IConfigurationElement element = ((IConfigurationElement) source);
setProperty(category, SnippetsPlugin.NAMES.DESCRIPTION, element.getAttribute(SnippetsPlugin.NAMES.DESCRIPTION));
setProperty(category, SnippetsPlugin.NAMES.SMALLICON, element.getAttribute(SnippetsPlugin.NAMES.SMALLICON));
setProperty(category, SnippetsPlugin.NAMES.ID, element.getAttribute(SnippetsPlugin.NAMES.ID));
setProperty(category, SnippetsPlugin.NAMES.LABEL, element.getAttribute(SnippetsPlugin.NAMES.LABEL));
setProperty(category, SnippetsPlugin.NAMES.LARGEICON, element.getAttribute(SnippetsPlugin.NAMES.LARGEICON));
String filtersAttr = element.getAttribute("filters"); //$NON-NLS-1$
String[] filters = null;
if (filtersAttr != null)
filters = StringUtils.asArray(element.getAttribute("filters")); //$NON-NLS-1$
else
filters = getDefaultFilters();
setProperty(category, "filters", filters); //$NON-NLS-1$
}
protected void setProperties(SnippetPaletteItem item, Object source) {
if (!(source instanceof IConfigurationElement))
return;
IConfigurationElement element = ((IConfigurationElement) source);
setProperty(item, SnippetsPlugin.NAMES.CATEGORY, element.getAttribute(SnippetsPlugin.NAMES.CATEGORY));
setProperty(item, SnippetsPlugin.NAMES.CLASSNAME, element.getAttribute(SnippetsPlugin.NAMES.CLASSNAME));
setProperty(item, SnippetsPlugin.NAMES.DESCRIPTION, element.getAttribute(SnippetsPlugin.NAMES.DESCRIPTION));
setProperty(item, SnippetsPlugin.NAMES.EDITORCLASSNAME, element.getAttribute(SnippetsPlugin.NAMES.EDITORCLASSNAME));
setProperty(item, SnippetsPlugin.NAMES.SMALLICON, element.getAttribute(SnippetsPlugin.NAMES.SMALLICON));
setProperty(item, SnippetsPlugin.NAMES.ID, element.getAttribute(SnippetsPlugin.NAMES.ID));
setProperty(item, SnippetsPlugin.NAMES.LABEL, element.getAttribute(SnippetsPlugin.NAMES.LABEL));
setProperty(item, SnippetsPlugin.NAMES.LARGEICON, element.getAttribute(SnippetsPlugin.NAMES.LARGEICON));
IConfigurationElement[] children = element.getChildren();
for (int i = 0; i < children.length; i++) {
if (children[i].getName().equals(SnippetsPlugin.NAMES.CONTENT))
setProperty(item, SnippetsPlugin.NAMES.CONTENT, children[i].getValue());
else if (children[i].getName().equals(SnippetsPlugin.NAMES.VARIABLES)) {
Iterator iterator = createVariables(children[i].getChildren()).iterator();
while (iterator.hasNext()) {
item.addVariable((ISnippetVariable) iterator.next());
}
}
else if (children[i].getName().equals(SnippetsPlugin.NAMES.VARIABLE)) {
ISnippetVariable var = createVariable(children[i]);
if (var != null)
item.addVariable(var);
}
}
}
protected void setProperties(SnippetVariable variable, Object source) {
if (!(source instanceof IConfigurationElement))
return;
IConfigurationElement element = ((IConfigurationElement) source);
setProperty(variable, SnippetsPlugin.NAMES.DEFAULT, element.getAttribute(SnippetsPlugin.NAMES.DEFAULT));
setProperty(variable, SnippetsPlugin.NAMES.DESCRIPTION, element.getAttribute(SnippetsPlugin.NAMES.DESCRIPTION));
setProperty(variable, SnippetsPlugin.NAMES.ID, element.getAttribute(SnippetsPlugin.NAMES.ID));
setProperty(variable, SnippetsPlugin.NAMES.NAME, element.getAttribute(SnippetsPlugin.NAMES.NAME));
}
}