/** DBLongTask.java * * Copyright (c) 2005-2007 Andrew Krizhanovsky /aka at mail.iias.spb.su/ * Distributed under GNU Public License. */ package com.touchgraph.wikibrowser.panel.db; import com.touchgraph.wikibrowser.*; import wikipedia.sql.*; /** Calculates statistics about the MySQL wikipedia database * Uses a SwingWorker to perform a time-consuming task. */ public class DBLongTask { private int lengthOfTask; private int current = 0; private boolean done = false; private boolean canceled = false; private String statMessage; private String db_name; private TGWikiBrowser wb; public DBLongTask() { // number of request to db lengthOfTask = 5; } /** * Called from ProgressBarDemo to start the task. */ public void go(String db_host,String db_name,TGWikiBrowser wb) { this.db_name = db_name; this.wb = wb; final SwingWorker worker = new SwingWorker() { public Object construct() { current = 0; done = false; canceled = false; statMessage = null; return new ActualTask(); } }; worker.start(); } /** * Called from ProgressBarDemo to find out how much work needs * to be done. */ public int getLengthOfTask() { return lengthOfTask; } /** * Called from ProgressBarDemo to find out how much has been done. */ public int getCurrent() { return current; } public void stop() { canceled = true; statMessage = null; } /** * Called from ProgressBarDemo to find out if the task has completed. */ public boolean isDone() { return done; } /** * Returns the most recent status message, or null * if there is no current status message. */ public String getMessage() { return statMessage; } /** * The actual long running task. This runs in a SwingWorker thread. */ class ActualTask { ActualTask() { //Starts long task if (!canceled && !done) { //try { //Thread.sleep(1000); //sleep for a second Connect c = wb.syn_searcher.session.connect; //statMessage = "Please, wait..."; statMessage = "Wikipedia ('"+ db_name +"') currently has\n "; statMessage += Statistics.CountArticles(c) + " articles,\n "; current ++; //make some progress statMessage += Statistics.Count(c, "pagelinks") + " links,\n "; current ++; statMessage += Statistics.CountCategories(c) + " categories,\n "; current ++; statMessage += Statistics.Count(c, "categorylinks")+ " categorylinks,\n "; current ++; statMessage += Statistics.Count(c, "image") + " images,\n "; current ++; statMessage += Statistics.Count(c, "imagelinks") + " imagelinks."; if (current >= lengthOfTask) { done = true; current = lengthOfTask; } //statMessage = "Completed " + current + // " out of " + lengthOfTask + "."; //} catch (InterruptedException e) { // System.out.println("Task interrupted"); //} } } } }