codice:
/**
* Classe JAVA per creare un diagramma GANTT partendo dai dati inseriti nel
* database. Viene richiamata nella pagina Web di riepilogo se si vuole, e da la
* possibilità di salvare il tutto in .pdf.
* @author Daniele Bertelli
* @version DB 1.1
*/
public class GanttDiagram extends ApplicationFrame {
/** Logica del database */
private static Database db;
/** Nome del preventivo sul quale si sta lavorando */
private static String NomePreventivo = "";
/** Path della directory dove andranno salvati i diagrammi di Gantt (DA MODIFICARE)*/
private final String PATH = "C:/Users/Daniele/Documents/Prova/";
/**
* Costruttore che crea un nuovo Diagramma di Gantt
* @param Titolo del diagramma (nome del preventivo)
*/
public GanttDiagram(final String title) {
super(title);
String nomeAsseY = "";
Object[] obj = {"Attività", "Manodopera", "Entrambi"};
IntervalCategoryDataset dataset = null;
int answer = javax.swing.JOptionPane.showOptionDialog(getRootPane(),
"Scegli quale dei due diagrammi di Gantt vuoi creare\n", "Domanda",
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, obj, obj[0]);
if (answer == JOptionPane.CLOSED_OPTION) {
System.err.println("E' stata chiusa la finestra di dialogo in modo anomalo!");
System.exit(-1);
}
if (answer == JOptionPane.YES_OPTION) {
dataset = createDatasetAttivita();
nomeAsseY = "Attivita";
} else if (answer == JOptionPane.NO_OPTION) {
dataset = createDatasetManodopera();
nomeAsseY = "Manodopera";
} else {
dataset = createDatasetAttivita();
nomeAsseY = "Attivita";
final JFreeChart chart = createChart(dataset, nomeAsseY);
// Aggiungo il Chart al pannello...
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
File fileName = new File(PATH + NomePreventivo + ".pdf");
if (fileName.exists()) {
fileName = new File(PATH + NomePreventivo + "(2).pdf");
System.err.println("Attenzione File creato già esistente! --> Sto creando una copia!");
}
try {
saveChartAsPDF(fileName, chart, 400, 300, new DefaultFontMapper());
System.out.println("Diagramma salvato con successo in formato PDF!");
} catch (IOException ex) {
Logger.getLogger(GanttDiagram.class.getName()).log(Level.SEVERE, null, ex);
}
dataset = createDatasetManodopera();
nomeAsseY = "Manodopera";
final JFreeChart chart2 = createChart(dataset, nomeAsseY);
// Aggiungo il Chart al pannello...
final ChartPanel chartPanel2 = new ChartPanel(chart2);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel2);
fileName = new File(PATH + NomePreventivo + ".pdf");
if (fileName.exists()) {
fileName = new File(PATH + NomePreventivo + "(2).pdf");
System.err.println("Attenzione File creato già esistente! --> Sto creando una copia!");
}
try {
saveChartAsPDF(fileName, chart2, 400, 300, new DefaultFontMapper());
System.out.println("Diagramma salvato con successo in formato PDF!");
System.exit(0);
} catch (IOException ex) {
Logger.getLogger(GanttDiagram.class.getName()).log(Level.SEVERE, null, ex);
}
}
final JFreeChart chart = createChart(dataset, nomeAsseY);
// Aggiungo il Chart al pannello...
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
File fileName = new File(PATH + NomePreventivo + ".pdf");
if (fileName.exists()) {
fileName = new File(PATH + NomePreventivo + "(2).pdf");
System.err.println("Attenzione File creato già esistente! --> Sto creando una copia!");
}
try {
saveChartAsPDF(fileName, chart, 400, 300, new DefaultFontMapper());
System.out.println("Diagramma salvato con successo in formato PDF!");
} catch (IOException ex) {
Logger.getLogger(GanttDiagram.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Metodo per la creazione del DataSet per il diagramma Gantt sulle attività
* con le relative interrogazioni al Database per reperire i dati.
*/
private static IntervalCategoryDataset createDatasetAttivita() {
Vector v = new Vector(), Vtemp = new Vector();
String[] res = null;
GregorianCalendar gc = null;
db = new Database("tirocinio", "root", "10a5gr8b");
try {
db.connetti();
} catch (ServletException ex) {
}
v = db.eseguiQuery("SELECT IDpreventivo, Nome, DataInizio FROM preventivo");
res = (String[]) v.elementAt(v.size() - 1);
int ID = Integer.parseInt(res[0]);
NomePreventivo = res[1] + "_ATTIVITA";
String[] split = res[2].split("-");
String Iday = split[2];
String Imonth = split[1];
String Iyear = split[0];
v = db.eseguiQuery("SELECT * FROM attivitapreventivo WHERE IDpreventivo=" + ID + ";");
int i = 0;
final TaskSeries s1 = new TaskSeries("Preventivato");
while (i < v.size()) {
res = (String[]) v.elementAt(i);
int IDatt = Integer.parseInt(res[0]);
Vtemp = db.eseguiQuery("SELECT Nome FROM attivita WHERE IDattivita=" + IDatt + ";");
String[] n = (String[]) Vtemp.elementAt(0);
String nomeAttivita = n[0];
/* Controllo se c'è uno shift Temporale nella data d'inizio */
gc = new GregorianCalendar(Integer.parseInt(Iyear),
Integer.parseInt(Imonth) - 1, Integer.parseInt(Iday));
if (res[3] != null) {
gc.add(Calendar.DAY_OF_MONTH, Integer.parseInt(res[3]));
}
Date inizio = gc.getTime();
gc.add(Calendar.HOUR_OF_DAY, Integer.parseInt(res[2]));
Date fine = gc.getTime();
s1.add(new Task(nomeAttivita, new SimpleTimePeriod(inizio, fine)));
i++;
}
final TaskSeriesCollection collection = new TaskSeriesCollection();
collection.add(s1);
return collection;
}
/**
* Metodo per la creazione del DataSet per il diagramma Gantt sulla
* manodopera con le relative interrogazioni al Database per reperire i dati.
*/
private static IntervalCategoryDataset createDatasetManodopera() {
Vector v = new Vector(), Vtemp = new Vector();
String[] res = null;
GregorianCalendar gc = null;
db = new Database("tirocinio", "root", "10a5gr8b");
try {
db.connetti();
} catch (ServletException ex) {
}
v = db.eseguiQuery("SELECT IDpreventivo, Nome, DataInizio FROM preventivo");
res = (String[]) v.elementAt(v.size() - 1);
int ID = Integer.parseInt(res[0]);
NomePreventivo = res[1] + "_MANODOPERA";
String[] split = res[2].split("-");
String Iday = split[2];
String Imonth = split[1];
String Iyear = split[0];
v = db.eseguiQuery("SELECT * FROM preventivoqualifica WHERE IDpreventivo=" + ID + ";");
int i = 0;
final TaskSeries s1 = new TaskSeries("Preventivato");
while (i < v.size()) {
res = (String[]) v.elementAt(i);
int IDqual = Integer.parseInt(res[0]);
Vtemp = db.eseguiQuery("SELECT Descrizione FROM qualifica WHERE IDqualifica=" + IDqual + ";");
String[] n = (String[]) Vtemp.elementAt(0);
String nomeAttivita = n[0];
/* Controllo se c'è uno shift Temporale nella data d'inizio */
gc = new GregorianCalendar(Integer.parseInt(Iyear),
Integer.parseInt(Imonth) - 1, Integer.parseInt(Iday));
if (res[3] != null) {
gc.add(Calendar.DAY_OF_MONTH, Integer.parseInt(res[3]));
}
Date inizio = gc.getTime();
gc.add(Calendar.HOUR_OF_DAY, Integer.parseInt(res[2]));
Date fine = gc.getTime();
s1.add(new Task(nomeAttivita, new SimpleTimePeriod(inizio, fine)));
i++;
}
final TaskSeriesCollection collection = new TaskSeriesCollection();
collection.add(s1);
return collection;
}
/**
* Metodo per la creazione del diagramma
* @param dataset il dataset per il diagramma.
*/
private JFreeChart createChart(final IntervalCategoryDataset dataset, String titolo) {
final JFreeChart chart = ChartFactory.createGanttChart(
"Preventivo " + NomePreventivo, // chart title
titolo, // domain axis label
"Tempo", // range axis label
dataset, // data
true, // include legend
true, // tooltips
false // urls
);
return chart;
}
private void saveChartAsPDF(File fileName, JFreeChart chart, int width, int height, DefaultFontMapper mapper)
throws IOException {
OutputStream out = new BufferedOutputStream(new FileOutputStream(fileName));
writeChartAsPDF(out, chart, width, height, mapper);
out.close();
}
private void writeChartAsPDF(OutputStream out, JFreeChart chart, int width, int height, DefaultFontMapper mapper) {
Rectangle pagesize = new Rectangle(width, height);
Document document = new Document(pagesize, 50, 50, 50, 50);
try {
PdfWriter writer = PdfWriter.getInstance(document, out);
document.addAuthor("West Systems");
document.addSubject("Preventivo");
document.open();
PdfContentByte cb = writer.getDirectContent();
PdfTemplate tp = cb.createTemplate(width, height);
Graphics2D g2 = tp.createGraphics(width, height, mapper);
Rectangle2D r2D = new Rectangle2D.Double(0, 0, width, height);
chart.draw(g2, r2D, null);
g2.dispose();
cb.addTemplate(tp, 0, 0);
} catch (DocumentException de) {
System.err.println(de.getMessage());
}
document.close();
}
/**
* Metodo "main" per l'esecuzione dell'applicazione.
* @param args NON UTILIZZATO.
*/
public static void main(final String[] args) {
final GanttDiagram demo = new GanttDiagram("Preventivo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
In pratica premendo un bottone sulla web application del tipo "CREA GANTT" dovrei riuscire a far avviare il metodo "main" della classe che ho postato. E' possibile fare ciò??