Citation:
/**
*
*/
package modele;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.Observable;
import javax.swing.JFileChooser;
/**
* @author Pierre
*
*/
public class Modele extends Observable
{
private String cheminInstal = "C:/";
/**
*
*/
public Modele()
{
// TODO Auto-generated constructor stub
}
/** Cette méthode permet de parcourir l'arboraisance pour installer blast
*
*
*/
public void parcourir()
{
JFileChooser choose = new JFileChooser();
choose.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
choose.setDialogTitle("Choix de la base de donnée blast");
int choix = choose.showSaveDialog(null);
File fichier = null;
if (choix == JFileChooser.APPROVE_OPTION)
{
fichier = choose.getSelectedFile();
cheminInstal = fichier.getAbsolutePath();
setChanged();
notifyObservers("instal");
}
else
System.out.println("L'ouverture de fichier est annulée");
}
public String getChemin()
{
return cheminInstal;
}
public void quitter()
{
System.exit(0);
}
public void suivant()
{
creationRepertoire("test","../blast/test");
creationRepertoire("présentation","../blast/présentation");
creationRepertoire("application","../blast/application");
creationRepertoire("aide","../blast/aide");
creationRepertoire("banques","../blast/banques");
creationRepertoire("fichRequete","../blast/fichRequete");
creationRepertoire("resultats","../blast/resultats");
creationRepertoire("verification","../blast/verification");
creationRepertoire("doc","../blast/doc");
creationRepertoire("bin","../blast/bin");
creationRepertoire("data","../blast/data");
creationRepertoire("blasts","../blast/blasts");
creationRepertoire("images","../blast/images");
creationRepertoire("images/aide","../blast/images/aide");
copier("../blast/blastall.bat", cheminInstal+"/blast" , "blastall.bat");
copier("../blast/ReadMe.html", cheminInstal+"/blast" , "ReadMe.html");
setChanged();
notifyObservers("terminer");
}
/** Permet la création des répertoire
*
* @param nom
* @param chemin
*/
private void creationRepertoire(String nom, String chemin)
{
Thread copie = new Thread();
copie.start();
setChanged();
notifyObservers("lancer");
File rep = new File(cheminInstal+"/blast/"+nom);
rep.mkdirs();
File repAvant = new File(chemin);
if (repAvant.listFiles()!=null)
{
File[] fic = repAvant.listFiles();
for(int i = 0 ; i< fic.length; i++)
{
if(fic[i].isFile())
{
System.out.println("copie de : " + fic[i].getName());
copier(fic[i].getAbsolutePath(),rep.getAbsolutePath(), fic[i].getName());
}
else System.out.println("C'est un repertoire : "+ fic[i].getName());
}
}
copie.stop();
}
private void copier(String cheminFichier, String cheminFinal, String name)
{
FileChannel in = null; // canal d'entrée
FileChannel out = null; // canal de sortie
try {
// Init
in = new FileInputStream(cheminFichier).getChannel();
out = new FileOutputStream(cheminFinal+"/"+ name).getChannel();
// Copie depuis le in vers le out
in.transferTo(0, in.size(), out);
} catch (Exception e) {
e.printStackTrace(); // n'importe quelle exception
} finally { // finalement on ferme
if(in != null) {
try {
in.close();
} catch (IOException e) {}
}
if(out != null) {
try {
out.close();
} catch (IOException e) {}
}
}
}
}
/**
*
*/
package vue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import modele.Modele;
/**
* @author Pierre
*
*/
public class Controleur implements ActionListener
{
private Modele mdl = new Modele();
/**
*
*/
public Controleur(Modele mdl)
{
this.mdl = mdl;
}
public void actionPerformed(ActionEvent arg0)
{
if(arg0.getSource() instanceof JButton)
{
JButton bouton = (JButton) arg0.getSource();
if (bouton.getName().equals("Parcourir")) mdl.parcourir();
else if(bouton.getName().equals("Suivant")) mdl.suivant();
else if(bouton.getName().equals("Annuler")) mdl.quitter();
else if(bouton.getName().equals("term")) mdl.quitter();
}
}
}
package vue;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Observable;
import java.util.Observer;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import modele.Modele;
public class VueSetup extends JPanel implements Observer
{
/**
*
*/
private static final long serialVersionUID = 1L;
private Modele mdl = new Modele();
private Controleur ctrl = new Controleur(mdl);
private JTextField champ;
private JLabel barre;
private JButton terminer;
/** Le constructeur par defaut */
public VueSetup()
{
setLayout(new BorderLayout());
setBackground(Color.WHITE);
add(head(), BorderLayout.NORTH);
add(panCentre(), BorderLayout.CENTER);
add(barreAvancement(), BorderLayout.SOUTH);
mdl.addObserver(this);
}
private JPanel panCentre()
{
JPanel pan = new JPanel();
pan.setOpaque(false);
pan.setLayout(new GridLayout(2,1));
pan.add(ligneSaisie());
pan.add(ligneBouton());
return pan;
}
private JPanel ligneBouton()
{
JPanel bouton = new JPanel();
bouton.add(nouveauBouton("Suivant"));
bouton.add(nouveauBouton("Annuler"));
terminer = new JButton("Terminer");
terminer.setEnabled(false);
terminer.setName("term");
terminer.addActionListener(ctrl);
JPanel panTotal = new JPanel();
panTotal.add(bouton);
panTotal.add(terminer);
bouton.setOpaque(false);
panTotal.setOpaque(false);
return panTotal;
}
private JButton nouveauBouton(String name)
{
JButton bout = new JButton(name);
bout.setName(name);
bout.addActionListener(ctrl);
return bout;
}
private JLabel barreAvancement()
{
barre = new JLabel(new ImageIcon("images/chargement0.JPG"));
return barre;
}
/** Rend un panneau contenant une zone de texte et un bouton
* @return le panneau
* */
private JPanel ligneSaisie()
{
JPanel pan = new JPanel();
pan.setOpaque(false);
pan.setLayout(new GridLayout(1,2));
champ = new JTextField("C:/");
champ.setForeground(Color.MAGENTA);
champ.setEditable(false);
champ.setColumns(20);
JButton bout = new JButton("Parcourir");
bout.setName("Parcourir");
bout.addActionListener(ctrl);
pan.add(champ);
pan.add(bout);
JPanel panTotal = new JPanel();
panTotal.add(pan);
panTotal.setOpaque(false);
return panTotal;
}
/** Création du label explicatif
* @return le label
* */
private JLabel head()
{
JLabel head = new JLabel(new ImageIcon("images/explication.gif"));
return head;
}
public void update(Observable arg0, Object arg1)
{
if (arg0 instanceof Modele && arg1!=null)
{
mdl = (Modele) arg0 ;
String nomType = arg1.toString() ;
if (nomType.equals("instal")) champ.setText(mdl.getChemin());
else if (nomType.equals("lancer")) barre.setIcon(new ImageIcon("images/barre.gif"));
else if (nomType.equals("terminer"))
{
barre.setIcon(new ImageIcon("images/chargement100.JPG"));
terminer.setEnabled(true);
}
}
}
}
/**
*
*/
package test;
import java.awt.event.WindowAdapter;
import javax.swing.JFrame;
import vue.VueSetup;;
/**
* @author Pierre
*
*/
public class FenetreSetup extends JFrame
{
/** Numéro de sérialisation. */
private static final long serialVersionUID = 1L;
/*_________________________________________________________________________________*/
/** Création de la fenêtre principale.
* @param p Le panneau à placer dans la fenêtre.
* @param screensize
*/
public FenetreSetup(VueSetup p)
{
java.awt.GraphicsEnvironment graphicsEnvironment =
java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
setName("Blast") ;
setTitle("Blast : Setup") ;
int x = graphicsEnvironment.getCenterPoint().x - getWidth() / 2;
int y = graphicsEnvironment.getCenterPoint().y - getHeight() / 2;
setLocation(x,y);
setSize(800,400) ;
getContentPane().add(p) ;
setVisible(true);
// /* Change le logo de java par une image personnelle (le logo en haut de la fenêtre */
// Image icone = Toolkit.getDefaultToolkit ().getImage("images/logoAccueil.jpg");
// this.setIconImage (icone);
addWindowListener(new WindowAdapterTest());
}
/*___________________________________________________________*/
/*_________________________________________________________________________________*/
/** La classe interne qui servira d'adaptateur à la fenêtre principale pour gérer
* ce qui doit être fait avant que la fenêtre ne soit quittée.
*/
public class WindowAdapterTest extends WindowAdapter
{
/*_________________________________________________________________________________*/
/** Permet de réaliser des opération indispensables avant la fermeture de la fenêtre.
* Dans cette application il n'y a rien à faire. Nous afficherons simplement sur la
* console que l'application se termine.
* @param e L'événement qui provoque la fermeture de la fenêtre.
* @see java.awt.event.WindowListener#windowClosing(java.awt.event.WindowEvent)
*/
public void windowClosing(java.awt.event.WindowEvent e)
{
System.out.println("fin de l'application") ;
System.exit(0);
}
}
/*___________________________________________________________*/
}
voila il ne manque que le main