/** * */ package webctdbexport.tools; import java.io.File; import java.util.LinkedList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.hibernate.Session; import org.json.JSONArray; import org.json.JSONObject; import webctdbexport.db.LearningContext; import webctdbexport.test.TestRepository; import webctdbexport.utils.DbUtils; import webctdbexport.utils.MoodleRepository; /** Dump whole database ?! * * @author cmg * */ public class DumpAll { private static final String DONE_FILE = "done.ts"; static Logger logger = Logger.getLogger(DumpAll.class.getName()); /** * @param args */ public static void main(String[] args) { if (args.length!=2) { System.err.println("Usage: <outputdir> <filedir"); System.exit(-1); } File outputdir = new File(args[0]); if (!outputdir.exists() || !outputdir.canWrite() || !outputdir.isDirectory()) { logger.log(Level.SEVERE, "Output directory does not exist or is not writable: "+outputdir); System.exit(-1); } File filedir = new File(args[0]); if (!filedir.exists() || !filedir.canWrite() || !filedir.isDirectory()) { logger.log(Level.SEVERE, "File directory does not exist or is not writable: "+filedir); System.exit(-1); } Session s = null; try { logger.log(Level.INFO, "output folders to "+outputdir); s = DbUtils.getSession(); // institutions... JSONObject listing = MoodleRepository.getListingForRoot(s); DumpUtils.writeResponse(listing, outputdir, false); List<JSONObject> items = new LinkedList<JSONObject>(); DumpUtils.addItems(items, listing, "/"); 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); // TODO SHA-1 stuff // MoodleRepository.getFile(s, url, filedir); } } else if(item.has(MoodleRepository.PATH)) { String path = item.getString(MoodleRepository.PATH); File itemdir = new File(outputdir+path); String title = item.getString(MoodleRepository.TITLE); File donefile = new File(itemdir, DONE_FILE); if (donefile.exists()) { System.out.println("Skip completed folder "+title+" path="+path); } else { System.out.println("dump folder "+title+" path="+path); JSONObject itemlisting = MoodleRepository.getListingForPath(s, path, true, true); itemdir.mkdirs(); DumpUtils.writeResponse(itemlisting, itemdir, false); DumpUtils.addItems(items, itemlisting, path); } } else if (item.has(DumpUtils.DONE)) { String path = item.getString(DumpUtils.DONE); File doneFile = new File(outputdir+path+DONE_FILE); System.out.println("Done "+path+" ("+doneFile+")"); doneFile.createNewFile(); } s.close(); s= null; } s.close(); s = null; } catch (Exception e) { logger.log(Level.SEVERE, "DumpAll", e); } finally { if (s!=null) try { s.close(); } catch (Exception e) {/*ignore*/} } } }