/**
*
*/
package webctdbexport.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Logger;
import java.util.logging.Level;
import org.hibernate.Session;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import webctdbexport.tools.DumpUtils;
import webctdbexport.utils.DbUtils;
import webctdbexport.utils.MoodleRepository;
/** Test Moodle Repository mapping (webctdbexport.utils.MoodleRepository).
*
* @author cmg
*
*/
public class TestRepository {
private static final long MAX_FILE_SIZE = 500000000;
static Logger logger = Logger.getLogger(TestRepository.class.getName());
/**
* @param args
*/
public static void main(String[] args) {
if (args.length==0) {
System.err.println("Usage: username");
System.exit(-1);
}
for (int ai=0; ai<args.length; ai++) {
dumpUser(args[ai]);
}
}
private static void dumpUser(String username) {
Session s = null;
try {
System.out.println("Dump for user "+username);
s = DbUtils.getSession();
File dir = new File("tmp."+username);
dir.mkdirs();
System.out.println("Write to "+dir);
JSONObject listing = MoodleRepository.getListingForUser(s, username, true, true);
DumpUtils.writeResponse(listing, dir, false);
List<JSONObject> items = new LinkedList<JSONObject>();
{
JSONArray list = listing.getJSONArray(MoodleRepository.LIST);
if (list!=null) {
for (int li=0; li<list.length(); li++)
items.add(list.getJSONObject(li));
}
}
s.close();
s = null;
while(items.size()>0) {
s = DbUtils.getSession();
JSONObject item = items.remove(0);
if (item.has(MoodleRepository.SOURCE)) {
String url = item.getString(MoodleRepository.SOURCE);
long size = -1;
if (item.has(MoodleRepository.SIZE)) {
size = item.getLong(MoodleRepository.SIZE);
}
if (size>MAX_FILE_SIZE) {
System.out.println("Skip large file "+item.getString(MoodleRepository.TITLE)+" source="+url+", "+size+" bytes");
}
else {
System.out.println("dump file "+item.getString(MoodleRepository.TITLE)+" source="+url);
MoodleRepository.getFile(s, url, dir);
}
}
else if(item.has(MoodleRepository.PATH)) {
String title = item.getString(MoodleRepository.TITLE);
String path = item.getString(MoodleRepository.PATH);
System.out.println("dump folder "+title+" path="+path);
JSONObject itemlisting = MoodleRepository.getListingForPath(s, path, true, true);
File itemdir = new File(dir+path);
itemdir.mkdirs();
DumpUtils.writeResponse(itemlisting, itemdir, false);
if (itemlisting.has(MoodleRepository.LIST)) {
JSONArray list = itemlisting.getJSONArray(MoodleRepository.LIST);
if (list!=null) {
for (int li=0; li<list.length(); li++)
items.add(list.getJSONObject(li));
}
}
}
// TODO ...
s.close();
s= null;
}
// TODO Auto-generated method stub
} catch (Exception e) {
logger.log(Level.SEVERE, "Dumping "+username, e);
}
finally {
if (s!=null)
try {
s.close();
} catch (Exception e) {/*ignore*/}
}
}
}