| /*------------------------------------------------------------------------------ |
| - |
| - Copyright (c) 2015-2016 University of Padova, ITALY - Intecs SpA |
| - All rights reserved. This program and the accompanying materials |
| - are made available under the terms of the Eclipse Public License v2.0 |
| - which accompanies this distribution, and is available at |
| - http://www.eclipse.org/legal/epl-v20.html |
| - |
| - Contributors: |
| - |
| - Alessandro Zovi azovi@math.unipd.it |
| - Stefano Puri stefano.puri@intecs.it |
| - Laura Baracchi laura.baracchi@intecs.it |
| - Nicholas Pacini nicholas.pacini@intecs.it |
| - |
| - Initial API and implementation and/or initial documentation |
| ------------------------------------------------------------------------------*/package org.polarsys.chess.multicore.model; |
| |
| import java.util.Arrays; |
| |
| import org.eclipse.uml2.uml.BehavioralFeature; |
| import org.eclipse.uml2.uml.Parameter; |
| import org.polarsys.chess.chessmlprofile.Predictability.RTComponentModel.CHRtPortSlot; |
| import org.polarsys.chess.chessmlprofile.Predictability.RTComponentModel.CHRtSpecification; |
| import org.polarsys.chess.multicore.utils.QueryUtils; |
| |
| |
| /** |
| * The Class CHTask. |
| * |
| * @author Alessandro Zovi |
| * |
| * CHTask represents the instance of a component operation. |
| * The operation can also be seen as a task, a shared resource or a simple procedure call. |
| */ |
| |
| public final class CHTask { |
| |
| /** The slot. */ |
| private CHRtPortSlot slot; |
| |
| /** The spec. */ |
| private CHRtSpecification spec; |
| |
| /** |
| * Instantiates a new CH task. |
| * |
| * @param slot the slot |
| * @param spec the spec |
| */ |
| public CHTask(CHRtPortSlot slot, CHRtSpecification spec) { |
| this.slot = slot; |
| this.spec = spec; |
| } |
| |
| /** |
| * Gets the slot. |
| * |
| * @return the slot |
| */ |
| public CHRtPortSlot getSlot() { |
| return slot; |
| } |
| |
| /** |
| * Gets the CH rt specification. |
| * |
| * @return the CH rt specification |
| */ |
| public CHRtSpecification getCHRtSpecification() { |
| return spec; |
| } |
| |
| /* (non-Javadoc) |
| * @see java.lang.Object#toString() |
| */ |
| @Override |
| public String toString() { |
| //TODO it should take into consideration the multiplicity of the instances in Inst_full package |
| return slot.getBase_Slot().getOwningInstance().getName() + "_" |
| + slot.getBase_Slot().getDefiningFeature().getName() |
| + "_" + spec.getContext().getName() + "(" +getType()+")"; |
| } |
| |
| /** |
| * Gets the name. |
| * |
| * @return the name |
| */ |
| public String getName() { |
| //TODO it should take into consideration the multiplicity of the instances in Inst_full package |
| return slot.getBase_Slot().getOwningInstance().getName() + "_" |
| + slot.getBase_Slot().getDefiningFeature().getName() |
| + "_" + getOpName(spec.getContext())+"_task"; |
| } |
| |
| /** |
| * Gets the op name. |
| * |
| * @param op the op |
| * @return the op name |
| */ |
| private String getOpName(BehavioralFeature op){ |
| StringBuilder sb = new StringBuilder(op.getName()); |
| for (Parameter par : op.getOwnedParameters()) { |
| sb.append('_').append(par.getType().getName()); |
| } |
| return sb.toString(); |
| } |
| |
| /** |
| * Gets the type. |
| * |
| * @return the type |
| */ |
| public String getType(){ |
| String type = "simple_operation"; |
| if(QueryUtils.isOccKindSporadicOrPeriodic(spec.getOccKind())){ |
| type = "task"; |
| } else if (QueryUtils.isGuarded(spec)){ |
| type = "shared_resource"; |
| } |
| return type; |
| } |
| |
| /* (non-Javadoc) |
| * @see java.lang.Object#equals(java.lang.Object) |
| */ |
| @Override |
| public boolean equals(Object obj) { |
| if(!(obj instanceof CHTask)) return false; |
| if(obj == this) return true; |
| |
| CHTask that = (CHTask) obj; |
| return toString().equals(that.toString()); |
| } |
| |
| /* (non-Javadoc) |
| * @see java.lang.Object#hashCode() |
| */ |
| @Override |
| public int hashCode() { |
| return Arrays.hashCode(new Object[] { |
| slot.getBase_Slot().getOwningInstance().getName(), |
| slot.getBase_Slot().getDefiningFeature().getName(), |
| spec.getContext().getName() |
| }); |
| } |
| } |