package thaw.plugins;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;
import thaw.core.Core;
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.core.ThawThread;
import thaw.plugins.indexWebGrapher.*;
public class IndexWebGrapher implements thaw.core.Plugin, ActionListener {
public final static int NMB_STEPS = 10;
private Core core;
private Hsqldb db;
private JPanel tabPanel;
private JScrollPane scrollPane;
private GraphPanel graphPanel;
private JButton compute;
private JButton zoomIn;
private JButton zoomOut;
private JButton refresh;
private JProgressBar progressBar;
private Random random;
public boolean run(Core core) {
this.core = core;
this.random = new Random();
/** dep **/
if(core.getPluginManager().getPlugin("thaw.plugins.Hsqldb") == null) {
Logger.info(this, "Loading Hsqldb plugin");
if(core.getPluginManager().loadPlugin("thaw.plugins.Hsqldb") == null
|| !core.getPluginManager().runPlugin("thaw.plugins.Hsqldb")) {
Logger.error(this, "Unable to load thaw.plugins.Hsqldb !");
return false;
}
}
db = (Hsqldb)core.getPluginManager().getPlugin("thaw.plugins.Hsqldb");
db.registerChild(this);
/** graphics **/
tabPanel = new JPanel(new BorderLayout(5, 5));
JPanel southPanel = new JPanel(new BorderLayout(5, 5));
compute = new JButton(I18n.getMessage("thaw.plugin.indexWebGrapher.compute"));
compute.addActionListener(this);
progressBar = new JProgressBar(0, 100);
progressBar.setString(I18n.getMessage("thaw.plugin.indexWebGrapher.waiting"));
progressBar.setStringPainted(true);
JPanel zoomPanel = new JPanel(new GridLayout(1, 3));
zoomPanel.add( (refresh = new JButton("", thaw.gui.IconBox.minRefreshAction)) );
zoomPanel.add( (zoomOut = new JButton("-")) );
zoomPanel.add( (zoomIn = new JButton("+")) );
zoomOut.addActionListener(this);
zoomIn.addActionListener(this);
refresh.addActionListener(this);
southPanel.add(compute, BorderLayout.WEST);
southPanel.add(progressBar, BorderLayout.CENTER);
southPanel.add(zoomPanel, BorderLayout.EAST);
graphPanel = new GraphPanel(this);
scrollPane = new JScrollPane(graphPanel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.getVerticalScrollBar().setUnitIncrement(15);
tabPanel.add(scrollPane, BorderLayout.CENTER);
tabPanel.add(southPanel, BorderLayout.SOUTH);
core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.indexWebGrapher.shortName"),
thaw.gui.IconBox.web,
tabPanel);
return true;
}
public JScrollPane getScrollPane() {
return scrollPane;
}
public void setProgress(int step) {
String txt = "";
if (step == NMB_STEPS) {
int fanFan = random.nextInt(5);
txt = I18n.getMessage("thaw.plugin.indexWebGrapher.fanFan."+Integer.toString(fanFan));
} else {
txt = I18n.getMessage("thaw.plugin.indexWebGrapher.computing")
+ "("+Integer.toString(step)+"/"+Integer.toString(NMB_STEPS)+")";
}
progressBar.setString(txt);
progressBar.setValue( (step * 100) / NMB_STEPS );
}
public void stop() {
core.getMainWindow().removeTab(tabPanel);
db.unregisterChild(this);
}
public String getNameForUser() {
return I18n.getMessage("thaw.plugin.indexWebGrapher");
}
public javax.swing.ImageIcon getIcon() {
return thaw.gui.IconBox.web;
}
private GraphBuilder lastBuilder = null;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == compute) {
if (lastBuilder == null || lastBuilder.isFinished()) {
compute.setText(I18n.getMessage("thaw.plugin.indexWebGrapher.faster"));
lastBuilder = new GraphBuilder(this, graphPanel, db);
Thread th = new ThawThread(lastBuilder, "Web graph optimizer", this);
th.start();
} else {
if (!lastBuilder.fasterFlag()) {
compute.setText(I18n.getMessage("thaw.plugin.indexWebGrapher.stop"));
lastBuilder.setFasterFlag(true);
} else {
compute.setText(I18n.getMessage("thaw.plugin.indexWebGrapher.compute"));
lastBuilder.stop();
}
}
} else if (e.getSource() == zoomIn) {
graphPanel.zoomIn();
scrollPane.getHorizontalScrollBar().setValue(scrollPane.getHorizontalScrollBar().getValue()*2);
scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getValue()*2);
} else if (e.getSource() == zoomOut) {
scrollPane.getHorizontalScrollBar().setValue(scrollPane.getHorizontalScrollBar().getValue()/2);
scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getValue()/2);
graphPanel.zoomOut();
} else if (e.getSource() == refresh) {
graphPanel.refresh();
}
}
public void endOfProcess() {
compute.setText(I18n.getMessage("thaw.plugin.indexWebGrapher.compute"));
}
}