getMembers() {
+ if (this.members == null) {
+ this.members = new EObjectResolvingEList<>(Person.class, this, ProjectmgmtPackage.PROJECT__MEMBERS);
+ }
+ return this.members;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Boolean getIsSensitive() {
+ return this.isSensitive;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setIsSensitive(Boolean newIsSensitive) {
+ Boolean oldIsSensitive = this.isSensitive;
+ this.isSensitive = newIsSensitive;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__IS_SENSITIVE, oldIsSensitive, this.isSensitive));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getContractualStartDate() {
+ return this.contractualStartDate;
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ @Override
+ public void setContractualStartDate(LocalDate newContractualStartDate) {
+ LocalDate oldContractualStartDate = this.contractualStartDate;
+ this.contractualStartDate = newContractualStartDate;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__CONTRACTUAL_START_DATE, oldContractualStartDate, this.contractualStartDate));
+
+ if (this.contractualStartDate == null) {
+ this.setContractualEndDate(null);
+ } else if (this.duration != null) {
+ this.setDuration(this.duration);
+ } else if (this.contractualEndDate != null) {
+ this.setContractualEndDate(this.contractualEndDate);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Integer getDuration() {
+ return this.duration;
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ @Override
+ public void setDuration(Integer newDuration) {
+ Integer oldDuration = this.duration;
+ if (newDuration != null && newDuration < 0) {
+ this.duration = 0;
+ } else {
+ this.duration = newDuration;
+ }
+
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__DURATION, oldDuration, this.duration));
+
+ if (this.duration == null) {
+ LocalDate oldContractualEndDate = this.contractualEndDate;
+ this.contractualEndDate = null;
+
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__CONTRACTUAL_END_DATE, oldContractualEndDate, this.contractualEndDate));
+ } else if (this.contractualStartDate != null) {
+ LocalDate oldContractualEndDate = this.contractualEndDate;
+ this.contractualEndDate = this.contractualStartDate.plusWeeks(this.duration);
+
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__CONTRACTUAL_END_DATE, oldContractualEndDate, this.contractualEndDate));
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getContractualEndDate() {
+ return this.contractualEndDate;
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ @Override
+ public void setContractualEndDate(LocalDate newContractualEndDate) {
+ LocalDate oldContractualEndDate = this.contractualEndDate;
+ this.contractualEndDate = newContractualEndDate;
+ if (this.contractualStartDate != null && this.contractualStartDate.until(newContractualEndDate, ChronoUnit.WEEKS) < 0) {
+ this.contractualEndDate = this.contractualStartDate;
+ }
+
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__CONTRACTUAL_END_DATE, oldContractualEndDate, this.contractualEndDate));
+
+ if (this.contractualEndDate == null) {
+ Integer oldDuration = this.duration;
+ this.duration = null;
+
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__DURATION, oldDuration, this.duration));
+ } else if (this.contractualStartDate != null) {
+ Integer oldDuration = this.duration;
+ this.duration = Integer.valueOf(Long.valueOf(this.contractualStartDate.until(this.contractualEndDate, ChronoUnit.WEEKS)).intValue());
+
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__DURATION, oldDuration, this.duration));
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getEffectiveStartDate() {
+ return this.effectiveStartDate;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setEffectiveStartDate(LocalDate newEffectiveStartDate) {
+ LocalDate oldEffectiveStartDate = this.effectiveStartDate;
+ this.effectiveStartDate = newEffectiveStartDate;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__EFFECTIVE_START_DATE, oldEffectiveStartDate, this.effectiveStartDate));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getEffectiveEndDate() {
+ return this.effectiveEndDate;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setEffectiveEndDate(LocalDate newEffectiveEndDate) {
+ LocalDate oldEffectiveEndDate = this.effectiveEndDate;
+ this.effectiveEndDate = newEffectiveEndDate;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__EFFECTIVE_END_DATE, oldEffectiveEndDate, this.effectiveEndDate));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Integer getContractTermExtension() {
+ return this.contractTermExtension;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setContractTermExtension(Integer newContractTermExtension) {
+ Integer oldContractTermExtension = this.contractTermExtension;
+ this.contractTermExtension = newContractTermExtension;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__CONTRACT_TERM_EXTENSION, oldContractTermExtension, this.contractTermExtension));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Double getGlobalCost() {
+ return this.globalCost;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setGlobalCost(Double newGlobalCost) {
+ Double oldGlobalCost = this.globalCost;
+ this.globalCost = newGlobalCost;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__GLOBAL_COST, oldGlobalCost, this.globalCost));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Double getFundingRate() {
+ return this.fundingRate;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setFundingRate(Double newFundingRate) {
+ Double oldFundingRate = this.fundingRate;
+ this.fundingRate = newFundingRate;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__FUNDING_RATE, oldFundingRate, this.fundingRate));
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ @Override
+ public Double getFunding() {
+ if (this.globalCost != null && this.fundingRate != null && this.fundingRate > 0) {
+ Double value = this.globalCost * this.fundingRate / 100;
+ return new BigDecimal(value).setScale(2, RoundingMode.HALF_UP).doubleValue();
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Integer getManpower() {
+ return this.manpower;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setManpower(Integer newManpower) {
+ Integer oldManpower = this.manpower;
+ this.manpower = newManpower;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__MANPOWER, oldManpower, this.manpower));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getEOTP() {
+ return this.eOTP;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setEOTP(String newEOTP) {
+ String oldEOTP = this.eOTP;
+ this.eOTP = newEOTP;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__EOTP, oldEOTP, this.eOTP));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getStatisticOrder() {
+ return this.statisticOrder;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setStatisticOrder(String newStatisticOrder) {
+ String oldStatisticOrder = this.statisticOrder;
+ this.statisticOrder = newStatisticOrder;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__STATISTIC_ORDER, oldStatisticOrder, this.statisticOrder));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getInternalNeed() {
+ return this.internalNeed;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setInternalNeed(String newInternalNeed) {
+ String oldInternalNeed = this.internalNeed;
+ this.internalNeed = newInternalNeed;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__INTERNAL_NEED, oldInternalNeed, this.internalNeed));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getClientNeed() {
+ return this.clientNeed;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setClientNeed(String newClientNeed) {
+ String oldClientNeed = this.clientNeed;
+ this.clientNeed = newClientNeed;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.PROJECT__CLIENT_NEED, oldClientNeed, this.clientNeed));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ProjectmgmtPackage.PROJECT__OWNED_WORKPACKAGES:
+ return ((InternalEList>) this.getOwnedWorkpackages()).basicRemove(otherEnd, msgs);
+ case ProjectmgmtPackage.PROJECT__OWNED_OBJECTIVES:
+ return ((InternalEList>) this.getOwnedObjectives()).basicRemove(otherEnd, msgs);
+ case ProjectmgmtPackage.PROJECT__OWNED_TAG_FOLDERS:
+ return ((InternalEList>) this.getOwnedTagFolders()).basicRemove(otherEnd, msgs);
+ case ProjectmgmtPackage.PROJECT__OWNED_RISKS:
+ return ((InternalEList>) this.getOwnedRisks()).basicRemove(otherEnd, msgs);
+ default:
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.PROJECT__NAME:
+ return this.getName();
+ case ProjectmgmtPackage.PROJECT__OWNED_WORKPACKAGES:
+ return this.getOwnedWorkpackages();
+ case ProjectmgmtPackage.PROJECT__OWNED_OBJECTIVES:
+ return this.getOwnedObjectives();
+ case ProjectmgmtPackage.PROJECT__OWNED_TAG_FOLDERS:
+ return this.getOwnedTagFolders();
+ case ProjectmgmtPackage.PROJECT__OWNED_RISKS:
+ return this.getOwnedRisks();
+ case ProjectmgmtPackage.PROJECT__REFERENCE:
+ return this.getReference();
+ case ProjectmgmtPackage.PROJECT__DESCRIPTION:
+ return this.getDescription();
+ case ProjectmgmtPackage.PROJECT__LEADING_UNIT:
+ if (resolve)
+ return this.getLeadingUnit();
+ return this.basicGetLeadingUnit();
+ case ProjectmgmtPackage.PROJECT__PARTICIPANT_UNITS:
+ return this.getParticipantUnits();
+ case ProjectmgmtPackage.PROJECT__PLANNIFIED_CLIENT_COPIL_MEETINGS:
+ return this.getPlannifiedClientCopilMeetings();
+ case ProjectmgmtPackage.PROJECT__MAIN_PROGRAM_BRICK:
+ return this.getMainProgramBrick();
+ case ProjectmgmtPackage.PROJECT__STATE:
+ return this.getState();
+ case ProjectmgmtPackage.PROJECT__CLIENTS:
+ return this.getClients();
+ case ProjectmgmtPackage.PROJECT__PARTNERS:
+ return this.getPartners();
+ case ProjectmgmtPackage.PROJECT__IS_TRANSVERSE:
+ return this.getIsTransverse();
+ case ProjectmgmtPackage.PROJECT__LEADER:
+ if (resolve)
+ return this.getLeader();
+ return this.basicGetLeader();
+ case ProjectmgmtPackage.PROJECT__MEMBERS:
+ return this.getMembers();
+ case ProjectmgmtPackage.PROJECT__IS_SENSITIVE:
+ return this.getIsSensitive();
+ case ProjectmgmtPackage.PROJECT__CONTRACTUAL_START_DATE:
+ return this.getContractualStartDate();
+ case ProjectmgmtPackage.PROJECT__DURATION:
+ return this.getDuration();
+ case ProjectmgmtPackage.PROJECT__CONTRACTUAL_END_DATE:
+ return this.getContractualEndDate();
+ case ProjectmgmtPackage.PROJECT__EFFECTIVE_START_DATE:
+ return this.getEffectiveStartDate();
+ case ProjectmgmtPackage.PROJECT__EFFECTIVE_END_DATE:
+ return this.getEffectiveEndDate();
+ case ProjectmgmtPackage.PROJECT__CONTRACT_TERM_EXTENSION:
+ return this.getContractTermExtension();
+ case ProjectmgmtPackage.PROJECT__GLOBAL_COST:
+ return this.getGlobalCost();
+ case ProjectmgmtPackage.PROJECT__FUNDING_RATE:
+ return this.getFundingRate();
+ case ProjectmgmtPackage.PROJECT__FUNDING:
+ return this.getFunding();
+ case ProjectmgmtPackage.PROJECT__MANPOWER:
+ return this.getManpower();
+ case ProjectmgmtPackage.PROJECT__EOTP:
+ return this.getEOTP();
+ case ProjectmgmtPackage.PROJECT__STATISTIC_ORDER:
+ return this.getStatisticOrder();
+ case ProjectmgmtPackage.PROJECT__INTERNAL_NEED:
+ return this.getInternalNeed();
+ case ProjectmgmtPackage.PROJECT__CLIENT_NEED:
+ return this.getClientNeed();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.PROJECT__NAME:
+ this.setName((String) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__OWNED_WORKPACKAGES:
+ this.getOwnedWorkpackages().clear();
+ this.getOwnedWorkpackages().addAll((Collection extends Workpackage>) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__OWNED_OBJECTIVES:
+ this.getOwnedObjectives().clear();
+ this.getOwnedObjectives().addAll((Collection extends Objective>) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__OWNED_TAG_FOLDERS:
+ this.getOwnedTagFolders().clear();
+ this.getOwnedTagFolders().addAll((Collection extends TagFolder>) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__OWNED_RISKS:
+ this.getOwnedRisks().clear();
+ this.getOwnedRisks().addAll((Collection extends Risk>) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__REFERENCE:
+ this.setReference((String) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__DESCRIPTION:
+ this.setDescription((String) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__LEADING_UNIT:
+ this.setLeadingUnit((InternalStakeholder) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__PARTICIPANT_UNITS:
+ this.getParticipantUnits().clear();
+ this.getParticipantUnits().addAll((Collection extends InternalStakeholder>) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__PLANNIFIED_CLIENT_COPIL_MEETINGS:
+ this.setPlannifiedClientCopilMeetings((Boolean) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__MAIN_PROGRAM_BRICK:
+ this.setMainProgramBrick((String) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__STATE:
+ this.setState((ProjectState) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__CLIENTS:
+ this.getClients().clear();
+ this.getClients().addAll((Collection extends ExternalStakeholder>) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__PARTNERS:
+ this.getPartners().clear();
+ this.getPartners().addAll((Collection extends ExternalStakeholder>) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__LEADER:
+ this.setLeader((Person) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__MEMBERS:
+ this.getMembers().clear();
+ this.getMembers().addAll((Collection extends Person>) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__IS_SENSITIVE:
+ this.setIsSensitive((Boolean) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__CONTRACTUAL_START_DATE:
+ this.setContractualStartDate((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__DURATION:
+ this.setDuration((Integer) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__CONTRACTUAL_END_DATE:
+ this.setContractualEndDate((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__EFFECTIVE_START_DATE:
+ this.setEffectiveStartDate((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__EFFECTIVE_END_DATE:
+ this.setEffectiveEndDate((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__CONTRACT_TERM_EXTENSION:
+ this.setContractTermExtension((Integer) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__GLOBAL_COST:
+ this.setGlobalCost((Double) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__FUNDING_RATE:
+ this.setFundingRate((Double) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__MANPOWER:
+ this.setManpower((Integer) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__EOTP:
+ this.setEOTP((String) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__STATISTIC_ORDER:
+ this.setStatisticOrder((String) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__INTERNAL_NEED:
+ this.setInternalNeed((String) newValue);
+ return;
+ case ProjectmgmtPackage.PROJECT__CLIENT_NEED:
+ this.setClientNeed((String) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.PROJECT__NAME:
+ this.setName(NAME_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__OWNED_WORKPACKAGES:
+ this.getOwnedWorkpackages().clear();
+ return;
+ case ProjectmgmtPackage.PROJECT__OWNED_OBJECTIVES:
+ this.getOwnedObjectives().clear();
+ return;
+ case ProjectmgmtPackage.PROJECT__OWNED_TAG_FOLDERS:
+ this.getOwnedTagFolders().clear();
+ return;
+ case ProjectmgmtPackage.PROJECT__OWNED_RISKS:
+ this.getOwnedRisks().clear();
+ return;
+ case ProjectmgmtPackage.PROJECT__REFERENCE:
+ this.setReference(REFERENCE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__DESCRIPTION:
+ this.setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__LEADING_UNIT:
+ this.setLeadingUnit(null);
+ return;
+ case ProjectmgmtPackage.PROJECT__PARTICIPANT_UNITS:
+ this.getParticipantUnits().clear();
+ return;
+ case ProjectmgmtPackage.PROJECT__PLANNIFIED_CLIENT_COPIL_MEETINGS:
+ this.setPlannifiedClientCopilMeetings(PLANNIFIED_CLIENT_COPIL_MEETINGS_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__MAIN_PROGRAM_BRICK:
+ this.setMainProgramBrick(MAIN_PROGRAM_BRICK_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__STATE:
+ this.setState(STATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__CLIENTS:
+ this.getClients().clear();
+ return;
+ case ProjectmgmtPackage.PROJECT__PARTNERS:
+ this.getPartners().clear();
+ return;
+ case ProjectmgmtPackage.PROJECT__LEADER:
+ this.setLeader(null);
+ return;
+ case ProjectmgmtPackage.PROJECT__MEMBERS:
+ this.getMembers().clear();
+ return;
+ case ProjectmgmtPackage.PROJECT__IS_SENSITIVE:
+ this.setIsSensitive(IS_SENSITIVE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__CONTRACTUAL_START_DATE:
+ this.setContractualStartDate(CONTRACTUAL_START_DATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__DURATION:
+ this.setDuration(DURATION_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__CONTRACTUAL_END_DATE:
+ this.setContractualEndDate(CONTRACTUAL_END_DATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__EFFECTIVE_START_DATE:
+ this.setEffectiveStartDate(EFFECTIVE_START_DATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__EFFECTIVE_END_DATE:
+ this.setEffectiveEndDate(EFFECTIVE_END_DATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__CONTRACT_TERM_EXTENSION:
+ this.setContractTermExtension(CONTRACT_TERM_EXTENSION_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__GLOBAL_COST:
+ this.setGlobalCost(GLOBAL_COST_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__FUNDING_RATE:
+ this.setFundingRate(FUNDING_RATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__MANPOWER:
+ this.setManpower(MANPOWER_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__EOTP:
+ this.setEOTP(EOTP_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__STATISTIC_ORDER:
+ this.setStatisticOrder(STATISTIC_ORDER_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__INTERNAL_NEED:
+ this.setInternalNeed(INTERNAL_NEED_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.PROJECT__CLIENT_NEED:
+ this.setClientNeed(CLIENT_NEED_EDEFAULT);
+ return;
+ default:
+ super.eUnset(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.PROJECT__NAME:
+ return !Objects.equals(NAME_EDEFAULT, this.name);
+ case ProjectmgmtPackage.PROJECT__OWNED_WORKPACKAGES:
+ return this.ownedWorkpackages != null && !this.ownedWorkpackages.isEmpty();
+ case ProjectmgmtPackage.PROJECT__OWNED_OBJECTIVES:
+ return this.ownedObjectives != null && !this.ownedObjectives.isEmpty();
+ case ProjectmgmtPackage.PROJECT__OWNED_TAG_FOLDERS:
+ return this.ownedTagFolders != null && !this.ownedTagFolders.isEmpty();
+ case ProjectmgmtPackage.PROJECT__OWNED_RISKS:
+ return this.ownedRisks != null && !this.ownedRisks.isEmpty();
+ case ProjectmgmtPackage.PROJECT__REFERENCE:
+ return !Objects.equals(REFERENCE_EDEFAULT, this.reference);
+ case ProjectmgmtPackage.PROJECT__DESCRIPTION:
+ return !Objects.equals(DESCRIPTION_EDEFAULT, this.description);
+ case ProjectmgmtPackage.PROJECT__LEADING_UNIT:
+ return this.leadingUnit != null;
+ case ProjectmgmtPackage.PROJECT__PARTICIPANT_UNITS:
+ return this.participantUnits != null && !this.participantUnits.isEmpty();
+ case ProjectmgmtPackage.PROJECT__PLANNIFIED_CLIENT_COPIL_MEETINGS:
+ return !Objects.equals(PLANNIFIED_CLIENT_COPIL_MEETINGS_EDEFAULT, this.plannifiedClientCopilMeetings);
+ case ProjectmgmtPackage.PROJECT__MAIN_PROGRAM_BRICK:
+ return !Objects.equals(MAIN_PROGRAM_BRICK_EDEFAULT, this.mainProgramBrick);
+ case ProjectmgmtPackage.PROJECT__STATE:
+ return this.state != STATE_EDEFAULT;
+ case ProjectmgmtPackage.PROJECT__CLIENTS:
+ return this.clients != null && !this.clients.isEmpty();
+ case ProjectmgmtPackage.PROJECT__PARTNERS:
+ return this.partners != null && !this.partners.isEmpty();
+ case ProjectmgmtPackage.PROJECT__IS_TRANSVERSE:
+ return IS_TRANSVERSE_EDEFAULT == null ? this.getIsTransverse() != null : !IS_TRANSVERSE_EDEFAULT.equals(this.getIsTransverse());
+ case ProjectmgmtPackage.PROJECT__LEADER:
+ return this.leader != null;
+ case ProjectmgmtPackage.PROJECT__MEMBERS:
+ return this.members != null && !this.members.isEmpty();
+ case ProjectmgmtPackage.PROJECT__IS_SENSITIVE:
+ return !Objects.equals(IS_SENSITIVE_EDEFAULT, this.isSensitive);
+ case ProjectmgmtPackage.PROJECT__CONTRACTUAL_START_DATE:
+ return !Objects.equals(CONTRACTUAL_START_DATE_EDEFAULT, this.contractualStartDate);
+ case ProjectmgmtPackage.PROJECT__DURATION:
+ return !Objects.equals(DURATION_EDEFAULT, this.duration);
+ case ProjectmgmtPackage.PROJECT__CONTRACTUAL_END_DATE:
+ return !Objects.equals(CONTRACTUAL_END_DATE_EDEFAULT, this.contractualEndDate);
+ case ProjectmgmtPackage.PROJECT__EFFECTIVE_START_DATE:
+ return !Objects.equals(EFFECTIVE_START_DATE_EDEFAULT, this.effectiveStartDate);
+ case ProjectmgmtPackage.PROJECT__EFFECTIVE_END_DATE:
+ return !Objects.equals(EFFECTIVE_END_DATE_EDEFAULT, this.effectiveEndDate);
+ case ProjectmgmtPackage.PROJECT__CONTRACT_TERM_EXTENSION:
+ return !Objects.equals(CONTRACT_TERM_EXTENSION_EDEFAULT, this.contractTermExtension);
+ case ProjectmgmtPackage.PROJECT__GLOBAL_COST:
+ return !Objects.equals(GLOBAL_COST_EDEFAULT, this.globalCost);
+ case ProjectmgmtPackage.PROJECT__FUNDING_RATE:
+ return !Objects.equals(FUNDING_RATE_EDEFAULT, this.fundingRate);
+ case ProjectmgmtPackage.PROJECT__FUNDING:
+ return FUNDING_EDEFAULT == null ? this.getFunding() != null : !FUNDING_EDEFAULT.equals(this.getFunding());
+ case ProjectmgmtPackage.PROJECT__MANPOWER:
+ return !Objects.equals(MANPOWER_EDEFAULT, this.manpower);
+ case ProjectmgmtPackage.PROJECT__EOTP:
+ return !Objects.equals(EOTP_EDEFAULT, this.eOTP);
+ case ProjectmgmtPackage.PROJECT__STATISTIC_ORDER:
+ return !Objects.equals(STATISTIC_ORDER_EDEFAULT, this.statisticOrder);
+ case ProjectmgmtPackage.PROJECT__INTERNAL_NEED:
+ return !Objects.equals(INTERNAL_NEED_EDEFAULT, this.internalNeed);
+ case ProjectmgmtPackage.PROJECT__CLIENT_NEED:
+ return !Objects.equals(CLIENT_NEED_EDEFAULT, this.clientNeed);
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ String result = super.toString() + " (name: "
+ + this.name
+ + ", reference: "
+ + this.reference
+ + ", description: "
+ + this.description
+ + ", plannifiedClientCopilMeetings: "
+ + this.plannifiedClientCopilMeetings
+ + ", mainProgramBrick: "
+ + this.mainProgramBrick
+ + ", state: "
+ + this.state
+ + ", isSensitive: "
+ + this.isSensitive
+ + ", contractualStartDate: "
+ + this.contractualStartDate
+ + ", duration: "
+ + this.duration
+ + ", contractualEndDate: "
+ + this.contractualEndDate
+ + ", effectiveStartDate: "
+ + this.effectiveStartDate
+ + ", effectiveEndDate: "
+ + this.effectiveEndDate
+ + ", contractTermExtension: "
+ + this.contractTermExtension
+ + ", globalCost: "
+ + this.globalCost
+ + ", fundingRate: "
+ + this.fundingRate
+ + ", manpower: "
+ + this.manpower
+ + ", eOTP: "
+ + this.eOTP
+ + ", statisticOrder: "
+ + this.statisticOrder
+ + ", internalNeed: "
+ + this.internalNeed
+ + ", clientNeed: "
+ + this.clientNeed
+ + ')';
+ return result;
+ }
+
+} // ProjectImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ProjectmgmtFactoryImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ProjectmgmtFactoryImpl.java
new file mode 100644
index 0000000..6a2a1ad
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ProjectmgmtFactoryImpl.java
@@ -0,0 +1,491 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.ExternalStakeholder;
+import fr.cea.deeplab.projectmgmt.InternalStakeholder;
+import fr.cea.deeplab.projectmgmt.KeyResult;
+import fr.cea.deeplab.projectmgmt.Objective;
+import fr.cea.deeplab.projectmgmt.Organization;
+import fr.cea.deeplab.projectmgmt.Person;
+import fr.cea.deeplab.projectmgmt.Project;
+import fr.cea.deeplab.projectmgmt.ProjectState;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtFactory;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.ResourceFolder;
+import fr.cea.deeplab.projectmgmt.Risk;
+import fr.cea.deeplab.projectmgmt.RiskKind;
+import fr.cea.deeplab.projectmgmt.RiskState;
+import fr.cea.deeplab.projectmgmt.TagFolder;
+import fr.cea.deeplab.projectmgmt.Task;
+import fr.cea.deeplab.projectmgmt.TaskTag;
+import fr.cea.deeplab.projectmgmt.Team;
+import fr.cea.deeplab.projectmgmt.Workpackage;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefact;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefactNature;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * An implementation of the model Factory.
+ *
+ * @generated
+ */
+public class ProjectmgmtFactoryImpl extends EFactoryImpl implements ProjectmgmtFactory {
+ /**
+ * Creates the default factory implementation.
+ *
+ * @generated
+ */
+ public static ProjectmgmtFactory init() {
+ try {
+ ProjectmgmtFactory theProjectmgmtFactory = (ProjectmgmtFactory) EPackage.Registry.INSTANCE.getEFactory(ProjectmgmtPackage.eNS_URI);
+ if (theProjectmgmtFactory != null) {
+ return theProjectmgmtFactory;
+ }
+ } catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new ProjectmgmtFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ *
+ * @generated
+ */
+ public ProjectmgmtFactoryImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case ProjectmgmtPackage.ORGANIZATION:
+ return this.createOrganization();
+ case ProjectmgmtPackage.RESOURCE_FOLDER:
+ return this.createResourceFolder();
+ case ProjectmgmtPackage.TEAM:
+ return this.createTeam();
+ case ProjectmgmtPackage.INTERNAL_STAKEHOLDER:
+ return this.createInternalStakeholder();
+ case ProjectmgmtPackage.EXTERNAL_STAKEHOLDER:
+ return this.createExternalStakeholder();
+ case ProjectmgmtPackage.PERSON:
+ return this.createPerson();
+ case ProjectmgmtPackage.TAG_FOLDER:
+ return this.createTagFolder();
+ case ProjectmgmtPackage.TASK_TAG:
+ return this.createTaskTag();
+ case ProjectmgmtPackage.TASK:
+ return this.createTask();
+ case ProjectmgmtPackage.OBJECTIVE:
+ return this.createObjective();
+ case ProjectmgmtPackage.KEY_RESULT:
+ return this.createKeyResult();
+ case ProjectmgmtPackage.PROJECT:
+ return this.createProject();
+ case ProjectmgmtPackage.WORKPACKAGE:
+ return this.createWorkpackage();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT:
+ return this.createWorkpackageArtefact();
+ case ProjectmgmtPackage.RISK:
+ return this.createRisk();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object createFromString(EDataType eDataType, String initialValue) {
+ switch (eDataType.getClassifierID()) {
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT_NATURE:
+ return this.createWorkpackageArtefactNatureFromString(eDataType, initialValue);
+ case ProjectmgmtPackage.RISK_KIND:
+ return this.createRiskKindFromString(eDataType, initialValue);
+ case ProjectmgmtPackage.RISK_STATE:
+ return this.createRiskStateFromString(eDataType, initialValue);
+ case ProjectmgmtPackage.PROJECT_STATE:
+ return this.createProjectStateFromString(eDataType, initialValue);
+ case ProjectmgmtPackage.INSTANT:
+ return this.createInstantFromString(eDataType, initialValue);
+ case ProjectmgmtPackage.DATE:
+ return this.createDateFromString(eDataType, initialValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String convertToString(EDataType eDataType, Object instanceValue) {
+ switch (eDataType.getClassifierID()) {
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT_NATURE:
+ return this.convertWorkpackageArtefactNatureToString(eDataType, instanceValue);
+ case ProjectmgmtPackage.RISK_KIND:
+ return this.convertRiskKindToString(eDataType, instanceValue);
+ case ProjectmgmtPackage.RISK_STATE:
+ return this.convertRiskStateToString(eDataType, instanceValue);
+ case ProjectmgmtPackage.PROJECT_STATE:
+ return this.convertProjectStateToString(eDataType, instanceValue);
+ case ProjectmgmtPackage.INSTANT:
+ return this.convertInstantToString(eDataType, instanceValue);
+ case ProjectmgmtPackage.DATE:
+ return this.convertDateToString(eDataType, instanceValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Organization createOrganization() {
+ OrganizationImpl organization = new OrganizationImpl();
+ return organization;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public ResourceFolder createResourceFolder() {
+ ResourceFolderImpl resourceFolder = new ResourceFolderImpl();
+ return resourceFolder;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Team createTeam() {
+ TeamImpl team = new TeamImpl();
+ return team;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public InternalStakeholder createInternalStakeholder() {
+ InternalStakeholderImpl internalStakeholder = new InternalStakeholderImpl();
+ return internalStakeholder;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public ExternalStakeholder createExternalStakeholder() {
+ ExternalStakeholderImpl externalStakeholder = new ExternalStakeholderImpl();
+ return externalStakeholder;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Person createPerson() {
+ PersonImpl person = new PersonImpl();
+ return person;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public TagFolder createTagFolder() {
+ TagFolderImpl tagFolder = new TagFolderImpl();
+ return tagFolder;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public TaskTag createTaskTag() {
+ TaskTagImpl taskTag = new TaskTagImpl();
+ return taskTag;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Task createTask() {
+ TaskImpl task = new TaskImpl();
+ return task;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Objective createObjective() {
+ ObjectiveImpl objective = new ObjectiveImpl();
+ return objective;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public KeyResult createKeyResult() {
+ KeyResultImpl keyResult = new KeyResultImpl();
+ return keyResult;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Project createProject() {
+ ProjectImpl project = new ProjectImpl();
+ return project;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Workpackage createWorkpackage() {
+ WorkpackageImpl workpackage = new WorkpackageImpl();
+ return workpackage;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public WorkpackageArtefact createWorkpackageArtefact() {
+ WorkpackageArtefactImpl workpackageArtefact = new WorkpackageArtefactImpl();
+ return workpackageArtefact;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Risk createRisk() {
+ RiskImpl risk = new RiskImpl();
+ return risk;
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ public WorkpackageArtefactNature createWorkpackageArtefactNatureFromString(EDataType eDataType, String initialValue) {
+ WorkpackageArtefactNature result = WorkpackageArtefactNature.get(initialValue);
+// if (result == null)
+// throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertWorkpackageArtefactNatureToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ public RiskKind createRiskKindFromString(EDataType eDataType, String initialValue) {
+ RiskKind result = RiskKind.get(initialValue);
+// if (result == null)
+// throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertRiskKindToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ public RiskState createRiskStateFromString(EDataType eDataType, String initialValue) {
+ RiskState result = RiskState.get(initialValue);
+// if (result == null)
+// throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertRiskStateToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ public ProjectState createProjectStateFromString(EDataType eDataType, String initialValue) {
+ ProjectState result = ProjectState.get(initialValue);
+// if (result == null)
+// throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertProjectStateToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ public Instant createInstantFromString(EDataType eDataType, String initialValue) {
+ if (initialValue != null) {
+ return Instant.parse(initialValue);
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ public String convertInstantToString(EDataType eDataType, Object instanceValue) {
+ if (instanceValue instanceof Instant instant) {
+ return DateTimeFormatter.ISO_INSTANT.format(instant);
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ public LocalDate createDateFromString(EDataType eDataType, String initialValue) {
+ if (initialValue != null) {
+ return LocalDate.parse(initialValue);
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated NOT
+ */
+ public String convertDateToString(EDataType eDataType, Object instanceValue) {
+ if (instanceValue instanceof LocalDate localDate) {
+ return DateTimeFormatter.ISO_LOCAL_DATE.format(localDate);
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public ProjectmgmtPackage getProjectmgmtPackage() {
+ return (ProjectmgmtPackage) this.getEPackage();
+ }
+
+ /**
+ *
+ *
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static ProjectmgmtPackage getPackage() {
+ return ProjectmgmtPackage.eINSTANCE;
+ }
+
+} // ProjectmgmtFactoryImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ProjectmgmtPackageImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ProjectmgmtPackageImpl.java
new file mode 100644
index 0000000..1d2e12c
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ProjectmgmtPackageImpl.java
@@ -0,0 +1,1867 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import static fr.cea.deeplab.projectmgmt.ProjectmgmtPackage.RESOURCE;
+
+import fr.cea.deeplab.projectmgmt.AbstractTask;
+import fr.cea.deeplab.projectmgmt.ExternalStakeholder;
+import fr.cea.deeplab.projectmgmt.InternalStakeholder;
+import fr.cea.deeplab.projectmgmt.KeyResult;
+import fr.cea.deeplab.projectmgmt.Objective;
+import fr.cea.deeplab.projectmgmt.Organization;
+import fr.cea.deeplab.projectmgmt.Person;
+import fr.cea.deeplab.projectmgmt.Project;
+import fr.cea.deeplab.projectmgmt.ProjectState;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtFactory;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Resource;
+import fr.cea.deeplab.projectmgmt.ResourceFolder;
+import fr.cea.deeplab.projectmgmt.Risk;
+import fr.cea.deeplab.projectmgmt.RiskKind;
+import fr.cea.deeplab.projectmgmt.RiskState;
+import fr.cea.deeplab.projectmgmt.TagFolder;
+import fr.cea.deeplab.projectmgmt.Task;
+import fr.cea.deeplab.projectmgmt.TaskTag;
+import fr.cea.deeplab.projectmgmt.Team;
+import fr.cea.deeplab.projectmgmt.Workpackage;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefact;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefactNature;
+
+import java.time.Instant;
+import java.time.LocalDate;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * An implementation of the model Package.
+ *
+ * @generated
+ */
+public class ProjectmgmtPackageImpl extends EPackageImpl implements ProjectmgmtPackage {
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass organizationEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass resourceEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass resourceFolderEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass teamEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass internalStakeholderEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass externalStakeholderEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass personEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass abstractTaskEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tagFolderEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass taskTagEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass taskEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass objectiveEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass keyResultEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass projectEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass workpackageEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass workpackageArtefactEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass riskEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum workpackageArtefactNatureEEnum = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum riskKindEEnum = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum riskStateEEnum = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum projectStateEEnum = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EDataType instantEDataType = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EDataType dateEDataType = null;
+
+ /**
+ * Creates an instance of the model Package, registered with {@link org.eclipse.emf.ecore.EPackage.Registry
+ * EPackage.Registry} by the package package URI value.
+ *
+ * Note: the correct way to create the package is via the static factory method {@link #init init()}, which also
+ * performs initialization of the package, or returns the registered package, if one already exists.
+ *
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see fr.cea.deeplab.projectmgmt.ProjectmgmtPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private ProjectmgmtPackageImpl() {
+ super(eNS_URI, ProjectmgmtFactory.eINSTANCE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the Package for this model, and for any others upon which it depends.
+ *
+ *
+ * This method is used to initialize {@link ProjectmgmtPackage#eINSTANCE} when that field is accessed. Clients
+ * should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ *
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static ProjectmgmtPackage init() {
+ if (isInited)
+ return (ProjectmgmtPackage) EPackage.Registry.INSTANCE.getEPackage(ProjectmgmtPackage.eNS_URI);
+
+ // Obtain or create and register package
+ Object registeredProjectmgmtPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+ ProjectmgmtPackageImpl theProjectmgmtPackage = registeredProjectmgmtPackage instanceof ProjectmgmtPackageImpl ? (ProjectmgmtPackageImpl) registeredProjectmgmtPackage
+ : new ProjectmgmtPackageImpl();
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theProjectmgmtPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theProjectmgmtPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theProjectmgmtPackage.freeze();
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(ProjectmgmtPackage.eNS_URI, theProjectmgmtPackage);
+ return theProjectmgmtPackage;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getOrganization() {
+ return this.organizationEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getOrganization_Name() {
+ return (EAttribute) this.organizationEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getOrganization_OwnedProjects() {
+ return (EReference) this.organizationEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getOrganization_OwnedResourceFolders() {
+ return (EReference) this.organizationEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getResource() {
+ return this.resourceEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getResource_Name() {
+ return (EAttribute) this.resourceEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getResourceFolder() {
+ return this.resourceFolderEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getResourceFolder_Name() {
+ return (EAttribute) this.resourceFolderEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getResourceFolder_OwnedResources() {
+ return (EReference) this.resourceFolderEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getResourceFolder_SubFolders() {
+ return (EReference) this.resourceFolderEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getTeam() {
+ return this.teamEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getTeam_Members() {
+ return (EReference) this.teamEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getInternalStakeholder() {
+ return this.internalStakeholderEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getExternalStakeholder() {
+ return this.externalStakeholderEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getExternalStakeholder_Goals() {
+ return (EAttribute) this.externalStakeholderEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getPerson() {
+ return this.personEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getPerson_Alias() {
+ return (EAttribute) this.personEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getPerson_Biography() {
+ return (EAttribute) this.personEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getPerson_ImageUrl() {
+ return (EAttribute) this.personEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getAbstractTask() {
+ return this.abstractTaskEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getAbstractTask_Name() {
+ return (EAttribute) this.abstractTaskEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getAbstractTask_Description() {
+ return (EAttribute) this.abstractTaskEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getAbstractTask_StartTime() {
+ return (EAttribute) this.abstractTaskEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getAbstractTask_EndTime() {
+ return (EAttribute) this.abstractTaskEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getAbstractTask_Progress() {
+ return (EAttribute) this.abstractTaskEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getAbstractTask_ComputeStartEndDynamically() {
+ return (EAttribute) this.abstractTaskEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getAbstractTask_Tags() {
+ return (EReference) this.abstractTaskEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getAbstractTask_AssignedPersons() {
+ return (EReference) this.abstractTaskEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getAbstractTask_AssignedTeams() {
+ return (EReference) this.abstractTaskEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getAbstractTask_SubTasks() {
+ return (EReference) this.abstractTaskEClass.getEStructuralFeatures().get(9);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getTagFolder() {
+ return this.tagFolderEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getTagFolder_Name() {
+ return (EAttribute) this.tagFolderEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getTagFolder_OwnedTags() {
+ return (EReference) this.tagFolderEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getTagFolder_SubFolders() {
+ return (EReference) this.tagFolderEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getTaskTag() {
+ return this.taskTagEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getTaskTag_Prefix() {
+ return (EAttribute) this.taskTagEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getTaskTag_Suffix() {
+ return (EAttribute) this.taskTagEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getTask() {
+ return this.taskEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getTask_Dependencies() {
+ return (EReference) this.taskEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getObjective() {
+ return this.objectiveEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getObjective_OwnedKeyResults() {
+ return (EReference) this.objectiveEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getKeyResult() {
+ return this.keyResultEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getProject() {
+ return this.projectEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_Name() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_OwnedWorkpackages() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_OwnedObjectives() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_OwnedTagFolders() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_OwnedRisks() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_Reference() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_Description() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_LeadingUnit() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_ParticipantUnits() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_PlannifiedClientCopilMeetings() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(9);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_MainProgramBrick() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(10);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_State() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(11);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_Clients() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(12);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_Partners() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(13);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_IsTransverse() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(14);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_Leader() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(15);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getProject_Members() {
+ return (EReference) this.projectEClass.getEStructuralFeatures().get(16);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_IsSensitive() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(17);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_ContractualStartDate() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(18);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_Duration() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(19);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_ContractualEndDate() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(20);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_EffectiveStartDate() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(21);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_EffectiveEndDate() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(22);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_ContractTermExtension() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(23);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_GlobalCost() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(24);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_FundingRate() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(25);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_Funding() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(26);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_Manpower() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(27);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_EOTP() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(28);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_StatisticOrder() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(29);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_InternalNeed() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(30);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getProject_ClientNeed() {
+ return (EAttribute) this.projectEClass.getEStructuralFeatures().get(31);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getWorkpackage() {
+ return this.workpackageEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackage_Name() {
+ return (EAttribute) this.workpackageEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackage_Description() {
+ return (EAttribute) this.workpackageEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackage_StartDate() {
+ return (EAttribute) this.workpackageEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackage_EndDate() {
+ return (EAttribute) this.workpackageEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getWorkpackage_Leader() {
+ return (EReference) this.workpackageEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getWorkpackage_Participants() {
+ return (EReference) this.workpackageEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackage_Effort() {
+ return (EAttribute) this.workpackageEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getWorkpackage_Outputs() {
+ return (EReference) this.workpackageEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getWorkpackage_OwnedTasks() {
+ return (EReference) this.workpackageEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getWorkpackage_OwnedObjectives() {
+ return (EReference) this.workpackageEClass.getEStructuralFeatures().get(9);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackage_Progress() {
+ return (EAttribute) this.workpackageEClass.getEStructuralFeatures().get(10);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getWorkpackageArtefact() {
+ return this.workpackageArtefactEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_Name() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_Description() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_Nature() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_PlannedDeadline() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_EffectiveDeadLine() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_IsInvoiceTrigger() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_InvoiceAmount() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getWorkpackageArtefact_Responsible() {
+ return (EReference) this.workpackageArtefactEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_Version() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getWorkpackageArtefact_IsObsolete() {
+ return (EAttribute) this.workpackageArtefactEClass.getEStructuralFeatures().get(9);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EClass getRisk() {
+ return this.riskEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getRisk_Kind() {
+ return (EAttribute) this.riskEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getRisk_Description() {
+ return (EAttribute) this.riskEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getRisk_Criticity() {
+ return (EAttribute) this.riskEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getRisk_Action() {
+ return (EAttribute) this.riskEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getRisk_Responsible() {
+ return (EReference) this.riskEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getRisk_OperationDate() {
+ return (EAttribute) this.riskEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EAttribute getRisk_State() {
+ return (EAttribute) this.riskEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EReference getRisk_Workpackages() {
+ return (EReference) this.riskEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EEnum getWorkpackageArtefactNature() {
+ return this.workpackageArtefactNatureEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EEnum getRiskKind() {
+ return this.riskKindEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EEnum getRiskState() {
+ return this.riskStateEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EEnum getProjectState() {
+ return this.projectStateEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EDataType getInstant() {
+ return this.instantEDataType;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EDataType getDate() {
+ return this.dateEDataType;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public ProjectmgmtFactory getProjectmgmtFactory() {
+ return (ProjectmgmtFactory) this.getEFactoryInstance();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is guarded to have no affect on any invocation but
+ * its first.
+ *
+ * @generated
+ */
+ public void createPackageContents() {
+ if (this.isCreated)
+ return;
+ this.isCreated = true;
+
+ // Create classes and their features
+ this.organizationEClass = this.createEClass(ORGANIZATION);
+ this.createEAttribute(this.organizationEClass, ORGANIZATION__NAME);
+ this.createEReference(this.organizationEClass, ORGANIZATION__OWNED_PROJECTS);
+ this.createEReference(this.organizationEClass, ORGANIZATION__OWNED_RESOURCE_FOLDERS);
+
+ this.resourceEClass = this.createEClass(RESOURCE);
+ this.createEAttribute(this.resourceEClass, RESOURCE__NAME);
+
+ this.resourceFolderEClass = this.createEClass(RESOURCE_FOLDER);
+ this.createEAttribute(this.resourceFolderEClass, RESOURCE_FOLDER__NAME);
+ this.createEReference(this.resourceFolderEClass, RESOURCE_FOLDER__OWNED_RESOURCES);
+ this.createEReference(this.resourceFolderEClass, RESOURCE_FOLDER__SUB_FOLDERS);
+
+ this.teamEClass = this.createEClass(TEAM);
+ this.createEReference(this.teamEClass, TEAM__MEMBERS);
+
+ this.internalStakeholderEClass = this.createEClass(INTERNAL_STAKEHOLDER);
+
+ this.externalStakeholderEClass = this.createEClass(EXTERNAL_STAKEHOLDER);
+ this.createEAttribute(this.externalStakeholderEClass, EXTERNAL_STAKEHOLDER__GOALS);
+
+ this.personEClass = this.createEClass(PERSON);
+ this.createEAttribute(this.personEClass, PERSON__ALIAS);
+ this.createEAttribute(this.personEClass, PERSON__BIOGRAPHY);
+ this.createEAttribute(this.personEClass, PERSON__IMAGE_URL);
+
+ this.abstractTaskEClass = this.createEClass(ABSTRACT_TASK);
+ this.createEAttribute(this.abstractTaskEClass, ABSTRACT_TASK__NAME);
+ this.createEAttribute(this.abstractTaskEClass, ABSTRACT_TASK__DESCRIPTION);
+ this.createEAttribute(this.abstractTaskEClass, ABSTRACT_TASK__START_TIME);
+ this.createEAttribute(this.abstractTaskEClass, ABSTRACT_TASK__END_TIME);
+ this.createEAttribute(this.abstractTaskEClass, ABSTRACT_TASK__PROGRESS);
+ this.createEAttribute(this.abstractTaskEClass, ABSTRACT_TASK__COMPUTE_START_END_DYNAMICALLY);
+ this.createEReference(this.abstractTaskEClass, ABSTRACT_TASK__TAGS);
+ this.createEReference(this.abstractTaskEClass, ABSTRACT_TASK__ASSIGNED_PERSONS);
+ this.createEReference(this.abstractTaskEClass, ABSTRACT_TASK__ASSIGNED_TEAMS);
+ this.createEReference(this.abstractTaskEClass, ABSTRACT_TASK__SUB_TASKS);
+
+ this.tagFolderEClass = this.createEClass(TAG_FOLDER);
+ this.createEAttribute(this.tagFolderEClass, TAG_FOLDER__NAME);
+ this.createEReference(this.tagFolderEClass, TAG_FOLDER__OWNED_TAGS);
+ this.createEReference(this.tagFolderEClass, TAG_FOLDER__SUB_FOLDERS);
+
+ this.taskTagEClass = this.createEClass(TASK_TAG);
+ this.createEAttribute(this.taskTagEClass, TASK_TAG__PREFIX);
+ this.createEAttribute(this.taskTagEClass, TASK_TAG__SUFFIX);
+
+ this.taskEClass = this.createEClass(TASK);
+ this.createEReference(this.taskEClass, TASK__DEPENDENCIES);
+
+ this.objectiveEClass = this.createEClass(OBJECTIVE);
+ this.createEReference(this.objectiveEClass, OBJECTIVE__OWNED_KEY_RESULTS);
+
+ this.keyResultEClass = this.createEClass(KEY_RESULT);
+
+ this.projectEClass = this.createEClass(PROJECT);
+ this.createEAttribute(this.projectEClass, PROJECT__NAME);
+ this.createEReference(this.projectEClass, PROJECT__OWNED_WORKPACKAGES);
+ this.createEReference(this.projectEClass, PROJECT__OWNED_OBJECTIVES);
+ this.createEReference(this.projectEClass, PROJECT__OWNED_TAG_FOLDERS);
+ this.createEReference(this.projectEClass, PROJECT__OWNED_RISKS);
+ this.createEAttribute(this.projectEClass, PROJECT__REFERENCE);
+ this.createEAttribute(this.projectEClass, PROJECT__DESCRIPTION);
+ this.createEReference(this.projectEClass, PROJECT__LEADING_UNIT);
+ this.createEReference(this.projectEClass, PROJECT__PARTICIPANT_UNITS);
+ this.createEAttribute(this.projectEClass, PROJECT__PLANNIFIED_CLIENT_COPIL_MEETINGS);
+ this.createEAttribute(this.projectEClass, PROJECT__MAIN_PROGRAM_BRICK);
+ this.createEAttribute(this.projectEClass, PROJECT__STATE);
+ this.createEReference(this.projectEClass, PROJECT__CLIENTS);
+ this.createEReference(this.projectEClass, PROJECT__PARTNERS);
+ this.createEAttribute(this.projectEClass, PROJECT__IS_TRANSVERSE);
+ this.createEReference(this.projectEClass, PROJECT__LEADER);
+ this.createEReference(this.projectEClass, PROJECT__MEMBERS);
+ this.createEAttribute(this.projectEClass, PROJECT__IS_SENSITIVE);
+ this.createEAttribute(this.projectEClass, PROJECT__CONTRACTUAL_START_DATE);
+ this.createEAttribute(this.projectEClass, PROJECT__DURATION);
+ this.createEAttribute(this.projectEClass, PROJECT__CONTRACTUAL_END_DATE);
+ this.createEAttribute(this.projectEClass, PROJECT__EFFECTIVE_START_DATE);
+ this.createEAttribute(this.projectEClass, PROJECT__EFFECTIVE_END_DATE);
+ this.createEAttribute(this.projectEClass, PROJECT__CONTRACT_TERM_EXTENSION);
+ this.createEAttribute(this.projectEClass, PROJECT__GLOBAL_COST);
+ this.createEAttribute(this.projectEClass, PROJECT__FUNDING_RATE);
+ this.createEAttribute(this.projectEClass, PROJECT__FUNDING);
+ this.createEAttribute(this.projectEClass, PROJECT__MANPOWER);
+ this.createEAttribute(this.projectEClass, PROJECT__EOTP);
+ this.createEAttribute(this.projectEClass, PROJECT__STATISTIC_ORDER);
+ this.createEAttribute(this.projectEClass, PROJECT__INTERNAL_NEED);
+ this.createEAttribute(this.projectEClass, PROJECT__CLIENT_NEED);
+
+ this.workpackageEClass = this.createEClass(WORKPACKAGE);
+ this.createEAttribute(this.workpackageEClass, WORKPACKAGE__NAME);
+ this.createEAttribute(this.workpackageEClass, WORKPACKAGE__DESCRIPTION);
+ this.createEAttribute(this.workpackageEClass, WORKPACKAGE__START_DATE);
+ this.createEAttribute(this.workpackageEClass, WORKPACKAGE__END_DATE);
+ this.createEReference(this.workpackageEClass, WORKPACKAGE__LEADER);
+ this.createEReference(this.workpackageEClass, WORKPACKAGE__PARTICIPANTS);
+ this.createEAttribute(this.workpackageEClass, WORKPACKAGE__EFFORT);
+ this.createEReference(this.workpackageEClass, WORKPACKAGE__OUTPUTS);
+ this.createEReference(this.workpackageEClass, WORKPACKAGE__OWNED_TASKS);
+ this.createEReference(this.workpackageEClass, WORKPACKAGE__OWNED_OBJECTIVES);
+ this.createEAttribute(this.workpackageEClass, WORKPACKAGE__PROGRESS);
+
+ this.workpackageArtefactEClass = this.createEClass(WORKPACKAGE_ARTEFACT);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__NAME);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__DESCRIPTION);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__NATURE);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__PLANNED_DEADLINE);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__EFFECTIVE_DEAD_LINE);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__IS_INVOICE_TRIGGER);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__INVOICE_AMOUNT);
+ this.createEReference(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__RESPONSIBLE);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__VERSION);
+ this.createEAttribute(this.workpackageArtefactEClass, WORKPACKAGE_ARTEFACT__IS_OBSOLETE);
+
+ this.riskEClass = this.createEClass(RISK);
+ this.createEAttribute(this.riskEClass, RISK__KIND);
+ this.createEAttribute(this.riskEClass, RISK__DESCRIPTION);
+ this.createEAttribute(this.riskEClass, RISK__CRITICITY);
+ this.createEAttribute(this.riskEClass, RISK__ACTION);
+ this.createEReference(this.riskEClass, RISK__RESPONSIBLE);
+ this.createEAttribute(this.riskEClass, RISK__OPERATION_DATE);
+ this.createEAttribute(this.riskEClass, RISK__STATE);
+ this.createEReference(this.riskEClass, RISK__WORKPACKAGES);
+
+ // Create enums
+ this.workpackageArtefactNatureEEnum = this.createEEnum(WORKPACKAGE_ARTEFACT_NATURE);
+ this.riskKindEEnum = this.createEEnum(RISK_KIND);
+ this.riskStateEEnum = this.createEEnum(RISK_STATE);
+ this.projectStateEEnum = this.createEEnum(PROJECT_STATE);
+
+ // Create data types
+ this.instantEDataType = this.createEDataType(INSTANT);
+ this.dateEDataType = this.createEDataType(DATE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This method is guarded to have no affect on any
+ * invocation but its first.
+ *
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (this.isInitialized)
+ return;
+ this.isInitialized = true;
+
+ // Initialize package
+ this.setName(eNAME);
+ this.setNsPrefix(eNS_PREFIX);
+ this.setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ this.teamEClass.getESuperTypes().add(this.getResource());
+ this.internalStakeholderEClass.getESuperTypes().add(this.getResource());
+ this.externalStakeholderEClass.getESuperTypes().add(this.getResource());
+ this.personEClass.getESuperTypes().add(this.getResource());
+ this.taskEClass.getESuperTypes().add(this.getAbstractTask());
+ this.objectiveEClass.getESuperTypes().add(this.getAbstractTask());
+ this.keyResultEClass.getESuperTypes().add(this.getAbstractTask());
+
+ // Initialize classes and features; add operations and parameters
+ this.initEClass(this.organizationEClass, Organization.class, "Organization", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getOrganization_Name(), this.ecorePackage.getEString(), "name", null, 0, 1, Organization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getOrganization_OwnedProjects(), this.getProject(), null, "ownedProjects", null, 0, -1, Organization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getOrganization_OwnedResourceFolders(), this.getResourceFolder(), null, "ownedResourceFolders", null, 0, -1, Organization.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.resourceEClass, Resource.class, "Resource", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getResource_Name(), this.ecorePackage.getEString(), "name", null, 0, 1, Resource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.resourceFolderEClass, ResourceFolder.class, "ResourceFolder", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getResourceFolder_Name(), this.ecorePackage.getEString(), "name", null, 0, 1, ResourceFolder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getResourceFolder_OwnedResources(), this.getResource(), null, "ownedResources", null, 0, -1, ResourceFolder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getResourceFolder_SubFolders(), this.getResourceFolder(), null, "subFolders", null, 0, -1, ResourceFolder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.teamEClass, Team.class, "Team", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEReference(this.getTeam_Members(), this.getPerson(), null, "members", null, 0, -1, Team.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.internalStakeholderEClass, InternalStakeholder.class, "InternalStakeholder", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ this.initEClass(this.externalStakeholderEClass, ExternalStakeholder.class, "ExternalStakeholder", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getExternalStakeholder_Goals(), this.ecorePackage.getEString(), "goals", null, 0, -1, ExternalStakeholder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.personEClass, Person.class, "Person", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getPerson_Alias(), this.ecorePackage.getEString(), "alias", null, 0, 1, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getPerson_Biography(), this.ecorePackage.getEString(), "biography", null, 0, 1, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getPerson_ImageUrl(), this.ecorePackage.getEString(), "imageUrl", null, 0, 1, Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.abstractTaskEClass, AbstractTask.class, "AbstractTask", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getAbstractTask_Name(), this.ecorePackage.getEString(), "name", null, 0, 1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getAbstractTask_Description(), this.ecorePackage.getEString(), "description", null, 0, 1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getAbstractTask_StartTime(), this.getInstant(), "startTime", null, 0, 1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getAbstractTask_EndTime(), this.getInstant(), "endTime", null, 0, 1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getAbstractTask_Progress(), this.ecorePackage.getEInt(), "progress", null, 0, 1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getAbstractTask_ComputeStartEndDynamically(), this.ecorePackage.getEBoolean(), "computeStartEndDynamically", "false", 0, 1, AbstractTask.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getAbstractTask_Tags(), this.getTaskTag(), null, "tags", null, 0, -1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+ IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getAbstractTask_AssignedPersons(), this.getPerson(), null, "assignedPersons", null, 0, -1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getAbstractTask_AssignedTeams(), this.getTeam(), null, "assignedTeams", null, 0, -1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+ IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getAbstractTask_SubTasks(), this.getTask(), null, "subTasks", null, 0, -1, AbstractTask.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.tagFolderEClass, TagFolder.class, "TagFolder", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getTagFolder_Name(), this.ecorePackage.getEString(), "name", null, 0, 1, TagFolder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getTagFolder_OwnedTags(), this.getTaskTag(), null, "ownedTags", null, 0, -1, TagFolder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getTagFolder_SubFolders(), this.getTagFolder(), null, "subFolders", null, 0, -1, TagFolder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.taskTagEClass, TaskTag.class, "TaskTag", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getTaskTag_Prefix(), this.ecorePackage.getEString(), "prefix", null, 0, 1, TaskTag.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getTaskTag_Suffix(), this.ecorePackage.getEString(), "suffix", null, 0, 1, TaskTag.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.taskEClass, Task.class, "Task", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEReference(this.getTask_Dependencies(), this.getTask(), null, "dependencies", null, 0, -1, Task.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.objectiveEClass, Objective.class, "Objective", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEReference(this.getObjective_OwnedKeyResults(), this.getKeyResult(), null, "ownedKeyResults", null, 0, -1, Objective.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.keyResultEClass, KeyResult.class, "KeyResult", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ this.initEClass(this.projectEClass, Project.class, "Project", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getProject_Name(), this.ecorePackage.getEString(), "name", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_OwnedWorkpackages(), this.getWorkpackage(), null, "ownedWorkpackages", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_OwnedObjectives(), this.getObjective(), null, "ownedObjectives", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_OwnedTagFolders(), this.getTagFolder(), null, "ownedTagFolders", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_OwnedRisks(), this.getRisk(), null, "ownedRisks", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_Reference(), this.ecorePackage.getEString(), "reference", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_Description(), this.ecorePackage.getEString(), "description", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_LeadingUnit(), this.getInternalStakeholder(), null, "leadingUnit", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+ IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_ParticipantUnits(), this.getInternalStakeholder(), null, "participantUnits", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_PlannifiedClientCopilMeetings(), this.ecorePackage.getEBooleanObject(), "plannifiedClientCopilMeetings", null, 0, 1, Project.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_MainProgramBrick(), this.ecorePackage.getEString(), "mainProgramBrick", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_State(), this.getProjectState(), "state", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_Clients(), this.getExternalStakeholder(), null, "clients", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+ IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_Partners(), this.getExternalStakeholder(), null, "partners", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+ IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_IsTransverse(), this.ecorePackage.getEBooleanObject(), "isTransverse", null, 0, 1, Project.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_Leader(), this.getPerson(), null, "leader", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getProject_Members(), this.getPerson(), null, "members", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_IsSensitive(), this.ecorePackage.getEBooleanObject(), "isSensitive", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_ContractualStartDate(), this.getDate(), "contractualStartDate", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_Duration(), this.ecorePackage.getEIntegerObject(), "duration", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_ContractualEndDate(), this.getDate(), "contractualEndDate", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_EffectiveStartDate(), this.getDate(), "effectiveStartDate", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_EffectiveEndDate(), this.getDate(), "effectiveEndDate", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_ContractTermExtension(), this.ecorePackage.getEIntegerObject(), "contractTermExtension", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_GlobalCost(), this.ecorePackage.getEDoubleObject(), "globalCost", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_FundingRate(), this.ecorePackage.getEDoubleObject(), "fundingRate", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_Funding(), this.ecorePackage.getEDoubleObject(), "funding", null, 0, 1, Project.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_Manpower(), this.ecorePackage.getEIntegerObject(), "manpower", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_EOTP(), this.ecorePackage.getEString(), "eOTP", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_StatisticOrder(), this.ecorePackage.getEString(), "statisticOrder", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_InternalNeed(), this.ecorePackage.getEString(), "internalNeed", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getProject_ClientNeed(), this.ecorePackage.getEString(), "clientNeed", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.workpackageEClass, Workpackage.class, "Workpackage", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getWorkpackage_Name(), this.ecorePackage.getEString(), "name", null, 0, 1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackage_Description(), this.ecorePackage.getEString(), "description", null, 0, 1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackage_StartDate(), this.getDate(), "startDate", null, 0, 1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackage_EndDate(), this.getDate(), "endDate", null, 0, 1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getWorkpackage_Leader(), this.getPerson(), null, "leader", null, 0, 1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+ IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getWorkpackage_Participants(), this.getPerson(), null, "participants", null, 0, -1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+ IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackage_Effort(), this.ecorePackage.getEIntegerObject(), "effort", null, 0, 1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,
+ !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getWorkpackage_Outputs(), this.getWorkpackageArtefact(), null, "outputs", null, 0, -1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getWorkpackage_OwnedTasks(), this.getTask(), null, "ownedTasks", null, 0, -1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+ !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getWorkpackage_OwnedObjectives(), this.getObjective(), null, "ownedObjectives", null, 0, -1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackage_Progress(), this.ecorePackage.getEInt(), "progress", null, 0, 1, Workpackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.workpackageArtefactEClass, WorkpackageArtefact.class, "WorkpackageArtefact", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getWorkpackageArtefact_Name(), this.ecorePackage.getEString(), "name", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackageArtefact_Description(), this.ecorePackage.getEString(), "description", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackageArtefact_Nature(), this.getWorkpackageArtefactNature(), "nature", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackageArtefact_PlannedDeadline(), this.getDate(), "plannedDeadline", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackageArtefact_EffectiveDeadLine(), this.getDate(), "effectiveDeadLine", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackageArtefact_IsInvoiceTrigger(), this.ecorePackage.getEBooleanObject(), "isInvoiceTrigger", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackageArtefact_InvoiceAmount(), this.ecorePackage.getEIntegerObject(), "invoiceAmount", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getWorkpackageArtefact_Responsible(), this.getPerson(), null, "responsible", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackageArtefact_Version(), this.ecorePackage.getEString(), "version", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getWorkpackageArtefact_IsObsolete(), this.ecorePackage.getEBooleanObject(), "isObsolete", null, 0, 1, WorkpackageArtefact.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ this.initEClass(this.riskEClass, Risk.class, "Risk", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ this.initEAttribute(this.getRisk_Kind(), this.getRiskKind(), "kind", null, 0, 1, Risk.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
+ IS_ORDERED);
+ this.initEAttribute(this.getRisk_Description(), this.ecorePackage.getEString(), "description", null, 0, 1, Risk.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getRisk_Criticity(), this.ecorePackage.getEIntegerObject(), "criticity", null, 0, 1, Risk.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getRisk_Action(), this.ecorePackage.getEString(), "action", null, 0, 1, Risk.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEReference(this.getRisk_Responsible(), this.getPerson(), null, "responsible", null, 0, 1, Risk.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getRisk_OperationDate(), this.getDate(), "operationDate", null, 0, 1, Risk.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ this.initEAttribute(this.getRisk_State(), this.getRiskState(), "state", null, 0, 1, Risk.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
+ IS_ORDERED);
+ this.initEReference(this.getRisk_Workpackages(), this.getWorkpackage(), null, "workpackages", null, 0, -1, Risk.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+ IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Initialize enums and add enum literals
+ this.initEEnum(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.class, "WorkpackageArtefactNature");
+ this.addEEnumLiteral(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.DELIVRABLE);
+ this.addEEnumLiteral(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.DECISIONAL);
+ this.addEEnumLiteral(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.PROJECT_REVIEW);
+ this.addEEnumLiteral(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.ACTION);
+ this.addEEnumLiteral(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.INVOICING);
+ this.addEEnumLiteral(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.EXPENSE_STATEMENT);
+ this.addEEnumLiteral(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.CLIENT_SATISFACTION);
+ this.addEEnumLiteral(this.workpackageArtefactNatureEEnum, WorkpackageArtefactNature.OTHER);
+
+ this.initEEnum(this.riskKindEEnum, RiskKind.class, "RiskKind");
+ this.addEEnumLiteral(this.riskKindEEnum, RiskKind.MANPOWER);
+ this.addEEnumLiteral(this.riskKindEEnum, RiskKind.MACHINE);
+ this.addEEnumLiteral(this.riskKindEEnum, RiskKind.MATERIAL);
+ this.addEEnumLiteral(this.riskKindEEnum, RiskKind.MEASUREMENT);
+ this.addEEnumLiteral(this.riskKindEEnum, RiskKind.METHOD);
+ this.addEEnumLiteral(this.riskKindEEnum, RiskKind.MISSION);
+ this.addEEnumLiteral(this.riskKindEEnum, RiskKind.MANAGEMENT);
+ this.addEEnumLiteral(this.riskKindEEnum, RiskKind.MAINTENANCE);
+
+ this.initEEnum(this.riskStateEEnum, RiskState.class, "RiskState");
+ this.addEEnumLiteral(this.riskStateEEnum, RiskState.ON_GOING);
+ this.addEEnumLiteral(this.riskStateEEnum, RiskState.UNDER_INSTRUCTION);
+ this.addEEnumLiteral(this.riskStateEEnum, RiskState.STOP_BEFORE_TERM);
+ this.addEEnumLiteral(this.riskStateEEnum, RiskState.COMPLETED);
+
+ this.initEEnum(this.projectStateEEnum, ProjectState.class, "ProjectState");
+ this.addEEnumLiteral(this.projectStateEEnum, ProjectState.ON_GOING);
+ this.addEEnumLiteral(this.projectStateEEnum, ProjectState.UNDER_INSTRUCTION);
+ this.addEEnumLiteral(this.projectStateEEnum, ProjectState.STOP_BEFORE_TERM);
+ this.addEEnumLiteral(this.projectStateEEnum, ProjectState.COMPLETED);
+
+ // Initialize data types
+ this.initEDataType(this.instantEDataType, Instant.class, "Instant", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+ this.initEDataType(this.dateEDataType, LocalDate.class, "Date", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+
+ // Create resource
+ this.createResource(eNS_URI);
+ }
+
+} // ProjectmgmtPackageImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ResourceFolderImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ResourceFolderImpl.java
new file mode 100644
index 0000000..09b9dbd
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ResourceFolderImpl.java
@@ -0,0 +1,275 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Resource;
+import fr.cea.deeplab.projectmgmt.ResourceFolder;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * An implementation of the model object 'Resource Folder'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.ResourceFolderImpl#getName Name}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.ResourceFolderImpl#getOwnedResources Owned Resources}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.ResourceFolderImpl#getSubFolders Sub Folders}
+ *
+ *
+ * @generated
+ */
+public class ResourceFolderImpl extends MinimalEObjectImpl.Container implements ResourceFolder {
+ /**
+ * The default value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getOwnedResources() Owned Resources}' containment reference list.
+ *
+ * @see #getOwnedResources()
+ * @generated
+ * @ordered
+ */
+ protected EList ownedResources;
+
+ /**
+ * The cached value of the '{@link #getSubFolders() Sub Folders}' containment reference list.
+ *
+ * @see #getSubFolders()
+ * @generated
+ * @ordered
+ */
+ protected EList subFolders;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ResourceFolderImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.RESOURCE_FOLDER;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setName(String newName) {
+ String oldName = this.name;
+ this.name = newName;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RESOURCE_FOLDER__NAME, oldName, this.name));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getOwnedResources() {
+ if (this.ownedResources == null) {
+ this.ownedResources = new EObjectContainmentEList<>(Resource.class, this, ProjectmgmtPackage.RESOURCE_FOLDER__OWNED_RESOURCES);
+ }
+ return this.ownedResources;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getSubFolders() {
+ if (this.subFolders == null) {
+ this.subFolders = new EObjectContainmentEList<>(ResourceFolder.class, this, ProjectmgmtPackage.RESOURCE_FOLDER__SUB_FOLDERS);
+ }
+ return this.subFolders;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE_FOLDER__OWNED_RESOURCES:
+ return ((InternalEList>) this.getOwnedResources()).basicRemove(otherEnd, msgs);
+ case ProjectmgmtPackage.RESOURCE_FOLDER__SUB_FOLDERS:
+ return ((InternalEList>) this.getSubFolders()).basicRemove(otherEnd, msgs);
+ default:
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE_FOLDER__NAME:
+ return this.getName();
+ case ProjectmgmtPackage.RESOURCE_FOLDER__OWNED_RESOURCES:
+ return this.getOwnedResources();
+ case ProjectmgmtPackage.RESOURCE_FOLDER__SUB_FOLDERS:
+ return this.getSubFolders();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE_FOLDER__NAME:
+ this.setName((String) newValue);
+ return;
+ case ProjectmgmtPackage.RESOURCE_FOLDER__OWNED_RESOURCES:
+ this.getOwnedResources().clear();
+ this.getOwnedResources().addAll((Collection extends Resource>) newValue);
+ return;
+ case ProjectmgmtPackage.RESOURCE_FOLDER__SUB_FOLDERS:
+ this.getSubFolders().clear();
+ this.getSubFolders().addAll((Collection extends ResourceFolder>) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE_FOLDER__NAME:
+ this.setName(NAME_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.RESOURCE_FOLDER__OWNED_RESOURCES:
+ this.getOwnedResources().clear();
+ return;
+ case ProjectmgmtPackage.RESOURCE_FOLDER__SUB_FOLDERS:
+ this.getSubFolders().clear();
+ return;
+ default:
+ super.eUnset(featureID);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE_FOLDER__NAME:
+ return NAME_EDEFAULT == null ? this.name != null : !NAME_EDEFAULT.equals(this.name);
+ case ProjectmgmtPackage.RESOURCE_FOLDER__OWNED_RESOURCES:
+ return this.ownedResources != null && !this.ownedResources.isEmpty();
+ case ProjectmgmtPackage.RESOURCE_FOLDER__SUB_FOLDERS:
+ return this.subFolders != null && !this.subFolders.isEmpty();
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (name: ");
+ result.append(this.name);
+ result.append(')');
+ return result.toString();
+ }
+
+} // ResourceFolderImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ResourceImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ResourceImpl.java
new file mode 100644
index 0000000..ce986c6
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/ResourceImpl.java
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Resource;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * An implementation of the model object 'Resource'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.ResourceImpl#getName Name}
+ *
+ *
+ * @generated
+ */
+public abstract class ResourceImpl extends MinimalEObjectImpl.Container implements Resource {
+ /**
+ * The default value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ResourceImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.RESOURCE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setName(String newName) {
+ String oldName = this.name;
+ this.name = newName;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RESOURCE__NAME, oldName, this.name));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE__NAME:
+ return this.getName();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE__NAME:
+ this.setName((String) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE__NAME:
+ this.setName(NAME_EDEFAULT);
+ return;
+ default:
+ super.eUnset(featureID);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RESOURCE__NAME:
+ return NAME_EDEFAULT == null ? this.name != null : !NAME_EDEFAULT.equals(this.name);
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (name: ");
+ result.append(this.name);
+ result.append(')');
+ return result.toString();
+ }
+
+} // ResourceImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/RiskImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/RiskImpl.java
new file mode 100644
index 0000000..44459a9
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/RiskImpl.java
@@ -0,0 +1,565 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.Person;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Risk;
+import fr.cea.deeplab.projectmgmt.RiskKind;
+import fr.cea.deeplab.projectmgmt.RiskState;
+import fr.cea.deeplab.projectmgmt.Workpackage;
+
+import java.time.LocalDate;
+import java.util.Collection;
+import java.util.Objects;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+/**
+ * An implementation of the model object 'Risk'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.RiskImpl#getKind Kind}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.RiskImpl#getDescription Description}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.RiskImpl#getCriticity Criticity}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.RiskImpl#getAction Action}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.RiskImpl#getResponsible Responsible}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.RiskImpl#getOperationDate Operation Date}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.RiskImpl#getState State}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.RiskImpl#getWorkpackages Workpackages}
+ *
+ *
+ * @generated
+ */
+public class RiskImpl extends MinimalEObjectImpl.Container implements Risk {
+ /**
+ * The default value of the '{@link #getKind() Kind}' attribute.
+ *
+ * @see #getKind()
+ * @generated NOT
+ * @ordered
+ */
+ protected static final RiskKind KIND_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getKind() Kind}' attribute.
+ *
+ * @see #getKind()
+ * @generated
+ * @ordered
+ */
+ protected RiskKind kind = KIND_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getDescription() Description}' attribute.
+ *
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() Description}' attribute.
+ *
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getCriticity() Criticity}' attribute.
+ *
+ * @see #getCriticity()
+ * @generated
+ * @ordered
+ */
+ protected static final Integer CRITICITY_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getCriticity() Criticity}' attribute.
+ *
+ * @see #getCriticity()
+ * @generated
+ * @ordered
+ */
+ protected Integer criticity = CRITICITY_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getAction() Action}' attribute.
+ *
+ * @see #getAction()
+ * @generated
+ * @ordered
+ */
+ protected static final String ACTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getAction() Action}' attribute.
+ *
+ * @see #getAction()
+ * @generated
+ * @ordered
+ */
+ protected String action = ACTION_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getResponsible() Responsible}' reference.
+ *
+ * @see #getResponsible()
+ * @generated
+ * @ordered
+ */
+ protected Person responsible;
+
+ /**
+ * The default value of the '{@link #getOperationDate() Operation Date}' attribute.
+ *
+ *
+ * @see #getOperationDate()
+ * @generated
+ * @ordered
+ */
+ protected static final LocalDate OPERATION_DATE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getOperationDate() Operation Date}' attribute.
+ *
+ *
+ * @see #getOperationDate()
+ * @generated
+ * @ordered
+ */
+ protected LocalDate operationDate = OPERATION_DATE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getState() State}' attribute.
+ *
+ * @see #getState()
+ * @generated NOT
+ * @ordered
+ */
+ protected static final RiskState STATE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getState() State}' attribute.
+ *
+ * @see #getState()
+ * @generated
+ * @ordered
+ */
+ protected RiskState state = STATE_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getWorkpackages() Workpackages}' reference list.
+ *
+ * @see #getWorkpackages()
+ * @generated
+ * @ordered
+ */
+ protected EList workpackages;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected RiskImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.RISK;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public RiskKind getKind() {
+ return this.kind;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setKind(RiskKind newKind) {
+ RiskKind oldKind = this.kind;
+ this.kind = newKind == null ? KIND_EDEFAULT : newKind;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RISK__KIND, oldKind, this.kind));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setDescription(String newDescription) {
+ String oldDescription = this.description;
+ this.description = newDescription;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RISK__DESCRIPTION, oldDescription, this.description));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Integer getCriticity() {
+ return this.criticity;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setCriticity(Integer newCriticity) {
+ Integer oldCriticity = this.criticity;
+ this.criticity = newCriticity;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RISK__CRITICITY, oldCriticity, this.criticity));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getAction() {
+ return this.action;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setAction(String newAction) {
+ String oldAction = this.action;
+ this.action = newAction;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RISK__ACTION, oldAction, this.action));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Person getResponsible() {
+ if (this.responsible != null && this.responsible.eIsProxy()) {
+ InternalEObject oldResponsible = (InternalEObject) this.responsible;
+ this.responsible = (Person) this.eResolveProxy(oldResponsible);
+ if (this.responsible != oldResponsible) {
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProjectmgmtPackage.RISK__RESPONSIBLE, oldResponsible, this.responsible));
+ }
+ }
+ return this.responsible;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Person basicGetResponsible() {
+ return this.responsible;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setResponsible(Person newResponsible) {
+ Person oldResponsible = this.responsible;
+ this.responsible = newResponsible;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RISK__RESPONSIBLE, oldResponsible, this.responsible));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getOperationDate() {
+ return this.operationDate;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setOperationDate(LocalDate newOperationDate) {
+ LocalDate oldOperationDate = this.operationDate;
+ this.operationDate = newOperationDate;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RISK__OPERATION_DATE, oldOperationDate, this.operationDate));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public RiskState getState() {
+ return this.state;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setState(RiskState newState) {
+ RiskState oldState = this.state;
+ this.state = newState == null ? STATE_EDEFAULT : newState;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.RISK__STATE, oldState, this.state));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getWorkpackages() {
+ if (this.workpackages == null) {
+ this.workpackages = new EObjectResolvingEList<>(Workpackage.class, this, ProjectmgmtPackage.RISK__WORKPACKAGES);
+ }
+ return this.workpackages;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RISK__KIND:
+ return this.getKind();
+ case ProjectmgmtPackage.RISK__DESCRIPTION:
+ return this.getDescription();
+ case ProjectmgmtPackage.RISK__CRITICITY:
+ return this.getCriticity();
+ case ProjectmgmtPackage.RISK__ACTION:
+ return this.getAction();
+ case ProjectmgmtPackage.RISK__RESPONSIBLE:
+ if (resolve)
+ return this.getResponsible();
+ return this.basicGetResponsible();
+ case ProjectmgmtPackage.RISK__OPERATION_DATE:
+ return this.getOperationDate();
+ case ProjectmgmtPackage.RISK__STATE:
+ return this.getState();
+ case ProjectmgmtPackage.RISK__WORKPACKAGES:
+ return this.getWorkpackages();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RISK__KIND:
+ this.setKind((RiskKind) newValue);
+ return;
+ case ProjectmgmtPackage.RISK__DESCRIPTION:
+ this.setDescription((String) newValue);
+ return;
+ case ProjectmgmtPackage.RISK__CRITICITY:
+ this.setCriticity((Integer) newValue);
+ return;
+ case ProjectmgmtPackage.RISK__ACTION:
+ this.setAction((String) newValue);
+ return;
+ case ProjectmgmtPackage.RISK__RESPONSIBLE:
+ this.setResponsible((Person) newValue);
+ return;
+ case ProjectmgmtPackage.RISK__OPERATION_DATE:
+ this.setOperationDate((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.RISK__STATE:
+ this.setState((RiskState) newValue);
+ return;
+ case ProjectmgmtPackage.RISK__WORKPACKAGES:
+ this.getWorkpackages().clear();
+ this.getWorkpackages().addAll((Collection extends Workpackage>) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RISK__KIND:
+ this.setKind(KIND_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.RISK__DESCRIPTION:
+ this.setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.RISK__CRITICITY:
+ this.setCriticity(CRITICITY_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.RISK__ACTION:
+ this.setAction(ACTION_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.RISK__RESPONSIBLE:
+ this.setResponsible(null);
+ return;
+ case ProjectmgmtPackage.RISK__OPERATION_DATE:
+ this.setOperationDate(OPERATION_DATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.RISK__STATE:
+ this.setState(STATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.RISK__WORKPACKAGES:
+ this.getWorkpackages().clear();
+ return;
+ default:
+ super.eUnset(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.RISK__KIND:
+ return this.kind != KIND_EDEFAULT;
+ case ProjectmgmtPackage.RISK__DESCRIPTION:
+ return !Objects.equals(DESCRIPTION_EDEFAULT, this.description);
+ case ProjectmgmtPackage.RISK__CRITICITY:
+ return !Objects.equals(CRITICITY_EDEFAULT, this.criticity);
+ case ProjectmgmtPackage.RISK__ACTION:
+ return !Objects.equals(ACTION_EDEFAULT, this.action);
+ case ProjectmgmtPackage.RISK__RESPONSIBLE:
+ return this.responsible != null;
+ case ProjectmgmtPackage.RISK__OPERATION_DATE:
+ return !Objects.equals(OPERATION_DATE_EDEFAULT, this.operationDate);
+ case ProjectmgmtPackage.RISK__STATE:
+ return this.state != STATE_EDEFAULT;
+ case ProjectmgmtPackage.RISK__WORKPACKAGES:
+ return this.workpackages != null && !this.workpackages.isEmpty();
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ String result = super.toString() + " (kind: "
+ + this.kind
+ + ", description: "
+ + this.description
+ + ", criticity: "
+ + this.criticity
+ + ", action: "
+ + this.action
+ + ", operationDate: "
+ + this.operationDate
+ + ", state: "
+ + this.state
+ + ')';
+ return result;
+ }
+
+} // RiskImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TagFolderImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TagFolderImpl.java
new file mode 100644
index 0000000..73a9bea
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TagFolderImpl.java
@@ -0,0 +1,274 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.TagFolder;
+import fr.cea.deeplab.projectmgmt.TaskTag;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * An implementation of the model object 'Tag Folder'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.TagFolderImpl#getName Name}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.TagFolderImpl#getOwnedTags Owned Tags}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.TagFolderImpl#getSubFolders Sub Folders}
+ *
+ *
+ * @generated
+ */
+public class TagFolderImpl extends MinimalEObjectImpl.Container implements TagFolder {
+ /**
+ * The default value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getOwnedTags() Owned Tags}' containment reference list.
+ *
+ * @see #getOwnedTags()
+ * @generated
+ * @ordered
+ */
+ protected EList ownedTags;
+
+ /**
+ * The cached value of the '{@link #getSubFolders() Sub Folders}' containment reference list.
+ *
+ * @see #getSubFolders()
+ * @generated
+ * @ordered
+ */
+ protected EList subFolders;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TagFolderImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.TAG_FOLDER;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setName(String newName) {
+ String oldName = this.name;
+ this.name = newName;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.TAG_FOLDER__NAME, oldName, this.name));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getOwnedTags() {
+ if (this.ownedTags == null) {
+ this.ownedTags = new EObjectContainmentEList<>(TaskTag.class, this, ProjectmgmtPackage.TAG_FOLDER__OWNED_TAGS);
+ }
+ return this.ownedTags;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getSubFolders() {
+ if (this.subFolders == null) {
+ this.subFolders = new EObjectContainmentEList<>(TagFolder.class, this, ProjectmgmtPackage.TAG_FOLDER__SUB_FOLDERS);
+ }
+ return this.subFolders;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TAG_FOLDER__OWNED_TAGS:
+ return ((InternalEList>) this.getOwnedTags()).basicRemove(otherEnd, msgs);
+ case ProjectmgmtPackage.TAG_FOLDER__SUB_FOLDERS:
+ return ((InternalEList>) this.getSubFolders()).basicRemove(otherEnd, msgs);
+ default:
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TAG_FOLDER__NAME:
+ return this.getName();
+ case ProjectmgmtPackage.TAG_FOLDER__OWNED_TAGS:
+ return this.getOwnedTags();
+ case ProjectmgmtPackage.TAG_FOLDER__SUB_FOLDERS:
+ return this.getSubFolders();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TAG_FOLDER__NAME:
+ this.setName((String) newValue);
+ return;
+ case ProjectmgmtPackage.TAG_FOLDER__OWNED_TAGS:
+ this.getOwnedTags().clear();
+ this.getOwnedTags().addAll((Collection extends TaskTag>) newValue);
+ return;
+ case ProjectmgmtPackage.TAG_FOLDER__SUB_FOLDERS:
+ this.getSubFolders().clear();
+ this.getSubFolders().addAll((Collection extends TagFolder>) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TAG_FOLDER__NAME:
+ this.setName(NAME_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.TAG_FOLDER__OWNED_TAGS:
+ this.getOwnedTags().clear();
+ return;
+ case ProjectmgmtPackage.TAG_FOLDER__SUB_FOLDERS:
+ this.getSubFolders().clear();
+ return;
+ default:
+ super.eUnset(featureID);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TAG_FOLDER__NAME:
+ return NAME_EDEFAULT == null ? this.name != null : !NAME_EDEFAULT.equals(this.name);
+ case ProjectmgmtPackage.TAG_FOLDER__OWNED_TAGS:
+ return this.ownedTags != null && !this.ownedTags.isEmpty();
+ case ProjectmgmtPackage.TAG_FOLDER__SUB_FOLDERS:
+ return this.subFolders != null && !this.subFolders.isEmpty();
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (name: ");
+ result.append(this.name);
+ result.append(')');
+ return result.toString();
+ }
+
+} // TagFolderImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TaskImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TaskImpl.java
new file mode 100644
index 0000000..30956a7
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TaskImpl.java
@@ -0,0 +1,144 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Task;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+/**
+ * An implementation of the model object 'Task'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.TaskImpl#getDependencies Dependencies}
+ *
+ *
+ * @generated
+ */
+public class TaskImpl extends AbstractTaskImpl implements Task {
+ /**
+ * The cached value of the '{@link #getDependencies() Dependencies}' reference list.
+ *
+ * @see #getDependencies()
+ * @generated
+ * @ordered
+ */
+ protected EList dependencies;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TaskImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.TASK;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getDependencies() {
+ if (this.dependencies == null) {
+ this.dependencies = new EObjectResolvingEList<>(Task.class, this, ProjectmgmtPackage.TASK__DEPENDENCIES);
+ }
+ return this.dependencies;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TASK__DEPENDENCIES:
+ return this.getDependencies();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TASK__DEPENDENCIES:
+ this.getDependencies().clear();
+ this.getDependencies().addAll((Collection extends Task>) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TASK__DEPENDENCIES:
+ this.getDependencies().clear();
+ return;
+ default:
+ super.eUnset(featureID);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TASK__DEPENDENCIES:
+ return this.dependencies != null && !this.dependencies.isEmpty();
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+} // TaskImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TaskTagImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TaskTagImpl.java
new file mode 100644
index 0000000..54571b8
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TaskTagImpl.java
@@ -0,0 +1,234 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.TaskTag;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * An implementation of the model object 'Task Tag'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.TaskTagImpl#getPrefix Prefix}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.TaskTagImpl#getSuffix Suffix}
+ *
+ *
+ * @generated
+ */
+public class TaskTagImpl extends MinimalEObjectImpl.Container implements TaskTag {
+ /**
+ * The default value of the '{@link #getPrefix() Prefix}' attribute.
+ *
+ * @see #getPrefix()
+ * @generated
+ * @ordered
+ */
+ protected static final String PREFIX_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getPrefix() Prefix}' attribute.
+ *
+ * @see #getPrefix()
+ * @generated
+ * @ordered
+ */
+ protected String prefix = PREFIX_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getSuffix() Suffix}' attribute.
+ *
+ * @see #getSuffix()
+ * @generated
+ * @ordered
+ */
+ protected static final String SUFFIX_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getSuffix() Suffix}' attribute.
+ *
+ * @see #getSuffix()
+ * @generated
+ * @ordered
+ */
+ protected String suffix = SUFFIX_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TaskTagImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.TASK_TAG;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getPrefix() {
+ return this.prefix;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setPrefix(String newPrefix) {
+ String oldPrefix = this.prefix;
+ this.prefix = newPrefix;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.TASK_TAG__PREFIX, oldPrefix, this.prefix));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getSuffix() {
+ return this.suffix;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setSuffix(String newSuffix) {
+ String oldSuffix = this.suffix;
+ this.suffix = newSuffix;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.TASK_TAG__SUFFIX, oldSuffix, this.suffix));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TASK_TAG__PREFIX:
+ return this.getPrefix();
+ case ProjectmgmtPackage.TASK_TAG__SUFFIX:
+ return this.getSuffix();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TASK_TAG__PREFIX:
+ this.setPrefix((String) newValue);
+ return;
+ case ProjectmgmtPackage.TASK_TAG__SUFFIX:
+ this.setSuffix((String) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TASK_TAG__PREFIX:
+ this.setPrefix(PREFIX_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.TASK_TAG__SUFFIX:
+ this.setSuffix(SUFFIX_EDEFAULT);
+ return;
+ default:
+ super.eUnset(featureID);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TASK_TAG__PREFIX:
+ return PREFIX_EDEFAULT == null ? this.prefix != null : !PREFIX_EDEFAULT.equals(this.prefix);
+ case ProjectmgmtPackage.TASK_TAG__SUFFIX:
+ return SUFFIX_EDEFAULT == null ? this.suffix != null : !SUFFIX_EDEFAULT.equals(this.suffix);
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (prefix: ");
+ result.append(this.prefix);
+ result.append(", suffix: ");
+ result.append(this.suffix);
+ result.append(')');
+ return result.toString();
+ }
+
+} // TaskTagImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TeamImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TeamImpl.java
new file mode 100644
index 0000000..92f9db9
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/TeamImpl.java
@@ -0,0 +1,145 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.Person;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Team;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+/**
+ * An implementation of the model object 'Team'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.TeamImpl#getMembers Members}
+ *
+ *
+ * @generated
+ */
+public class TeamImpl extends ResourceImpl implements Team {
+ /**
+ * The cached value of the '{@link #getMembers() Members}' reference list.
+ *
+ * @see #getMembers()
+ * @generated
+ * @ordered
+ */
+ protected EList members;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TeamImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.TEAM;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getMembers() {
+ if (this.members == null) {
+ this.members = new EObjectResolvingEList<>(Person.class, this, ProjectmgmtPackage.TEAM__MEMBERS);
+ }
+ return this.members;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TEAM__MEMBERS:
+ return this.getMembers();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TEAM__MEMBERS:
+ this.getMembers().clear();
+ this.getMembers().addAll((Collection extends Person>) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TEAM__MEMBERS:
+ this.getMembers().clear();
+ return;
+ default:
+ super.eUnset(featureID);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.TEAM__MEMBERS:
+ return this.members != null && !this.members.isEmpty();
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+} // TeamImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/WorkpackageArtefactImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/WorkpackageArtefactImpl.java
new file mode 100644
index 0000000..ad663bd
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/WorkpackageArtefactImpl.java
@@ -0,0 +1,695 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.Person;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefact;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefactNature;
+
+import java.time.LocalDate;
+import java.util.Objects;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * An implementation of the model object 'Workpackage Artefact'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getName Name}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getDescription Description}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getNature Nature}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getPlannedDeadline Planned Deadline}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getEffectiveDeadLine Effective Dead
+ * Line}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getIsInvoiceTrigger Is Invoice
+ * Trigger}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getInvoiceAmount Invoice Amount}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getResponsible Responsible}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getVersion Version}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageArtefactImpl#getIsObsolete Is Obsolete}
+ *
+ *
+ * @generated
+ */
+public class WorkpackageArtefactImpl extends MinimalEObjectImpl.Container implements WorkpackageArtefact {
+ /**
+ * The default value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getDescription() Description}' attribute.
+ *
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() Description}' attribute.
+ *
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getNature() Nature}' attribute.
+ *
+ * @see #getNature()
+ * @generated NOT
+ * @ordered
+ */
+ protected static final WorkpackageArtefactNature NATURE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getNature() Nature}' attribute.
+ *
+ * @see #getNature()
+ * @generated
+ * @ordered
+ */
+ protected WorkpackageArtefactNature nature = NATURE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getPlannedDeadline() Planned Deadline}' attribute.
+ *
+ * @see #getPlannedDeadline()
+ * @generated
+ * @ordered
+ */
+ protected static final LocalDate PLANNED_DEADLINE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getPlannedDeadline() Planned Deadline}' attribute.
+ *
+ * @see #getPlannedDeadline()
+ * @generated
+ * @ordered
+ */
+ protected LocalDate plannedDeadline = PLANNED_DEADLINE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getEffectiveDeadLine() Effective Dead Line}' attribute.
+ *
+ * @see #getEffectiveDeadLine()
+ * @generated
+ * @ordered
+ */
+ protected static final LocalDate EFFECTIVE_DEAD_LINE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getEffectiveDeadLine() Effective Dead Line}' attribute.
+ *
+ * @see #getEffectiveDeadLine()
+ * @generated
+ * @ordered
+ */
+ protected LocalDate effectiveDeadLine = EFFECTIVE_DEAD_LINE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getIsInvoiceTrigger() Is Invoice Trigger}' attribute.
+ *
+ * @see #getIsInvoiceTrigger()
+ * @generated
+ * @ordered
+ */
+ protected static final Boolean IS_INVOICE_TRIGGER_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getIsInvoiceTrigger() Is Invoice Trigger}' attribute.
+ *
+ * @see #getIsInvoiceTrigger()
+ * @generated
+ * @ordered
+ */
+ protected Boolean isInvoiceTrigger = IS_INVOICE_TRIGGER_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getInvoiceAmount() Invoice Amount}' attribute.
+ *
+ *
+ * @see #getInvoiceAmount()
+ * @generated
+ * @ordered
+ */
+ protected static final Integer INVOICE_AMOUNT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getInvoiceAmount() Invoice Amount}' attribute.
+ *
+ *
+ * @see #getInvoiceAmount()
+ * @generated
+ * @ordered
+ */
+ protected Integer invoiceAmount = INVOICE_AMOUNT_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getResponsible() Responsible}' reference.
+ *
+ * @see #getResponsible()
+ * @generated
+ * @ordered
+ */
+ protected Person responsible;
+
+ /**
+ * The default value of the '{@link #getVersion() Version}' attribute.
+ *
+ * @see #getVersion()
+ * @generated
+ * @ordered
+ */
+ protected static final String VERSION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getVersion() Version}' attribute.
+ *
+ * @see #getVersion()
+ * @generated
+ * @ordered
+ */
+ protected String version = VERSION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getIsObsolete() Is Obsolete}' attribute.
+ *
+ * @see #getIsObsolete()
+ * @generated
+ * @ordered
+ */
+ protected static final Boolean IS_OBSOLETE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getIsObsolete() Is Obsolete}' attribute.
+ *
+ * @see #getIsObsolete()
+ * @generated
+ * @ordered
+ */
+ protected Boolean isObsolete = IS_OBSOLETE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected WorkpackageArtefactImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.WORKPACKAGE_ARTEFACT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setName(String newName) {
+ String oldName = this.name;
+ this.name = newName;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NAME, oldName, this.name));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setDescription(String newDescription) {
+ String oldDescription = this.description;
+ this.description = newDescription;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__DESCRIPTION, oldDescription, this.description));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public WorkpackageArtefactNature getNature() {
+ return this.nature;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setNature(WorkpackageArtefactNature newNature) {
+ WorkpackageArtefactNature oldNature = this.nature;
+ this.nature = newNature == null ? NATURE_EDEFAULT : newNature;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NATURE, oldNature, this.nature));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getPlannedDeadline() {
+ return this.plannedDeadline;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setPlannedDeadline(LocalDate newPlannedDeadline) {
+ LocalDate oldPlannedDeadline = this.plannedDeadline;
+ this.plannedDeadline = newPlannedDeadline;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__PLANNED_DEADLINE, oldPlannedDeadline, this.plannedDeadline));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getEffectiveDeadLine() {
+ return this.effectiveDeadLine;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setEffectiveDeadLine(LocalDate newEffectiveDeadLine) {
+ LocalDate oldEffectiveDeadLine = this.effectiveDeadLine;
+ this.effectiveDeadLine = newEffectiveDeadLine;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__EFFECTIVE_DEAD_LINE, oldEffectiveDeadLine, this.effectiveDeadLine));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Boolean getIsInvoiceTrigger() {
+ return this.isInvoiceTrigger;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setIsInvoiceTrigger(Boolean newIsInvoiceTrigger) {
+ Boolean oldIsInvoiceTrigger = this.isInvoiceTrigger;
+ this.isInvoiceTrigger = newIsInvoiceTrigger;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_INVOICE_TRIGGER, oldIsInvoiceTrigger, this.isInvoiceTrigger));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Integer getInvoiceAmount() {
+ return this.invoiceAmount;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setInvoiceAmount(Integer newInvoiceAmount) {
+ Integer oldInvoiceAmount = this.invoiceAmount;
+ this.invoiceAmount = newInvoiceAmount;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__INVOICE_AMOUNT, oldInvoiceAmount, this.invoiceAmount));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Person getResponsible() {
+ if (this.responsible != null && this.responsible.eIsProxy()) {
+ InternalEObject oldResponsible = (InternalEObject) this.responsible;
+ this.responsible = (Person) this.eResolveProxy(oldResponsible);
+ if (this.responsible != oldResponsible) {
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__RESPONSIBLE, oldResponsible, this.responsible));
+ }
+ }
+ return this.responsible;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Person basicGetResponsible() {
+ return this.responsible;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setResponsible(Person newResponsible) {
+ Person oldResponsible = this.responsible;
+ this.responsible = newResponsible;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__RESPONSIBLE, oldResponsible, this.responsible));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getVersion() {
+ return this.version;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setVersion(String newVersion) {
+ String oldVersion = this.version;
+ this.version = newVersion;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__VERSION, oldVersion, this.version));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Boolean getIsObsolete() {
+ return this.isObsolete;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setIsObsolete(Boolean newIsObsolete) {
+ Boolean oldIsObsolete = this.isObsolete;
+ this.isObsolete = newIsObsolete;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_OBSOLETE, oldIsObsolete, this.isObsolete));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NAME:
+ return this.getName();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__DESCRIPTION:
+ return this.getDescription();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NATURE:
+ return this.getNature();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__PLANNED_DEADLINE:
+ return this.getPlannedDeadline();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__EFFECTIVE_DEAD_LINE:
+ return this.getEffectiveDeadLine();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_INVOICE_TRIGGER:
+ return this.getIsInvoiceTrigger();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__INVOICE_AMOUNT:
+ return this.getInvoiceAmount();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__RESPONSIBLE:
+ if (resolve)
+ return this.getResponsible();
+ return this.basicGetResponsible();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__VERSION:
+ return this.getVersion();
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_OBSOLETE:
+ return this.getIsObsolete();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NAME:
+ this.setName((String) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__DESCRIPTION:
+ this.setDescription((String) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NATURE:
+ this.setNature((WorkpackageArtefactNature) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__PLANNED_DEADLINE:
+ this.setPlannedDeadline((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__EFFECTIVE_DEAD_LINE:
+ this.setEffectiveDeadLine((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_INVOICE_TRIGGER:
+ this.setIsInvoiceTrigger((Boolean) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__INVOICE_AMOUNT:
+ this.setInvoiceAmount((Integer) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__RESPONSIBLE:
+ this.setResponsible((Person) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__VERSION:
+ this.setVersion((String) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_OBSOLETE:
+ this.setIsObsolete((Boolean) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NAME:
+ this.setName(NAME_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__DESCRIPTION:
+ this.setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NATURE:
+ this.setNature(NATURE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__PLANNED_DEADLINE:
+ this.setPlannedDeadline(PLANNED_DEADLINE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__EFFECTIVE_DEAD_LINE:
+ this.setEffectiveDeadLine(EFFECTIVE_DEAD_LINE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_INVOICE_TRIGGER:
+ this.setIsInvoiceTrigger(IS_INVOICE_TRIGGER_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__INVOICE_AMOUNT:
+ this.setInvoiceAmount(INVOICE_AMOUNT_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__RESPONSIBLE:
+ this.setResponsible(null);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__VERSION:
+ this.setVersion(VERSION_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_OBSOLETE:
+ this.setIsObsolete(IS_OBSOLETE_EDEFAULT);
+ return;
+ default:
+ super.eUnset(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NAME:
+ return !Objects.equals(NAME_EDEFAULT, this.name);
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__DESCRIPTION:
+ return !Objects.equals(DESCRIPTION_EDEFAULT, this.description);
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__NATURE:
+ return this.nature != NATURE_EDEFAULT;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__PLANNED_DEADLINE:
+ return !Objects.equals(PLANNED_DEADLINE_EDEFAULT, this.plannedDeadline);
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__EFFECTIVE_DEAD_LINE:
+ return !Objects.equals(EFFECTIVE_DEAD_LINE_EDEFAULT, this.effectiveDeadLine);
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_INVOICE_TRIGGER:
+ return !Objects.equals(IS_INVOICE_TRIGGER_EDEFAULT, this.isInvoiceTrigger);
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__INVOICE_AMOUNT:
+ return !Objects.equals(INVOICE_AMOUNT_EDEFAULT, this.invoiceAmount);
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__RESPONSIBLE:
+ return this.responsible != null;
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__VERSION:
+ return !Objects.equals(VERSION_EDEFAULT, this.version);
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT__IS_OBSOLETE:
+ return !Objects.equals(IS_OBSOLETE_EDEFAULT, this.isObsolete);
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ String result = super.toString() + " (name: "
+ + this.name
+ + ", description: "
+ + this.description
+ + ", nature: "
+ + this.nature
+ + ", plannedDeadline: "
+ + this.plannedDeadline
+ + ", effectiveDeadLine: "
+ + this.effectiveDeadLine
+ + ", isInvoiceTrigger: "
+ + this.isInvoiceTrigger
+ + ", invoiceAmount: "
+ + this.invoiceAmount
+ + ", version: "
+ + this.version
+ + ", isObsolete: "
+ + this.isObsolete
+ + ')';
+ return result;
+ }
+
+} // WorkpackageArtefactImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/WorkpackageImpl.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/WorkpackageImpl.java
new file mode 100644
index 0000000..ae3afc7
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/impl/WorkpackageImpl.java
@@ -0,0 +1,694 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.impl;
+
+import fr.cea.deeplab.projectmgmt.Objective;
+import fr.cea.deeplab.projectmgmt.Person;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Task;
+import fr.cea.deeplab.projectmgmt.Workpackage;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefact;
+
+import java.time.LocalDate;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * An implementation of the model object 'Workpackage'.
+ *
+ * The following features are implemented:
+ *
+ *
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getName Name}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getDescription Description}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getStartDate Start Date}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getEndDate End Date}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getLeader Leader}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getParticipants Participants}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getEffort Effort}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getOutputs Outputs}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getOwnedTasks Owned Tasks}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getOwnedObjectives Owned Objectives}
+ * - {@link fr.cea.deeplab.projectmgmt.impl.WorkpackageImpl#getProgress Progress}
+ *
+ *
+ * @generated
+ */
+public class WorkpackageImpl extends MinimalEObjectImpl.Container implements Workpackage {
+ /**
+ * The default value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() Name}' attribute.
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getDescription() Description}' attribute.
+ *
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() Description}' attribute.
+ *
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getStartDate() Start Date}' attribute.
+ *
+ * @see #getStartDate()
+ * @generated
+ * @ordered
+ */
+ protected static final LocalDate START_DATE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getStartDate() Start Date}' attribute.
+ *
+ * @see #getStartDate()
+ * @generated
+ * @ordered
+ */
+ protected LocalDate startDate = START_DATE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getEndDate() End Date}' attribute.
+ *
+ * @see #getEndDate()
+ * @generated
+ * @ordered
+ */
+ protected static final LocalDate END_DATE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getEndDate() End Date}' attribute.
+ *
+ * @see #getEndDate()
+ * @generated
+ * @ordered
+ */
+ protected LocalDate endDate = END_DATE_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getLeader() Leader}' reference.
+ *
+ * @see #getLeader()
+ * @generated
+ * @ordered
+ */
+ protected Person leader;
+
+ /**
+ * The cached value of the '{@link #getParticipants() Participants}' reference list.
+ *
+ * @see #getParticipants()
+ * @generated
+ * @ordered
+ */
+ protected EList participants;
+
+ /**
+ * The default value of the '{@link #getEffort() Effort}' attribute.
+ *
+ * @see #getEffort()
+ * @generated
+ * @ordered
+ */
+ protected static final Integer EFFORT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getEffort() Effort}' attribute.
+ *
+ * @see #getEffort()
+ * @generated
+ * @ordered
+ */
+ protected Integer effort = EFFORT_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getOutputs() Outputs}' containment reference list.
+ *
+ * @see #getOutputs()
+ * @generated
+ * @ordered
+ */
+ protected EList outputs;
+
+ /**
+ * The cached value of the '{@link #getOwnedTasks() Owned Tasks}' containment reference list.
+ *
+ * @see #getOwnedTasks()
+ * @generated
+ * @ordered
+ */
+ protected EList ownedTasks;
+
+ /**
+ * The cached value of the '{@link #getOwnedObjectives() Owned Objectives}' containment reference list.
+ *
+ *
+ * @see #getOwnedObjectives()
+ * @generated
+ * @ordered
+ */
+ protected EList ownedObjectives;
+
+ /**
+ * The default value of the '{@link #getProgress() Progress}' attribute.
+ *
+ * @see #getProgress()
+ * @generated
+ * @ordered
+ */
+ protected static final int PROGRESS_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getProgress() Progress}' attribute.
+ *
+ * @see #getProgress()
+ * @generated
+ * @ordered
+ */
+ protected int progress = PROGRESS_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected WorkpackageImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectmgmtPackage.Literals.WORKPACKAGE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setName(String newName) {
+ String oldName = this.name;
+ this.name = newName;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE__NAME, oldName, this.name));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setDescription(String newDescription) {
+ String oldDescription = this.description;
+ this.description = newDescription;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE__DESCRIPTION, oldDescription, this.description));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getStartDate() {
+ return this.startDate;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setStartDate(LocalDate newStartDate) {
+ LocalDate oldStartDate = this.startDate;
+ this.startDate = newStartDate;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE__START_DATE, oldStartDate, this.startDate));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public LocalDate getEndDate() {
+ return this.endDate;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setEndDate(LocalDate newEndDate) {
+ LocalDate oldEndDate = this.endDate;
+ this.endDate = newEndDate;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE__END_DATE, oldEndDate, this.endDate));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Person getLeader() {
+ if (this.leader != null && this.leader.eIsProxy()) {
+ InternalEObject oldLeader = (InternalEObject) this.leader;
+ this.leader = (Person) this.eResolveProxy(oldLeader);
+ if (this.leader != oldLeader) {
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProjectmgmtPackage.WORKPACKAGE__LEADER, oldLeader, this.leader));
+ }
+ }
+ return this.leader;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Person basicGetLeader() {
+ return this.leader;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setLeader(Person newLeader) {
+ Person oldLeader = this.leader;
+ this.leader = newLeader;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE__LEADER, oldLeader, this.leader));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getParticipants() {
+ if (this.participants == null) {
+ this.participants = new EObjectResolvingEList<>(Person.class, this, ProjectmgmtPackage.WORKPACKAGE__PARTICIPANTS);
+ }
+ return this.participants;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Integer getEffort() {
+ return this.effort;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setEffort(Integer newEffort) {
+ Integer oldEffort = this.effort;
+ this.effort = newEffort;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE__EFFORT, oldEffort, this.effort));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getOutputs() {
+ if (this.outputs == null) {
+ this.outputs = new EObjectContainmentEList<>(WorkpackageArtefact.class, this, ProjectmgmtPackage.WORKPACKAGE__OUTPUTS);
+ }
+ return this.outputs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getOwnedTasks() {
+ if (this.ownedTasks == null) {
+ this.ownedTasks = new EObjectContainmentEList<>(Task.class, this, ProjectmgmtPackage.WORKPACKAGE__OWNED_TASKS);
+ }
+ return this.ownedTasks;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EList getOwnedObjectives() {
+ if (this.ownedObjectives == null) {
+ this.ownedObjectives = new EObjectContainmentEList<>(Objective.class, this, ProjectmgmtPackage.WORKPACKAGE__OWNED_OBJECTIVES);
+ }
+ return this.ownedObjectives;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int getProgress() {
+ return this.progress;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setProgress(int newProgress) {
+ int oldProgress = this.progress;
+ this.progress = newProgress;
+ if (this.eNotificationRequired())
+ this.eNotify(new ENotificationImpl(this, Notification.SET, ProjectmgmtPackage.WORKPACKAGE__PROGRESS, oldProgress, this.progress));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE__OUTPUTS:
+ return ((InternalEList>) this.getOutputs()).basicRemove(otherEnd, msgs);
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_TASKS:
+ return ((InternalEList>) this.getOwnedTasks()).basicRemove(otherEnd, msgs);
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_OBJECTIVES:
+ return ((InternalEList>) this.getOwnedObjectives()).basicRemove(otherEnd, msgs);
+ default:
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE__NAME:
+ return this.getName();
+ case ProjectmgmtPackage.WORKPACKAGE__DESCRIPTION:
+ return this.getDescription();
+ case ProjectmgmtPackage.WORKPACKAGE__START_DATE:
+ return this.getStartDate();
+ case ProjectmgmtPackage.WORKPACKAGE__END_DATE:
+ return this.getEndDate();
+ case ProjectmgmtPackage.WORKPACKAGE__LEADER:
+ if (resolve)
+ return this.getLeader();
+ return this.basicGetLeader();
+ case ProjectmgmtPackage.WORKPACKAGE__PARTICIPANTS:
+ return this.getParticipants();
+ case ProjectmgmtPackage.WORKPACKAGE__EFFORT:
+ return this.getEffort();
+ case ProjectmgmtPackage.WORKPACKAGE__OUTPUTS:
+ return this.getOutputs();
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_TASKS:
+ return this.getOwnedTasks();
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_OBJECTIVES:
+ return this.getOwnedObjectives();
+ case ProjectmgmtPackage.WORKPACKAGE__PROGRESS:
+ return this.getProgress();
+ default:
+ return super.eGet(featureID, resolve, coreType);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE__NAME:
+ this.setName((String) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__DESCRIPTION:
+ this.setDescription((String) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__START_DATE:
+ this.setStartDate((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__END_DATE:
+ this.setEndDate((LocalDate) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__LEADER:
+ this.setLeader((Person) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__PARTICIPANTS:
+ this.getParticipants().clear();
+ this.getParticipants().addAll((Collection extends Person>) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__EFFORT:
+ this.setEffort((Integer) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__OUTPUTS:
+ this.getOutputs().clear();
+ this.getOutputs().addAll((Collection extends WorkpackageArtefact>) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_TASKS:
+ this.getOwnedTasks().clear();
+ this.getOwnedTasks().addAll((Collection extends Task>) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_OBJECTIVES:
+ this.getOwnedObjectives().clear();
+ this.getOwnedObjectives().addAll((Collection extends Objective>) newValue);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__PROGRESS:
+ this.setProgress((Integer) newValue);
+ return;
+ default:
+ super.eSet(featureID, newValue);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE__NAME:
+ this.setName(NAME_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__DESCRIPTION:
+ this.setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__START_DATE:
+ this.setStartDate(START_DATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__END_DATE:
+ this.setEndDate(END_DATE_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__LEADER:
+ this.setLeader((Person) null);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__PARTICIPANTS:
+ this.getParticipants().clear();
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__EFFORT:
+ this.setEffort(EFFORT_EDEFAULT);
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__OUTPUTS:
+ this.getOutputs().clear();
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_TASKS:
+ this.getOwnedTasks().clear();
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_OBJECTIVES:
+ this.getOwnedObjectives().clear();
+ return;
+ case ProjectmgmtPackage.WORKPACKAGE__PROGRESS:
+ this.setProgress(PROGRESS_EDEFAULT);
+ return;
+ default:
+ super.eUnset(featureID);
+ return;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectmgmtPackage.WORKPACKAGE__NAME:
+ return NAME_EDEFAULT == null ? this.name != null : !NAME_EDEFAULT.equals(this.name);
+ case ProjectmgmtPackage.WORKPACKAGE__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? this.description != null : !DESCRIPTION_EDEFAULT.equals(this.description);
+ case ProjectmgmtPackage.WORKPACKAGE__START_DATE:
+ return START_DATE_EDEFAULT == null ? this.startDate != null : !START_DATE_EDEFAULT.equals(this.startDate);
+ case ProjectmgmtPackage.WORKPACKAGE__END_DATE:
+ return END_DATE_EDEFAULT == null ? this.endDate != null : !END_DATE_EDEFAULT.equals(this.endDate);
+ case ProjectmgmtPackage.WORKPACKAGE__LEADER:
+ return this.leader != null;
+ case ProjectmgmtPackage.WORKPACKAGE__PARTICIPANTS:
+ return this.participants != null && !this.participants.isEmpty();
+ case ProjectmgmtPackage.WORKPACKAGE__EFFORT:
+ return EFFORT_EDEFAULT == null ? this.effort != null : !EFFORT_EDEFAULT.equals(this.effort);
+ case ProjectmgmtPackage.WORKPACKAGE__OUTPUTS:
+ return this.outputs != null && !this.outputs.isEmpty();
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_TASKS:
+ return this.ownedTasks != null && !this.ownedTasks.isEmpty();
+ case ProjectmgmtPackage.WORKPACKAGE__OWNED_OBJECTIVES:
+ return this.ownedObjectives != null && !this.ownedObjectives.isEmpty();
+ case ProjectmgmtPackage.WORKPACKAGE__PROGRESS:
+ return this.progress != PROGRESS_EDEFAULT;
+ default:
+ return super.eIsSet(featureID);
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (this.eIsProxy())
+ return super.toString();
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (name: ");
+ result.append(this.name);
+ result.append(", description: ");
+ result.append(this.description);
+ result.append(", startDate: ");
+ result.append(this.startDate);
+ result.append(", endDate: ");
+ result.append(this.endDate);
+ result.append(", effort: ");
+ result.append(this.effort);
+ result.append(", progress: ");
+ result.append(this.progress);
+ result.append(')');
+ return result.toString();
+ }
+
+} // WorkpackageImpl
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/util/ProjectmgmtAdapterFactory.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/util/ProjectmgmtAdapterFactory.java
new file mode 100644
index 0000000..8733f96
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/util/ProjectmgmtAdapterFactory.java
@@ -0,0 +1,429 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.util;
+
+import fr.cea.deeplab.projectmgmt.AbstractTask;
+import fr.cea.deeplab.projectmgmt.ExternalStakeholder;
+import fr.cea.deeplab.projectmgmt.InternalStakeholder;
+import fr.cea.deeplab.projectmgmt.KeyResult;
+import fr.cea.deeplab.projectmgmt.Objective;
+import fr.cea.deeplab.projectmgmt.Organization;
+import fr.cea.deeplab.projectmgmt.Person;
+import fr.cea.deeplab.projectmgmt.Project;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Resource;
+import fr.cea.deeplab.projectmgmt.ResourceFolder;
+import fr.cea.deeplab.projectmgmt.Risk;
+import fr.cea.deeplab.projectmgmt.TagFolder;
+import fr.cea.deeplab.projectmgmt.Task;
+import fr.cea.deeplab.projectmgmt.TaskTag;
+import fr.cea.deeplab.projectmgmt.Team;
+import fr.cea.deeplab.projectmgmt.Workpackage;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefact;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * The Adapter Factory for the model. It provides an adapter createXXX
+ * method for each class of the model.
+ *
+ * @see fr.cea.deeplab.projectmgmt.ProjectmgmtPackage
+ * @generated
+ */
+public class ProjectmgmtAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ *
+ * @generated
+ */
+ protected static ProjectmgmtPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ *
+ * @generated
+ */
+ public ProjectmgmtAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = ProjectmgmtPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object. This
+ * implementation returns true
if the object is either the model's package or is an instance object of
+ * the model.
+ *
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject) object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the createXXX
methods.
+ *
+ * @generated
+ */
+ protected ProjectmgmtSwitch modelSwitch = new ProjectmgmtSwitch<>() {
+ @Override
+ public Adapter caseOrganization(Organization object) {
+ return ProjectmgmtAdapterFactory.this.createOrganizationAdapter();
+ }
+
+ @Override
+ public Adapter caseResource(Resource object) {
+ return ProjectmgmtAdapterFactory.this.createResourceAdapter();
+ }
+
+ @Override
+ public Adapter caseResourceFolder(ResourceFolder object) {
+ return ProjectmgmtAdapterFactory.this.createResourceFolderAdapter();
+ }
+
+ @Override
+ public Adapter caseTeam(Team object) {
+ return ProjectmgmtAdapterFactory.this.createTeamAdapter();
+ }
+
+ @Override
+ public Adapter caseInternalStakeholder(InternalStakeholder object) {
+ return ProjectmgmtAdapterFactory.this.createInternalStakeholderAdapter();
+ }
+
+ @Override
+ public Adapter caseExternalStakeholder(ExternalStakeholder object) {
+ return ProjectmgmtAdapterFactory.this.createExternalStakeholderAdapter();
+ }
+
+ @Override
+ public Adapter casePerson(Person object) {
+ return ProjectmgmtAdapterFactory.this.createPersonAdapter();
+ }
+
+ @Override
+ public Adapter caseAbstractTask(AbstractTask object) {
+ return ProjectmgmtAdapterFactory.this.createAbstractTaskAdapter();
+ }
+
+ @Override
+ public Adapter caseTagFolder(TagFolder object) {
+ return ProjectmgmtAdapterFactory.this.createTagFolderAdapter();
+ }
+
+ @Override
+ public Adapter caseTaskTag(TaskTag object) {
+ return ProjectmgmtAdapterFactory.this.createTaskTagAdapter();
+ }
+
+ @Override
+ public Adapter caseTask(Task object) {
+ return ProjectmgmtAdapterFactory.this.createTaskAdapter();
+ }
+
+ @Override
+ public Adapter caseObjective(Objective object) {
+ return ProjectmgmtAdapterFactory.this.createObjectiveAdapter();
+ }
+
+ @Override
+ public Adapter caseKeyResult(KeyResult object) {
+ return ProjectmgmtAdapterFactory.this.createKeyResultAdapter();
+ }
+
+ @Override
+ public Adapter caseProject(Project object) {
+ return ProjectmgmtAdapterFactory.this.createProjectAdapter();
+ }
+
+ @Override
+ public Adapter caseWorkpackage(Workpackage object) {
+ return ProjectmgmtAdapterFactory.this.createWorkpackageAdapter();
+ }
+
+ @Override
+ public Adapter caseWorkpackageArtefact(WorkpackageArtefact object) {
+ return ProjectmgmtAdapterFactory.this.createWorkpackageArtefactAdapter();
+ }
+
+ @Override
+ public Adapter caseRisk(Risk object) {
+ return ProjectmgmtAdapterFactory.this.createRiskAdapter();
+ }
+
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return ProjectmgmtAdapterFactory.this.createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the target
.
+ *
+ * @param target
+ * the object to adapt.
+ * @return the adapter for the target
.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return this.modelSwitch.doSwitch((EObject) target);
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Organization
+ * Organization}'. This default implementation returns null so that we can easily
+ * ignore cases; it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Organization
+ * @generated
+ */
+ public Adapter createOrganizationAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Resource Resource}'.
+ * This default implementation returns null so that we can easily ignore cases; it's useful
+ * to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Resource
+ * @generated
+ */
+ public Adapter createResourceAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.ResourceFolder Resource
+ * Folder}'. This default implementation returns null so that we can easily ignore
+ * cases; it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.ResourceFolder
+ * @generated
+ */
+ public Adapter createResourceFolderAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Team Team}'. This default implementation returns null so that we can easily ignore cases; it's useful to
+ * ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Team
+ * @generated
+ */
+ public Adapter createTeamAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.InternalStakeholder Internal
+ * Stakeholder}'. This default implementation returns null so that we can easily ignore
+ * cases; it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.InternalStakeholder
+ * @generated
+ */
+ public Adapter createInternalStakeholderAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.ExternalStakeholder External
+ * Stakeholder}'. This default implementation returns null so that we can easily ignore
+ * cases; it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.ExternalStakeholder
+ * @generated
+ */
+ public Adapter createExternalStakeholderAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Person Person}'. This default implementation returns null so that we can easily ignore cases; it's useful to
+ * ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Person
+ * @generated
+ */
+ public Adapter createPersonAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.AbstractTask Abstract
+ * Task}'. This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.AbstractTask
+ * @generated
+ */
+ public Adapter createAbstractTaskAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.TagFolder Tag Folder}'.
+ * This default implementation returns null so that we can easily ignore cases; it's useful
+ * to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.TagFolder
+ * @generated
+ */
+ public Adapter createTagFolderAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.TaskTag Task Tag}'. This default implementation returns null so that we can easily ignore cases; it's useful to
+ * ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.TaskTag
+ * @generated
+ */
+ public Adapter createTaskTagAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Task Task}'. This default implementation returns null so that we can easily ignore cases; it's useful to
+ * ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Task
+ * @generated
+ */
+ public Adapter createTaskAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Objective Objective}'.
+ * This default implementation returns null so that we can easily ignore cases; it's useful
+ * to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Objective
+ * @generated
+ */
+ public Adapter createObjectiveAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.KeyResult Key Result}'.
+ * This default implementation returns null so that we can easily ignore cases; it's useful
+ * to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.KeyResult
+ * @generated
+ */
+ public Adapter createKeyResultAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Project Project}'. This default implementation returns null so that we can easily ignore cases; it's useful to
+ * ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Project
+ * @generated
+ */
+ public Adapter createProjectAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Workpackage
+ * Workpackage}'. This default implementation returns null so that we can easily
+ * ignore cases; it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Workpackage
+ * @generated
+ */
+ public Adapter createWorkpackageAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.WorkpackageArtefact
+ * Workpackage Artefact}'. This default implementation returns null so that we can
+ * easily ignore cases; it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.WorkpackageArtefact
+ * @generated
+ */
+ public Adapter createWorkpackageArtefactAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.cea.deeplab.projectmgmt.Risk Risk}'. This default implementation returns null so that we can easily ignore cases; it's useful to
+ * ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.cea.deeplab.projectmgmt.Risk
+ * @generated
+ */
+ public Adapter createRiskAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case. This default implementation returns null.
+ *
+ *
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} // ProjectmgmtAdapterFactory
diff --git a/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/util/ProjectmgmtSwitch.java b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/util/ProjectmgmtSwitch.java
new file mode 100644
index 0000000..49d9a0e
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/java/fr/cea/deeplab/projectmgmt/util/ProjectmgmtSwitch.java
@@ -0,0 +1,485 @@
+/**
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ */
+package fr.cea.deeplab.projectmgmt.util;
+
+import fr.cea.deeplab.projectmgmt.AbstractTask;
+import fr.cea.deeplab.projectmgmt.ExternalStakeholder;
+import fr.cea.deeplab.projectmgmt.InternalStakeholder;
+import fr.cea.deeplab.projectmgmt.KeyResult;
+import fr.cea.deeplab.projectmgmt.Objective;
+import fr.cea.deeplab.projectmgmt.Organization;
+import fr.cea.deeplab.projectmgmt.Person;
+import fr.cea.deeplab.projectmgmt.Project;
+import fr.cea.deeplab.projectmgmt.ProjectmgmtPackage;
+import fr.cea.deeplab.projectmgmt.Resource;
+import fr.cea.deeplab.projectmgmt.ResourceFolder;
+import fr.cea.deeplab.projectmgmt.Risk;
+import fr.cea.deeplab.projectmgmt.TagFolder;
+import fr.cea.deeplab.projectmgmt.Task;
+import fr.cea.deeplab.projectmgmt.TaskTag;
+import fr.cea.deeplab.projectmgmt.Team;
+import fr.cea.deeplab.projectmgmt.Workpackage;
+import fr.cea.deeplab.projectmgmt.WorkpackageArtefact;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ * The Switch for the model's inheritance hierarchy. It supports the call
+ * {@link #doSwitch(EObject) doSwitch(object)} to invoke the caseXXX
method for each class of the model,
+ * starting with the actual class of the object and proceeding up the inheritance hierarchy until a non-null result is
+ * returned, which is the result of the switch.
+ *
+ * @see fr.cea.deeplab.projectmgmt.ProjectmgmtPackage
+ * @generated
+ */
+public class ProjectmgmtSwitch extends Switch {
+ /**
+ * The cached model package
+ *
+ * @generated
+ */
+ protected static ProjectmgmtPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ *
+ * @generated
+ */
+ public ProjectmgmtSwitch() {
+ if (modelPackage == null) {
+ modelPackage = ProjectmgmtPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ *
+ * @param ePackage
+ * the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls caseXXX
for each class of the model until one returns a non null result; it yields that
+ * result.
+ *
+ * @return the first non-null result returned by a caseXXX
call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case ProjectmgmtPackage.ORGANIZATION: {
+ Organization organization = (Organization) theEObject;
+ T result = this.caseOrganization(organization);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.RESOURCE: {
+ Resource resource = (Resource) theEObject;
+ T result = this.caseResource(resource);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.RESOURCE_FOLDER: {
+ ResourceFolder resourceFolder = (ResourceFolder) theEObject;
+ T result = this.caseResourceFolder(resourceFolder);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.TEAM: {
+ Team team = (Team) theEObject;
+ T result = this.caseTeam(team);
+ if (result == null)
+ result = this.caseResource(team);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.INTERNAL_STAKEHOLDER: {
+ InternalStakeholder internalStakeholder = (InternalStakeholder) theEObject;
+ T result = this.caseInternalStakeholder(internalStakeholder);
+ if (result == null)
+ result = this.caseResource(internalStakeholder);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.EXTERNAL_STAKEHOLDER: {
+ ExternalStakeholder externalStakeholder = (ExternalStakeholder) theEObject;
+ T result = this.caseExternalStakeholder(externalStakeholder);
+ if (result == null)
+ result = this.caseResource(externalStakeholder);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.PERSON: {
+ Person person = (Person) theEObject;
+ T result = this.casePerson(person);
+ if (result == null)
+ result = this.caseResource(person);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.ABSTRACT_TASK: {
+ AbstractTask abstractTask = (AbstractTask) theEObject;
+ T result = this.caseAbstractTask(abstractTask);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.TAG_FOLDER: {
+ TagFolder tagFolder = (TagFolder) theEObject;
+ T result = this.caseTagFolder(tagFolder);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.TASK_TAG: {
+ TaskTag taskTag = (TaskTag) theEObject;
+ T result = this.caseTaskTag(taskTag);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.TASK: {
+ Task task = (Task) theEObject;
+ T result = this.caseTask(task);
+ if (result == null)
+ result = this.caseAbstractTask(task);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.OBJECTIVE: {
+ Objective objective = (Objective) theEObject;
+ T result = this.caseObjective(objective);
+ if (result == null)
+ result = this.caseAbstractTask(objective);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.KEY_RESULT: {
+ KeyResult keyResult = (KeyResult) theEObject;
+ T result = this.caseKeyResult(keyResult);
+ if (result == null)
+ result = this.caseAbstractTask(keyResult);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.PROJECT: {
+ Project project = (Project) theEObject;
+ T result = this.caseProject(project);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.WORKPACKAGE: {
+ Workpackage workpackage = (Workpackage) theEObject;
+ T result = this.caseWorkpackage(workpackage);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.WORKPACKAGE_ARTEFACT: {
+ WorkpackageArtefact workpackageArtefact = (WorkpackageArtefact) theEObject;
+ T result = this.caseWorkpackageArtefact(workpackageArtefact);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ case ProjectmgmtPackage.RISK: {
+ Risk risk = (Risk) theEObject;
+ T result = this.caseRisk(risk);
+ if (result == null)
+ result = this.defaultCase(theEObject);
+ return result;
+ }
+ default:
+ return this.defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Organization'.
+ * This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Organization'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseOrganization(Organization object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Resource'. This
+ * implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Resource'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseResource(Resource object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Resource Folder'. This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Resource Folder'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseResourceFolder(ResourceFolder object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Team'. This
+ * implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Team'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTeam(Team object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Internal Stakeholder'. This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Internal Stakeholder'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInternalStakeholder(InternalStakeholder object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'External Stakeholder'. This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'External Stakeholder'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseExternalStakeholder(ExternalStakeholder object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Person'. This
+ * implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Person'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T casePerson(Person object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Abstract Task'.
+ * This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Abstract Task'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAbstractTask(AbstractTask object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Tag Folder'.
+ * This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Tag Folder'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTagFolder(TagFolder object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Task Tag'. This
+ * implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Task Tag'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTaskTag(TaskTag object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Task'. This
+ * implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Task'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTask(Task object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Objective'.
+ * This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Objective'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseObjective(Objective object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Key Result'.
+ * This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Key Result'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseKeyResult(KeyResult object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Project'. This
+ * implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Project'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseProject(Project object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Workpackage'.
+ * This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Workpackage'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseWorkpackage(Workpackage object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Workpackage Artefact'. This implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Workpackage Artefact'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseWorkpackageArtefact(WorkpackageArtefact object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Risk'. This
+ * implementation returns null; returning a non-null result will terminate the switch.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Risk'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseRisk(Risk object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'EObject'. This
+ * implementation returns null; returning a non-null result will terminate the switch, but this is the last case
+ * anyway.
+ *
+ * @param object
+ * the target of the switch.
+ * @return the result of interpreting the object as an instance of 'EObject'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} // ProjectmgmtSwitch
diff --git a/backend/deeplab-projectmanagement/src/main/resources/icons/svg/Default.svg b/backend/deeplab-projectmanagement/src/main/resources/icons/svg/Default.svg
new file mode 100644
index 0000000..39d97af
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/resources/icons/svg/Default.svg
@@ -0,0 +1,71 @@
+
+
diff --git a/backend/deeplab-projectmanagement/src/main/resources/model/projectmgmt.ecore b/backend/deeplab-projectmanagement/src/main/resources/model/projectmgmt.ecore
new file mode 100644
index 0000000..55d562b
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/resources/model/projectmgmt.ecore
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/deeplab-projectmanagement/src/main/resources/model/projectmgmt.genmodel b/backend/deeplab-projectmanagement/src/main/resources/model/projectmgmt.genmodel
new file mode 100644
index 0000000..7703033
--- /dev/null
+++ b/backend/deeplab-projectmanagement/src/main/resources/model/projectmgmt.genmodel
@@ -0,0 +1,173 @@
+
+
+ projectmgmt.ecore
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/pom.xml b/backend/pom.xml
new file mode 100644
index 0000000..c9e1ee4
--- /dev/null
+++ b/backend/pom.xml
@@ -0,0 +1,58 @@
+
+
+
+ 4.0.0
+
+ deeplab
+ deeplab-container
+ 2024.11.0
+
+ Pepper
+ Pepper for project management
+ pom
+
+
+
+
+ deeplab-parent
+ deeplab-projectmanagement
+ deeplab-projectmanagement-edit
+ deeplab-projectmanagement-starter
+ deeplab-application
+ deeplab-frontend
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ versions-maven-plugin
+
+ true
+
+
+
+
+
+
+
+
diff --git a/backend/releng/deeplab-resources/.project b/backend/releng/deeplab-resources/.project
new file mode 100644
index 0000000..da4a03e
--- /dev/null
+++ b/backend/releng/deeplab-resources/.project
@@ -0,0 +1,11 @@
+
+
+ deeplab-resources
+
+
+
+
+
+
+
+
diff --git a/backend/releng/deeplab-resources/README.adoc b/backend/releng/deeplab-resources/README.adoc
new file mode 100644
index 0000000..b1a9127
--- /dev/null
+++ b/backend/releng/deeplab-resources/README.adoc
@@ -0,0 +1,10 @@
+= deeplab-resources
+
+== Goal
+
+This project is used to store some common settings used by our Java projects.
+As such, it contains our Checkstyle configuration, our formatter settings etc.
+
+== Dependencies
+
+None, this is not a Java project
diff --git a/backend/releng/deeplab-resources/checkstyle/CheckstyleConfiguration.xml b/backend/releng/deeplab-resources/checkstyle/CheckstyleConfiguration.xml
new file mode 100644
index 0000000..fecae4b
--- /dev/null
+++ b/backend/releng/deeplab-resources/checkstyle/CheckstyleConfiguration.xml
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/releng/deeplab-resources/editor/CleanupProfile.xml b/backend/releng/deeplab-resources/editor/CleanupProfile.xml
new file mode 100644
index 0000000..b16f9b4
--- /dev/null
+++ b/backend/releng/deeplab-resources/editor/CleanupProfile.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/releng/deeplab-resources/editor/JavaFormatter.xml b/backend/releng/deeplab-resources/editor/JavaFormatter.xml
new file mode 100644
index 0000000..a42eedd
--- /dev/null
+++ b/backend/releng/deeplab-resources/editor/JavaFormatter.xml
@@ -0,0 +1,777 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/releng/deeplab-resources/editor/codetemplates.xml b/backend/releng/deeplab-resources/editor/codetemplates.xml
new file mode 100644
index 0000000..46a4a7b
--- /dev/null
+++ b/backend/releng/deeplab-resources/editor/codetemplates.xml
@@ -0,0 +1 @@
+
diff --git a/backend/releng/deeplab-resources/editor/sirius.importorder b/backend/releng/deeplab-resources/editor/sirius.importorder
new file mode 100644
index 0000000..20328a8
--- /dev/null
+++ b/backend/releng/deeplab-resources/editor/sirius.importorder
@@ -0,0 +1,7 @@
+#Organize Import Order
+#Mon Mar 11 15:56:44 CET 2019
+0=com
+1=fr
+2=java
+3=javax
+4=org
diff --git a/doc/images/concepts.png b/doc/images/concepts.png
new file mode 100644
index 0000000..2abd6af
Binary files /dev/null and b/doc/images/concepts.png differ
diff --git a/doc/images/create-model-button.png b/doc/images/create-model-button.png
new file mode 100644
index 0000000..0e1a5ed
Binary files /dev/null and b/doc/images/create-model-button.png differ
diff --git a/doc/images/create-model-dialog.png b/doc/images/create-model-dialog.png
new file mode 100644
index 0000000..9dbe088
Binary files /dev/null and b/doc/images/create-model-dialog.png differ
diff --git a/doc/images/create-projectmgmt-project.png b/doc/images/create-projectmgmt-project.png
new file mode 100644
index 0000000..988f7cb
Binary files /dev/null and b/doc/images/create-projectmgmt-project.png differ
diff --git a/doc/images/create-representation.png b/doc/images/create-representation.png
new file mode 100644
index 0000000..e4a88b2
Binary files /dev/null and b/doc/images/create-representation.png differ
diff --git a/doc/images/representation-daily.png b/doc/images/representation-daily.png
new file mode 100644
index 0000000..da16e93
Binary files /dev/null and b/doc/images/representation-daily.png differ
diff --git a/doc/images/representation-form.png b/doc/images/representation-form.png
new file mode 100644
index 0000000..9a7991a
Binary files /dev/null and b/doc/images/representation-form.png differ
diff --git a/doc/images/representation-gantt.png b/doc/images/representation-gantt.png
new file mode 100644
index 0000000..c1cba2e
Binary files /dev/null and b/doc/images/representation-gantt.png differ
diff --git a/doc/images/representation-kanban.png b/doc/images/representation-kanban.png
new file mode 100644
index 0000000..3979443
Binary files /dev/null and b/doc/images/representation-kanban.png differ
diff --git a/doc/images/representation-okr.png b/doc/images/representation-okr.png
new file mode 100644
index 0000000..e776285
Binary files /dev/null and b/doc/images/representation-okr.png differ
diff --git a/doc/user.adoc b/doc/user.adoc
new file mode 100644
index 0000000..57215c5
--- /dev/null
+++ b/doc/user.adoc
@@ -0,0 +1,109 @@
+ifndef::imagesdir[:imagesdir: images]
+
+= User documentation
+Pepper v{deeplab-version} - {git-commit-id-abbrev}
+
+:toc:
+
+Pepper is a project management tool.
+
+It allows creating data related to your project and represents the data with Gantt, Form and boards like Daily, Kanban or OKR.
+
+As `Pepper` is based on Sirius Web application, please refer to the https://www.eclipse.org/sirius/sirius-web.html[Sirius Web documentation] for more details.
+
+== Concepts
+
+The core concept is the `Project`.
+It contains:
+
+* many attributes to describe the `Project` such as planning, cost or stakeholder information.
+* a list of `Workpackages`
+* a list of `Risks`
+A `Risk` is associated to one or many `Workpackages`
+* a list of `Objectives`
+
+A `Workpackage` contains
+
+* a list of `WorkpackageArtefact`
+* a list of `Tasks`.
+`Tasks` is a fine-grained concept to describe the `Workpackage`
+
+At root level, you can create `Organizations` that own the `Projects` and `ResourceFolders` which contain `Persons`, `Teams`, `InternalStakeholders` and `ExternalStakeholders`.
+
+image::concepts.png[Concepts]
+
+== Starter
+
+To start the user need to create a Sirius project that will contain a model containing the concepts.
+By default, a blank model is created.
+You can add a new model by adding a blank or a sample model.
+The sample model is useful to see the concepts that are possible to create.
+
+image::create-projectmgmt-project.png[Create Project]
+
+image::create-model-button.png[Create Model Button]
+
+image::create-model-dialog.png[Create Model Dialog]
+
+== Representations
+
+Once you have created the model, you can create representations of your model.
+Representation is the core feature that will help display and edit your data.
+
+You can create a representation using the contextual menu on the object.
+
+image::create-representation.png[Create Model Dialog]
+
+=== Form on Project
+
+Project is the key concept.
+A `Form` representation can be created from a `Project`.
+It contains many tabs that display project information.
+
+image::representation-form.png[Form]
+
+
+=== Gantt on Project and Workpackage
+
+A `Gantt` representation can be created from a `Project` or a `Workpackage`
+
+image::representation-gantt.png[Gantt]
+
+In `Gantt` on `Project`, the Gantt tasks represent the `Workpackage` of the `Project`.
+
+In `Gantt` on `Workpackage`, the Gantt tasks represent the `Tasks` and sub `Tasks` of the `Workpackage`.
+
+You can
+
+* create new tasks
+* change the dates of the task by moving the task or changing in `Details` panel
+* reorder existing tasks or change the parent of a task
+
+=== Deck on Project and Workpackage
+
+A `Deck` representation is a representation which have columns and card inside columns.
+The cards can be moved from a column to another.
+
+==== OKR
+
+The `OKR` representation can be created from a `Project` or a `Workpackage`.
+The columns represent the `Objectives` contained in the Project or Workpackage and the cards represent the `KeyResult`.
+
+image::representation-okr.png[OKR]
+
+==== Daily
+
+The `Daily` representation can be created from a `Workpackage`.
+
+image::representation-daily.png[Daily]
+
+The columns represent the `TaskTags` (with _daily_ prefix) contained in the `TagFolder` and the cards represent the `Tasks` that have a reference to the corresponding `TaskTag`.
+
+
+==== Kanban
+
+The `Kanban` representation can be created from a `Workpackage`.
+
+image::representation-kanban.png[Daily]
+
+The columns represent the `TaskTags` (with _kanban_ prefix) contained in the `TagFolder` and the cards represent the `Tasks` that have a reference to the corresponding `TaskTag`.
diff --git a/frontend/.npmrc b/frontend/.npmrc
new file mode 100644
index 0000000..2fa626d
--- /dev/null
+++ b/frontend/.npmrc
@@ -0,0 +1,2 @@
+@eclipse-sirius:registry=https://npm.pkg.github.com/eclipse-sirius
+@ObeoNetwork:registry=https://npm.pkg.github.com/ObeoNetwork
diff --git a/frontend/.prettierrc b/frontend/.prettierrc
new file mode 100644
index 0000000..b936b27
--- /dev/null
+++ b/frontend/.prettierrc
@@ -0,0 +1,22 @@
+{
+ "printWidth": 120,
+ "singleQuote": true,
+ "bracketSameLine": true,
+ "useTabs": false,
+ "tabWidth": 2,
+ "semi": true,
+ "overrides": [
+ {
+ "files": "*.js",
+ "options": {
+ "parser": "babel"
+ }
+ },
+ {
+ "files": "*.css",
+ "options": {
+ "parser": "css"
+ }
+ }
+ ]
+}
diff --git a/frontend/.project b/frontend/.project
new file mode 100644
index 0000000..02a6850
--- /dev/null
+++ b/frontend/.project
@@ -0,0 +1,11 @@
+
+
+ frontend
+
+
+
+
+
+
+
+
diff --git a/frontend/deeplab-web/.env.development b/frontend/deeplab-web/.env.development
new file mode 100644
index 0000000..e589049
--- /dev/null
+++ b/frontend/deeplab-web/.env.development
@@ -0,0 +1,2 @@
+VITE_HTTP_SERVER_PORT=8080
+VITE_WS_SERVER_PORT=8080
\ No newline at end of file
diff --git a/frontend/deeplab-web/.prettierrc b/frontend/deeplab-web/.prettierrc
new file mode 100644
index 0000000..b936b27
--- /dev/null
+++ b/frontend/deeplab-web/.prettierrc
@@ -0,0 +1,22 @@
+{
+ "printWidth": 120,
+ "singleQuote": true,
+ "bracketSameLine": true,
+ "useTabs": false,
+ "tabWidth": 2,
+ "semi": true,
+ "overrides": [
+ {
+ "files": "*.js",
+ "options": {
+ "parser": "babel"
+ }
+ },
+ {
+ "files": "*.css",
+ "options": {
+ "parser": "css"
+ }
+ }
+ ]
+}
diff --git a/frontend/deeplab-web/README.adoc b/frontend/deeplab-web/README.adoc
new file mode 100644
index 0000000..4d567ff
--- /dev/null
+++ b/frontend/deeplab-web/README.adoc
@@ -0,0 +1,4 @@
+= Deeplab Frontend
+
+This project contains the frontend of the deeplab appliation.
+This frontend relies on Sirius-Web frontend
diff --git a/frontend/deeplab-web/index.html b/frontend/deeplab-web/index.html
new file mode 100644
index 0000000..2aba1f6
--- /dev/null
+++ b/frontend/deeplab-web/index.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Pepper
+
+
+
+
+
+
+
+
diff --git a/frontend/deeplab-web/package.json b/frontend/deeplab-web/package.json
new file mode 100644
index 0000000..55fdd33
--- /dev/null
+++ b/frontend/deeplab-web/package.json
@@ -0,0 +1,95 @@
+{
+ "name": "@ObeoNetwork/pepper",
+ "author": "CEA LIST",
+ "version": "2024.11.0",
+ "license": "EPL-2.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/ObeoNetwork/pepper"
+ },
+ "publishConfig": {
+ "registry": "https://npm.pkg.github.com/"
+ },
+ "private": true,
+ "dependencies": {
+ "@ObeoNetwork/gantt-task-react": "0.6.1",
+ "@ObeoNetwork/react-trello": "2.4.11",
+ "@apollo/client": "3.10.4",
+ "@eclipse-sirius/sirius-components-charts": "2024.11.1",
+ "@eclipse-sirius/sirius-components-core": "2024.11.1",
+ "@eclipse-sirius/sirius-components-deck": "2024.11.1",
+ "@eclipse-sirius/sirius-components-diagrams": "2024.11.1",
+ "@eclipse-sirius/sirius-components-formdescriptioneditors": "2024.11.1",
+ "@eclipse-sirius/sirius-components-forms": "2024.11.1",
+ "@eclipse-sirius/sirius-components-gantt": "2024.11.1",
+ "@eclipse-sirius/sirius-components-omnibox": "2024.11.1",
+ "@eclipse-sirius/sirius-components-portals": "2024.11.1",
+ "@eclipse-sirius/sirius-components-selection": "2024.11.1",
+ "@eclipse-sirius/sirius-components-tables": "2024.11.1",
+ "@eclipse-sirius/sirius-components-trees": "2024.11.1",
+ "@eclipse-sirius/sirius-components-validation": "2024.11.1",
+ "@eclipse-sirius/sirius-components-widget-reference": "2024.11.1",
+ "@eclipse-sirius/sirius-web-application": "2024.11.1",
+ "@mui/icons-material": "5.15.19",
+ "@mui/material": "5.15.19",
+ "@types/react": "18.3.3",
+ "@types/react-dom": "18.3.0",
+ "@types/react-router-dom": "5.3.3",
+ "@xstate/react": "3.0.0",
+ "@xyflow/react": "12.2.1",
+ "d3": "7.0.0",
+ "elkjs": "0.8.2",
+ "export-to-csv": "1.3.0",
+ "fontsource-roboto": "4.0.0",
+ "graphql": "16.8.1",
+ "html-to-image": "1.11.11",
+ "material-react-table": "2.13.3",
+ "notistack": "3.0.1",
+ "pathfinding": "0.4.18",
+ "prop-types": "15.8.1",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "react-draggable": "4.4.6",
+ "react-router-dom": "6.26.0",
+ "reactflow": "11.10.1",
+ "subscriptions-transport-ws": "0.11.0",
+ "svg-path-parser": "1.1.0",
+ "tss-react": "4.9.7",
+ "xstate": "4.32.1"
+ },
+ "devDependencies": {
+ "@testing-library/jest-dom": "5.14.1",
+ "@testing-library/react": "12.1.2",
+ "@testing-library/user-event": "13.2.1",
+ "@types/d3": "7.0.0",
+ "@types/jest": "27.0.0",
+ "@types/node": "20.12.12",
+ "@types/react": "18.3.3",
+ "@types/react-dom": "18.3.0",
+ "@types/react-router-dom": "5.3.3",
+ "@vitejs/plugin-react": "4.3.0",
+ "jest-junit-reporter": "1.1.0",
+ "prettier": "2.7.1",
+ "typescript": "5.4.5",
+ "vite": "5.2.11",
+ "vitest": "1.6.0"
+ },
+ "overrides": {
+ "@types/react-router-dom": {
+ "@types/history": "4.7.11"
+ }
+ },
+ "scripts": {
+ "start": "tsc && vite --host",
+ "build": "vite build && tsc",
+ "test": "vitest --run --config vite.config.js",
+ "format": "prettier --write \"src/**/*.{js,ts,tsx,css}\"",
+ "format-lint": "prettier --list-different \"src/**/*.{js,ts,tsx,css}\""
+ },
+ "browserslist": [
+ ">0.2%",
+ "not dead",
+ "not ie <= 11",
+ "not op_mini all"
+ ]
+}
diff --git a/frontend/deeplab-web/public/favicon.ico b/frontend/deeplab-web/public/favicon.ico
new file mode 100644
index 0000000..32023bb
Binary files /dev/null and b/frontend/deeplab-web/public/favicon.ico differ
diff --git a/frontend/deeplab-web/public/manifest.json b/frontend/deeplab-web/public/manifest.json
new file mode 100644
index 0000000..33bf899
--- /dev/null
+++ b/frontend/deeplab-web/public/manifest.json
@@ -0,0 +1,15 @@
+{
+ "short_name": "Pepper",
+ "name": "Pepper Frontend",
+ "icons": [
+ {
+ "src": "favicon.ico",
+ "sizes": "64x64 32x32 24x24 16x16",
+ "type": "image/x-icon"
+ }
+ ],
+ "start_url": ".",
+ "display": "standalone",
+ "theme_color": "#000000",
+ "background_color": "#ffffff"
+}
diff --git a/frontend/deeplab-web/src/ReactFlow.css b/frontend/deeplab-web/src/ReactFlow.css
new file mode 100644
index 0000000..3f6aa24
--- /dev/null
+++ b/frontend/deeplab-web/src/ReactFlow.css
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+
+/* The circle used to reconnect an edge */
+.react-flow__edgeupdater {
+ stroke-width: 15;
+}
diff --git a/frontend/deeplab-web/src/core/Help.tsx b/frontend/deeplab-web/src/core/Help.tsx
new file mode 100644
index 0000000..99753db
--- /dev/null
+++ b/frontend/deeplab-web/src/core/Help.tsx
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import IconButton from '@mui/material/IconButton';
+import Link from '@mui/material/Link';
+import { emphasize } from '@mui/material/styles';
+import { makeStyles } from 'tss-react/mui';
+import HelpIcon from '@mui/icons-material/Help';
+import { httpOrigin } from '../core/URL';
+
+const useHelpStyle = makeStyles()((theme) => ({
+ onDarkBackground: {
+ '&:hover': {
+ backgroundColor: emphasize(theme.palette.secondary.main, 0.08),
+ },
+ },
+}));
+
+export const Help = () => {
+ const { classes } = useHelpStyle();
+ return (
+
+
+
+
+
+ );
+};
diff --git a/frontend/deeplab-web/src/core/PepperIcon.tsx b/frontend/deeplab-web/src/core/PepperIcon.tsx
new file mode 100644
index 0000000..bd1a752
--- /dev/null
+++ b/frontend/deeplab-web/src/core/PepperIcon.tsx
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import pepperImage from '../icons/pepper-icon.png';
+
+export const PepperIcon = () => {
+ return ;
+};
diff --git a/frontend/deeplab-web/src/core/URL.ts b/frontend/deeplab-web/src/core/URL.ts
new file mode 100644
index 0000000..cfe679c
--- /dev/null
+++ b/frontend/deeplab-web/src/core/URL.ts
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+
+const { VITE_HTTP_SERVER_PORT, VITE_WS_SERVER_PORT } = import.meta.env;
+
+let httpURL = '';
+if (!VITE_HTTP_SERVER_PORT || VITE_HTTP_SERVER_PORT.length === 0) {
+ httpURL = `${window.location.protocol}//${window.location.host}`;
+} else {
+ httpURL = `${window.location.protocol}//${window.location.hostname}:${VITE_HTTP_SERVER_PORT}`;
+}
+export const httpOrigin = httpURL;
+
+let wsURL = '';
+if (!VITE_WS_SERVER_PORT || VITE_WS_SERVER_PORT.length === 0) {
+ let wsProtocol = 'ws:';
+ if ('https:' === window.location.protocol) {
+ wsProtocol = 'wss:';
+ }
+ wsURL = `${wsProtocol}//${window.location.host}`;
+} else {
+ wsURL = `ws://${window.location.hostname}:${VITE_WS_SERVER_PORT}`;
+}
+export const wsOrigin = wsURL;
diff --git a/frontend/deeplab-web/src/fonts.css b/frontend/deeplab-web/src/fonts.css
new file mode 100644
index 0000000..84fa395
--- /dev/null
+++ b/frontend/deeplab-web/src/fonts.css
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+@font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 100;
+ src: url(./fonts/Lato/Lato-Thin.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 100;
+ src: url(./fonts/Lato/Lato-ThinItalic.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 300;
+ src: url(./fonts/Lato/Lato-Light.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 300;
+ src: url(./fonts/Lato/Lato-LightItalic.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 400;
+ src: url(./fonts/Lato/Lato-Regular.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 400;
+ src: url(./fonts/Lato/Lato-Italic.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 700;
+ src: url(./fonts/Lato/Lato-Bold.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 700;
+ src: url(./fonts/Lato/Lato-BoldItalic.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 900;
+ src: url(./fonts/Lato/Lato-Black.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 900;
+ src: url(./fonts/Lato/Lato-BlackItalic.ttf) format('truetype');
+}
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-Black.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-Black.ttf
new file mode 100644
index 0000000..a4a924f
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-Black.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-BlackItalic.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-BlackItalic.ttf
new file mode 100644
index 0000000..d6f8945
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-BlackItalic.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-Bold.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-Bold.ttf
new file mode 100644
index 0000000..b63a14d
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-Bold.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-BoldItalic.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-BoldItalic.ttf
new file mode 100644
index 0000000..8f9a50d
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-BoldItalic.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-Italic.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-Italic.ttf
new file mode 100644
index 0000000..49e9f2c
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-Italic.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-Light.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-Light.ttf
new file mode 100644
index 0000000..9c0a705
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-Light.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-LightItalic.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-LightItalic.ttf
new file mode 100644
index 0000000..53b140b
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-LightItalic.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-Regular.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-Regular.ttf
new file mode 100644
index 0000000..33eba8b
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-Regular.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-Thin.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-Thin.ttf
new file mode 100644
index 0000000..0c599a0
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-Thin.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/Lato-ThinItalic.ttf b/frontend/deeplab-web/src/fonts/Lato/Lato-ThinItalic.ttf
new file mode 100644
index 0000000..7db3a8c
Binary files /dev/null and b/frontend/deeplab-web/src/fonts/Lato/Lato-ThinItalic.ttf differ
diff --git a/frontend/deeplab-web/src/fonts/Lato/OFL.txt b/frontend/deeplab-web/src/fonts/Lato/OFL.txt
new file mode 100644
index 0000000..98383e3
--- /dev/null
+++ b/frontend/deeplab-web/src/fonts/Lato/OFL.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2010-2014 by tyPoland Lukasz Dziedzic (team@latofonts.com) with Reserved Font Name "Lato"
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/frontend/deeplab-web/src/footer/Footer.tsx b/frontend/deeplab-web/src/footer/Footer.tsx
new file mode 100644
index 0000000..3a84afd
--- /dev/null
+++ b/frontend/deeplab-web/src/footer/Footer.tsx
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import Link from '@mui/material/Link';
+import { makeStyles } from 'tss-react/mui';
+import Typography from '@mui/material/Typography';
+
+const useFooterStyles = makeStyles()((theme) => ({
+ footer: {
+ display: 'flex',
+ justifyContent: 'center',
+ margin: theme.spacing(2),
+ '& > *': {
+ marginLeft: theme.spacing(0.5),
+ marginRight: theme.spacing(0.5),
+ },
+ },
+}));
+
+export const Footer = () => {
+ const { classes } = useFooterStyles();
+ return (
+
+ );
+};
diff --git a/frontend/deeplab-web/src/icons/pepper-icon.png b/frontend/deeplab-web/src/icons/pepper-icon.png
new file mode 100644
index 0000000..32023bb
Binary files /dev/null and b/frontend/deeplab-web/src/icons/pepper-icon.png differ
diff --git a/frontend/deeplab-web/src/icons/pepper-icon.svg b/frontend/deeplab-web/src/icons/pepper-icon.svg
new file mode 100644
index 0000000..2514b13
--- /dev/null
+++ b/frontend/deeplab-web/src/icons/pepper-icon.svg
@@ -0,0 +1 @@
+
diff --git a/frontend/deeplab-web/src/index.tsx b/frontend/deeplab-web/src/index.tsx
new file mode 100644
index 0000000..c0f4d43
--- /dev/null
+++ b/frontend/deeplab-web/src/index.tsx
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import { loadDevMessages, loadErrorMessages } from '@apollo/client/dev';
+import { ExtensionRegistry } from '@eclipse-sirius/sirius-components-core';
+import { NodeTypeContribution } from '@eclipse-sirius/sirius-components-diagrams';
+import {
+ DiagramRepresentationConfiguration,
+ NodeTypeRegistry,
+ SiriusWebApplication,
+ navigationBarIconExtensionPoint,
+ footerExtensionPoint,
+ navigationBarMenuIconExtensionPoint,
+} from '@eclipse-sirius/sirius-web-application';
+import { createRoot } from 'react-dom/client';
+import { httpOrigin, wsOrigin } from './core/URL';
+import { EllipseNode } from './nodes/EllipseNode';
+import { EllipseNodeConverter } from './nodes/EllipseNodeConverter';
+import { EllipseNodeLayoutHandler } from './nodes/EllipseNodeLayoutHandler';
+
+import './ReactFlow.css';
+import './fonts.css';
+import './portals.css';
+import './reset.css';
+import './variables.css';
+import { Footer } from './footer/Footer';
+import { Help } from './core/Help';
+import { PepperIcon } from './core/PepperIcon';
+
+if (process.env.NODE_ENV !== 'production') {
+ loadDevMessages();
+ loadErrorMessages();
+}
+
+const extensionRegistry: ExtensionRegistry = new ExtensionRegistry();
+
+const nodeTypeRegistry: NodeTypeRegistry = {
+ nodeLayoutHandlers: [new EllipseNodeLayoutHandler()],
+ nodeConverters: [new EllipseNodeConverter()],
+ nodeTypeContributions: [],
+};
+
+// Help component contribution
+extensionRegistry.addComponent(navigationBarMenuIconExtensionPoint, {
+ identifier: 'pepper-help',
+ Component: () => ,
+});
+
+// Footer contribution
+extensionRegistry.addComponent(footerExtensionPoint, {
+ identifier: 'pepper-footer',
+ Component: Footer,
+});
+
+// Main icon contribution
+extensionRegistry.addComponent(navigationBarIconExtensionPoint, {
+ identifier: 'pepper_navigationbar#icon',
+ Component: PepperIcon,
+});
+
+const container = document.getElementById('root');
+const root = createRoot(container!);
+root.render(
+
+
+
+);
diff --git a/frontend/deeplab-web/src/nodes/EllipseNode.tsx b/frontend/deeplab-web/src/nodes/EllipseNode.tsx
new file mode 100644
index 0000000..359bdaa
--- /dev/null
+++ b/frontend/deeplab-web/src/nodes/EllipseNode.tsx
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+
+import { getCSSColor } from '@eclipse-sirius/sirius-components-core';
+import {
+ ConnectionCreationHandles,
+ ConnectionHandles,
+ ConnectionTargetHandle,
+ DiagramContext,
+ DiagramContextValue,
+ DiagramElementPalette,
+ Label,
+ useConnectorNodeStyle,
+ useDrop,
+ useDropNodeStyle,
+ useRefreshConnectionHandles,
+} from '@eclipse-sirius/sirius-components-diagrams';
+import { Theme, useTheme } from '@mui/material/styles';
+import { Node, NodeProps, NodeResizer } from '@xyflow/react';
+import React, { memo, useContext } from 'react';
+import { EllipseNodeData, NodeComponentsMap } from './EllipseNode.types';
+
+const ellipseNodeStyle = (
+ theme: Theme,
+ style: React.CSSProperties,
+ selected: boolean,
+ hovered: boolean,
+ faded: boolean
+): React.CSSProperties => {
+ const ellipseNodeStyle: React.CSSProperties = {
+ display: 'flex',
+ padding: '8px',
+ width: '100%',
+ height: '100%',
+ borderRadius: '50%',
+ border: 'black solid 1px',
+ opacity: faded ? '0.4' : '',
+ ...style,
+ background: getCSSColor(String(style.background), theme),
+ };
+
+ if (selected || hovered) {
+ ellipseNodeStyle.outline = `${theme.palette.selected} solid 1px`;
+ }
+
+ return ellipseNodeStyle;
+};
+
+const resizeLineStyle = (theme: Theme): React.CSSProperties => {
+ return { borderWidth: theme.spacing(0.15) };
+};
+
+const resizeHandleStyle = (theme: Theme): React.CSSProperties => {
+ return {
+ width: theme.spacing(1),
+ height: theme.spacing(1),
+ borderRadius: '100%',
+ };
+};
+
+export const EllipseNode: NodeComponentsMap['ellipseNode'] = memo(
+ ({ data, id, selected, dragging }: NodeProps>) => {
+ const { readOnly } = useContext(DiagramContext);
+ const theme = useTheme();
+ const { onDrop, onDragOver } = useDrop();
+ const { style: connectionFeedbackStyle } = useConnectorNodeStyle(id, data.nodeDescription.id);
+ const { style: dropFeedbackStyle } = useDropNodeStyle(data.isDropNodeTarget, data.isDropNodeCandidate, dragging);
+
+ const handleOnDrop = (event: React.DragEvent) => {
+ onDrop(event, id);
+ };
+
+ useRefreshConnectionHandles(id, data.connectionHandles);
+
+ return (
+ <>
+ {data.nodeDescription?.userResizable !== 'NONE' && !readOnly ? (
+ !data.isBorderNode}
+ keepAspectRatio={data.nodeDescription?.keepAspectRatio}
+ />
+ ) : null}
+
+ {data.insideLabel ? : null}
+ {!!selected ? (
+
+ ) : null}
+ {!!selected ? : null}
+
+
+
+ >
+ );
+ }
+);
diff --git a/frontend/deeplab-web/src/nodes/EllipseNode.types.ts b/frontend/deeplab-web/src/nodes/EllipseNode.types.ts
new file mode 100644
index 0000000..d4f446b
--- /dev/null
+++ b/frontend/deeplab-web/src/nodes/EllipseNode.types.ts
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import { GQLNodeStyle, NodeData } from '@eclipse-sirius/sirius-components-diagrams';
+import { Node, NodeProps } from '@xyflow/react';
+import { FC } from 'react';
+
+export interface EllipseNodeData extends NodeData {}
+
+export interface GQLEllipseNodeStyle extends GQLNodeStyle {
+ background: string;
+ borderColor: string;
+ borderStyle: string;
+ borderSize: string;
+}
+
+export interface NodeDataMap {
+ ellipseNode: EllipseNodeData;
+}
+export type NodeComponentsMap = {
+ [K in keyof NodeDataMap]: FC>>;
+};
diff --git a/frontend/deeplab-web/src/nodes/EllipseNodeConverter.ts b/frontend/deeplab-web/src/nodes/EllipseNodeConverter.ts
new file mode 100644
index 0000000..64b3ac7
--- /dev/null
+++ b/frontend/deeplab-web/src/nodes/EllipseNodeConverter.ts
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import {
+ BorderNodePosition,
+ ConnectionHandle,
+ GQLDiagram,
+ GQLDiagramDescription,
+ GQLEdge,
+ GQLNode,
+ GQLNodeDescription,
+ GQLNodeLayoutData,
+ GQLNodeStyle,
+ GQLViewModifier,
+ IConvertEngine,
+ INodeConverter,
+ convertHandles,
+ convertInsideLabel,
+ convertLineStyle,
+ convertOutsideLabels,
+ isListLayoutStrategy,
+ defaultHeight,
+ defaultWidth,
+} from '@eclipse-sirius/sirius-components-diagrams';
+import { Node, XYPosition } from '@xyflow/react';
+import { EllipseNodeData, GQLEllipseNodeStyle } from './EllipseNode.types';
+
+const defaultPosition: XYPosition = { x: 0, y: 0 };
+
+const toEllipseNode = (
+ gqlDiagram: GQLDiagram,
+ gqlNode: GQLNode,
+ gqlParentNode: GQLNode | null,
+ nodeDescription: GQLNodeDescription | undefined,
+ isBorderNode: boolean,
+ gqlEdges: GQLEdge[]
+): Node => {
+ const {
+ targetObjectId,
+ targetObjectLabel,
+ targetObjectKind,
+ descriptionId,
+ id,
+ insideLabel,
+ outsideLabels,
+ state,
+ pinned,
+ style,
+ labelEditable,
+ } = gqlNode;
+
+ const connectionHandles: ConnectionHandle[] = convertHandles(gqlNode, gqlEdges);
+ const gqlNodeLayoutData: GQLNodeLayoutData | undefined = gqlDiagram.layoutData.nodeLayoutData.find(
+ (nodeLayoutData) => nodeLayoutData.id === id
+ );
+ const isNew = gqlNodeLayoutData === undefined;
+ const resizedByUser = gqlNodeLayoutData?.resizedByUser ?? false;
+
+ const data: EllipseNodeData = {
+ targetObjectId,
+ targetObjectLabel,
+ targetObjectKind,
+ descriptionId,
+ style: {
+ display: 'flex',
+ background: style.background,
+ borderColor: style.borderColor,
+ borderWidth: style.borderSize,
+ borderStyle: convertLineStyle(style.borderStyle),
+ },
+ insideLabel: null,
+ outsideLabels: convertOutsideLabels(outsideLabels),
+ faded: state === GQLViewModifier.Faded,
+ pinned,
+ isBorderNode: isBorderNode,
+ nodeDescription,
+ defaultWidth: gqlNode.defaultWidth,
+ defaultHeight: gqlNode.defaultHeight,
+ borderNodePosition: isBorderNode ? BorderNodePosition.EAST : null,
+ connectionHandles,
+ labelEditable,
+ isNew,
+ resizedByUser,
+ isListChild: isListLayoutStrategy(gqlParentNode?.childrenLayoutStrategy),
+ isDropNodeTarget: false,
+ isDropNodeCandidate: false,
+ isHovered: false,
+ };
+
+ data.insideLabel = convertInsideLabel(
+ insideLabel,
+ data,
+ `${style.borderSize}px ${style.borderStyle} ${style.borderColor}`
+ );
+
+ const node: Node = {
+ id,
+ type: 'ellipseNode',
+ data,
+ position: defaultPosition,
+ hidden: gqlNode.state === GQLViewModifier.Hidden,
+ };
+
+ if (gqlParentNode) {
+ node.parentId = gqlParentNode.id;
+ }
+
+ const nodeLayoutData = gqlDiagram.layoutData.nodeLayoutData.filter((data) => data.id === id)[0];
+ if (nodeLayoutData) {
+ const {
+ position,
+ size: { height, width },
+ } = nodeLayoutData;
+ node.position = position;
+ node.height = height;
+ node.width = width;
+ node.style = {
+ ...node.style,
+ width: `${node.width}px`,
+ height: `${node.height}px`,
+ };
+ } else {
+ node.height = data.defaultHeight ?? defaultHeight;
+ node.width = data.defaultWidth ?? defaultWidth;
+ }
+
+ return node;
+};
+
+export class EllipseNodeConverter implements INodeConverter {
+ canHandle(gqlNode: GQLNode) {
+ return gqlNode.style.__typename === 'EllipseNodeStyle';
+ }
+
+ handle(
+ convertEngine: IConvertEngine,
+ gqlDiagram: GQLDiagram,
+ gqlNode: GQLNode,
+ gqlEdges: GQLEdge[],
+ parentNode: GQLNode | null,
+ isBorderNode: boolean,
+ nodes: Node[],
+ diagramDescription: GQLDiagramDescription,
+ nodeDescriptions: GQLNodeDescription[]
+ ) {
+ const nodeDescription = nodeDescriptions.find((description) => description.id === gqlNode.descriptionId);
+ nodes.push(toEllipseNode(gqlDiagram, gqlNode, parentNode, nodeDescription, isBorderNode, gqlEdges));
+
+ const borderNodeDescriptions: GQLNodeDescription[] = (nodeDescription?.borderNodeDescriptionIds ?? []).flatMap(
+ (nodeDescriptionId) =>
+ diagramDescription.nodeDescriptions.filter((nodeDescription) => nodeDescription.id === nodeDescriptionId)
+ );
+ const childNodeDescriptions: GQLNodeDescription[] = (nodeDescription?.childNodeDescriptionIds ?? []).flatMap(
+ (nodeDescriptionId) =>
+ diagramDescription.nodeDescriptions.filter((nodeDescription) => nodeDescription.id === nodeDescriptionId)
+ );
+
+ convertEngine.convertNodes(
+ gqlDiagram,
+ gqlNode.borderNodes ?? [],
+ gqlNode,
+ nodes,
+ diagramDescription,
+ borderNodeDescriptions
+ );
+ convertEngine.convertNodes(
+ gqlDiagram,
+ gqlNode.childNodes ?? [],
+ gqlNode,
+ nodes,
+ diagramDescription,
+ childNodeDescriptions
+ );
+ }
+}
diff --git a/frontend/deeplab-web/src/nodes/EllipseNodeLayoutHandler.ts b/frontend/deeplab-web/src/nodes/EllipseNodeLayoutHandler.ts
new file mode 100644
index 0000000..0f078f4
--- /dev/null
+++ b/frontend/deeplab-web/src/nodes/EllipseNodeLayoutHandler.ts
@@ -0,0 +1,277 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+import {
+ Diagram,
+ DiagramNodeType,
+ ForcedDimensions,
+ ILayoutEngine,
+ INodeLayoutHandler,
+ NodeData,
+ applyRatioOnNewNodeSizeValue,
+ computeNodesBox,
+ computePreviousPosition,
+ computePreviousSize,
+ findNodeIndex,
+ getBorderNodeExtent,
+ getChildNodePosition,
+ getDefaultOrMinHeight,
+ getDefaultOrMinWidth,
+ getEastBorderNodeFootprintHeight,
+ getHeaderHeightFootprint,
+ getInsideLabelWidthConstraint,
+ getNorthBorderNodeFootprintWidth,
+ getSouthBorderNodeFootprintWidth,
+ getWestBorderNodeFootprintHeight,
+ setBorderNodesPosition,
+} from '@eclipse-sirius/sirius-components-diagrams';
+import { Dimensions, Node, Position, XYPosition } from '@xyflow/react';
+import { NodeHandle } from '@xyflow/system';
+
+const borderNodeOffset = 5;
+
+const findBorderNodePosition = (borderNodePosition: XYPosition | undefined, parentNode: Node | undefined): number => {
+ if (borderNodePosition && parentNode?.width && parentNode.height) {
+ if (borderNodePosition.y < parentNode.height / 2) {
+ return borderNodePosition.x < parentNode.width / 2 ? 0 : 1;
+ } else {
+ return borderNodePosition.x < parentNode.width / 2 ? 2 : 3;
+ }
+ }
+ return null;
+};
+
+export class EllipseNodeLayoutHandler implements INodeLayoutHandler {
+ canHandle(node: Node) {
+ return node.type === 'ellipseNode';
+ }
+
+ handle(
+ layoutEngine: ILayoutEngine,
+ previousDiagram: Diagram | null,
+ node: Node,
+ visibleNodes: Node[],
+ directChildren: Node[],
+ newlyAddedNode: Node | undefined,
+ forceDimensions?: ForcedDimensions
+ ) {
+ layoutEngine.layoutNodes(previousDiagram, visibleNodes, directChildren, newlyAddedNode);
+
+ const nodeIndex = findNodeIndex(visibleNodes, node.id);
+ const nodeElement = document.getElementById(`${node.id}-ellipseNode-${nodeIndex}`)?.children[0];
+ const borderWidth = nodeElement ? parseFloat(window.getComputedStyle(nodeElement).borderWidth) : 0;
+ const labelElement = document.getElementById(`${node.id}-label-${nodeIndex}`);
+
+ const borderNodes = directChildren.filter((node) => node.data.isBorderNode);
+ const directNodesChildren = directChildren.filter((child) => !child.data.isBorderNode);
+
+ // Update children position to be under the label and at the right padding.
+ directNodesChildren.forEach((child, index) => {
+ const previousNode = (previousDiagram?.nodes ?? []).find((previouseNode) => previouseNode.id === child.id);
+ const previousPosition = computePreviousPosition(previousNode, child);
+ const createdNode = newlyAddedNode?.id === child.id ? newlyAddedNode : undefined;
+ const headerHeightFootprint = labelElement ? getHeaderHeightFootprint(labelElement, null, null) : 0;
+
+ if (!!createdNode) {
+ child.position = createdNode.position;
+ if (child.position.y < borderWidth + headerHeightFootprint) {
+ child.position = { ...child.position, y: borderWidth + headerHeightFootprint };
+ }
+ } else if (previousPosition) {
+ child.position = previousPosition;
+ if (child.position.y < borderWidth + headerHeightFootprint) {
+ child.position = { ...child.position, y: borderWidth + headerHeightFootprint };
+ }
+ if (child.position.x < borderWidth) {
+ child.position = { ...child.position, x: borderWidth };
+ }
+ } else {
+ child.position = child.position = getChildNodePosition(visibleNodes, child, headerHeightFootprint, borderWidth);
+ const previousSibling = directNodesChildren[index - 1];
+ if (previousSibling) {
+ child.position = getChildNodePosition(
+ visibleNodes,
+ child,
+ headerHeightFootprint,
+ borderWidth,
+ previousSibling
+ );
+ }
+ }
+ });
+
+ // Update node to layout size
+ // WARN: We suppose label are always on top of children (that wrong)
+ const childrenContentBox = computeNodesBox(visibleNodes, directNodesChildren); // WARN: The current content box algorithm does not take the margin of direct children (it should)
+ const directChildrenAwareNodeWidth = childrenContentBox.x + childrenContentBox.width;
+ const northBorderNodeFootprintWidth = getNorthBorderNodeFootprintWidth(visibleNodes, borderNodes, previousDiagram);
+ const southBorderNodeFootprintWidth = getSouthBorderNodeFootprintWidth(visibleNodes, borderNodes, previousDiagram);
+ const labelOnlyWidth = getInsideLabelWidthConstraint(node.data.insideLabel, labelElement);
+
+ const nodeMinComputeWidth =
+ Math.max(
+ directChildrenAwareNodeWidth,
+ labelOnlyWidth,
+ northBorderNodeFootprintWidth,
+ southBorderNodeFootprintWidth
+ ) +
+ borderWidth * 2;
+
+ // WARN: the label is not used for the height because children are already position under the label
+ const directChildrenAwareNodeHeight = childrenContentBox.y + childrenContentBox.height;
+ const eastBorderNodeFootprintHeight = getEastBorderNodeFootprintHeight(visibleNodes, borderNodes, previousDiagram);
+ const westBorderNodeFootprintHeight = getWestBorderNodeFootprintHeight(visibleNodes, borderNodes, previousDiagram);
+
+ const nodeMinComputeHeight =
+ Math.max(directChildrenAwareNodeHeight, eastBorderNodeFootprintHeight, westBorderNodeFootprintHeight) +
+ borderWidth * 2;
+
+ const nodeWith = forceDimensions?.width ?? getDefaultOrMinWidth(nodeMinComputeWidth, node);
+ const nodeHeight = getDefaultOrMinHeight(nodeMinComputeHeight, node);
+
+ const previousNode = (previousDiagram?.nodes ?? []).find((previouseNode) => previouseNode.id === node.id);
+ const previousDimensions = computePreviousSize(previousNode, node);
+ if (node.data.resizedByUser) {
+ if (nodeMinComputeWidth > previousDimensions.width) {
+ node.width = nodeMinComputeWidth;
+ } else {
+ node.width = previousDimensions.width;
+ }
+ if (nodeMinComputeHeight > previousDimensions.height) {
+ node.height = nodeMinComputeHeight;
+ } else {
+ node.height = previousDimensions.height;
+ }
+ } else {
+ node.width = nodeWith;
+ node.height = nodeHeight;
+ }
+
+ if (node.data.nodeDescription?.keepAspectRatio) {
+ applyRatioOnNewNodeSizeValue(node);
+ }
+
+ // Update border nodes positions
+ borderNodes.forEach((borderNode) => {
+ borderNode.extent = getBorderNodeExtent(node, borderNode);
+ });
+ setBorderNodesPosition(borderNodes, node, previousDiagram, this.calculateCustomNodeBorderNodePosition);
+ }
+
+ calculateCustomNodeEdgeHandlePosition(
+ node: Node,
+ handlePosition: Position,
+ handle: NodeHandle
+ ): XYPosition {
+ let offsetX = handle.width / 2;
+ let offsetY = handle.height / 2;
+ const nodeWidth: number = node.width ?? 0;
+ const nodeHeight: number = node.height ?? 0;
+ const a: number = nodeWidth / 2;
+ const b: number = nodeHeight / 2;
+
+ let realY: number = handle.y;
+ let realX: number = handle.x;
+ switch (handlePosition) {
+ case Position.Left:
+ realX = Math.sqrt((1 - Math.pow(handle.y + offsetY - b, 2) / Math.pow(b, 2)) * Math.pow(a, 2)) + a;
+ realX = nodeWidth - realX;
+ break;
+ case Position.Right:
+ realX = Math.sqrt((1 - Math.pow(handle.y + offsetY - b, 2) / Math.pow(b, 2)) * Math.pow(a, 2)) + a;
+ offsetX = -offsetX;
+ break;
+ case Position.Top:
+ realY = Math.sqrt((1 - Math.pow(handle.x + offsetX - a, 2) / Math.pow(a, 2)) * Math.pow(b, 2)) + b;
+ realY = nodeHeight - realY;
+ break;
+ case Position.Bottom:
+ realY = Math.sqrt((1 - Math.pow(handle.x + offsetX - a, 2) / Math.pow(a, 2)) * Math.pow(b, 2)) + b;
+ offsetY = -offsetY;
+ break;
+ }
+
+ return {
+ x: realX + offsetX,
+ y: realY + offsetY,
+ };
+ }
+
+ calculateCustomNodeBorderNodePosition(
+ parentNode: Node,
+ borderNode: XYPosition & Dimensions,
+ isDragging: boolean
+ ): XYPosition {
+ let offsetX: number = 0;
+ let offsetY: number = 0;
+ const parentNodeWidth: number = parentNode.width ?? 0;
+ const parentNodeHeight: number = parentNode.height ?? 0;
+ const a: number = parentNodeWidth / 2;
+ const b: number = parentNodeHeight / 2;
+ const pos: number = findBorderNodePosition(borderNode, parentNode);
+ let realY: number = borderNode.y;
+ let realX: number;
+ if (borderNode.x < 0) {
+ return {
+ x: -borderNode.width + borderNodeOffset,
+ y: b - borderNode.height / 2,
+ };
+ } else if (borderNode.x >= parentNodeWidth - borderNodeOffset) {
+ return {
+ x: parentNodeWidth - borderNodeOffset,
+ y: b - borderNode.height / 2,
+ };
+ } else {
+ realX = borderNode.x;
+ }
+ if (!isDragging) {
+ switch (pos) {
+ case 0:
+ case 2:
+ realX += borderNode.width;
+ break;
+ default:
+ break;
+ }
+ }
+ switch (pos) {
+ case 0:
+ realY = Math.sqrt((1 - Math.pow(realX - a, 2) / Math.pow(a, 2)) * Math.pow(b, 2)) + b;
+ realY = parentNodeHeight - realY;
+ offsetY = -borderNode.height + borderNodeOffset;
+ offsetX = -borderNode.width;
+ break;
+ case 1:
+ realY = Math.sqrt((1 - Math.pow(realX - a, 2) / Math.pow(a, 2)) * Math.pow(b, 2)) + b;
+ realY = parentNodeHeight - realY;
+ offsetY = -borderNode.height + borderNodeOffset;
+ break;
+ case 2:
+ realY = Math.sqrt((1 - Math.pow(realX - a, 2) / Math.pow(a, 2)) * Math.pow(b, 2)) + b;
+ offsetY = -borderNodeOffset;
+ offsetX = -borderNode.width;
+ break;
+ case 3:
+ realY = Math.sqrt((1 - Math.pow(realX - a, 2) / Math.pow(a, 2)) * Math.pow(b, 2)) + b;
+ offsetY = -borderNodeOffset;
+ break;
+ }
+ if (isNaN(realY)) {
+ realY = b;
+ }
+
+ return {
+ x: realX + offsetX,
+ y: realY + offsetY,
+ };
+ }
+}
diff --git a/frontend/deeplab-web/src/portals.css b/frontend/deeplab-web/src/portals.css
new file mode 100644
index 0000000..7d58518
--- /dev/null
+++ b/frontend/deeplab-web/src/portals.css
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2024 CEA LIST.
+ * 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+
+.react-grid-item.react-grid-placeholder {
+ background: #be1a78;
+}
diff --git a/frontend/deeplab-web/src/react-app-env.d.ts b/frontend/deeplab-web/src/react-app-env.d.ts
new file mode 100644
index 0000000..6431bc5
--- /dev/null
+++ b/frontend/deeplab-web/src/react-app-env.d.ts
@@ -0,0 +1 @@
+///