blob: df098c5548b3fb0c83385ab614357bd7dd812d06 [file] [log] [blame]
package org.eclipse.update.internal.ui.views;
import java.util.*;
import java.util.Hashtable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.update.internal.ui.UpdateUIPlugin;
import org.eclipse.update.internal.ui.model.*;
import org.eclipse.update.internal.ui.model.UpdateModel;
import org.eclipse.update.internal.ui.search.SearchObject;
/**
* @author dejan
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class SearchMonitorManager {
Hashtable monitors;
class SearchMonitor implements IProgressMonitor {
private SearchObject sobj;
private int totalWork;
private int worked;
private boolean active;
public SearchMonitor(SearchObject sobj) {
this.sobj = sobj;
sobj.attachProgressMonitor(this);
}
public void dispose() {
sobj.detachProgressMonitor(this);
}
/**
* @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, int)
*/
public void beginTask(String name, int totalWork) {
this.totalWork = totalWork;
worked = 0;
active = true;
update();
}
/**
* @see org.eclipse.core.runtime.IProgressMonitor#done()
*/
public void done() {
active = false;
update();
}
private void update() {
UpdateUIPlugin.getDefault().getUpdateModel().fireObjectChanged(
sobj,
NamedModelObject.P_NAME);
}
public String getLabel() {
if (active) {
int perc = (worked * 100) / totalWork;
return sobj.getName() + " - " + perc + "%";
} else {
return sobj.getName();
}
}
/**
* @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double)
*/
public void internalWorked(double work) {
}
/**
* @see org.eclipse.core.runtime.IProgressMonitor#isCanceled()
*/
public boolean isCanceled() {
return false;
}
/**
* @see org.eclipse.core.runtime.IProgressMonitor#setCanceled(boolean)
*/
public void setCanceled(boolean value) {
}
/**
* @see org.eclipse.core.runtime.IProgressMonitor#setTaskName(java.lang.String)
*/
public void setTaskName(String name) {
}
/**
* @see org.eclipse.core.runtime.IProgressMonitor#subTask(java.lang.String)
*/
public void subTask(String name) {
}
/**
* @see org.eclipse.core.runtime.IProgressMonitor#worked(int)
*/
public void worked(int work) {
worked += work;
update();
}
}
/**
* Constructor for SearchMonitorManager.
*/
public SearchMonitorManager() {
monitors = new Hashtable();
initialize();
}
public void shutdown() {
for (Enumeration enum=monitors.elements(); enum.hasMoreElements();) {
SearchMonitor monitor = (SearchMonitor)enum.nextElement();
monitor.dispose();
}
monitors.clear();
}
private void initialize() {
UpdateModel model = UpdateUIPlugin.getDefault().getUpdateModel();
NamedModelObject [] bookmarks = model.getBookmarks();
for (int i=0; i<bookmarks.length; i++) {
processBookmark(bookmarks[i]);
}
}
private void processFolder(BookmarkFolder folder) {
Object [] children = folder.getChildren(null);
for (int i=0; i<children.length; i++) {
processBookmark((NamedModelObject)children[i]);
}
}
private void processBookmark(NamedModelObject obj) {
if (obj instanceof SearchObject) {
register((SearchObject)obj);
}
else if (obj instanceof BookmarkFolder) {
processFolder((BookmarkFolder)obj);
}
}
public void register(SearchObject obj) {
if (monitors.get(obj) == null)
monitors.put(obj, new SearchMonitor(obj));
}
public void unregister(SearchObject obj) {
SearchMonitor monitor = (SearchMonitor) monitors.get(obj);
if (monitor != null) {
monitor.dispose();
monitors.remove(obj);
}
}
public String getLabel(SearchObject obj) {
SearchMonitor monitor = (SearchMonitor) monitors.get(obj);
if (monitor == null)
return obj.getName();
else
return monitor.getLabel();
}
}