blob: f62e2a55b14d5ff12c5a8be360383b7e6389fcc1 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}