2010-04-12 7 views
0

J'ai donc besoin de créer un arbre avec des éléments pour mon projet gwt. J'utilise le modèle composite pour stocker toutes les informations dont j'ai besoin d'être placé dans un arbre.comment puis-je fournir des données à mon arbre gwt

Un utilisateur possède un dossier racine qui étend la hiérarchie, ce dossier racine contient alors une liste d'objets de hiérarchie, qui peuvent être FileLocations ou des dossiers. Le problème que j'ai est de construire mon arbre basé sur ce modèle. ces données sont toutes stockées en utilisant hibernate dans une base de données MySQL

Comment pourrais-je implémenter ceci comme un arbre dans gwt.

De plus, l'élément de l'arbre que je crée devrait faire référence à l'objet afin que je puisse le renommer ou le déplacer.

@Entity 
@Table(name ="HIERARCHY") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(
name = "HIERARCHY_TYPE", discriminatorType = DiscriminatorType.STRING)  
public abstract class Hierarchy implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "hierarchy_id", updatable = false, nullable = false) 
private int hId; 



@Entity 
@DiscriminatorValue("F") 
public class Folder extends Hierarchy { 

@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER) 
@JoinTable(name = "FOLDER_JOIN_FILELOCATION", joinColumns = { 
    @JoinColumn(name = "folder_id") }, inverseJoinColumns = { 
    @JoinColumn(name = "file_information_id") }) 
private List<Hierarchy> children = new ArrayList<Hierarchy>() ; 
@Column(name = "folder_name") 
private String folderName; 

@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 
@JoinTable(name="FOLDER_JOIN_FOLDER", 
    joinColumns = @JoinColumn(name="parent_folder_id"), 
    inverseJoinColumns = @JoinColumn(name="folder_ID") 
) 
private Hierarchy parent; 




@Entity 
@DiscriminatorValue("FI") 
public class FileInformation extends Hierarchy { 


@Column (name = "location") 
private String location; 

@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 
@JoinTable(name="FILEINFORMATION_JOIN_FOLDER", 
    joinColumns = @JoinColumn(name="filelocation_id"), 
    inverseJoinColumns = @JoinColumn(name="folder_ID") 
) 
private Hierarchy parent; 

maintenant donc je veux construire l'arbre basé sur cette structure. si ma logique est erronée pourriez-vous me pointer dans la bonne direction

Tree tree = new Tree(); 

maintenant pour chaque dossier ou FileInformation dans un dossier que je veux créer un élément d'arbre? cet élément d'arbre doit également faire référence à l'objet lui-même

Répondre

1

Cela peut être fait assez facilement avec GWT-RPC requests à votre serveur et les Tree et TreeItem classes du client.

Au démarrage (ou lorsque vous souhaitez afficher l'arborescence pour la première fois), appelez votre service et, dans le rappel, ajoutez ces éléments à l'arborescence à l'aide de tree.addItem(). Une grande partie de la facilité dépend de la structure de votre base de données et de la manière dont vous transmettez l'information au client, mais cela devrait vous aider à démarrer.

Une autre option consiste à utiliser la classe FastTree de GWT-incubator, ce qui est utile pour afficher des arbres volumineux et pour charger uniquement des données lorsqu'un dossier est ouvert, par exemple.

+0

merci pour la réponse vous avez dit cela est dépendra de la façon dont votre base de données est structurée Les utilisateurs ont un dossier racine, il a alors de nombreux sous-dossiers et fichiers sous par lesquels des sous-dossiers peuvent avoir des fichiers sous (uniquement tenir un emplacement dans le fichier). J'utilise le modèle composite pour l'implémenter. Lorsqu'un utilisateur se connecte, les données sont passées côté client, puis je veux construire l'arbre en fonction de cela. Je vais afficher mes cours ci-dessus. mon problème est de construire l'arbre. – molleman

+0

J'ai édité mon poste ci-dessus – molleman

+0

Vous aurez besoin d'écrire un service qui retourne l'arborescence de fichiers pour un utilisateur donné, dans une structure arborescente. Dans votre code client, appelez ce service (de manière asynchrone) et, avec le résultat, ajoutez des éléments à votre arborescence et à TreeItems pour les fichiers plus profonds. Voici un bon exemple d'ajout d'éléments à l'arborescence: http://examples.roughian.com/index.htm#Widgets~Tree –

0

Vous avez à parcourir votre dossier/Hiérarchie et trouver le nœud parent, puis ajoutez ce parent à celui TreeItem t, puis trouver les les parents les enfants, et les ajouter à t, maintenant chaque enfant trouvé, faites de même.

Questions connexes