private static void getClassifChildren(ProductDetailAggregate pd, VidalClassification parent,TreeNode node)
        {
            IEnumerable<VidalClassification> children = pd.vidalClassifications.Where<VidalClassification>(l => ((l.parentLink != null ? l.parentLink.ToString() : null) == parent.id));

            foreach (VidalClassification child in children)
            {
                TreeNode childNode = new TreeNode();

                childNode.Name = child.id;
                childNode.Text = child.name;
                node.Nodes.Add(childNode);
                getClassifChildren(pd, child, childNode);
            }
        }
        public ProductDetailView(Uri uri)
        {
            InitializeComponent();
            this.pd = (RestUtils.getProductDetail(uri));
            productTextBox.Text = pd.product.Name;
            laboTextBox.Text = pd.product.CompanyName;
            foreach (Reco reco in pd.recos)
            {
                recosListBox.Items.Add(reco.Name);
            }
            TreeNode node = new TreeNode();

            VidalClassification parent = pd.vidalClassifications.FirstOrDefault<VidalClassification>(l => (l.id == "vidal://vidal_classification/0"));
            node.Name = parent.id.ToString();
            node.Text = parent.name;
            getClassifChildren(pd, parent,node);

            classifTreeView.Nodes.Add(node);
            classifTreeView.ExpandAll();
            SyndicationFeed mono = RestUtils.getFeedByUri(pd.product.productDocumentOpt);
            monoWebBrowser.DocumentText =( (TextSyndicationContent)mono.Items.First().Content).Text;

            vigiTextBox.Text = pd.product.vigilance;
            nurseTextBox.Text = pd.product.midwife;
            String moleculeLabel = "";
            foreach (Molecule molecule in pd.molecules)
            {
                moleculeLabel = moleculeLabel + molecule.name + ",";
            }
            eenTextBox.Text = moleculeLabel;

            if (pd.product.Liste != null)
            {
                prescriptionListBox.Items.Add(pd.product.Liste);
            }
            packDataGridView.DataSource = pd.packages;

            String genericLabel = "";
            foreach(GenericGroup group in pd.GenericGroups){
                genericLabel = genericLabel + group.name +",";
            }
            genGrpTextBox.Text = genericLabel;
            cngTextBox.Text = pd.product.vmp;
        }
    private static ProductDetailAggregate getProductDetailByFeedItem(SyndicationFeed productFeed)
    {
        Product product = getProductByFeedItem(productFeed.Items.SingleOrDefault(l => (l.Categories[0].Name == "PRODUCT")));
        IEnumerable<SyndicationItem> molecules = productFeed.Items.Where(l => (l.Categories[0].Name == "MOLECULE"));
        List<Molecule> moleculeList = new List<Molecule>();
        foreach (SyndicationItem item in molecules)
        {
            String moleculeName = item.Title.Text;
            int id = item.ElementExtensions.ReadElementExtensions<int>("id", vidalNameSpace).FirstOrDefault();

            Molecule molec = new Molecule(id,moleculeName);
            moleculeList.Add(molec);
        }

        IEnumerable<SyndicationItem> recos = productFeed.Items.Where(l => (l.Categories[0].Name == "RECO"));
        List<Reco> recoList = getRecosBySyndicationFeed(recos);

        IEnumerable<SyndicationItem> vidalClassifs = productFeed.Items.Where(l => (l.Categories[0].Name == "VIDAL_CLASSIFICATION"));
        List<VidalClassification> vidalList = new List<VidalClassification>();
        foreach (SyndicationItem item in vidalClassifs)
        {
            String classifName = item.Title.Text;
            String id = item.Id;
            SyndicationLink parentLink = (item.Links.FirstOrDefault(l => (l.RelationshipType == "inline")));
            Uri parentLinkUri = null;
            if (parentLink != null)
            {
                parentLinkUri = parentLink.Uri;
            }

            VidalClassification vidalClass = new VidalClassification(id, classifName, parentLinkUri, parentLinkUri);
            vidalList.Add(vidalClass);
        }

        IEnumerable<SyndicationItem> packages = productFeed.Items.Where(l => (l.Categories[0].Name == "PACKAGE"));
        List<Package> packList = getPackagesBySyndicationFeed(packages);

        IEnumerable<SyndicationItem> genGroups = productFeed.Items.Where(l => (l.Categories[0].Name == "GENERIC_GROUP"));
        List<GenericGroup> groups = new List<GenericGroup>();
        foreach (SyndicationItem group in genGroups)
        {
            int id =group.ElementExtensions.ReadElementExtensions<int>("id", vidalNameSpace).FirstOrDefault();
            String name =group.Title.Text ;
            String type = group.ElementExtensions.ReadElementExtensions<String>("genericType", vidalNameSpace).FirstOrDefault();
            SyndicationLink productSyndicationLink = group.Links.FirstOrDefault(l => (l.Title == "GENERIC_GROUP"));
            Uri productLink = null;
            if (productSyndicationLink != null)
            {
                productLink = productSyndicationLink.Uri;
            }
            groups.Add(new GenericGroup(id, name, type, productLink));
        }

        ProductDetailAggregate fullProduct = new ProductDetailAggregate();
        fullProduct.product = product;
        fullProduct.recos = recoList;
        fullProduct.vidalClassifications = vidalList;
        fullProduct.packages = packList;
        fullProduct.molecules = moleculeList;
        fullProduct.GenericGroups = groups;

        return fullProduct;
    }