/* * File : ActivitySequenceElement.java * Created : 19-dec-2000 16:18 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ package edu.xtec.jclic.bags; import edu.xtec.jclic.Constants; import edu.xtec.jclic.edit.Editable; import edu.xtec.jclic.edit.Editor; import edu.xtec.jclic.fileSystem.FileSystem; import edu.xtec.util.Domable; import edu.xtec.util.JDomUtility; import java.util.Iterator; import java.util.Map; /** * This class defines a specific point into a JClic sequence of activities: * what activity must run at this point, what to do or where to jump when the activity * finishes, the behavior of the "next" and "prev" buttons, etc. It can also have a "tag", * used to refer to this point of the sequence with a unique name. <CODE>ActivitySequenceElements</CODE> * are always stored into {@link edu.xtec.jclic.bags.ActivitySequence} objects. * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.09.10 */ public class ActivitySequenceElement extends Object implements Editable, Domable, Cloneable { private String tag; private String description; private String activityName; public ActivitySequenceJump fwdJump; public ActivitySequenceJump backJump; public int navButtons; public int delay; /** Creates new ActivitySequenceElement */ public ActivitySequenceElement(String activityName){ this(activityName, false); } public ActivitySequenceElement(String activityName, boolean singleActivity){ this(activityName, 0, NAV_BOTH); if(singleActivity){ setTag(getActivityName()); fwdJump=new ActivitySequenceJump(JumpInfo.STOP); backJump=new ActivitySequenceJump(JumpInfo.RETURN); } } public ActivitySequenceElement(String activityName, int delay, int navButtons){ setActivityName(activityName); this.delay=delay; tag=null; description=null; fwdJump=null; backJump=null; this.navButtons=navButtons; } public static final String ELEMENT_NAME="item", NAME="name", ID="id", DESCRIPTION="description", DELAY="delay", FORWARD="forward", BACK="back", NAV_BUTTONS="navButtons"; public static final int NAV_NONE=0, NAV_FWD=1, NAV_BACK=2, NAV_BOTH=3; public static final String [] NAV_BUTTONS_TAG={"none", "fwd", "back", "both"}; public org.jdom.Element getJDomElement(){ org.jdom.Element e=new org.jdom.Element(ELEMENT_NAME); if(tag!=null){ e.setAttribute(ID, tag); if(description!=null) JDomUtility.addParagraphs(e, DESCRIPTION, description); } e.setAttribute(NAME, activityName); if(delay!=0) e.setAttribute(DELAY, Integer.toString(delay)); if(fwdJump!=null) e.addContent(fwdJump.getJDomElement(FORWARD)); if(backJump!=null) e.addContent(backJump.getJDomElement(BACK)); if(navButtons!=NAV_BOTH) e.setAttribute(NAV_BUTTONS, NAV_BUTTONS_TAG[navButtons]); return e; } public static ActivitySequenceElement getActivitySequenceElement(org.jdom.Element e) throws Exception{ JDomUtility.checkName(e, ELEMENT_NAME); ActivitySequenceElement ase=new ActivitySequenceElement("", 0, NAV_BOTH); ase.setProperties(e, null); return ase; } public void setProperties(org.jdom.Element e, Object aux) throws Exception{ JDomUtility.checkName(e, ELEMENT_NAME); org.jdom.Element child; setActivityName(e.getAttributeValue(NAME)); delay=JDomUtility.getIntAttr(e, DELAY, 0); setTag(JDomUtility.getStringAttr(e, ID, tag, false)); description=JDomUtility.getParagraphs(e.getChild(DESCRIPTION)); Iterator it=e.getChildren(ActivitySequenceJump.ELEMENT_NAME).iterator(); while(it.hasNext()){ child=(org.jdom.Element)it.next(); String id=child.getAttributeValue(ActivitySequenceJump.ID); ActivitySequenceJump asj=ActivitySequenceJump.getActivitySequenceJump(child); if(FORWARD.equals(id)) fwdJump=asj; else if(BACK.equals(id)) backJump=asj; } navButtons=JDomUtility.getStrIndexAttr(e, NAV_BUTTONS, NAV_BUTTONS_TAG, NAV_BOTH); } public void setTag(String newTag){ tag=FileSystem.stdFn(newTag); } public void setDescription(String description){ this.description=description; } public String getTag() { return tag; } public String getDescription(){ return description; } public void setActivityName(String sActivityName){ activityName=FileSystem.stdFn(sActivityName); } public String getActivityName(){ return activityName; } public void listReferences(String type, Map<String, String> map) { if(activityName!=null && (type==null || type.equals(Constants.ACTIVITY_OBJECT))) map.put(activityName, Constants.ACTIVITY_OBJECT); if(tag!=null && (type==null || type.equals(Constants.SEQUENCE_OBJECT))) map.put(tag, Constants.SEQUENCE_OBJECT); if(backJump!=null) backJump.listReferences(type, map); if(fwdJump!=null) fwdJump.listReferences(type, map); } public Editor getEditor(Editor parent) { return Editor.createEditor(getClass().getName()+"Editor", this, parent); } @Override public Object clone() throws CloneNotSupportedException { ActivitySequenceElement result=(ActivitySequenceElement)super.clone(); if(fwdJump!=null) result.fwdJump=(ActivitySequenceJump)fwdJump.clone(); if(backJump!=null) result.backJump=(ActivitySequenceJump)backJump.clone(); return result; } }