Ejemplo n.º 1
0
        public void ApplyDefaultChapterSequencing()
        {
            var seq = new Sequencing();

            SequencingPatternManager.ApplyDefaultChapterSequencing(seq);

            Assert.AreEqual(seq.ControlMode.Flow, true);
            Assert.AreEqual(seq.ControlMode.Choice, true);
        }
Ejemplo n.º 2
0
        public void ApplyRandomSetSequencingPattern()
        {
            var       seq   = new Sequencing();
            const int count = 10;

            SequencingPatternManager.ApplyRandomSetSequencingPattern(seq, count);

            Assert.AreEqual(seq.RandomizationControls.ReorderChildren, true);
            Assert.AreEqual(seq.RandomizationControls.SelectionTiming, Timing.Once);
            Assert.AreEqual(seq.RandomizationControls.SelectCount, count);
        }
Ejemplo n.º 3
0
        public void ApplyControlChapterSequencing()
        {
            var seq = new Sequencing();

            SequencingPatternManager.ApplyControlChapterSequencing(seq);

            Assert.AreEqual(seq.ControlMode.Choice, false);
            Assert.AreEqual(seq.ControlMode.Flow, true);
            Assert.AreEqual(seq.ControlMode.ForwardOnly, true);
            Assert.AreEqual(seq.ControlMode.ChoiceExit, false);
            Assert.AreEqual(seq.LimitConditions.AttemptLimit, 1);
        }
Ejemplo n.º 4
0
        public virtual void Parse(int courseId)
        {
            var db     = this.GetDbContext();
            var course = db.Courses.Single(c => c.Id == courseId);

            if (!course.Locked.Value)
            {
                return;
            }

            var coursePath     = this.GetCoursePath(course.Id);
            var courseTempPath = this.GetCourseTempPath(course.Id);
            var manifestPath   = Path.Combine(courseTempPath, SCORM.ImsManifset);

            Zipper.ExtractZipFile(coursePath + ".zip", courseTempPath);

            var manifest = Manifest.Deserialize(manifestPath);

            var importer = new Importer(manifest, course, this);

            importer.Import();

            // QUICK FIX for importing images
            var imagesPath = Path.Combine(courseTempPath, "Node");

            if (Directory.Exists(imagesPath))
            {
                FileHelper.DirectoryCopy(imagesPath, Path.Combine(coursePath, "Node"));
            }

            // QUICK FIX for "Row not found or changed." exception
            db            = this.GetDbContext();
            course        = db.Courses.Single(c => c.Id == courseId);
            course.Locked = false;

            var xml = new XmlSerializer(typeof(Sequencing));

            // try to apply sequencing from imported course
            try
            {
                var sequencing = manifest.SequencingCollection.Sequencings[0];
                course.Sequencing = xml.SerializeToXElemet(sequencing);
            }
            catch (Exception) // apply default sequencing if any errors occured
            {
                var sequencing = new Sequencing();
                sequencing        = SequencingPatternManager.ApplyDefaultChapterSequencing(sequencing);
                course.Sequencing = xml.SerializeToXElemet(sequencing);
            }

            db.SubmitChanges();
        }
Ejemplo n.º 5
0
        private void ApplyDefaultPattern(Course course)
        {
            var xml = new XmlSerializer(typeof(Sequencing));

            var xelement = course.Sequencing;

            var sequencing = xelement == null ? new Sequencing() : (Sequencing)xml.DeserializeXElement(xelement);


            sequencing = SequencingPatternManager.ApplyDefaultChapterSequencing(sequencing);

            course.Sequencing = xml.SerializeToXElemet(sequencing);
            this.storage.UpdateCourse(course.Id, course);
        }
Ejemplo n.º 6
0
        public JsonResult ApplyPattern(int id, SequencingPattern pattern, int data)
        {
            var node = this.storage.GetNode(id);
            var xml  = new XmlSerializer(typeof(Sequencing));

            var xelement = id == 0 ? this.currentCourse.Sequencing : node.Sequencing;

            var sequencing = xelement == null ? new Sequencing() : (Sequencing)xml.DeserializeXElement(xelement);

            switch (pattern)
            {
            case SequencingPattern.ControlChapterSequencingPattern:
                sequencing = SequencingPatternManager.ApplyControlChapterSequencing(sequencing);
                break;

            case SequencingPattern.RandomSetSequencingPattern:
                sequencing = SequencingPatternManager.ApplyRandomSetSequencingPattern(sequencing, data);
                break;

            case SequencingPattern.OrganizationDefaultSequencingPattern:
                sequencing = SequencingPatternManager.ApplyDefaultChapterSequencing(sequencing);
                break;
            }

            if (id == 0)
            {
                this.currentCourse.Sequencing = xml.SerializeToXElemet(sequencing);
                this.storage.UpdateCourse(this.currentCourse.Id, this.currentCourse);

                // logic to update all nodes sequencing
                var courseNodes = this.storage.GetAllNodes(this.currentCourse.Id);
                foreach (var courseNode in courseNodes)
                {
                    courseNode.Sequencing = xml.SerializeToXElemet(sequencing);
                    this.storage.UpdateNode(courseNode.Id, courseNode);
                }
            }
            else
            {
                node.Sequencing = xml.SerializeToXElemet(sequencing);
                this.storage.UpdateNode(id, node);
            }

            return(Json(new { status = true }));
        }
Ejemplo n.º 7
0
        public void ApplyPatternTest([Values(SequencingPattern.ControlChapterSequencingPattern,
                                             SequencingPattern.RandomSetSequencingPattern,
                                             SequencingPattern.OrganizationDefaultSequencingPattern)]
                                     SequencingPattern pattern)
        {
            try
            {
                // create new node with name "SomeNode", id=ID, courseId=1, and add it to storage
                this.createNode();
                // get node with id = ID
                var node = this.Storage.GetNode(ID);
                // create new xml serializer
                var xml = new XmlSerializer(typeof(Sequencing));
                // get Sequencing from node with id = ID
                var xelement = this.Storage.GetNode(ID).Sequencing;
                // deserialize sequencing from xelement
                var sequencing = xelement == null ? new Sequencing() : (Sequencing)xml.DeserializeXElement(xelement);
                // for different patterns type apply different patterns
                switch (pattern)
                {
                case SequencingPattern.ControlChapterSequencingPattern:
                    sequencing = SequencingPatternManager.ApplyControlChapterSequencing(sequencing);
                    break;

                case SequencingPattern.RandomSetSequencingPattern:
                    sequencing = SequencingPatternManager.ApplyRandomSetSequencingPattern(sequencing, 1);
                    break;

                case SequencingPattern.OrganizationDefaultSequencingPattern:
                    sequencing = SequencingPatternManager.ApplyDefaultChapterSequencing(sequencing);
                    break;
                }
                // serialize sequencing
                node.Sequencing = xml.SerializeToXElemet(sequencing);
                // try update node
                this.Storage.UpdateNode(ID, node);
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }
Ejemplo n.º 8
0
        public JsonResult ApplyPattern(int id, SequencingPattern pattern, int data)
        {
            var node = _Storage.GetNode(id);
            var xml  = new XmlSerializer(typeof(Sequencing));

            var xelement = id == 0 ? _CurrentCourse.Sequencing : node.Sequencing;

            var sequencing = xelement == null ? new Sequencing() : (Sequencing)xml.Deserialize(new StringReader(xelement));

            switch (pattern)
            {
            case SequencingPattern.ControlChapterSequencingPattern:
                sequencing = SequencingPatternManager.ApplyControlChapterSequencing(sequencing);
                break;

            case SequencingPattern.RandomSetSequencingPattern:
                sequencing = SequencingPatternManager.ApplyRandomSetSequencingPattern(sequencing, data);
                break;

            case SequencingPattern.OrganizationDefaultSequencingPattern:
                sequencing = SequencingPatternManager.ApplyDefaultChapterSequencing(sequencing);
                break;
            }

            var sw = new StringWriter();

            if (id == 0)
            {
                xml.Serialize(sw, sequencing);
                _CurrentCourse.Sequencing = sw.ToString();
                _Storage.UpdateCourse(_CurrentCourse.Id, _CurrentCourse);
            }
            else
            {
                xml.Serialize(sw, sequencing);
                node.Sequencing = sw.ToString();
                _Storage.UpdateNode(id, node);
            }

            return(Json(new { status = true }));
        }