protected void buildInitialProject() {
    initialProject = new EmployeeProject();
    Map<Class, ClassDescriptor> descriptors = initialProject.getDescriptors();

    // Amend the employee descriptor
    ClassDescriptor employeeDescriptor = descriptors.get(Employee.class);
    DescriptorQueryManager queryManager = employeeDescriptor.getQueryManager();

    queryManager.addQuery("PersistenceTestGetEqual", buildPersistenceTestGetEqualQuery());
    queryManager.addQuery("PersistenceTestAnyOfEqual", buildPersistenceTestAnyOfEqualQuery());
    queryManager.addQuery(
        "PersistenceTestGetAllowingNullEqual", buildPersistenceTestGetAllowingNullEqualQuery());
    queryManager.addQuery(
        "PersistenceTestAnyOfAllowingNoneEqual", buildPersistenceTestAnyOfAllowingNoneEqualQuery());
    queryManager.addQuery(
        "PersistenceTestGetGreaterThan", buildPersistenceTestGetGreaterThanQuery());
    queryManager.addQuery(
        "PersistenceTestGetGreaterThanEqual", buildPersistenceTestGetGreaterThanEqualQuery());
    queryManager.addQuery("PersistenceTestGetIsNull", buildPersistenceTestGetIsNullQuery());
    queryManager.addQuery(
        "PersistenceTestGetEqualIgnoringCase", buildPersistenceTestGetEqualIgnoringCaseQuery());
    queryManager.addQuery("PersistenceTestGetLessThan", buildPersistenceTestGetLessThanQuery());
    queryManager.addQuery(
        "PersistenceTestGetLessThanEqual", buildPersistenceTestGetLessThanEqualQuery());
    queryManager.addQuery("PersistenceTestGetLike", buildPersistenceTestGetLikeQuery());
    queryManager.addQuery("PersistenceTestGetNot", buildPersistenceTestGetNotQuery());
    queryManager.addQuery("PersistenceTestGetNotEqual", buildPersistenceTestGetNotEqualQuery());
    queryManager.addQuery("PersistenceTestGetNotLike", buildPersistenceTestGetNotLikeQuery());
    queryManager.addQuery("PersistenceTestGetNotNull", buildPersistenceTestGetNotNullQuery());
    queryManager.addQuery(
        "PersistenceTestEmptyStringAndNull", buildPersistenceTestEmptyStringAndNull());
    queryManager.addQuery(
        "PersistenceTestGreaterThanEqualDate", buildPersistenceTestGreaterThanEqualDateQuery());

    // ReportQuery
    queryManager.addQuery("AddAttributeReportQuery", buildAddAttributeReportQueryTest());
    queryManager.addQuery("AddAverageReportQuery", buildAddAverageReportQueryTest());
    queryManager.addQuery("AddCountReportQuery", buildAddCountReportQueryTest());
    queryManager.addQuery("AddFunctionItemReportQuery", buildAddFunctionItemReportQueryTest());
    queryManager.addQuery("AddGroupingReportQuery", buildAddGroupingReportQueryTest());
    queryManager.addQuery("AddItemReportQuery", buildAddItemReportQueryTest());
    queryManager.addQuery("AddMaximumReportQuery", buildAddMaximumReportQueryTest());
    queryManager.addQuery("AddMinimumReportQuery", buildAddMinimumReportQueryTest());
    queryManager.addQuery(
        "AddStandardDeviationReportQuery", buildAddStandardDeviationReportQueryTest());
    queryManager.addQuery("AddSumReportQuery", buildAddSumReportQueryTest());
    queryManager.addQuery("AddVarianceReportQuery", buildAddVarianceReportQueryTest());
    queryManager.addQuery("AddJoinedObjectLevelReadQuery", buildAddJoinedReportQueryTest());
    queryManager.addQuery("AddOrderingReadAllQuery", buildAddOrderingReportQueryTest());
    queryManager.addQuery("AddBatchReadReadAllQuery", buildAddBatchReadReportQueryTest());

    // Query options
    buildMemoryQueryReturnConfirmedQuery(queryManager);
    buildMemoryQueryThrowExceptionQuery(queryManager);
    buildMemoryQueryReturnNotConfirmedQuery(queryManager);
    buildMemoryQueryTriggerIndirectionQuery(queryManager);
    buildCacheQueryResultsQuery(queryManager);
    buildRefreshIdentityMapResultsQuery(queryManager);
    buildMaxRowsQuery(queryManager);
    buildFirstResultQuery(queryManager);
    buildQueryTimeOutQuery(queryManager);
    buildUseDistinctQuery(queryManager);
    buildDoNotUseDistinctQuery(queryManager);
    buildShouldPrepareQuery(queryManager);
    buildReadOnlyQuery(queryManager);

    // Amend the project descriptor
    ClassDescriptor projectDescriptor =
        descriptors.get(org.eclipse.persistence.testing.models.employee.domain.Project.class);
    // Postgres throws an error if you try to set the timeout.
    if (!TestExecutor.getDefaultExecutor().getSession().getPlatform().isPostgreSQL()) {
      projectDescriptor.getQueryManager().setQueryTimeout(QUERY_MANAGER_TIMEOUT);
    }
    projectDescriptor.setCacheSynchronizationType(
        ClassDescriptor
            .SEND_NEW_OBJECTS_WITH_CHANGES); // Setting added for validation only - no tests
                                             // currently run against this setting - Bug 3599101
    projectDescriptor.setCacheInvalidationPolicy(
        new NoExpiryCacheInvalidationPolicy()); // Setting added for validation only - no tests
                                                // currently run against this setting - Bug 3599101

    // Query options
    buildJoinSubclassesQuery(projectDescriptor.getQueryManager());

    // Setting invalidation policies
    employeeDescriptor.setCacheInvalidationPolicy(new TimeToLiveCacheInvalidationPolicy(10000000));
    descriptors
        .get(Address.class)
        .setCacheInvalidationPolicy(new TimeToLiveCacheInvalidationPolicy(10000000));
    descriptors
        .get(PhoneNumber.class)
        .setCacheInvalidationPolicy(new TimeToLiveCacheInvalidationPolicy(10000000));

    GregorianCalendar calendar = new GregorianCalendar();
    calendar.add(Calendar.HOUR_OF_DAY, 2);
    descriptors
        .get(LargeProject.class)
        .setCacheInvalidationPolicy(
            new DailyCacheInvalidationPolicy(
                calendar.get(Calendar.HOUR_OF_DAY),
                calendar.get(Calendar.MINUTE),
                calendar.get(Calendar.SECOND),
                calendar.get(Calendar.MILLISECOND)));
    descriptors
        .get(SmallProject.class)
        .setCacheInvalidationPolicy(
            new DailyCacheInvalidationPolicy(
                calendar.get(Calendar.HOUR_OF_DAY),
                calendar.get(Calendar.MINUTE),
                calendar.get(Calendar.SECOND),
                calendar.get(Calendar.MILLISECOND)));
  }