/**
  * Retrieve an instance of the enum based on its int value.
  *
  * @param type int type
  * @return enum instance
  */
 public static LineStyle getInstance(Number type) {
   int value;
   if (type == null) {
     value = -1;
   } else {
     value = NumberHelper.getInt(type);
   }
   return (getInstance(value));
 }
  /**
   * This method evaluates a if a graphical indicator should be displayed, given a set of Task or
   * Resource data. The method will return -1 if no indicator should be displayed.
   *
   * @param container Task or Resource instance
   * @return indicator index
   */
  public int evaluate(FieldContainer container) {
    //
    // First step - determine the list of criteria we are should use
    //
    List<GraphicalIndicatorCriteria> criteria;
    if (container instanceof Task) {
      Task task = (Task) container;
      if (NumberHelper.getInt(task.getUniqueID()) == 0) {
        if (m_projectSummaryInheritsFromSummaryRows == false) {
          criteria = m_projectSummaryCriteria;
        } else {
          if (m_summaryRowsInheritFromNonSummaryRows == false) {
            criteria = m_summaryRowCriteria;
          } else {
            criteria = m_nonSummaryRowCriteria;
          }
        }
      } else {
        if (task.getSummary() == true) {
          if (m_summaryRowsInheritFromNonSummaryRows == false) {
            criteria = m_summaryRowCriteria;
          } else {
            criteria = m_nonSummaryRowCriteria;
          }
        } else {
          criteria = m_nonSummaryRowCriteria;
        }
      }
    } else {
      // It is possible to have a resource summary row, but at the moment
      // I can't see how you can determine this.
      criteria = m_nonSummaryRowCriteria;
    }

    //
    // Now we have the criteria, evaluate each one until we get a result
    //
    int result = -1;
    for (GraphicalIndicatorCriteria gic : criteria) {
      result = gic.evaluate(container);
      if (result != -1) {
        break;
      }
    }

    //
    // If we still don't have a result at the end, return the
    // default value, which is 0
    //
    if (result == -1) {
      result = 0;
    }

    return (result);
  }
  /**
   * Test the resource types present in an individual MPP file.
   *
   * @param file MPP file to test
   */
  private void testResourceType(File file) throws MPXJException {
    ProjectFile project = new MPPReader().read(file);
    List<Resource> resources = project.getAllResources();
    assertEquals(10, resources.size());

    testResource(file, project, 1, "Work 1", ResourceType.WORK);
    testResource(file, project, 2, "Work 2", ResourceType.WORK);
    testResource(file, project, 3, "Work 3", ResourceType.WORK);
    testResource(file, project, 4, "Material 1", ResourceType.MATERIAL);
    testResource(file, project, 5, "Material 2", ResourceType.MATERIAL);
    testResource(file, project, 6, "Material 3", ResourceType.MATERIAL);

    //
    // The cost resource type was introduced in MPP12
    //
    ResourceType expectedType =
        NumberHelper.getInt(project.getProjectProperties().getMppFileType()) > 9
            ? ResourceType.COST
            : ResourceType.MATERIAL;
    testResource(file, project, 7, "Cost 1", expectedType);
    testResource(file, project, 8, "Cost 2", expectedType);
    testResource(file, project, 9, "Cost 3", expectedType);
  }