protected function generateKey()
	{
	    if ('' == $this->getStorageName())
	    {
	        throw new MissingKeyParameterException('Cannot generate key without storage name');
	    }
	    if ('' == $this->getClassName())
	    {
	        throw new MissingKeyParameterException('Cannot generate key without class name');
	    }
	    if ('' == $this->getDepth())
	    {
	        throw new MissingKeyParameterException('Cannot generate key without depth');
	    }
	    if ('' == $this->getHash())
	    {
	        throw new MissingKeyParameterException('Cannot generate key without hash');
	    }
	    
	    $hash = $this->getHash();
	    
	    if ('' != $this->getExtension())
	    {
	        $hash .= '.'.$this->getExtension();
	    }
	    
	    $parts = array(
	        $this->getStorageName(),
	        $this->getClassName(),
	        $this->getFieldName(),
	        $this->getDepth(),
	        $hash,
	    );
	    
	    return implode($this->getDelimiter(), $parts);
	}