| /******************************************************************************* |
| * Copyright (c) 2004, 2007 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.jst.jsp.core.internal.contentmodel.tld; |
| |
| |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.jst.jsp.core.internal.Logger; |
| import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument; |
| import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDValidator; |
| import org.eclipse.wst.sse.core.utils.StringUtils; |
| import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap; |
| import org.eclipse.wst.xml.core.internal.contentmodel.CMNamespace; |
| import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; |
| import org.eclipse.wst.xml.core.internal.contentmodel.ContentModelManager; |
| import org.eclipse.wst.xml.core.internal.contentmodel.annotation.AnnotationMap; |
| import org.eclipse.wst.xml.core.internal.contentmodel.internal.annotation.AnnotationFileInfo; |
| import org.eclipse.wst.xml.core.internal.contentmodel.internal.annotation.AnnotationFileParser; |
| |
| public class CMDocumentImpl implements TLDDocument { |
| |
| /** Contains taginfo and/or any other misc properties*/ |
| private AnnotationMap fAnnotationMap = null; |
| |
| private Map fProperties = new HashMap(0); |
| |
| /** |
| * Records from where this document was created |
| */ |
| private String fBaseLocation; |
| /** |
| * since JSP 1.2 |
| */ |
| private String fDescription; |
| |
| private String fDisplayName; |
| |
| /** |
| * NOT public API |
| */ |
| public CMNamedNodeMapImpl fElements = new CMNamedNodeMapImpl(); |
| |
| private List fFunctions = new ArrayList(0); |
| |
| // id of the taglib |
| private String fId = null; |
| /** |
| * Children of "taglib" within a .tld file each allow |
| * one Text node (#PCDATA) beneath them. Store the values |
| * here for simplicity. |
| */ |
| // The JSP specification required for this taglib to function |
| private String fJSPVersion = null; |
| |
| private String fLargeIcon; |
| |
| private List fListeners; |
| |
| private String fParentURI = null; |
| // A short name suggested as the default prefix for tags within the lib |
| private String fShortName = null; |
| |
| private String fSmallIcon; |
| |
| /** |
| * since JSP 2.0 |
| * |
| * The entire element is stored here since its layout is undefined |
| */ |
| private List fTaglibExtensions = new ArrayList(0); |
| |
| // Version information for the taglib itself |
| private String fTLibVersion = null; |
| |
| // A unique public URI describing this taglib. Recommended to be the URL |
| // to the descriptor |
| private String fURI = null; |
| |
| private String fLocationString; |
| |
| protected TLDValidator validator; |
| |
| /** |
| * CMDocumentImpl constructor comment. |
| */ |
| public CMDocumentImpl() { |
| super(); |
| } |
| |
| /** |
| * Get the annotation map associated with this document. Lazily creates |
| * and loads annotation map. |
| * @return AnnotationMap |
| */ |
| private AnnotationMap getAnnotationMap() { |
| // create a new annotation map and load it up |
| if (fAnnotationMap == null) { |
| fAnnotationMap = new AnnotationMap(); |
| |
| List annotationFiles = ContentModelManager.getInstance().getAnnotationFilesInfos(getUri()); |
| for (Iterator i = annotationFiles.iterator(); i.hasNext();) { |
| try { |
| AnnotationFileInfo fileInfo = (AnnotationFileInfo) i.next(); |
| AnnotationFileParser parser = new AnnotationFileParser(); |
| parser.parse(fAnnotationMap, fileInfo); |
| } catch (Exception e) { |
| Logger.log(Logger.WARNING_DEBUG, "Exception thrown in CMDocumentImpl#getAnnotationMap", e); //$NON-NLS-1$ |
| } |
| } |
| } |
| return fAnnotationMap; |
| } |
| /** |
| * @return Returns the baseLocation. |
| */ |
| public String getBaseLocation() { |
| return fBaseLocation; |
| } |
| |
| /** |
| * Gets the description. |
| * @return Returns a String |
| */ |
| public String getDescription() { |
| return fDescription; |
| } |
| |
| /** |
| * Gets the displayName. |
| * @return Returns a String |
| */ |
| public String getDisplayName() { |
| return fDisplayName; |
| } |
| |
| /** |
| * getElements method |
| * @return CMNamedNodeMap |
| * |
| * Returns CMNamedNodeMap of ElementDeclaration |
| */ |
| public CMNamedNodeMap getElements() { |
| return fElements; |
| } |
| |
| /** |
| * getEntities method |
| * @return CMNamedNodeMap |
| * |
| * Returns CMNamedNodeMap of EntityDeclaration |
| */ |
| public CMNamedNodeMap getEntities() { |
| return null; |
| } |
| |
| public List getExtensions() { |
| return fTaglibExtensions; |
| } |
| /** |
| * @return Returns the functions. |
| */ |
| public List getFunctions() { |
| return fFunctions; |
| } |
| |
| /** |
| * Gets the id. |
| * @return Returns a String |
| */ |
| public String getId() { |
| return fId; |
| } |
| |
| /** |
| * |
| * @return java.lang.String |
| */ |
| public String getInfo() { |
| return getDescription(); |
| } |
| |
| /** |
| * |
| * @return java.lang.String |
| */ |
| public String getJspversion() { |
| return fJSPVersion; |
| } |
| |
| /** |
| * Gets the largeIcon. |
| * @return Returns a String |
| */ |
| public String getLargeIcon() { |
| return fLargeIcon; |
| } |
| |
| public List getListeners() { |
| if (fListeners == null) |
| fListeners = new ArrayList(); |
| return fListeners; |
| } |
| |
| /** |
| * getNamespace method |
| * @return CMNamespace |
| */ |
| public CMNamespace getNamespace() { |
| return null; |
| } |
| |
| /** |
| * getNodeName method |
| * @return java.lang.String |
| */ |
| public String getNodeName() { |
| return "#cmdocument"; //$NON-NLS-1$ |
| } |
| |
| /** |
| * getNodeType method |
| * @return int |
| * |
| * Returns one of : |
| * |
| */ |
| public int getNodeType() { |
| return CMNode.DOCUMENT; |
| } |
| /** |
| * @return Returns the parentURI. |
| */ |
| public String getParentURI() { |
| return fParentURI; |
| } |
| |
| /** |
| * getProperty method |
| * @return java.lang.Object |
| * |
| * Returns the object property desciped by the propertyName |
| * |
| */ |
| public Object getProperty(String propertyName) { |
| if (propertyName.equals(TLDDocument.CM_KIND)) { |
| return TLDDocument.JSP_TLD; |
| } |
| else if (propertyName.equals("annotationMap")) { //$NON-NLS-1$ |
| return getAnnotationMap(); |
| } |
| return fProperties.get(propertyName); |
| } |
| |
| /** |
| * |
| * @return java.lang.String |
| */ |
| public String getShortname() { |
| return fShortName; |
| } |
| |
| /** |
| * Gets the smallIcon. |
| * @return Returns a String |
| */ |
| public String getSmallIcon() { |
| return fSmallIcon; |
| } |
| |
| /** |
| * |
| * @return java.lang.String |
| */ |
| public String getTlibversion() { |
| return fTLibVersion; |
| } |
| |
| /** |
| * |
| * @return java.lang.String |
| */ |
| public String getUri() { |
| return fURI; |
| } |
| |
| /* |
| * @see TLDDocument#getValidator() |
| */ |
| public TLDValidator getValidator() { |
| return validator; |
| } |
| /** |
| * @param baseLocation The baseLocation to set. |
| */ |
| public void setBaseLocation(String baseLocation) { |
| fBaseLocation = baseLocation; |
| } |
| |
| /** |
| * Sets the description. |
| * @param description The description to set |
| */ |
| public void setDescription(String description) { |
| this.fDescription = description; |
| } |
| |
| /** |
| * Sets the displayName. |
| * @param displayName The displayName to set |
| */ |
| public void setDisplayName(String displayName) { |
| this.fDisplayName = displayName; |
| } |
| |
| /** |
| * Sets the id. |
| * @param id The id to set |
| */ |
| public void setId(String id) { |
| this.fId = id; |
| } |
| |
| /** |
| * |
| * @param newInfo java.lang.String |
| */ |
| public void setInfo(String newInfo) { |
| setDescription(newInfo); |
| } |
| |
| /** |
| * |
| * @param newJspversion java.lang.String |
| */ |
| public void setJspversion(String newJspversion) { |
| fJSPVersion = newJspversion; |
| } |
| |
| /** |
| * Sets the largeIcon. |
| * @param largeIcon The largeIcon to set |
| */ |
| public void setLargeIcon(String largeIcon) { |
| this.fLargeIcon = largeIcon; |
| } |
| |
| public void setListeners(List listeners) { |
| this.fListeners = listeners; |
| } |
| /** |
| * @param parentURI The parentURI to set. |
| */ |
| public void setParentURI(String parentURI) { |
| fParentURI = parentURI; |
| } |
| |
| public void setProperty(String property, Object value) { |
| fProperties.put(property, value); |
| } |
| |
| /** |
| * |
| * @param newShortname java.lang.String |
| */ |
| public void setShortname(String newShortname) { |
| fShortName = newShortname; |
| } |
| |
| /** |
| * Sets the smallIcon. |
| * @param smallIcon The smallIcon to set |
| */ |
| public void setSmallIcon(String smallIcon) { |
| this.fSmallIcon = smallIcon; |
| } |
| |
| /** |
| * |
| * @param newTlibversion java.lang.String |
| */ |
| public void setTlibversion(String newTlibversion) { |
| fTLibVersion = newTlibversion; |
| } |
| |
| /** |
| * |
| * @param newUri java.lang.String |
| */ |
| public void setUri(String newUri) { |
| fURI = newUri; |
| } |
| |
| public void setValidator(TLDValidator validator) { |
| this.validator = validator; |
| } |
| |
| /** |
| * supports method |
| * @return boolean |
| * |
| * Returns true if the CMNode supports a specified property |
| * |
| */ |
| public boolean supports(String propertyName) { |
| if (TLDDocument.CM_KIND.equals(propertyName) || "annotationMap".equals(propertyName)) //$NON-NLS-1$ |
| return true; |
| return fProperties.containsKey(propertyName); |
| } |
| |
| public String toString() { |
| StringBuffer buffer = new StringBuffer(); |
| buffer.append(super.toString()); |
| buffer.append("\n\t short name:" + StringUtils.escape(getShortname())); //$NON-NLS-1$ |
| buffer.append("\n\t display name:" + StringUtils.escape(getDisplayName())); //$NON-NLS-1$ |
| buffer.append("\n\t description (info):" + StringUtils.escape(getDescription())); //$NON-NLS-1$ |
| buffer.append("\n\t URI:" + StringUtils.escape(getUri())); //$NON-NLS-1$ |
| buffer.append("\n\t jsp version:" + StringUtils.escape(getJspversion())); //$NON-NLS-1$ |
| buffer.append("\n\t taglib version:" + StringUtils.escape(getTlibversion())); //$NON-NLS-1$ |
| buffer.append("\n\t small icon:" + StringUtils.escape(getSmallIcon())); //$NON-NLS-1$ |
| buffer.append("\n\t large icon:" + StringUtils.escape(getLargeIcon())); //$NON-NLS-1$ |
| if (getValidator() != null) |
| buffer.append("\n\t validator:" + StringUtils.replace(getValidator().toString(), "\n", "\n\t\t")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| buffer.append("\n\t listeners:"); //$NON-NLS-1$ |
| for (int i = 0; i < getListeners().size(); i++) { |
| buffer.append("\n" + StringUtils.replace(getListeners().get(i).toString(), "\n", "\n\t\t")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| } |
| buffer.append("\n\t elements:"); //$NON-NLS-1$ |
| CMNamedNodeMap elements = getElements(); |
| for (int i = 0; i < elements.getLength(); i++) { |
| buffer.append(StringUtils.replace(elements.item(i).toString(), "\n", "\n\t\t")); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| return buffer.toString(); |
| } |
| |
| public String getLocationString() { |
| return fLocationString; |
| } |
| |
| public void setLocationString(String url) { |
| fLocationString = url; |
| } |
| } |