/******************************************************************************* * Copyright (c) 2003, 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 *******************************************************************************/ /* * Created on Aug 22, 2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package org.eclipse.jst.common.internal.annotations.registry; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.osgi.framework.Bundle; /** * All of the information in a single tagSpec tag, including the enclosing handler. */ public class TagSpec { /** * Handle to the descriptor of the plugin that declared the completion information for this tag, * if any. */ Bundle bundle; protected ResourceBundle resourceBundle; private boolean attemptedToFindResourceBundle = false; private AttributeValuesHelper validValuesHelper; private TagsetDescriptor tagsetDescriptor; /** * Name of the tag. */ private String tagName; /** * Scope of the tag: METHOD | FIELD | TYPE */ private int scope; /** * Multiplicity of the tag: ONE | MANY */ private int multiplicity; /** * Attributes that can be set for this tag. (Instances of TagAttribSpec) */ private List attributes = new ArrayList(); private String helpKey; /** * Text type for use with localized text container. */ public static final int HELP_TEXT = 0; public static final int METHOD = 0; public static final int TYPE = 1; public static final int FIELD = 2; public interface Multiplicity { public static final int ONE = 1; public static final int MANY = 2; } public TagSpec(String aName, int aScope, int aMultiplicity) { tagName = aName; scope = aScope; multiplicity = aMultiplicity; } public static int scopeFromString(String s) throws CoreException { if (s != null) { if (s.equalsIgnoreCase("type")) { //$NON-NLS-1$ return TagSpec.TYPE; } else if (s.equalsIgnoreCase("field")) { //$NON-NLS-1$ return TagSpec.FIELD; } else if (s.equalsIgnoreCase("method")) { //$NON-NLS-1$ return TagSpec.METHOD; } else { // Should be impossible unless the annotation-taghandler.exsd or // calling code changes. //TODO: Logging throw new CoreException(new Status(IStatus.ERROR, "org.eclipse.wst.common.internal.annotations.controller", IStatus.OK, AnnotationsControllerResources.TagSpec_3 + s, null)); //$NON-NLS-1$ } } throw new CoreException(new Status(IStatus.ERROR, "org.eclipse.wst.common.internal.annotations.controller", IStatus.OK, AnnotationsControllerResources.TagSpec_4, null)); //$NON-NLS-1$ } public static int multiplicityFromString(String s) throws CoreException { if (s != null) { if (s.equalsIgnoreCase("1")) { //$NON-NLS-1$ return TagSpec.Multiplicity.ONE; } else if (s.equalsIgnoreCase("*")) { //$NON-NLS-1$ return TagSpec.Multiplicity.MANY; } throw new CoreException(new Status(IStatus.ERROR, "org.eclipse.wst.common.internal.annotations.controller", IStatus.OK, AnnotationsControllerResources.TagSpec_4, null)); //$NON-NLS-1$ } //Return default return TagSpec.Multiplicity.ONE; } /** * @return Scope for tag, METHOD | TYPE | FIELD */ public int getScope() { return scope; } /** * @return multiplicity for tag, ONE | MANY */ public int getMultiplicity() { return multiplicity; } /** * @return Name of the tag */ public String getTagName() { return tagName; } public TagsetDescriptor getTagSetDescriptor() { if (tagsetDescriptor == null) { String tagSetName = getTagName(); int index = tagSetName.lastIndexOf('.'); if (index == -1) tagSetName = ""; //$NON-NLS-1$ else tagSetName = tagSetName.substring(index + 1); tagsetDescriptor = AnnotationTagsetRegistry.INSTANCE.getDescriptor(tagSetName); } return tagsetDescriptor; } /** * Sets the scope of this tag. * * @param i * METHOD | TYPE | FIELD */ public void setScope(int i) { scope = i; } /** * Sets the multiplicity of this tag. * * @param i * ONE | MANY */ public void setMultiplicity(int i) { multiplicity = i; } /** * Sets the name of the tag * * @param string * Name for the tag. */ public void setTagName(String string) { tagName = string; } /** * * @return List of attributes for this tag. */ public List getAttributes() { return attributes; } /** * Adds an attribute to the list of attributes for this tag. * * @param att * A TagAttribSpec */ public void addAttribute(TagAttribSpec att) { if (att == null) return; attributes.add(att); att.setTagSpec(this); } /** * Sets the list of attributes for this tag. * * @param lst * An array list of TagAttribSpecs */ public void setAttributes(List lst) { if (lst == null) attributes.clear(); else { attributes = lst; for (int i = 0; i < lst.size(); i++) { TagAttribSpec tas = (TagAttribSpec) lst.get(i); tas.setTagSpec(this); } } } /** * Looks for attribute named <code>attName</code>. Case insensitive. * * @param attName * Name to look for * @return A TagAttribSpec, or null if none was found. */ public TagAttribSpec attributeNamed(String attName) { Iterator i = getAttributes().iterator(); while (i.hasNext()) { TagAttribSpec tas = (TagAttribSpec) i.next(); if (attName.equalsIgnoreCase(tas.getAttribName())) { return tas; } } return null; } /** * @return Returns the declaringPlugin. */ public Bundle getBundle() { return bundle; } /** * @param declaringPlugin * The declaringPlugin to set. */ protected void setBundle(Bundle bundle) { this.bundle = bundle; } /** * @return Returns the resourceBundle. */ public ResourceBundle getResourceBundle() { if (resourceBundle == null && !attemptedToFindResourceBundle) { attemptedToFindResourceBundle = true; Bundle aBundle = getBundle(); if (aBundle != null) resourceBundle = Platform.getResourceBundle(bundle); } return resourceBundle; } /** * @param resourceBundle * The resourceBundle to set. */ public void setResourceBundle(ResourceBundle resourceBundle) { attemptedToFindResourceBundle = false; this.resourceBundle = resourceBundle; } /** * @return Returns the validValuesHelper. */ public AttributeValuesHelper getValidValuesHelper() { if (validValuesHelper == null && getTagSetDescriptor() != null) setValidValuesHelper(getTagSetDescriptor().getValidValuesHelper()); return validValuesHelper; } /** * @param validValuesHelper * The validValuesHelper to set. */ public void setValidValuesHelper(AttributeValuesHelper validValuesHelper) { this.validValuesHelper = validValuesHelper; } public String getHelpKey() { if (helpKey == null) helpKey = computeHelpKey(); return helpKey; } /** * @return */ protected String computeHelpKey() { return "tagh." + getTagName(); //$NON-NLS-1$ } public void setHelpKey(String helpKey) { this.helpKey = helpKey; } public String lookupTagHelp() throws MissingResourceException { ResourceBundle b = getResourceBundle(); if (b == null) return null; String key = getHelpKey(); String val = b.getString(getHelpKey()); if (val == key) val = null; return val; } }