| /******************************************************************************* |
| * Copyright (c) 2001, 2004 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.core.internal.modelhandler; |
| |
| import java.util.HashMap; |
| |
| import org.eclipse.core.runtime.CoreException; |
| 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.wst.sse.core.internal.ltk.modelhandler.AbstractModelHandler; |
| import org.eclipse.wst.sse.core.internal.ltk.modelhandler.IModelHandler; |
| |
| |
| /** |
| * This class just converts what's in the plugins registry into a form more |
| * easily useable by others, the ContentTypeRegistry. |
| */ |
| class ModelHandlerRegistryReader { |
| private HashMap allReadyCreateInstances = new HashMap(); |
| protected String ATT_ASSOCIATED_CONTENT_TYPE = "associatedContentTypeId"; //$NON-NLS-1$ |
| protected String ATT_CLASS = "class"; //$NON-NLS-1$ |
| protected String ATT_DEFAULT = "default"; //$NON-NLS-1$ |
| protected String ATT_ID = "id"; //$NON-NLS-1$ |
| IConfigurationElement[] elements; |
| protected String EXTENSION_POINT_ID = "modelHandler"; //$NON-NLS-1$ |
| // |
| protected String PLUGIN_ID = "org.eclipse.wst.sse.core"; //$NON-NLS-1$ |
| protected String TAG_NAME = "modelHandler"; //$NON-NLS-1$ |
| |
| // |
| /** |
| * ContentTypeRegistryReader constructor comment. |
| */ |
| ModelHandlerRegistryReader() { |
| super(); |
| } |
| |
| String getAssociatedContentTypeId(IConfigurationElement element) { |
| String value = element.getAttribute(ATT_ASSOCIATED_CONTENT_TYPE); |
| return value; |
| } |
| |
| String getId(IConfigurationElement element) { |
| String idValue = element.getAttribute(ATT_ID); |
| return idValue; |
| } |
| |
| synchronized IModelHandler getInstance(IConfigurationElement element) { |
| // May need to reconsider, but for now, we'll assume all clients must |
| // subclass AbstractContentTypeIdentifier. Its easier and safer, for |
| // this |
| // low level "system" object. (That is, we can check and set "package |
| // protected" |
| // attributes. |
| AbstractModelHandler modelHandler = (AbstractModelHandler) allReadyCreateInstances.get(getId(element)); |
| if (modelHandler == null) { |
| try { |
| modelHandler = (AbstractModelHandler) element.createExecutableExtension(ATT_CLASS); |
| if (modelHandler != null) { |
| allReadyCreateInstances.put(getId(element), modelHandler); |
| String defaultValue = element.getAttribute(ATT_DEFAULT); |
| if (defaultValue != null && "true".equals(defaultValue)) //$NON-NLS-1$ |
| modelHandler.setDefault(true); |
| else |
| modelHandler.setDefault(false); |
| // TODO -- set and check attributes vs. created instance |
| //contentTypeIdentifier.setOrCheckId(element.getAttribute(ATT_ID)); |
| } |
| } catch (CoreException e) { |
| org.eclipse.wst.sse.core.internal.Logger.logException(e); |
| } |
| } |
| return modelHandler; |
| } |
| |
| public boolean isElementDefault(IConfigurationElement element) { |
| String defaultValue = element.getAttribute(ATT_DEFAULT); |
| if (defaultValue != null && "true".equals(defaultValue)) //$NON-NLS-1$ |
| return true; |
| else |
| return false; |
| } |
| |
| ModelHandlerRegistryReader readRegistry() { |
| IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); |
| IExtensionPoint point = extensionRegistry.getExtensionPoint(PLUGIN_ID, EXTENSION_POINT_ID); |
| if (point != null) { |
| // just remember the elements, so plugins don't have to |
| // be activated, unless extension matches those "of interest". |
| elements = point.getConfigurationElements(); |
| } |
| return this; |
| } |
| } |