private List<IArc> generateArcsInstancesCase11(
     Collection<INode> sourcesNodes,
     Collection<INode> targetsNodes,
     AssociationDefinition associationDefinition,
     Collection<AssociationDefinition> associations,
     Collection<IArc> generatedArcs) {
   List<IArc> arcsInstances = new ArrayList<IArc>();
   if (numberOfOutputArcs > 0) {
     while (!sourcesNodes.isEmpty() && !targetsNodes.isEmpty()) {
       INode source = RandomMethods.selectRandomlyNode(sourcesNodes);
       INode target = RandomMethods.selectRandomlyNode(targetsNodes);
       IArc arc = createRandomlyArc(source, target, associationDefinition);
       AssociationDefinition invAssoc =
           generatorServices.searchInverseAssoc(
               source, target, associationDefinition, associations);
       if (invAssoc != null) {
         IArc invArc =
             generatorServices.getInverseGeneratedArc(source, target, invAssoc, generatedArcs);
         if (invArc != null) {
           arc = null;
         }
       }
       if (arc != null) {
         arcsInstances.add(arc);
       }
       sourcesNodes.remove(source);
       targetsNodes.remove(target);
     }
   }
   return arcsInstances;
 }
  public Map<PropertyDefinition, Object> generateDatasProperties(
      ClassDefinition type, Collection<PropertyDefinition> properties) throws Exception {
    Map<PropertyDefinition, Object> datasProperties = new HashMap<PropertyDefinition, Object>();

    Collection<PropertyDefinition> unicityProperties =
        generatorServices.getUnicityProperties(type, properties);

    Collection<PropertyDefinition> tempProperties = new ArrayList<PropertyDefinition>();
    tempProperties.addAll(properties);
    tempProperties.removeAll(unicityProperties);
    for (PropertyDefinition propertyDefinition : tempProperties) {
      if (!propertyDefinition.getName().getNamespaceURI().contains("alfresco")) {
        startAttributeIndex = 0;
        datasProperties.put(propertyDefinition, generateDatasProperty(propertyDefinition));
      }
    }

    if (unicityProperties.size() > 0) {
      startAttributeIndex = savedStartIndexAttribute.intValue();
      Map<PropertyDefinition, Object> dataUnicityProperties =
          generateDataForUnicityProperties(type, unicityProperties);
      if (dataUnicityProperties.size() > 0) {
        datasProperties.putAll(dataUnicityProperties);
      }
    }

    return datasProperties;
  }
  public boolean generateArcsInstances(IStructure structure) throws Exception {
    List<IArc> arcsInstances = new ArrayList<IArc>();

    Collection<AssociationDefinition> associations =
        ((AlfrescoModelStructure) structure).getAssociations();

    for (AssociationDefinition associationDefinition : associations) {

      List<IArc> arcsInstancesByAssociation = new ArrayList<IArc>();

      ClassDefinition sourceType = associationDefinition.getSourceClass();
      Collection<INode> sourcesNodes = generatorServices.getGeneratedNodesByType(sourceType);

      boolean sourceMultiplicity = associationDefinition.isSourceMany();

      ClassDefinition targetType = associationDefinition.getTargetClass();
      Collection<INode> targetsNodes = generatorServices.getGeneratedNodesByType(targetType);

      boolean targetMultiplicity = associationDefinition.isTargetMany();

      if (!sourcesNodes.isEmpty() && !targetsNodes.isEmpty()) {
        if (!sourceMultiplicity && !targetMultiplicity) {
          arcsInstancesByAssociation =
              generateArcsInstancesCase11(
                  sourcesNodes, targetsNodes, associationDefinition, associations, arcsInstances);
        } else if (!sourceMultiplicity && targetMultiplicity) {
          arcsInstancesByAssociation =
              generateArcsInstancesCase1N(
                  sourcesNodes, targetsNodes, associationDefinition, associations, arcsInstances);
        } else if (sourceMultiplicity && !targetMultiplicity) {
          arcsInstancesByAssociation =
              generateArcsInstancesCaseN1(
                  sourcesNodes, targetsNodes, associationDefinition, associations, arcsInstances);
        } else if (sourceMultiplicity && targetMultiplicity) {
          arcsInstancesByAssociation =
              generateArcsInstancesCaseNN(sourcesNodes, targetsNodes, associationDefinition);
        }
        arcsInstances.addAll(arcsInstancesByAssociation);
      }
    }
    ((AlfrescoModelData) alfrescoModelDatas).setGeneratedAssociationsInstances(arcsInstances);
    return true;
  }
  public boolean generateNodesInstances(IStructure structure) throws Exception {
    List<INode> nodesInstances = new ArrayList<INode>();
    Collection<ClassDefinition> createdTypes = new ArrayList<ClassDefinition>();
    Collection<ClassDefinition> types = ((AlfrescoModelStructure) structure).getTypes();
    Collection<AssociationDefinition> compositions =
        generatorServices.extractCompositions(
            ((AlfrescoModelStructure) structure).getAssociations());

    for (int numOfNodes = 0; numOfNodes < numberOfNodes; numOfNodes++) {
      ClassDefinition type = RandomMethods.selectRandomlyType(types);
      createdTypes.add(type);
    }

    Map<AssociationDefinition, Collection<ClassDefinition>> sourcesTypesOfCompositions =
        generatorServices.getSourcesTypesOfCompositions(createdTypes, compositions);
    Collection<ClassDefinition> deletedTargetsTypes =
        generatorServices.deleteTargetsTypesOfNotCreatedTargetsTypesOfCompositions(
            sourcesTypesOfCompositions, createdTypes);
    createdTypes.removeAll(deletedTargetsTypes);

    for (ClassDefinition type : createdTypes) {
      indexType.put(type, Integer.valueOf(0));
    }

    for (ClassDefinition type : createdTypes) {
      generatorServices.getSerializedDataFromFile();

      generatorServices.initializeUnicityVariables(createdTypes, type);

      nodesInstances.add(((Instance) instance).instanciation(type));

      Integer newValue = Integer.valueOf(indexType.get(type).intValue() + 1);
      indexType.put(type, newValue);

      generatorServices.serializeData();
    }
    ((AlfrescoModelData) alfrescoModelDatas).setGeneratedTypesInstances(nodesInstances);

    // Reinitialization because beans still exist until Alfresco be shutdown
    generatorServices.reInitialization();

    return true;
  }