private static void sortAssociations(
     final DeweyOrderSet orderSet, final List<ObjectAssociation> associationsToAppendTo) {
   for (final Object element : orderSet) {
     if (element instanceof OneToManyAssociation) {
       associationsToAppendTo.add((ObjectAssociation) element);
     } else if (element instanceof OneToOneAssociation) {
       associationsToAppendTo.add((ObjectAssociation) element);
     } else if (element instanceof DeweyOrderSet) {
       // just flatten.
       DeweyOrderSet childOrderSet = (DeweyOrderSet) element;
       sortAssociations(childOrderSet, associationsToAppendTo);
     } else {
       throw new UnknownTypeException(element);
     }
   }
 }
  private void addContributeeActionsIfAny(
      final ObjectAdapter serviceAdapter, final List<ObjectAction> contributeeActionsToAppendTo) {
    final ObjectSpecification specification = serviceAdapter.getSpecification();
    if (specification == this) {
      return;
    }
    final List<ObjectAction> contributeeActions = Lists.newArrayList();
    final List<ObjectAction> serviceActions =
        specification.getObjectActions(
            ActionType.ALL, Contributed.INCLUDED, Filters.<ObjectAction>any());
    for (final ObjectAction serviceAction : serviceActions) {
      if (isAlwaysHidden(serviceAction)) {
        continue;
      }
      final NotContributedFacet notContributed = serviceAction.getFacet(NotContributedFacet.class);
      if (notContributed != null && notContributed.toActions()) {
        continue;
      }
      if (!(serviceAction instanceof ObjectActionImpl)) {
        continue;
      }
      final ObjectActionImpl contributedAction = (ObjectActionImpl) serviceAction;

      // see if qualifies by inspecting all parameters
      final int contributeeParam = contributeeParameterMatchOf(contributedAction);
      if (contributeeParam != -1) {
        ObjectActionContributee contributeeAction =
            new ObjectActionContributee(
                serviceAdapter, contributedAction, contributeeParam, this, objectMemberContext);
        facetProcessor.processMemberOrder(metadataProperties, contributeeAction);
        contributeeActions.add(contributeeAction);
      }
    }
    contributeeActionsToAppendTo.addAll(contributeeActions);
  }
 private void addIfReturnsSubtype(
     final ObjectAction serviceAction,
     final ObjectSpecification actionType,
     final List<ObjectAction> matchingActionsToAppendTo) {
   if (actionType.isOfType(this)) {
     matchingActionsToAppendTo.add(serviceAction);
   }
 }
 private static void sortActions(
     final DeweyOrderSet orderSet, final List<ObjectAction> actionsToAppendTo) {
   for (final Object element : orderSet) {
     if (element instanceof ObjectAction) {
       final ObjectAction objectAction = (ObjectAction) element;
       actionsToAppendTo.add(objectAction);
     } else if (element instanceof DeweyOrderSet) {
       final DeweyOrderSet set = ((DeweyOrderSet) element);
       final List<ObjectAction> actions = Lists.newArrayList();
       sortActions(set, actions);
       actionsToAppendTo.addAll(actions);
     } else {
       throw new UnknownTypeException(element);
     }
   }
 }
  /**
   * Synthesises {@link ObjectAssociation}s from matching {@link ObjectAction}s of any of the
   * services that accept one parameter
   */
  private List<ObjectAssociation> createContributeeAssociations(
      final ObjectAdapter serviceAdapter) {

    final ObjectSpecification specification = serviceAdapter.getSpecification();
    final List<ObjectAction> serviceActions =
        specification.getObjectActions(
            ActionType.USER, Contributed.INCLUDED, Filters.<ObjectAction>any());

    final List<ObjectActionImpl> contributedActions = Lists.newArrayList();
    for (final ObjectAction serviceAction : serviceActions) {
      if (isAlwaysHidden(serviceAction)) {
        continue;
      }
      final NotContributedFacet notContributed = serviceAction.getFacet(NotContributedFacet.class);
      if (notContributed != null && notContributed.toAssociations()) {
        continue;
      }
      if (!serviceAction.hasReturn()) {
        continue;
      }
      if (serviceAction.getParameterCount() != 1
          || contributeeParameterMatchOf(serviceAction) == -1) {
        continue;
      }
      if (!(serviceAction instanceof ObjectActionImpl)) {
        continue;
      }
      if (!serviceAction.getSemantics().isSafeInNature()) {
        continue;
      }
      contributedActions.add((ObjectActionImpl) serviceAction);
    }

    return Lists.newArrayList(
        Iterables.transform(
            contributedActions, createContributeeAssociationFunctor(serviceAdapter, this)));
  }
 public void addSubclass(final ObjectSpecification subclass) {
   if (classes.contains(subclass)) {
     return;
   }
   classes.add(subclass);
 }