| /******************************************************************************* |
| * 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.jsp.core.internal.pagevar; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtension; |
| import org.eclipse.core.runtime.IExtensionPoint; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.jst.pagedesigner.jsp.core.IJSPCoreConstants; |
| import org.eclipse.jst.pagedesigner.jsp.core.JSPCorePlugin; |
| import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IVariableInfo; |
| import org.eclipse.jst.pagedesigner.jsp.core.util.CMUtil; |
| import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; |
| import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement; |
| import org.w3c.dom.Element; |
| |
| /** |
| * @author mengbo |
| * @version 1.5 |
| */ |
| public class PageVariableAdatperRegistry { |
| /** |
| * pageVar |
| */ |
| public static final String PAGEVAR = "pageVar"; |
| |
| /** |
| * taglib |
| */ |
| public static final String TAGLIB = "taglib"; |
| |
| /** |
| * tag |
| */ |
| public static final String TAG = "tag"; |
| |
| /** |
| * varName |
| */ |
| public static final String VARNAME = "varName"; |
| |
| /** |
| * varNameIsAttr |
| */ |
| public static final String VARNAMEISATTR = "varNameIsAttr"; |
| |
| /** |
| * varTypeMode |
| */ |
| public static final String VARTYPEMODE = "varTypeMode"; |
| |
| /** |
| * tagName |
| */ |
| public static final String TAGNAME = "tagName"; |
| |
| /** |
| * varTypeString |
| */ |
| public static final String VARTYPESTRING = "varTypeString"; |
| |
| /** |
| * varTypeStringIsAttr |
| */ |
| public static final String VARTYPESTRINGISATTR = "varTypeStringIsAttr"; |
| |
| /** |
| * uri |
| */ |
| public static final String URI = "uri"; |
| |
| private static PageVariableAdatperRegistry _instance = null; |
| |
| private Map _registry; |
| |
| private TagVarDescriptor _useBeanDescriptor; |
| |
| /** |
| * @return the singleton instance |
| */ |
| public static PageVariableAdatperRegistry getInstance() { |
| if (_instance == null) { |
| _instance = new PageVariableAdatperRegistry(); |
| } |
| return _instance; |
| } |
| |
| private PageVariableAdatperRegistry() { |
| _registry = readAllDescriptors(); |
| } |
| |
| // public IPageVariableAdapter createAdapter(IDOMElement ele, String uri, |
| // String tagname) |
| // { |
| // String key = uri + "#" + tagname; |
| // TagVarDescriptor desc = (TagVarDescriptor) _registry.get(key); |
| // if (desc != null) |
| // { |
| // PageVariableAdapter adapter = new PageVariableAdapter(ele); |
| // adapter.setVarName(desc.getVarName()); |
| // adapter.setVarNameAttrName(desc.isVarNameIsAttr()); |
| // adapter.setVarTypeString(desc.getVarTypeString()); |
| // adapter.setVarTypeAttrName(desc.isVarTypeStringIsAttr()); |
| // adapter.setVarTypeMode(desc.getVarTypeMode()); |
| // return adapter; |
| // } |
| // else |
| // { |
| // return null; |
| // } |
| // } |
| |
| private Map readAllDescriptors() { |
| Map map = new HashMap(); |
| |
| IExtensionPoint extensionPoint = Platform.getExtensionRegistry() |
| .getExtensionPoint(JSPCorePlugin.getPluginId(), PAGEVAR); |
| IExtension[] extensions = extensionPoint.getExtensions(); |
| |
| for (int i = 0; i < extensions.length; i++) { |
| IExtension ext = extensions[i]; |
| IConfigurationElement[] facs = ext.getConfigurationElements(); |
| |
| for (int j = 0; j < facs.length; j++) { |
| if (facs[j].getName().equals(TAGLIB)) { |
| String uri = facs[j].getAttribute(URI); |
| if (uri == null || uri.length() == 0) { |
| continue; |
| } |
| IConfigurationElement[] tags = facs[j].getChildren(TAG); |
| for (int k = 0; k < tags.length; k++) { |
| TagVarDescriptor desc = new TagVarDescriptor(); |
| |
| String tag = tags[k].getAttribute(TAGNAME); |
| String varName = tags[k].getAttribute(VARNAME); |
| boolean varNameIsAttr = "true".equalsIgnoreCase(tags[k] |
| .getAttribute(VARNAMEISATTR)); |
| String varTypeString = tags[k] |
| .getAttribute(VARTYPESTRING); |
| boolean varTypeStringIsAttr = "true" |
| .equalsIgnoreCase(tags[k] |
| .getAttribute(VARTYPESTRINGISATTR)); |
| String varTypeModeString = tags[k] |
| .getAttribute(VARTYPEMODE); |
| int varTypeMode = toVarTypeMode(varTypeModeString); |
| |
| desc.setVarName(varName); |
| desc.setVarNameIsAttr(varNameIsAttr); |
| desc.setVarTypeMode(varTypeMode); |
| desc.setVarTypeString(varTypeString); |
| desc.setVarTypeStringIsAttr(varTypeStringIsAttr); |
| desc.setTagName(tag); |
| |
| // Use uri#tag as key. |
| map.put(uri + "#" + tag, desc); |
| } |
| } |
| } |
| } |
| |
| return map; |
| } |
| |
| /** |
| * @param varTypeModeString |
| * @return variable typemode |
| */ |
| public static int toVarTypeMode(String varTypeModeString) { |
| if ("CLASSNAME".equalsIgnoreCase(varTypeModeString)) { |
| return IVariableInfo.CLASSNAME; |
| } else if ("EXPRESSION".equalsIgnoreCase(varTypeModeString)) { |
| return IVariableInfo.EXPRESSION; |
| } else if ("EXPRESSION_COLLECTION_ITEM" |
| .equalsIgnoreCase(varTypeModeString)) { |
| return IVariableInfo.EXPRESSION_LISTITEM; |
| } else if ("BUNDLE".equalsIgnoreCase(varTypeModeString)) { |
| return IVariableInfo.RESOURCEBUNDLE; |
| } else { |
| return IVariableInfo.EXPRESSION; // default |
| } |
| } |
| |
| /** |
| * @param uri |
| * @param tagname |
| * @return the tag variable descriptor for the given tag (may be null) |
| */ |
| public TagVarDescriptor getTagVarDescriptor(String uri, String tagname) { |
| String key = uri + "#" + tagname; |
| return (TagVarDescriptor) _registry.get(key); |
| } |
| |
| /** |
| * @param localName |
| * @return |
| */ |
| private TagVarDescriptor getJSPTagVarDescriptor(String localName) { |
| if (IJSPCoreConstants.TAG_USEBEAN.equals(localName)) { |
| if (_useBeanDescriptor == null) { |
| _useBeanDescriptor = new TagVarDescriptor(); |
| _useBeanDescriptor.setVarName(IJSPCoreConstants.ATTR_ID); |
| _useBeanDescriptor.setVarNameIsAttr(true); |
| _useBeanDescriptor.setVarTypeMode(IVariableInfo.CLASSNAME); |
| _useBeanDescriptor |
| .setVarTypeString(IJSPCoreConstants.ATTR_CLASS); |
| _useBeanDescriptor.setVarTypeStringIsAttr(true); |
| } |
| |
| return _useBeanDescriptor; |
| } |
| |
| return null; |
| } |
| |
| /** |
| * @param target |
| * @return the tag variable descriptor for the target |
| */ |
| public TagVarDescriptor getTagVarDescriptor(Element target) { |
| if (target instanceof IDOMElement) { |
| IDOMElement xmlEle = (IDOMElement) target; |
| CMElementDeclaration decl = CMUtil.getElementDeclaration(xmlEle); |
| if (decl != null) { |
| if (CMUtil.isJSP(decl)) { |
| return getJSPTagVarDescriptor(xmlEle.getLocalName()); |
| } |
| String uri = CMUtil.getTagURI(decl); |
| if (uri != null) { |
| return getTagVarDescriptor(uri, xmlEle.getLocalName()); |
| } |
| } |
| } |
| return null; |
| } |
| |
| } |