blob: 1e69d0f4c4c3331237bd2b2538856028927335de [file] [log] [blame]
/**
*/
package org.eclipse.skills.model.impl;
import java.util.Objects;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.skills.model.ISkillsPackage;
import org.eclipse.skills.model.ITask;
import org.eclipse.skills.model.ITaskDependency;
import org.eclipse.skills.model.IUserTask;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Task Dependency</b></em>'. <!-- end-user-doc -->
* <p>
* The following features are implemented:
* </p>
* <ul>
* <li>{@link org.eclipse.skills.model.impl.MTaskDependency#getTask <em>Task</em>}</li>
* <li>{@link org.eclipse.skills.model.impl.MTaskDependency#isCompleted <em>Completed</em>}</li>
* </ul>
*
* @generated
*/
public class MTaskDependency extends MUserDependency implements ITaskDependency {
/**
* @generated NOT
*/
private NotificationAdapter fNotificationAdapter = null;
/**
* The cached value of the '{@link #getTask() <em>Task</em>}' reference.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @see #getTask()
* @generated
* @ordered
*/
protected ITask task;
/**
* The default value of the '{@link #isCompleted() <em>Completed</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @see #isCompleted()
* @generated
* @ordered
*/
protected static final boolean COMPLETED_EDEFAULT = true;
/**
* The cached value of the '{@link #isCompleted() <em>Completed</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @see #isCompleted()
* @generated
* @ordered
*/
protected boolean completed = COMPLETED_EDEFAULT;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
protected MTaskDependency() {
super();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return ISkillsPackage.Literals.TASK_DEPENDENCY;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public ITask getTask() {
if (task != null && task.eIsProxy()) {
InternalEObject oldTask = (InternalEObject)task;
task = (ITask)eResolveProxy(oldTask);
if (task != oldTask) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, ISkillsPackage.TASK_DEPENDENCY__TASK, oldTask, task));
}
}
return task;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
public ITask basicGetTask() {
return task;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setTask(ITask newTask) {
ITask oldTask = task;
task = newTask;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, ISkillsPackage.TASK_DEPENDENCY__TASK, oldTask, task));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public boolean isCompleted() {
return completed;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setCompleted(boolean newCompleted) {
boolean oldCompleted = completed;
completed = newCompleted;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, ISkillsPackage.TASK_DEPENDENCY__COMPLETED, oldCompleted, completed));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case ISkillsPackage.TASK_DEPENDENCY__TASK:
if (resolve) return getTask();
return basicGetTask();
case ISkillsPackage.TASK_DEPENDENCY__COMPLETED:
return isCompleted();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case ISkillsPackage.TASK_DEPENDENCY__TASK:
setTask((ITask)newValue);
return;
case ISkillsPackage.TASK_DEPENDENCY__COMPLETED:
setCompleted((Boolean)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case ISkillsPackage.TASK_DEPENDENCY__TASK:
setTask((ITask)null);
return;
case ISkillsPackage.TASK_DEPENDENCY__COMPLETED:
setCompleted(COMPLETED_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case ISkillsPackage.TASK_DEPENDENCY__TASK:
return task != null;
case ISkillsPackage.TASK_DEPENDENCY__COMPLETED:
return completed != COMPLETED_EDEFAULT;
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
StringBuilder result = new StringBuilder(super.toString());
result.append(" (completed: ");
result.append(completed);
result.append(')');
return result.toString();
}
/**
* @generated NOT
*/
@Override
public void activate() {
final IUserTask usertask = getUsertask();
if (usertask != null)
setFulfilled((usertask.isCompleted() && isCompleted()) || (usertask.isStarted() && !isCompleted()));
if (!isFulfilled()) {
fNotificationAdapter = new NotificationAdapter();
if (usertask != null)
usertask.eAdapters().add(fNotificationAdapter);
else
getUser().eAdapters().add(fNotificationAdapter);
}
}
/**
* @generated NOT
*/
@Override
public void deactivate() {
if (fNotificationAdapter != null) {
getUser().eAdapters().remove(fNotificationAdapter);
getUsertask().eAdapters().remove(fNotificationAdapter);
fNotificationAdapter = null;
}
}
/**
* @generated NOT
*/
private IUserTask getUsertask() {
for (final IUserTask usertask : getUser().getUsertasks()) {
if (Objects.equals(getTask(), usertask.getTask()))
return usertask;
}
return null;
}
/**
* @generated NOT
*/
private class NotificationAdapter extends AdapterImpl {
@Override
public void notifyChanged(Notification msg) {
if (isUserTasksChanged(msg)) {
if (getUsertask() != null) {
// re-evaluate
deactivate();
activate();
}
} else if ((isCurrentUserTask(msg)) && (isUserTaskStartedOrStopped(msg))) {
// re-evaluate
deactivate();
activate();
}
}
private boolean isUserTaskStartedOrStopped(Notification msg) {
return (ISkillsPackage.eINSTANCE.getUserTask_Started().equals(msg.getFeature()))
|| (ISkillsPackage.eINSTANCE.getUserTask_Finished().equals(msg.getFeature()));
}
private boolean isCurrentUserTask(Notification msg) {
return Objects.equals(getUsertask(), msg.getNotifier());
}
private boolean isUserTasksChanged(Notification msg) {
return ISkillsPackage.eINSTANCE.getUser_Usertasks().equals(msg.getFeature());
}
}
} // MTaskDependency