Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Rational Discussion :

Association entre classes en java


Sujet :

Rational

  1. #1
    Nouveau membre du Club
    Association entre classes en java
    Bonjour,

    j'essaye de créer un diagramme de classes (en tout cas des classes liées par des associations) directement par du code java, avec RSA.

    Pour cela j'utilise les classes UMLFactory, Class et Association.

    Pour l'instant, j'ai ça (création de 2 classes Commande et Client):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    org.eclipse.uml2.uml.UMLFactory f = org.eclipse.uml2.uml.UMLFactory.eINSTANCE;
    	
    org.eclipse.uml2.uml.Class c1 = f.createClass();
    c1.setName("Client");
    		
    org.eclipse.uml2.uml.Class c2 = f.createClass();
    c2.setName("Commande");
    Mon souci est que je n'arrive pas à lier mes classes par une association.
    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = c1.createAssociation(true, org.eclipse.uml2.uml.AggregationKind.NONE_LITERAL, "passer", 1, org.eclipse.uml2.uml.LiteralUnlimitedNatural.UNLIMITED, c2, true, org.eclipse.uml2.uml.AggregationKind.NONE_LITERAL, "" , 1, 1);
    Mais je me retrouve avec une IllegalStateException.

    Si vous avez une idée, n'hésitez pas, tout est bon à prendre.

    Merci.

  2. #2
    Nouveau membre du Club
    Bon il semblerait que la IllegalStateException soit du à "quelque chose" au niveau des packages (en gros il n'y a pas de package car c1.getPackage() me retourne null).

    Du coup je crée un package et j'ajoute chaque élément dedans. Maintenant, est-ce la solution ?? Donc toujours ouvert à diverses propositions.

  3. #3
    Modérateur

    En réalité, c'est parce qu'une Association est une entié qui doit être contenu dans un package.

    Par défaut, elle est stocké dans le package de la première classe.

    En toute logique, le code doit être le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    //..
    		this.packageClass=model.createNestedPackage("Class");
    		this.packageClassAssociation=model.createNestedPackage("ClassAssociation");
    Class c1= this.packageClass.createOwnedClass(
    					"c1", false);
    Class c2= this.packageClass.createOwnedClass(
    					"c2", false);
    
    //..
    
    	private void createClassAssociation(Class c1, Class c2) {
    		boolean end1IsNavigable=true;
    		AggregationKind end1Aggregation=AggregationKind.NONE_LITERAL;
    		String end1Name=c1.getName();
    		int end1Lower=1;
    		int end1Upper=1;
    		Type end1Type=c1;
    		boolean end2IsNavigable=true;
    		AggregationKind end2Aggregation=AggregationKind.NONE_LITERAL;
    		String end2Name=c2.getName();
    		int end2Lower=1;
    		int end2Upper=1;
    		Association association = c2.createAssociation(end1IsNavigable, end1Aggregation, end1Name, end1Lower, end1Upper, end1Type, end2IsNavigable, end2Aggregation, end2Name, end2Lower, end2Upper);
    		association.setName(c1.getName()+"___"+c2.getName());
    		packageClassAssociation.getPackagedElements().add(association);
    	}
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

###raw>template_hook.ano_emploi###