Element definition)
Element definition, LibraryManager manager)
	public Library( Hashtable antProperties, 			String wtkLibPath, 			String projectLibPath,			String polishLibPath,			Element definition) 	throws InvalidComponentException 	{		this.wtkLibPath = wtkLibPath;		this.polishLibPath = polishLibPath;		this.projectLibPath = projectLibPath;		this.fullName = definition.getChildTextTrim( "name");		if (this.fullName == null) {			throw new InvalidComponentException("An api listed in apis.xml does not define its name. Please insert the <name> element into the file [apis.xml] for this library.");		}		this.description = definition.getChildTextTrim( "description");		String namesString = definition.getChildTextTrim( "names");		if (namesString == null) {			throw new InvalidComponentException("The api [" + this.fullName + "] does not define the possible names of this library. Please insert the <names> element into the file [apis.xml] for this library.");		}		this.names = TextUtil.splitAndTrim( namesString, ',' );		this.symbol = definition.getChildTextTrim( "symbol");		if (this.symbol == null) {			throw new InvalidComponentException("The api [" + this.fullName + "] does not define the preprocessing symbol for this library. Please insert the <symbol> element into the file [apis.xml] for this library.");		}		String fileNamesString = definition.getChildTextTrim( "files");		if (fileNamesString != null) {			this.fileNames = TextUtil.splitAndTrim( fileNamesString, ',' );		}		this.defaultPath = definition.getChildTextTrim( "path");		this.antProperties = antProperties;		// try and find this library only when it is used		// (compare method findPath())		String featuresStr = definition.getChildTextTrim("features");		if (featuresStr != null) {			String[] features = TextUtil.splitAndTrim(featuresStr, ',');			for (int i = 0; i < features.length; i++) {				String feature = features[i];				addFeature(feature);			}		}		loadCapabilities(definition, this.symbol, "apis.xml");	}