@Override
	public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException 
	{
		log.debug("{} public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException:", getClass());
		log.debug("params: uri={}, localName={}, qName={}, attrs={}", new Object[]{uri, localName, qName, attrs});
		this.qName = qName;
		if (qName != null)
		{
			qName = qName.trim();
			if (qName.equalsIgnoreCase(ProductsConstants.CATEGORY.getContent()))
			{
				category = new Category();
				categories.add(category);
				category.setName(attrs.getValue(0));
			}
			else
			{
				if (!qName.equalsIgnoreCase(ProductsConstants.CATEGORY_LIST.getContent()))
				{
					if (qName.equalsIgnoreCase(ProductsConstants.SUBCATEGORY.getContent()))
					{
						subcategory = new Subcategory();
						category.add(subcategory);
						subcategory.setName(attrs.getValue(0));
					}
					else
					{
						if (qName.equalsIgnoreCase(ProductsConstants.PRODUCT.getContent()))
						{
							product = new Product();
							subcategory.add(product);
							product.setProductName(attrs.getValue(0));
						}
						else
						{
							if ((qName.equalsIgnoreCase(ProductsConstants.NOT_IN_STOCK.getContent())) && (product != null))
							{
								product.setNotInStock(true);
							}
						}
					}
				}
			}
		}
	}