throws ExtensionException, MetaDataException
		SlotDefn loadSlot( IConfigurationElement elementTag,				IConfigurationElement propTag, ExtensionElementDefn elementDefn )				throws ExtensionException, MetaDataException		{			// read required parts			String name = propTag.getAttribute( NAME_ATTRIB );			String xmlTagName = propTag.getAttribute( XML_TAG_NAME_ATTRIB );			checkRequiredAttribute( NAME_ATTRIB, name );			checkRequiredAttribute( XML_TAG_NAME_ATTRIB, xmlTagName );			// optional parts			String displayNameID = propTag					.getAttribute( DISPLAY_NAME_ID_ATTRIB );			String defaultDisplayName = propTag					.getAttribute( DEFAULT_DISPLAY_NAME_ATTRIB );			String multipleCardinality = propTag					.getAttribute( MULTIPLE_CARDINALITY_ATTRIB );			String selector = propTag.getAttribute( DEFAULT_STYLE_ATTRIB );			ExtensionSlotDefn slot = new ExtensionSlotDefn(					( (PeerExtensionElementDefn) elementDefn )							.getReportItemFactory( ).getMessages( ) );			slot.setName( name );			slot.setXmlName( xmlTagName );			slot.setDisplayNameID( StringUtil.trimString( displayNameID ) );			slot.setDefaultDisplayName( StringUtil					.trimString( defaultDisplayName ) );			// by default 'multipleCardinality' is true			if ( !StringUtil.isBlank( multipleCardinality )					&& !Boolean.valueOf( multipleCardinality ).booleanValue( ) )				slot.setMultipleCardinality( false );			slot.setSelector( StringUtil.trimString( selector ) );			// load the element types			IConfigurationElement[] elements = propTag.getChildren( );			for ( int i = 0; i < elements.length; i++ )			{				if ( ELEMENT_TYPE_TAG.equalsIgnoreCase( elements[i].getName( ) ) )				{					String elementType = loadSlotElementType( elements[i] );					slot.addType( elementType );				}			}			return slot;		}