Bug 565945: load default skills from EMF storage
Change-Id: I38cbcac71550d50aa3bb263c03f648013d281292
diff --git a/plugins/org.eclipse.skills/plugin.xml b/plugins/org.eclipse.skills/plugin.xml
index 105b1fa..8abfc0c 100644
--- a/plugins/org.eclipse.skills/plugin.xml
+++ b/plugins/org.eclipse.skills/plugin.xml
@@ -29,12 +29,6 @@
class="org.eclipse.skills.startup.SkillsLauncher">
</startup>
</extension>
- <extension
- point="org.eclipse.skills.quest">
- <resource
- URI="resources/default.skills">
- </resource>
- </extension>
<extension
point="org.eclipse.ui.views">
diff --git a/plugins/org.eclipse.skills/resources/default.skills b/plugins/org.eclipse.skills/resources/default.skills
index e0a296f..66df940 100644
--- a/plugins/org.eclipse.skills/resources/default.skills
+++ b/plugins/org.eclipse.skills/resources/default.skills
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<skills:Quest xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:skills="http://eclipse.org/skills/1.0.0" title="Default User Skills">
- <skills name="Dextery">
+ <skills name="Dextery" baseSkill="true">
<description text="Your ability to use the application in an efficient way."/>
<progression xsi:type="skills:FactorProgression"/>
</skills>
- <skills name="Strength">
+ <skills name="Strength" baseSkill="true">
<description text="Your ability to accomplish complex tasks."/>
<progression xsi:type="skills:FactorProgression"/>
</skills>
- <skills name="Wisdom">
+ <skills name="Wisdom" baseSkill="true">
<description text="Your knowledge about features of the application."/>
<progression xsi:type="skills:FactorProgression"/>
</skills>
diff --git a/plugins/org.eclipse.skills/src/org/eclipse/skills/service/UserFactory.java b/plugins/org.eclipse.skills/src/org/eclipse/skills/service/UserFactory.java
index 3280787..1191129 100644
--- a/plugins/org.eclipse.skills/src/org/eclipse/skills/service/UserFactory.java
+++ b/plugins/org.eclipse.skills/src/org/eclipse/skills/service/UserFactory.java
@@ -13,17 +13,44 @@
package org.eclipse.skills.service;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.skills.model.IDescription;
+import org.eclipse.skills.model.IQuest;
import org.eclipse.skills.model.ISkill;
import org.eclipse.skills.model.ISkillsFactory;
+import org.eclipse.skills.model.ISkillsPackage;
import org.eclipse.skills.model.IUser;
public class UserFactory {
- private static ISkill createSkill(String name) {
- final ISkill experience = ISkillsFactory.eINSTANCE.createSkill();
- experience.setName(name);
+ private static List<ISkill> getGeneratedDefaultSkills() {
+ final List<ISkill> skills = new ArrayList<>();
+ skills.add(createSkill("Dextery"));
+ skills.add(createSkill("Strength"));
+ skills.add(createSkill("Wisdom"));
- return experience;
+ return skills;
+ }
+
+ private static ISkill createSkill(String name) {
+ final IDescription description = ISkillsFactory.eINSTANCE.createDescription();
+ description.setText("<description missing>");
+
+ final ISkill skill = ISkillsFactory.eINSTANCE.createSkill();
+ skill.setName(name);
+ skill.setDescription(description);
+
+ return skill;
}
private static String capitalizeFirstLetter(String word) {
@@ -39,11 +66,29 @@
user.setName(capitalizeFirstLetter(System.getProperty("user.name")));
user.setExperience(createSkill("Experience"));
+ user.getExperience().getDescription().setText("Your overall progress");
- user.getSkills().add(createSkill("Dextery"));
- user.getSkills().add(createSkill("Strength"));
- user.getSkills().add(createSkill("Wisdom"));
+ for (final ISkill skill : getDefaultSkills())
+ user.getSkills().add(EcoreUtil.copy(skill));
return user;
}
+
+ private List<ISkill> getDefaultSkills() {
+ // initialize the model
+ ISkillsPackage.eINSTANCE.eClass();
+
+ final Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
+ final Map<String, Object> extensionsMap = reg.getExtensionToFactoryMap();
+ extensionsMap.put("skills", new XMIResourceFactoryImpl());
+
+ final ResourceSet resourceSet = new ResourceSetImpl();
+ final Resource resource = resourceSet.getResource(URI.createURI("platform:/plugin/org.eclipse.skills/resources/default.skills"), true);
+
+ final EObject root = resource.getContents().get(0);
+ if (root instanceof IQuest)
+ return ((IQuest) root).getSkills();
+
+ return getGeneratedDefaultSkills();
+ }
}
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserFactoryTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserFactoryTest.java
index 355968d..5fe78c1 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserFactoryTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserFactoryTest.java
@@ -19,6 +19,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import org.eclipse.skills.model.ISkill;
import org.eclipse.skills.model.IUser;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -65,4 +66,24 @@
assertNotNull(user.getSkill("Dextery"));
assertNotNull(user.getSkill("Wisdom"));
}
+
+ @Test
+ @DisplayName("default skills have a description")
+ public void defaultSkillsHaveDescription() {
+ final IUser user = new UserFactory().createUser();
+
+ assertFalse(user.getExperience().getDescription().getText().isEmpty());
+
+ for (final ISkill skill : user.getSkills())
+ assertFalse(skill.getDescription().getText().isEmpty());
+ }
+
+ @Test
+ @DisplayName("default skills have 0 XP")
+ public void defaultSkillsHave0XP() {
+ final IUser user = new UserFactory().createUser();
+
+ for (final ISkill skill : user.getSkills())
+ assertEquals(0, skill.getExperience());
+ }
}