Exemple de code pour la création d'une entité dans une hiérarchie et l'extraction des descendants et des ancêtres

Utilisez l'exemple de fragment de code et les graphiques de données pour créer une entité dans une hiérarchie et extraire les descendants et les ancêtres d'une entité à l'aide de la méthode get().

L'exemple de fragment de code et les graphiques de données abordent les étapes suivantes :

  1. Créez une hiérarchie avec des entités de type OrgContainer dans le domaine par défaut.
  2. Créez une entité enfant sous la hiérarchie OrgContainer.
  3. Extrayez les descendants de l'entité parent à l'aide de la méthode get() et de DescendantControl.
  4. Extrayez les ancêtres de l'entité enfant à l'aide de la méthode get() et d'AscendantControl.

Conditions prérequises

Assurez-vous d'avoir bien lu les informations et effectué les étapes décrites dans la rubrique Prérequis pour la programmation.

Exemple de code

Ajoutez le fragment de code ci-après à votre code d'application, puis remplacez les variables par les valeurs réelles à utiliser.

/**
 *  testDescendantsAndAncestorsSnippet effectue les opération suivante :
 *  Crée une hiérarchie OrgContainer dans le domaine par défaut
 *  Crée les utilisateurs enfant de cette hiérarchie OrgContainer 
 *  Extrait les descendants de l'entité parent
 *  Extrait les ancêtres de l'entité enfant
 */
public static void testDescendantsAndAncestorsSnippet()
{
    //Création d'une entité de type OrgContainer 
    DataObject rt = addOrgContainer("cn", "users", null);
    // Création d'une sous-entité sous cn=users
    DataObject rt1 = addOrgContainer("o", "SWG", rt);
    // Création d'une sous-entité sous o=SWG,cn=users
    DataObject rt2 = addOrgContainer("ou", "India", rt1);
    //Extraction de l'entité parent des utilisateurs créés ci-après
    DataObject parentEntity = (DataObject) rt2.getList(SchemaConstants.DO_ENTITIES).get(0);
    //Ajout de deux utilisateurs user1 et user2
    DataObject usr1 = addPersonAccountWithNonDefaultParent("user1","user1cn","user1sn",parentEntity);
    DataObject usr2 = addPersonAccountWithNonDefaultParent("user2","user2cn","user2sn",parentEntity);
    //Extraction des descendants
    getDescendant();
    //Extraction des ancêtres d'user1
    getAncestor(usr1);
}

/**
 * addOrgContainer ajoute une entrée dans le parent donné
 * @param   le préfixe correspond à rdnProperty
 * @param   la valeur correspond aux valeurs de rdnProperty
 * @param   obj correspond au dataObject à partir duquel le parent est identifié
 * @return  DataObject	
 */
public static DataObject addOrgContainer (String prefix, String value, DataObject obj)
{
    DataObject parentEntity;
    boolean first = false; 
    try
    {
        if (obj == null) {
            obj = SDOHelper.createRootDataObject();
            first = true;
        }
        DataObject entity = SDOHelper.createEntityDataObject(obj, null, SchemaConstants.DO_ORGCONTAINER);
        if (!first) {
            // Définition du parent de l'entité OrgContainer
            parentEntity = (DataObject) obj.getList(SchemaConstants.DO_ENTITIES).get(0);
            entity.set("parent",parentEntity);
        }
        // Définition de la propriété OrgContainer
        entity.set(prefix, value);
        System.out.println("Input datagraph before creating OrgContainer"+ printDO(obj));
        // Création de l'entité OrgContainer
        obj = service.create(obj);
        System.out.println("Output datagraph after creating OrgContainer"+ printDO(obj));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return obj;
}

/**
 *  addPersonAccountWithNonDefaultParent 
 *  Ajoute une entité de type PersonAccount sous le parent spécifié
 *  @param valeur uid à définir
 *  @param valeur cn à définir
 *  @param valeur sn à définir
 *  @param valeur parent à définir
 *  @return DataObject
 */
public static DataObject addPersonAccountWithNonDefaultParent(String uid, String cn, String sn, DataObject parent)
{
    DataObject root = null;
    try
    {
        root = SDOHelper.createRootDataObject();
        DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_PERSON_ACCOUNT);
        // Définition des propriétés de l'entité
        entity.set("uid", uid);
        entity.set("cn", cn);
        entity.set("sn", sn);
        entity.set("parent", parent);
        System.out.println("Input datagraph before creating user"+ printDO(root));
        // Création de l'entité PersonAccount
        root = service.create(root);
        System.out.println("Output datagraph after creating user"+ printDO(root));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return root;
}
/**
 *  getDescendant extrait les entités descendantes d'une entité
 */
public static void getDescendant()
{
    try
    {
        DataObject root = SDOHelper.createRootDataObject();
        DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_ENTITY);
        //Définition du nom unique de l'entité dont les descendants doivent être recherchés
        entity.createDataObject(SchemaConstants.DO_IDENTIFIER).setString(SchemaConstants.PROP_UNIQUE_NAME,
                "cn=users,o=defaultWIMFileBasedRealm");
        //Création de l'objet de contrôle de descendant
        DataObject descCtrl = SDOHelper.createControlDataObject(root, null, 
                SchemaConstants.DO_DESCENDANT_CONTROL);
        // Définition du niveau de propriété pour extraire tous les descendants imbriqués
        descCtrl.setInt(SchemaConstants.PROP_LEVEL, SchemaConstants.PROP_LEVEL_NESTED);
        // Définition des propriétés à extraire des descendants
        descCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        descCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("o");
        descCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("ou");
        System.out.println("Input datagraph before getting descendants"+ printDO(root));
        // Extraction des entités
        root = service.get(root);
        System.out.println("Output datagraph after getting descendants"+ printDO(root));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

/**
 * getAncestor extrait les entités ancêtres d'une entité
 * @param entity    Nom de l'entité dont l'ancêtre doit être extrait
 */
public static void getAncestor(DataObject entity)
{
    try
    {
        // Définition de l'objet de contrôle d'ancêtre
        DataObject ancesCtrl = SDOHelper.createControlDataObject(entity, null, 
                SchemaConstants.DO_ANCESTOR_CONTROL);
        // Définition du niveau de propriété pour extraire tous les ancêtres imbriqués
        ancesCtrl.setInt(SchemaConstants.PROP_LEVEL, SchemaConstants.PROP_LEVEL_NESTED); 
        // Définition des propriétés à extraire des ancêtres
        ancesCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
        ancesCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("o");
        ancesCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("ou");
        System.out.println("Input datagraph before getting ancestors"+ printDO(entity));
        // Extraction des entités
        entity = service.get(entity);
        System.out.println("Output datagraph after getting ancestors"+ printDO(entity));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
} 

Graphiques de données d'entrée et de sortie

Graphiques de données d'entrée pour la création d'une entité parent, OrgContainer, cn :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:OrgContainer">
      <wim:cn>users</wim:cn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphique de données de sortie après la création d'une entité parent, OrgContainer, cn :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:OrgContainer">
      <wim:identifier externalName="cn=users,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="ecf1d16b-9ab8-4de6-a2a5-7eb48fd2fe7c" uniqueName="cn=users,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphiques de données d'entrée pour la création d'une entité parent, OrgContainer, o :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:OrgContainer">
      <wim:parent xsi:type="wim:OrgContainer">
        <wim:identifier externalName="cn=users,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
            uniqueId="ecf1d16b-9ab8-4de6-a2a5-7eb48fd2fe7c" uniqueName="cn=users,o=defaultWIMFileBasedRealm"/>
      </wim:parent>
      <wim:o>SWG</wim:o>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphique de données de sortie après la création d'une entité parent, OrgContainer, o :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:OrgContainer">
      <wim:identifier externalName="o=SWG,cn=users,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="e6fc7e62-7492-44f9-8db6-4bccbc40429e" uniqueName="o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphiques de données d'entrée pour la création d'une entité parent, OrgContainer, ou :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:OrgContainer">
      <wim:parent xsi:type="wim:OrgContainer">
        <wim:identifier externalName="o=SWG,cn=users,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
            uniqueId="e6fc7e62-7492-44f9-8db6-4bccbc40429e" uniqueName="o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
      </wim:parent>
      <wim:ou>India</wim:ou>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphique de données de sortie après la création d'une entité parent, OrgContainer, ou :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:OrgContainer">
      <wim:identifier externalName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
          repositoryId="InternalFileRepository" uniqueId="2c281163-3daf-4223-bc63-6cf3f6502c4d"
          uniqueName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphiques de données d'entrée pour la création d'une entité enfant, user1 :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:parent xsi:type="wim:OrgContainer">
        <wim:identifier externalName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
            repositoryId="InternalFileRepository" uniqueId="2c281163-3daf-4223-bc63-6cf3f6502c4d"
            uniqueName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
      </wim:parent>
      <wim:uid>user1</wim:uid>
      <wim:cn>user1cn</wim:cn>
      <wim:sn>user1sn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphique de données de sortie après la création d'une entité enfant, user1 :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
          repositoryId="InternalFileRepository" uniqueId="664e4422-d9b6-4b0e-a9e8-62620c6c710f"
          uniqueName="uid=user1,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphiques de données d'entrée pour la création d'une entité enfant, user2 :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:parent xsi:type="wim:OrgContainer">
        <wim:identifier externalName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
            repositoryId="InternalFileRepository" uniqueId="2c281163-3daf-4223-bc63-6cf3f6502c4d"
            uniqueName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
      </wim:parent>
      <wim:uid>user2</wim:uid>
      <wim:cn>user2cn</wim:cn>
      <wim:sn>user2sn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphique de données de sortie après la création d'une entité enfant, user2 :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user2,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
          repositoryId="InternalFileRepository" uniqueId="664e4422-d9b6-4b0e-a9e8-62620c6c710f"
          uniqueName="uid=user2,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphique de données d'entrée pour l'extraction des descendants de l'entité parent :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities>
      <wim:identifier uniqueName="cn=users,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:DescendantControl" level="0">
      <wim:properties>uid</wim:properties>
      <wim:properties>ou</wim:properties>
      <wim:properties>o</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>

Graphique de données de sortie après l'extraction des descendants de l'entité parent :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:OrgContainer">
      <wim:identifier externalName="cn=users,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="c9218bab-2444-4c56-8697-88a83a1d82f9" uniqueName="cn=users,o=defaultWIMFileBasedRealm"/>
      <wim:children xsi:type="wim:OrgContainer">
        <wim:identifier externalId="14126738-5bbe-4d3f-8589-ef71b8724696" 
            externalName="o=SWG,cn=users,o=defaultWIMFileBasedRealm"
            repositoryId="InternalFileRepository" uniqueId="14126738-5bbe-4d3f-8589-ef71b8724696"
            uniqueName="o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
        <wim:o>SWG</wim:o>
      </wim:children>
      <wim:children xsi:type="wim:OrgContainer">
        <wim:identifier externalId="22200d23-5fec-4d5f-9033-5c8c925e7a82" 
            externalName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
            repositoryId="InternalFileRepository" uniqueId="22200d23-5fec-4d5f-9033-5c8c925e7a82"
            uniqueName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
        <wim:ou>India</wim:ou>
      </wim:children>
      <wim:children xsi:type="wim:PersonAccount">
        <wim:identifier externalId="63cbb4ca-a629-4a64-9681-98154ec877b6" 
            externalName="uid=user2,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
            repositoryId="InternalFileRepository" uniqueId="63cbb4ca-a629-4a64-9681-98154ec877b6"
            uniqueName="uid=user2,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
        <wim:uid>user2</wim:uid>
      </wim:children>
      <wim:children xsi:type="wim:PersonAccount">
        <wim:identifier externalId="7f421b09-e22a-4311-9e2f-7b59f77b6d21" 
            externalName="uid=user1,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
            repositoryId="InternalFileRepository" uniqueId="7f421b09-e22a-4311-9e2f-7b59f77b6d21"
            uniqueName="uid=user1,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
        <wim:uid>user1</wim:uid>
      </wim:children>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Graphique de données d'entrée pour l'extraction des ancêtres de l'entité enfant :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
          repositoryId="InternalFileRepository" uniqueId="9f57af27-573b-4924-a405-7e35e7be012a"
          uniqueName="uid=user1,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:AncestorControl" level="0">
      <wim:properties>cn</wim:properties>
      <wim:properties>ou</wim:properties>
      <wim:properties>o</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>

Graphique de données de sortie après l'extraction des ancêtres de l'entité enfant :

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
          repositoryId="InternalFileRepository" uniqueId="9f57af27-573b-4924-a405-7e35e7be012a"
          uniqueName="uid=user1,ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
      <wim:parent xsi:type="wim:OrgContainer">
        <wim:identifier externalId="127bac7a-50da-4616-907b-f7345873c087" 
            externalName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"
            repositoryId="InternalFileRepository" uniqueId="127bac7a-50da-4616-907b-f7345873c087"
            uniqueName="ou=India,o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
        <wim:parent xsi:type="wim:OrgContainer">
          <wim:identifier externalId="7e1c0b12-e45b-4595-bfb6-5d39e5741642" 
              externalName="o=SWG,cn=users,o=defaultWIMFileBasedRealm"
              repositoryId="InternalFileRepository" uniqueId="7e1c0b12-e45b-4595-bfb6-5d39e5741642"
              uniqueName="o=SWG,cn=users,o=defaultWIMFileBasedRealm"/>
          <wim:parent xsi:type="wim:OrgContainer">
            <wim:identifier externalId="ef168b8d-baed-4cd1-9f10-999866ea4c29" 
                externalName="cn=users,o=defaultWIMFileBasedRealm"
                repositoryId="InternalFileRepository" uniqueId="ef168b8d-baed-4cd1-9f10-999866ea4c29"
                uniqueName="cn=users,o=defaultWIMFileBasedRealm"/>
            <wim:cn>users</wim:cn>
          </wim:parent>
          <wim:o>SWG</wim:o>
        </wim:parent>
        <wim:ou>India</wim:ou>
      </wim:parent>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>


Conditions d'utilisation | Commentaires