Search in sources :

Example 1 with BusinessObjectProviderContext

use of org.osate.ge.BusinessObjectProviderContext in project osate2 by osate.

the class BusinessObjectProviderHelper method getChildBusinessObjects.

/**
 * Returns the business objects from all the business object providers for the specified business object context.
 * @param parentBoc the business object context for which to retrieve business object
 * @return the children business objects for the specified business object context
 */
public Collection<Object> getChildBusinessObjects(final BusinessObjectContext parentBoc) {
    // Use business object providers to determine the children
    final BusinessObjectProviderContext ctx = new BusinessObjectProviderContext(parentBoc, extRegistry);
    final Stream<Object> allChildren = extRegistry.getBusinessObjectProviders().stream().flatMap(bop -> bop.getChildBusinessObjects(ctx));
    return allChildren.distinct().collect(Collectors.toList());
}
Also used : BusinessObjectProviderContext(org.osate.ge.BusinessObjectProviderContext)

Example 2 with BusinessObjectProviderContext

use of org.osate.ge.BusinessObjectProviderContext in project osate2 by osate.

the class ErrorModelBusinessObjectProvider method getChildBusinessObjects.

@Override
public Stream<?> getChildBusinessObjects(final BusinessObjectProviderContext ctx) {
    final Object bo = ctx.getBusinessObjectContext().getBusinessObject();
    if (bo instanceof AadlPackage) {
        return ErrorModelGeUtil.getErrorModelLibrary((AadlPackage) bo).map(lib -> Stream.concat(Stream.concat(lib.getTypes().stream(), lib.getTypesets().stream()), lib.getBehaviors().stream())).orElseGet(Stream::empty);
    } else if (bo instanceof ErrorBehaviorStateMachine) {
        final ErrorBehaviorStateMachine stateMachine = (ErrorBehaviorStateMachine) bo;
        return Stream.concat(Stream.concat(stateMachine.getEvents().stream(), stateMachine.getStates().stream()), stateMachine.getTransitions().stream());
    } else if (bo instanceof ErrorBehaviorTransition) {
        // See ErrorBehaviorTransitionHandler for details regarding how the business objects related to error behavior transitions are represented.
        final ErrorBehaviorTransition t = (ErrorBehaviorTransition) bo;
        return t.getDestinationBranches().isEmpty() ? Stream.empty() : Stream.concat(Stream.of(new BehaviorTransitionTrunk(t)), t.getDestinationBranches().stream());
    } else if (bo instanceof ErrorType) {
        final ErrorType errorType = (ErrorType) bo;
        if (errorType.getSuperType() != null) {
            return Stream.of(new ErrorTypeExtension(errorType.getSuperType(), errorType));
        }
    } else if (bo instanceof Classifier || bo instanceof Subcomponent) {
        // Anytime the children of a classifier or subcomponent is requested, process of error model subclauses
        // in the element or extended elements and cache the result.
        // Ideally, we would only do this if the classifier has changed but it would require a reliable means to
        // determine if a classifier or any classifiers it extends has changed. If extended classifiers are in another
        // package, the classifier be the same instance.
        // The object is cached so it is available when calling the business object provider on children.
        final Classifier classifier = ErrorModelGeUtil.getClassifier(ctx.getBusinessObjectContext()).orElse(null);
        if (classifier != null) {
            final CombinedErrorModelSubclause cacheEntry = CombinedErrorModelSubclause.create(classifier);
            classifierCache.put(classifier, cacheEntry);
            if (cacheEntry.subclauseExists()) {
                final Set<KeywordPropagationPointType> usedKeywordTypes = cacheEntry.getUsedKeywordPropagations();
                return Stream.of(cacheEntry.getPoints(), cacheEntry.getPaths(), cacheEntry.getFlows(), Arrays.stream(KeywordPropagationPointType.values()).map(t -> new KeywordPropagationPoint(classifier, t, usedKeywordTypes.contains(t)))).flatMap(Function.identity());
            }
        }
    } else if (bo instanceof Feature || bo instanceof PropagationPoint || bo instanceof KeywordPropagationPoint) {
        // Propagation(and containment) objects
        final CombinedErrorModelSubclause cacheEntry = getClassifierCacheEntry(ctx.getBusinessObjectContext());
        return PropagationTreeUtil.getPropagationsForBusinessObjectContext(cacheEntry.getPropagations(), ctx.getBusinessObjectContext());
    }
    return Stream.empty();
}
Also used : Arrays(java.util.Arrays) Feature(org.osate.aadl2.Feature) CombinedErrorModelSubclause(org.osate.ge.errormodel.combined.CombinedErrorModelSubclause) ErrorBehaviorTransition(org.osate.xtext.aadl2.errormodel.errorModel.ErrorBehaviorTransition) PropagationPoint(org.osate.xtext.aadl2.errormodel.errorModel.PropagationPoint) KeywordPropagationPointType(org.osate.ge.errormodel.model.KeywordPropagationPointType) Set(java.util.Set) BusinessObjectProviderContext(org.osate.ge.BusinessObjectProviderContext) BehaviorTransitionTrunk(org.osate.ge.errormodel.model.BehaviorTransitionTrunk) AadlPackage(org.osate.aadl2.AadlPackage) KeywordPropagationPoint(org.osate.ge.errormodel.model.KeywordPropagationPoint) Function(java.util.function.Function) ErrorTypeExtension(org.osate.ge.errormodel.model.ErrorTypeExtension) ErrorBehaviorStateMachine(org.osate.xtext.aadl2.errormodel.errorModel.ErrorBehaviorStateMachine) PropagationTreeUtil(org.osate.ge.errormodel.combined.PropagationTreeUtil) Stream(java.util.stream.Stream) BusinessObjectContext(org.osate.ge.BusinessObjectContext) Classifier(org.osate.aadl2.Classifier) BusinessObjectProvider(org.osate.ge.BusinessObjectProvider) ErrorModelGeUtil(org.osate.ge.errormodel.util.ErrorModelGeUtil) Subcomponent(org.osate.aadl2.Subcomponent) WeakHashMap(java.util.WeakHashMap) ErrorType(org.osate.xtext.aadl2.errormodel.errorModel.ErrorType) AadlPackage(org.osate.aadl2.AadlPackage) ErrorTypeExtension(org.osate.ge.errormodel.model.ErrorTypeExtension) CombinedErrorModelSubclause(org.osate.ge.errormodel.combined.CombinedErrorModelSubclause) Classifier(org.osate.aadl2.Classifier) Feature(org.osate.aadl2.Feature) ErrorBehaviorTransition(org.osate.xtext.aadl2.errormodel.errorModel.ErrorBehaviorTransition) ErrorType(org.osate.xtext.aadl2.errormodel.errorModel.ErrorType) PropagationPoint(org.osate.xtext.aadl2.errormodel.errorModel.PropagationPoint) KeywordPropagationPoint(org.osate.ge.errormodel.model.KeywordPropagationPoint) ErrorBehaviorStateMachine(org.osate.xtext.aadl2.errormodel.errorModel.ErrorBehaviorStateMachine) Subcomponent(org.osate.aadl2.Subcomponent) KeywordPropagationPoint(org.osate.ge.errormodel.model.KeywordPropagationPoint) Stream(java.util.stream.Stream) BehaviorTransitionTrunk(org.osate.ge.errormodel.model.BehaviorTransitionTrunk) KeywordPropagationPointType(org.osate.ge.errormodel.model.KeywordPropagationPointType)

Aggregations

BusinessObjectProviderContext (org.osate.ge.BusinessObjectProviderContext)2 Arrays (java.util.Arrays)1 Set (java.util.Set)1 WeakHashMap (java.util.WeakHashMap)1 Function (java.util.function.Function)1 Stream (java.util.stream.Stream)1 AadlPackage (org.osate.aadl2.AadlPackage)1 Classifier (org.osate.aadl2.Classifier)1 Feature (org.osate.aadl2.Feature)1 Subcomponent (org.osate.aadl2.Subcomponent)1 BusinessObjectContext (org.osate.ge.BusinessObjectContext)1 BusinessObjectProvider (org.osate.ge.BusinessObjectProvider)1 CombinedErrorModelSubclause (org.osate.ge.errormodel.combined.CombinedErrorModelSubclause)1 PropagationTreeUtil (org.osate.ge.errormodel.combined.PropagationTreeUtil)1 BehaviorTransitionTrunk (org.osate.ge.errormodel.model.BehaviorTransitionTrunk)1 ErrorTypeExtension (org.osate.ge.errormodel.model.ErrorTypeExtension)1 KeywordPropagationPoint (org.osate.ge.errormodel.model.KeywordPropagationPoint)1 KeywordPropagationPointType (org.osate.ge.errormodel.model.KeywordPropagationPointType)1 ErrorModelGeUtil (org.osate.ge.errormodel.util.ErrorModelGeUtil)1 ErrorBehaviorStateMachine (org.osate.xtext.aadl2.errormodel.errorModel.ErrorBehaviorStateMachine)1