action delete sur tuto netbeans RPC CRUD app
	
	
		bonjour,
je voudrais mieux comprendre l'utilisation de netbeans RPC pour des petites app.
j'ai suivi le tuto CRUD APP que j'ai voulu appliquer pour une petite application de gestion.
et j'arrive à la création de l'action "delete" sur le BeanTreeView.
j'ai donc créé une nouvelle action
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   |  
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.openide.awt.ActionRegistration;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionID;
import org.openide.util.NbBundle.Messages;
 
@ActionID(category = "Joueur_LEAF",
id = "lu.leglaude.whist.viewer.JoueurLeafDeleteAction")
@ActionRegistration(displayName = "#CTL_JoueurLeafDeleteAction")
@ActionReferences({})
@Messages("CTL_JoueurLeafDeleteAction=Delete")
public final class JoueurLeafDeleteAction implements ActionListener {
 
    @Override
    public void actionPerformed(ActionEvent e) {
        Joueur_Viewer_TopComponent.deleteLeaf();
    }
} | 
 et ajouter un nouvelle methode dans le Joueur_Viewer_TopComponent 
	Code:
	
1 2 3
   |     static void deleteLeaf() {
        System.out.print(explorerManager.getRootContext().getChildren().getNodes().length);
    } | 
 et modifier le code de ChildFactory en conséquence
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
   | import java.beans.IntrospectionException;
import java.io.IOException;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.swing.Action;
import lu.leglaude.whist.entity.Joueur;
import org.openide.nodes.BeanNode;
import org.openide.nodes.ChildFactory;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import org.openide.util.Exceptions;
import org.openide.util.Utilities;
import org.openide.util.lookup.Lookups;
 
/**
 *
 * @author ramcla
 */
class JoueurChildFactory extends ChildFactory<Joueur> {
 
    private List<Joueur> resultList;
 
    public JoueurChildFactory(List<Joueur> resultList) {
        this.resultList = resultList;
    }
 
    @Override
    protected boolean createKeys(List<Joueur> list) {
        for (Joueur Joueur : resultList) {
            list.add(Joueur);
        }
        return true;
    }
 
    @Override
    protected Node createNodeForKey(Joueur j) {
        try {
            return new CustomerBeanNode(j);
        } catch (IntrospectionException ex) {
            Exceptions.printStackTrace(ex);
            return null;
        }
    }
 
    private static class CustomerBeanNode extends BeanNode {
 
        public CustomerBeanNode(Joueur j) throws IntrospectionException {
            super(j, Children.LEAF, Lookups.singleton(j));
            this.setDisplayName(j.getNom() + ' ' + j.getPrenom());
            this.setShortDescription(j.getVille());
        }
 
        @Override
        public Action[] getActions(boolean context) {
            List actionsForJoueur_LEAF = Utilities.actionsForPath("Actions/Joueur_LEAF");
            return (Action[]) actionsForJoueur_LEAF.toArray(new Action[actionsForJoueur_LEAF.size()]);
        }
 
        @Override
        public boolean canDestroy() {
            Joueur joueur = this.getLookup().lookup(Joueur.class);
            return joueur != null;
        }
 
        @Override
        public void destroy() throws IOException {
            if (deleteJoueur(this.getLookup().lookup(Joueur.class).getId())) {
                super.destroy();
                Joueur_Viewer_TopComponent.refreshNode();
            }
        }
 
        private boolean deleteJoueur(Long id) {
            EntityManager entityManager = Persistence.createEntityManagerFactory("Whist_DB_LibraryPU").createEntityManager();
            entityManager.getTransaction().begin();
            try {
                Joueur toDelete = entityManager.find(Joueur.class, id);
                entityManager.remove(toDelete);
                // so far so good
                entityManager.getTransaction().commit();
            } catch (Exception e) {
                entityManager.getTransaction().rollback();
            }
            return true;
        }
    }
} | 
 
voici ma question comment dans la méthode deleteLeaf() puis je obtenir le Node selectionné (c-a-d le joueur selectionné) ?
merci d'avance pour votre aide