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