/**
   * Return the set of models assigned as providers.
   *
   * @return the providers consumed by the model
   * @exception IllegalStateException if the model is not in an assembled state
   */
  public DeploymentModel[] getProviders() {
    if (!isAssembled()) {
      final String error = "Model is not assembled " + this;
      throw new IllegalStateException(error);
    }

    final ArrayList list = new ArrayList();
    if (getContextModel().isEnabled()) {
      DeploymentModel provider = getContextModel().getProvider();
      if (provider != null) {
        list.add(provider);
      }
    }

    StageModel[] stages = getStageModels();
    for (int i = 0; i < stages.length; i++) {
      StageModel stage = stages[i];
      list.add(stage.getProvider());
    }

    DependencyModel[] dependencies = getDependencyModels();
    for (int i = 0; i < dependencies.length; i++) {
      DependencyModel dependency = dependencies[i];
      DeploymentModel provider = dependency.getProvider();
      if (provider != null) list.add(provider);
    }

    return (DeploymentModel[]) list.toArray(new DeploymentModel[0]);
  }
 /**
  * Return a stage model matching the supplied descriptor. If no stage model matches the supplied
  * descriptor the implementation will return null.
  *
  * @param stage the stage descriptor
  * @return the matching stage model
  */
 public StageModel getStageModel(StageDescriptor stage) {
   StageModel[] stages = getStageModels();
   for (int i = 0; i < stages.length; i++) {
     StageModel model = stages[i];
     if (stage.equals(model.getStage())) {
       return model;
     }
   }
   return null;
 }