⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atutorapiadapterapplet.java

📁 是一个教学内容管理系统
💻 JAVA
字号:
/* * SCORM-1.2 API-Adapter Java Applet for ATutor * Copyright (c) Matthai Kurian * * Made for ATutor, the same license terms as for ATutor itself apply. * * This Applet handles communication between ATutor and SCORM-1.2 * Sharable Content Objects (SCOs). Most communication is via Liveconnect. * CMI (Computer Managed Instruction) data is sent to ATutor through http POST * to an ATutor server side PHP script. SCORM-1.2 runtime behavior and CMI * datamodel management is done by the PfPLMS SCORM-1.2 API-Adapter Core.  */import java.util.Hashtable;import java.util.Enumeration;import java.net.*;import java.io.*;public	class ATutorApiAdapterApplet	extends java.applet.Applet	implements ch.ethz.pfplms.scorm.api.ApiAdapterInterface{	private	ch.ethz.pfplms.scorm.api.ApiAdapter core;	private Hashtable ATutorScoCmi  = new Hashtable();	private String  ATutorStudentId;	private String  ATutorStudentName;	private String  ATutorScoId;	private String  ATutorPreparedScoId;	private boolean isVerbose   = false;	public ATutorApiAdapterApplet () {		core = new ch.ethz.pfplms.scorm.api.ApiAdapter ();	}	public	final void init () {		if (getParameter("verbose") != null) isVerbose = true;		ATutorStudentId     = getParameter ("student_id");		ATutorStudentName   = getParameter ("student_name");		say ("cmi.core.student_id=" +ATutorStudentId);		say ("cmi.core.student_name=" +ATutorStudentName);	}	private final void say (String s) {		if (isVerbose) System.out.println (s);	}	private final static String decode (String es) {		String s = es.replace('+', ' ');		int l = s.length();		int a = 0; 		StringBuffer rv = new StringBuffer(l);		byte[] b = null;		try {			int i;			while ((i = s.indexOf('%', a)) >= 0) {				rv.append(s.substring(a, i));				a = i;				while (i+2 < l && s.charAt(i) == '%') i+=3;				if (b == null || b.length < (i-a)/3) {					b = new byte[((i-a)/3)];				}				int x = 0;				for (; a < i; a+=3) {					b[x++] = (byte) Integer.parseInt(						s.substring(a+1, a+3), 16					);				}				rv.append(new String(b, 0, x, "utf-8"));			}			if (a < l) rv.append(s.substring(a));			return rv.toString();		} catch (Exception e) {			return "";		}	}	/*	 * Methods for ATutor to call via Liveconnect	 */	public	final void ATutorPrepare (String sco_id) {		URLConnection po;		ATutorScoCmi.clear();		StringBuffer P = new StringBuffer();		P.append ("&sco_id="+sco_id);		say ("Retreiving cmi for sco="+sco_id+" from ATutor server");		try {			//po = (HttpURLConnection) ( new java.net.URL (			po = (URLConnection) ( new java.net.URL (				getCodeBase().toString() + "read.php"			)).openConnection();			po.setRequestProperty (				"Content-Type",				"application/x-www-form-urlencoded"			);			po.setRequestProperty (				"Content-Length",				Integer.toString (P.length())			);			po.setDoOutput (true);			po.setUseCaches (false);			//po.setRequestMethod ("POST");			po.setAllowUserInteraction (false);			OutputStream os = po.getOutputStream();			os.write (P.toString().getBytes());			os.flush ();			os.close ();			BufferedReader br = new BufferedReader(					new InputStreamReader(						po.getInputStream ()					)			);			String s, l, r;			while ((s=br.readLine())!=null) {				if (s.indexOf('=') == -1) continue;				l = s.substring (0, s.indexOf('='));				r = s.substring (s.indexOf('=')+1, s.length());				r = decode (r);				say (" "+l + "="+r);				ATutorScoCmi.put (l,r);			}		} catch (Exception e) {			say ("ATutor cmi retrieval failed.");			say (e.toString());		}		ATutorPreparedScoId = sco_id;		say ("Done. Note: this was cmi for the next sco ("+sco_id+") to launch.");	}	public	final void ATutorReset (String s) {		if (s != null && s.equals(ATutorScoId)) {			ATutorScoId = null;			core.reset();			say ("Reset by ATutor client.");		} 	}	private final String ATutorCommit (boolean fin) {		if (ATutorScoId == null) return "false"; 		core.transEnd();		StringBuffer P = new StringBuffer();		Hashtable ins = core.getTransNew ();		Hashtable mod = core.getTransMod ();		if (fin) {			Object o = core.sysGet ("cmi.core.entry");			if (o != null && o.toString().equals ("ab-initio")) {				mod.put ("cmi.core.entry", "");			}		} else {			core.transBegin();		}		P.append ("&sco_id=" +ATutorScoId);		int i=0;		for (Enumeration e = ins.keys(); e.hasMoreElements(); i++) {			Object l = e.nextElement();			Object r = ins.get(l);			P.append("&iL["+i+"]="+l.toString());			P.append("&iR["+i+"]="+URLEncoder.encode(r.toString()));		}		int u=0;		for (Enumeration e = mod.keys(); e.hasMoreElements(); u++) {			Object l = e.nextElement();			Object r = mod.get(l);			P.append("&uL["+u+"]="+l.toString());			P.append("&uR["+u+"]="+URLEncoder.encode(r.toString()));		}		if (i == 0 && u == 0) {			say ("Nothing to commit.");			return "true";		}		//HttpURLConnection po;		URLConnection po;		try {			//po = (HttpURLConnection) ( new java.net.URL (			po = (URLConnection) ( new java.net.URL (				getCodeBase().toString()				+ "write.php"			)).openConnection();			po.setRequestProperty (				"Content-Type",				"application/x-www-form-urlencoded"			);			po.setRequestProperty (				"Content-Length",				Integer.toString (P.length())			);			po.setDoOutput (true);			po.setUseCaches (false);			//po.setRequestMethod ("POST");			po.setAllowUserInteraction (false);			OutputStream os = po.getOutputStream();			os.write (P.toString().getBytes());			os.flush ();			os.close ();			BufferedReader r = new BufferedReader(					new InputStreamReader(						po.getInputStream ()					)			);			try {				String s;				while ((s=r.readLine())!=null) {					say(s);				}			} catch (EOFException ok) {}			return "true";		} catch (Exception e) {			say ("ATutor cmi storage failed.");			say (e.toString());			return "false";		}	}	public	final String ATutorGetValue (String l) {		String rv = core.LMSGetValue (l);		say ("ATutorGetValue("+l+")="+rv);		return rv;	}	/*	 * Liveconnect interface methods for SCO	 */	public	final String LMSInitialize (String s) { 		String rv = core.LMSInitialize(s);		say ("LMSInitialize("+s+")="+rv);		if (rv.equals("false")) return rv;		core.reset();		rv = core.LMSInitialize(s);		ATutorScoId = ATutorPreparedScoId;		core.sysPut ("cmi.core.student_id",   ATutorStudentId);		core.sysPut ("cmi.core.student_name", ATutorStudentName);		core.sysPut (ATutorScoCmi);		core.transBegin();		return rv;	}	public	final String LMSCommit (String s) {		String rv = core.LMSCommit(s);		if (rv.equals("false")) return rv;		rv = ATutorCommit(false); 		say ("LMSCommit("+s+")="+rv);		return rv;	}	public	final String LMSFinish (String s) {		String rv = core.LMSFinish(s);		say ("LMSFinish("+s+")="+rv);		if (rv.equals("false")) return rv;		rv = ATutorCommit(true);		ATutorScoId = null;		core.reset();		return rv;	}	public	final String LMSGetDiagnostic (String e) {		String rv = core.LMSGetDiagnostic (e);		say ("LMSGetDiagnostic("+e+")="+rv);		return rv;	}	public	final String LMSGetErrorString (String e) {		String rv = core.LMSGetErrorString (e);		say ("LMSGetErrorString("+e+")="+rv);		return rv;	}	public	final String LMSGetLastError () {		String rv = core.LMSGetLastError ();		say ("LMSLastError()="+rv);		return rv;	}	public	final String LMSGetValue (String l) {		String rv = core.LMSGetValue (l);		say ("LMSGetValue("+l+")="+rv);		return rv;	}	public	final String LMSSetValue (String l, String r) {		String rv = core.LMSSetValue (l, r);		say ("LMSSetValue("+l+"="+r+")="+rv);		return rv;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -