| /******************************************************************************* |
| * Copyright (c) 2005 Oracle Corporation. |
| * 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: |
| * Ian Trimble - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.pagedesigner.dtmanager; |
| |
| import org.eclipse.jst.jsf.core.internal.tld.CMUtil; |
| import org.eclipse.jst.pagedesigner.converter.ConverterFactoryRegistry; |
| import org.eclipse.jst.pagedesigner.converter.IConverterFactory; |
| import org.eclipse.jst.pagedesigner.converter.ITagConverter; |
| import org.eclipse.jst.pagedesigner.dtmanager.converter.internal.DTTagConverterFactory; |
| import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; |
| import org.w3c.dom.Element; |
| |
| /** |
| * DTManager is the top-level entry point for design-time (DT) services, such |
| * as tag converters and design-time information. |
| * |
| * <p><b>Provisional API - subject to change</b></p> |
| * |
| * @author Ian Trimble - Oracle |
| */ |
| public class DTManager { |
| |
| private static DTManager instance; |
| private IDTInfoFactory dtInfoFactory; |
| |
| private DTManager() { |
| // no external instantiation |
| } |
| |
| /** |
| * Gets the singleton DTManager instance. |
| * |
| * @return The singleton DTManager instance. |
| */ |
| public static synchronized DTManager getInstance() { |
| if (instance == null) { |
| instance = new DTManager(); |
| } |
| return instance; |
| } |
| |
| /** |
| * Gets an ITagConverter instance for the specified Element and mode. |
| * |
| * @param element Element instance for which to locate and return an |
| * ITagConverter instance. |
| * @param mode Mode flag (use IConverterFactory constants). |
| * @param document Target IDOMDocument instance. |
| * @return An ITagConverter instance for the specified Element and mode. |
| */ |
| public ITagConverter getTagConverter(Element element, int mode, IDOMDocument document) { |
| ITagConverter tagConverter = null; |
| String nsURI = CMUtil.getElementNamespaceURI(element); |
| //try MD-driven approach |
| IConverterFactory tagConverterFactory = getTagConverterFactory(nsURI); |
| if (tagConverterFactory != null) { |
| tagConverter = tagConverterFactory.createConverter(element, mode); |
| if (tagConverter != null) { |
| tagConverter.setDestDocument(document); |
| } else { |
| //fallback to contributed (non-MD-driven) approach |
| tagConverter = ConverterFactoryRegistry.getInstance().createTagConverter(element, mode, document); |
| } |
| } |
| return tagConverter; |
| } |
| |
| /** |
| * Gets an IConverterFactory instance for the specified namespace URI. |
| * |
| * @param nsURI Namespace URI. |
| * @return An IConverterFactory instance for the specified namespace URI. |
| */ |
| protected IConverterFactory getTagConverterFactory(String nsURI) { |
| //TODO: future - expand to first look for registered factories |
| return new DTTagConverterFactory(); |
| } |
| |
| /** |
| * Gets an IDTInfo instance for the specified Element. |
| * |
| * @param element Element instance for which to locate and return IDTInfo |
| * instance. |
| * @return An IDTInfo instance for the specified Element. |
| */ |
| public IDTInfo getDTInfo(Element element) { |
| IDTInfo dtInfo = null; |
| String nsURI = CMUtil.getElementNamespaceURI(element); |
| IDTInfoFactory dtInfoFactory = getDTInfoFactory(nsURI); |
| if (dtInfoFactory != null) { |
| dtInfo = dtInfoFactory.getDTInfo(element); |
| } |
| return dtInfo; |
| } |
| |
| /** |
| * Gets an IDTInfoFactory instance for the specified namespace URI. |
| * |
| * @param nsURI Namespace URI. |
| * @return An IDTInfoFactory instance for the specified namespace URI. |
| */ |
| protected IDTInfoFactory getDTInfoFactory(String nsURI) { |
| if (dtInfoFactory == null) { |
| dtInfoFactory = new DefaultDTInfoFactory(); |
| } |
| return dtInfoFactory; |
| } |
| |
| } |