/// <summary>
        /// Returns the full unique url for a Tree
        /// </summary>
        /// <param name="url"></param>
        /// <param name="action"></param>
        /// <param name="id"></param>
        /// <param name="treeId"></param>
        /// <param name="queryStrings"></param>
        /// <returns></returns>
        public static string GetTreeUrl(this UrlHelper url, string action, HiveId id, Guid treeId, FormCollection queryStrings)
        {            
            var treeMetaData = DependencyResolver.Current.GetService<ComponentRegistrations>()
                .TreeControllers
                .Where(x => x.Metadata.Id == treeId)
                .SingleOrDefault();

            if (treeMetaData == null)
                throw new InvalidOperationException("Could not find the tree controller with id " + treeId);

            var area = url.GetBackOfficeArea();

            //now, need to figure out what area this tree belongs too...
            var pluginDefition = treeMetaData.Metadata.PluginDefinition;            
            if (pluginDefition.HasRoutablePackageArea())
            {
                area = pluginDefition.PackageName;                
            }

            var genUrl = url.Action(action, treeMetaData.Metadata.ControllerName,
                                    new
                                        {
                                            area,
                                            id = GetIdVal(id),
                                            treeId = treeId.ToString("N")
                                        });
            return genUrl + (genUrl.Contains("?") ? "&" : "?") + queryStrings.ToQueryString();


        }