From a51f7977a920f2046eb066c7b006b466c1008720 Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Thu, 1 Feb 2018 15:42:09 +0000 Subject: [PATCH] Deprecate ResourceLink: AllocationTables should be used instead. - Delete unused utility methods that reference this type - Move GPIOLinkingValueProvider and GPIOPinNumberValueProvider to af3.platform.pikeos. refs 3261 --- .../fortiss/af3/exploration/alg/util/.ratings | 4 +- .../af3/exploration/alg/util/AF3Utils.java | 103 +++++++----------- .../alg/util/ExplorationAlgUtils.java | 89 +++------------ 3 files changed, 55 insertions(+), 141 deletions(-) diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings index efee5ad0..89958197 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings @@ -1,7 +1,7 @@ -AF3Utils.java bbb1d95274ec4d8ae298193e195e81fc2a3aa74a RED +AF3Utils.java 21464822e84d3084af72ad0248bac03033989041 RED DesignSpaceExplorationModelElementFactory.java 9dc330973f132c4b936e4dc7ee8407614faf2ff6 RED ExplorationAlgDebugUtils.java 06116a61e99717a59b7b01e4e2865bf044a8a0e2 RED -ExplorationAlgUtils.java 1deb317ed1d276e778fb64d207a1784a4919518b RED +ExplorationAlgUtils.java 2cf411c8d8404d7319d7bc836dd74b5927375711 RED ExplorationEcoreUtils.java 48ed07aec3cd93e66d37abc10d50636d591f1c71 RED GraphUtils.java 8b25592f30645f7709af527c72551f038a163833 RED TransformationUtils.java d26cb8932c3dc81e7c75694241496b96214fdb9f RED diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java index 331da7f9..e1903a69 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java @@ -53,10 +53,10 @@ import org.fortiss.af3.deployment.model.Deployment; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry; import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry; -import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IModelElementAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceConnectionAdapter.ConnectionType; +import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding; import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry; @@ -292,16 +292,17 @@ public class AF3Utils { throws InvalidPlatformModelException { // By the method signature, we know the instance type is a IConnector class. @SuppressWarnings("unchecked") ConnectionType connectionTypeSource = - systemModelAdapter.getConnectionType( - (Class<? extends IConnector>)sourceConnector.eClass().getInstanceClass()); + systemModelAdapter.getConnectionType((Class<? extends IConnector>)sourceConnector + .eClass().getInstanceClass()); @SuppressWarnings("unchecked") ConnectionType connectionTypeTarget = - systemModelAdapter.getConnectionType( - (Class<? extends IConnector>)targetConnector.eClass().getInstanceClass()); + systemModelAdapter.getConnectionType((Class<? extends IConnector>)targetConnector + .eClass().getInstanceClass()); // assert (connectionTypeSource != null && connectionTypeTarget != null) : // "Could not identify the type of one of the connection targets."; if((connectionTypeSource == INCOMING && connectionTypeTarget == INCOMING) || (connectionTypeSource == OUTGOING && connectionTypeTarget == OUTGOING)) { - throw new InvalidPlatformModelException((PlatformConnectorUnit)sourceConnector, + throw new InvalidPlatformModelException( + (PlatformConnectorUnit)sourceConnector, "A platform port or interface (see above) for incoming or outgoing traffic is connected to an port or interface of the same type. This is not allowed."); } @@ -335,8 +336,8 @@ public class AF3Utils { SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) { // By the method signature, we know the instance type is a IConnector class. @SuppressWarnings("unchecked") ConnectionType connectionTypeSource = - systemModelAdapter.getConnectionType( - (Class<? extends IConnector>)sourceConnector.eClass().getInstanceClass()); + systemModelAdapter.getConnectionType((Class<? extends IConnector>)sourceConnector + .eClass().getInstanceClass()); return connectionTypeSource != null ? connectionTypeSource : BIDIRECTIONAL; } @@ -344,8 +345,8 @@ public class AF3Utils { * Predicate whether the subject {@link PlatformConnectorUnit} is a connector of the given * {@link IModelElementAdapter}. */ - public static boolean isConnectorOf(PlatformConnectorUnit pConn, - IModelElementAdapter<?> element) { + public static boolean + isConnectorOf(PlatformConnectorUnit pConn, IModelElementAdapter<?> element) { return pConn.getOwner() == element.getObject(); } @@ -364,16 +365,18 @@ public class AF3Utils { * {@link PlatformConnectorUnit} for the device-internal communication of the given * {@link IModelElementAdapter}. */ - public static boolean isDeviceInternalPredecessor(PlatformConnectorUnit connCandidate, - IModelElementAdapter<?> element, - DirectedGraph<PlatformConnectorUnit, DefaultEdge> route) { + public static boolean + isDeviceInternalPredecessor(PlatformConnectorUnit connCandidate, + IModelElementAdapter<?> element, + DirectedGraph<PlatformConnectorUnit, DefaultEdge> route) { // The following rules apply for device internal communication: // - Sender Port is on the same device OR // - its reference port is one layer "below", e.g. Gateway -> Router AND // - the sender connector must have been traversed (natural for path walking a multicast // message. - if(route.containsVertex(connCandidate) && (isConnectorOf(connCandidate, element) || - isContainedInResource(connCandidate, element))) { + if(route.containsVertex(connCandidate) && + (isConnectorOf(connCandidate, element) || isContainedInResource(connCandidate, + element))) { return true; } return false; @@ -431,12 +434,9 @@ public class AF3Utils { * Checks whether any parent {@link IPlatformResource} of the given {@code element} is a * deployment target defined by the set of deployment targets ({@code deploymentTargets}). * If any parent element has been found that is a deployment target, {@code true} is returned. - * The method considers parents in the following order: - * <li>Check the direct parent (container). - * </li> - * <li>Check all referenced resources as defined in the {@link ResourceLink} annotation.</li> - * <li>Go to the parent resource and run the same checks.</li> - * <li>Run the above checks for all + * The method considers parents in the following order: <li>Check the direct parent (container). + * </li> <li>Check all referenced resources as defined in the {@link ResourceLink} annotation.</li> + * <li>Go to the parent resource and run the same checks.</li> <li>Run the above checks for all * references Resources as given by the {@link ResourceLink} annotations.</> * * @param element @@ -484,8 +484,8 @@ public class AF3Utils { public static <T extends IPlatformResource & IHierarchicElement> boolean isAnyChildDeploymentTarget(IPlatformResource element, Collection<T> deploymentTargets, Class<T> targetType) { - return getChildrenWithType(element, targetType).stream() - .anyMatch(child -> deploymentTargets.contains(child)); + return getChildrenWithType(element, targetType).stream().anyMatch( + child -> deploymentTargets.contains(child)); } /** @@ -499,9 +499,11 @@ public class AF3Utils { * thereby establish a "communication link" between both platforms. * @return Map representing the "inverse" 1:1 references of {@link ResourceLink}s. */ - public static Map<IModelElement, IModelElement> getInverseIntraPlatformReferences( - PlatformArchitecture referencingPlatformArchitecture, - Pair<Class<? extends IModelElement>, Class<? extends IModelElement>> interPlatformConnectingElements) { + public static + Map<IModelElement, IModelElement> + getInverseIntraPlatformReferences( + PlatformArchitecture referencingPlatformArchitecture, + Pair<Class<? extends IModelElement>, Class<? extends IModelElement>> interPlatformConnectingElements) { if(interPlatformConnectingElements == null) { return Collections.emptyMap(); } @@ -520,33 +522,6 @@ public class AF3Utils { return invElementReferences; } - /** - * Returns a map containing the inverse references represented by {@link ResourceLink}s between - * {@link IModelElement}s of {@link PlatformArchitecture}s. - * - * @param af3Deployment - * {@link Deployment} for whose linked {@link PlatformArchitecture} the inverse - * {@link ResourceLink} references have to be found. - * @param interPlatformConnectingElements - * {@link Pair} of {@link IModelElement} classes identifying those element types that - * reference (first element) another element of another platform (second element) and - * thereby establish a "communication link" between both platforms. - * @return The inverse {@link ResourceLink} references, or an empty map if none were identified. - */ - public static Map<IModelElement, IModelElement> getInverseIntraPlatformReferences( - Deployment af3Deployment, - Pair<Class<? extends IModelElement>, Class<? extends IModelElement>> interPlatformConnectingElements) { - IModelElement platformReference = - af3Deployment.getPlatformArchitectureReference().getReference(); - PlatformArchitecture af3PlatformArchitecture = null; - if(platformReference instanceof PlatformArchitecture) { - af3PlatformArchitecture = (PlatformArchitecture)platformReference; - return getInverseIntraPlatformReferences(af3PlatformArchitecture, - interPlatformConnectingElements); - } - return Collections.emptyMap(); - } - /** * Searches the given {@link ComponentArchitecture} for {@link ComponentDiverseImplRef}s and * returns all referenced {@link Component}s (representing an implementation of the referencing @@ -581,12 +556,12 @@ public class AF3Utils { * @return Set of {@link ComponentMultiAllocationConstraint}s with the same references as the * {@link ComponentAllocation}s. */ - public static Collection<ComponentMultiAllocationConstraint> - createConstraintsFromDeployment(Deployment deployment) { + public static Collection<ComponentMultiAllocationConstraint> createConstraintsFromDeployment( + Deployment deployment) { Collection<ComponentAllocation> allocatedComponents = deployment.getComponentAllocations(); Function<ComponentAllocation, ComponentMultiAllocationConstraint> mapper = - ca -> createComponentMultiAllocationConstraint(ca.getComponent(), - new BasicEList<>(Arrays.asList(ca.getExecutionUnit()))); + ca -> createComponentMultiAllocationConstraint(ca.getComponent(), new BasicEList<>( + Arrays.asList(ca.getExecutionUnit()))); return allocatedComponents.stream().map(mapper) .map(ComponentMultiAllocationConstraint.class::cast).collect(Collectors.toList()); } @@ -604,8 +579,10 @@ public class AF3Utils { * @return The {@link ComponentArchitecture} identified as the <i>Component Pool</i> or * {@code null} if none is found. */ - public static ComponentArchitecture getFirstComponentPool( - IMappingEncoding<ITaskAdapter<?>, IResourceAdapter<?>, IMappingEntry<ITaskAdapter<?>, IResourceAdapter<?>>> mapping) { + public static + ComponentArchitecture + getFirstComponentPool( + IMappingEncoding<ITaskAdapter<?>, IResourceAdapter<?>, IMappingEntry<ITaskAdapter<?>, IResourceAdapter<?>>> mapping) { for(ITaskAdapter<?> deployableComponent : mapping.getRequesters()) { if(deployableComponent.isInstantiation()) { // TODO: Avoid casting: Parameterize the IModelElementAdapter to use EObject-derived @@ -695,8 +672,9 @@ public class AF3Utils { EList<Component> parentElements = getParentsWithType(startElement, Component.class); for(Component parentComponent : parentElements) { - AbstractTaskMappingEntry entry = (AbstractTaskMappingEntry)encEntryModelElemAssoc - .inverse().get(parentComponent, AbstractTaskMappingEntry.class); + AbstractTaskMappingEntry entry = + (AbstractTaskMappingEntry)encEntryModelElemAssoc.inverse().get(parentComponent, + AbstractTaskMappingEntry.class); if(entry != null) { return true; } @@ -731,8 +709,7 @@ public class AF3Utils { } } if(systemModelAdapter.isDeployableComponent(deployComponent) || - (!isAnyParentComponentDeployable(deployComponent, systemModelAdapter) && - isAtomicComponent(deployComponent))) { + (!isAnyParentComponentDeployable(deployComponent, systemModelAdapter) && isAtomicComponent(deployComponent))) { return true; } return false; diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgUtils.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgUtils.java index aa8b955b..57a4e10c 100644 --- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgUtils.java +++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgUtils.java @@ -51,12 +51,10 @@ import org.fortiss.af3.exploration.model.ExplorationTarget; import org.fortiss.af3.exploration.model.IProblemDimension; import org.fortiss.af3.platform.model.IPlatformResource; import org.fortiss.af3.platform.model.IVirtualizationPlatformArchitectureElement; -import org.fortiss.af3.platform.model.annotation.ResourceLink; import org.fortiss.af3.platform.utils.PlatformArchitectureUtils; import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IHierarchicElementContainer; import org.fortiss.tooling.base.model.element.IModelElement; -import org.fortiss.tooling.base.model.element.IModelElementSpecification; import com.google.common.collect.Multimap; @@ -82,8 +80,8 @@ public class ExplorationAlgUtils { // FIXME: Remove this method, it is unsafe and cannot be used with instances of EList which have // parameterized constructors (Factory pattern). @SuppressWarnings("unchecked") - public static <C extends Collection<T>, T, CR extends Collection<? super T>> CR - castToRawColl(C origCollection) { + public static <C extends Collection<T>, T, CR extends Collection<? super T>> CR castToRawColl( + C origCollection) { CR castedCollection = (CR)Collections.emptySet(); if(origCollection != null && !origCollection.isEmpty()) { try { @@ -113,8 +111,8 @@ public class ExplorationAlgUtils { // FIXME: Remove this method, it is unsafe and cannot be used with instances of EList which have // parameterized constructors (Factory pattern). @SuppressWarnings("unchecked") - public static <C extends Collection<T>, T, CR extends Collection<? super T>> CR - castToRawColl(C origCollection, Class<CR> castedCollType) { + public static <C extends Collection<T>, T, CR extends Collection<? super T>> CR castToRawColl( + C origCollection, Class<CR> castedCollType) { CR castedCollection = (CR)Collections.emptySet(); if(origCollection != null && !origCollection.isEmpty()) { try { @@ -192,10 +190,10 @@ public class ExplorationAlgUtils { for(OutputPort currentOutputPort : allOutputPortsInArch) { // Filter out ports that represent the transition through a hierarchic hull. if(currentOutputPort.getIncoming().isEmpty() /* - * && - * !isAnyParentComponentDeployable( - * currentOutputPort.getComponent()) - */) { + * && + * !isAnyParentComponentDeployable( + * currentOutputPort.getComponent()) + */) { // FIXME: HERE sourcePortList.add(currentOutputPort); } @@ -211,8 +209,8 @@ public class ExplorationAlgUtils { * Collection of all {@link OutputPort}s of 'deployable' {@link Component}s. * @return List of 'deployable' {@link OutputPort}s or an empty list if none can be identified. */ - public static EList<OutputPort> - getDeployableOutputPorts(Collection<Component> deployableComponents) { + public static EList<OutputPort> getDeployableOutputPorts( + Collection<Component> deployableComponents) { EList<OutputPort> sourcePortList = new BasicEList<OutputPort>(); for(Component component : deployableComponents) { @@ -343,9 +341,8 @@ public class ExplorationAlgUtils { public static boolean isPlatformTargetResource(IPlatformResource element, Collection<IPlatformResource> targetResources) { if(!isAnyParentDeploymentTarget(element, targetResources) && - (element instanceof IHierarchicElementContainer && - ((IHierarchicElementContainer)element).getContainedElements().isEmpty()) || - targetResources.contains(element)) { + (element instanceof IHierarchicElementContainer && ((IHierarchicElementContainer)element) + .getContainedElements().isEmpty()) || targetResources.contains(element)) { return true; } return false; @@ -415,66 +412,6 @@ public class ExplorationAlgUtils { return (Collections.disjoint(selfAndParentElements, virtualizedResources)) ? false : true; } - /** - * Collects and returns all {@link IModelElementSpecification}s of the given type which are - * contained in the specification list of the elements and their children which are referenced - * by a {@link ResourceLink} {@link IModelElementSpecification} of the given - * {@link IModelElement}. If no {@link ResourceLink} is specified for the given - * {@link IModelElement} or if no referenced {@link IModelElement} or one of its children - * contains a {@link IModelElementSpecification} of the given type, an empty list is returned. - * - * @param specType - * The {@link IModelElementSpecification} type to search for. - * @param modelElement - * {@link IModelElement} containing a {@link ResourceLink} to other - * {@link IModelElement}s. - * @return List of {@link IModelElementSpecification}s contained in the referenced - * {@link IModelElement}s or one of its children. - */ - public static <T extends IModelElementSpecification> List<T> - getAllReferencedSpecificationsWithType(Class<T> specType, IModelElement modelElement) { - List<T> specifications = new ArrayList<T>(); - if(modelElement == null) { - return specifications; - } - - Collection<IHierarchicElement> referencedElements = - getReferencedElementsWithType(modelElement, IHierarchicElement.class); - for(IHierarchicElement refElement : referencedElements) { - specifications.addAll(getChildrenWithType(refElement, specType)); - } - - return specifications; - } - - /** - * Returns the {@link ResourceLink} {@link IModelElementSpecification} of the given - * {@link IModelElement} or the {@link ResourceLink} or the {@link ResourceLink} of the parent - * {@link IModelElement} that is "closest" to the given {@link IModelElement} regarding the - * hierarchy. - * - * @param element - * The {@link IModelElement} which a matching (see above) {@link ResourceLink} shall - * be found. - * @return {@link ResourceLink} {@link IModelElementSpecification}, or <code>null</code> if - * neither the given {@link IModelElement}, nor any of its containing elements contains - * a {@link ResourceLink} {@link IModelElementSpecification}. - */ - public static ResourceLink getSelfOrAnyParentResourceLink(IModelElement element) { - ResourceLink resourceLink = - pickFirstInstanceOf(ResourceLink.class, element.getSpecifications()); - if(resourceLink == null) { - List<ResourceLink> parentResourceLinks = - getParentsWithType(element, ResourceLink.class); - if(!parentResourceLinks.isEmpty()) { - // List is ordered from the element itself to the top element -> find "closest" - // resource link of the given element. - resourceLink = parentResourceLinks.get(0); - } - } - return resourceLink; - } - /** * Determines whether the given {@link IHierarchicElement}s are contained within the * same (parent) {@link IHierarchicElement}. @@ -761,6 +698,6 @@ public class ExplorationAlgUtils { */ @SuppressWarnings("unchecked") public static <T extends Exception> RuntimeException rethrow(Exception exception) throws T { - throw(T)exception; // rely on vacuous cast + throw (T)exception; // rely on vacuous cast } } -- GitLab