package IBA_J.MainFrame;
import IBA_J.ConvertListFiles.ADC.ADC;
import IBA_J.ConvertListFiles.FrameC.FrameC;
import IBA_J.FrameConfigSave.FrameConfigSave;
import IBA_J.FrameConfigLang.FrameConfigLang;
import IBA_J.Prefs.PrefsManager;
import IBA_J.Spectra.Spectra;
import ij.IJ;
import java.awt.HeadlessException;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
*This class is the first window which will be open at the launch of IBA_J
*/
public final class MainFrame extends javax.swing.JFrame {
private FrameConfigLang frameConfigLang= null;
private final FrameC frameConfigLst = new FrameC();
private final FrameConfigSave frameConfigSaveSession = new FrameConfigSave(this);
private final ArrayList<Spectra> spectrasProduced = new ArrayList<>();
private boolean saveImagesOfSession = false;
private final String nameOfApplication = "Ion Beam Data Analysis";
private static ArrayList<String> availableLanguages = new ArrayList<>();
private static ArrayList<String[]> languageData = new ArrayList<>();
/**
* Creates new form MainFrame
*/
public MainFrame() {
availableLanguages = new ArrayList<>();
languageData = new ArrayList<>();
searchAvailableLanguages();
String language = chooseLanguage();
initComponents();
chooseIconLanguage(language);
String languageName=null;
try{
languageName = readLanguageName("plugins/IBA_J/resources/language/"+language+".txt");
}
catch(IOException e){}
frameConfigLang=new FrameConfigLang(this,languageName);
this.setIconImage(new ImageIcon(getClass()
.getResource("/IBA_J/resources/images" + "/atome-16.png")).getImage());
}
public void setSaveImg(boolean saveImg){
saveImagesOfSession=saveImg;
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jButtonOpenLst = new javax.swing.JButton();
jButtonOpenXYEList = new javax.swing.JButton();
jButtonParamLst = new javax.swing.JButton();
jButtonParamPIXE = new javax.swing.JButton();
jButtonLanguage = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("IBA analysis - v12-2016-1");
jButtonOpenLst.setText(tr("Handle raw listfiles"));
jButtonOpenLst.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonOpenLstActionPerformed(evt);
}
});
jButtonOpenXYEList.setText(tr("Work with ADC listfile"));
jButtonOpenXYEList.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonOpenXYEListActionPerformed(evt);
}
});
jButtonParamLst.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IBA_J/resources/images/avance-parametres-32.png"))); // NOI18N
jButtonParamLst.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonParamLstActionPerformed(evt);
}
});
jButtonParamPIXE.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IBA_J/resources/images/avance-parametres-32.png"))); // NOI18N
jButtonParamPIXE.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonParamPIXEActionPerformed(evt);
}
});
jButtonLanguage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IBA_J/resources/language/source.png"))); // NOI18N
jButtonLanguage.setBorderPainted(false);
jButtonLanguage.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonLanguageActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(49, 49, 49)
.addComponent(jButtonOpenXYEList, javax.swing.GroupLayout.PREFERRED_SIZE, 243, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButtonParamPIXE, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(49, 49, 49)
.addComponent(jButtonOpenLst, javax.swing.GroupLayout.PREFERRED_SIZE, 243, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButtonLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addComponent(jButtonParamLst, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(53, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonOpenLst)
.addComponent(jButtonParamLst, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButtonOpenXYEList)
.addComponent(jButtonParamPIXE, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(20, 20, 20))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jButtonOpenLstActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOpenLstActionPerformed
frameConfigLst.openLST();
}//GEN-LAST:event_jButtonOpenLstActionPerformed
private void jButtonParamLstActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonParamLstActionPerformed
frameConfigLst.setVisible(true);
}//GEN-LAST:event_jButtonParamLstActionPerformed
private void jButtonOpenXYEListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOpenXYEListActionPerformed
String path=selectFile();
DataInputStream ips=null;
PrefsManager prefs=new PrefsManager();
try{
ips=new DataInputStream(new BufferedInputStream(new FileInputStream(path)));
}
catch (FileNotFoundException e){
IJ.log("**Error** File was not found");
}
ADC adc=new ADC(path);
if (path.substring(path.length()-1).equals("2")){
File f=new File(path);
IJ.log("Opening file : " + f.getName());
adc.open(ips);
}
else {
IJ.log("**Error** Wrong file format");
}
try {
if (ips != null) ips.close();
}
catch(IOException e){}
if ( adc.getNEvents()>1 && (adc.getlastEvent()[0]!=0 && adc.getlastEvent()[1]!=0) ){//check if a correct file has been open
Spectra spectraXYE= new Spectra(adc,path);
if(spectraXYE.getEnergies().length>1){//check if a correct file has been open
spectraXYE.setParentWindow(this);
File f=new File(path);
int nROI=Integer.valueOf(prefs.ijGetValue("IBA.nROI", ""+5));
spectraXYE.plotSpectra(nameOfApplication, (String) tr("File: ")+f.getName(),nROI).showVisible();
IJ.log("Total events: " + spectraXYE.getADC().getNEvents());
}
}
java.lang.System.gc();
}//GEN-LAST:event_jButtonOpenXYEListActionPerformed
private void jButtonParamPIXEActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonParamPIXEActionPerformed
IJ.open("IJ_Prefs.txt");
}//GEN-LAST:event_jButtonParamPIXEActionPerformed
private void jButtonLanguageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonLanguageActionPerformed
frameConfigLang.setVisible(true);
}//GEN-LAST:event_jButtonLanguageActionPerformed
private void searchAvailableLanguages(){
final File folder = new File("plugins/IBA_J/resources/language");
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles) {
if (file.getName().endsWith("txt")){
try{
String name = readLanguageName(file.getAbsolutePath());
if (name!=null){
availableLanguages.add(name);
}
}
catch(IOException e){}
}
}
}
private String chooseLanguage(){
try{
String[] lines =readLinesFile("plugins/IBA_J/resources/language/default");
if (!lines[0].contains("english")&&!lines[0].contains("source")){
String[] linesSource=readLinesFile("plugins/IBA_J/resources/language/source.txt");
String[] linesTranslated=readLinesFile("plugins/IBA_J/resources/language/"+lines[0]+".txt");
languageData.add(linesSource);
languageData.add(linesTranslated);
return lines[0];
}
else{
return lines[0];
}
}
catch(IOException e){}
return null;
}
private void chooseIconLanguage(String language){
jButtonLanguage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IBA_J/resources/language/"+language+".png")));
}
public String[] getLanguages(){
return availableLanguages.toArray( new String[availableLanguages.size()] );
}
public String getNameFileLang(String languageName){
final File folder = new File("plugins/IBA_J/resources/language");//");
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles) {
if (file.getName().endsWith("txt")){
try{
String name = readLanguageName(file.getAbsolutePath());
if (name!=null && name.equals(languageName)){
String fileName = file.getName();
return fileName.substring(0,fileName.lastIndexOf("."));
}
}
catch(IOException e){}
}
}
return "source";
}
public static String tr(String dataToTranslate){
if(dataToTranslate!=null){
if(languageData.size()>1){
String[] source=languageData.get(0);
for (int i=0;i<source.length;i++){
String lineSource=source[i];
if (lineSource.equals(dataToTranslate)){
String[] translate = languageData.get(1);
String line = translate[i];
return line;
}
}
}
}
return dataToTranslate;
}
public String readLanguageName(String path)throws IOException{
BufferedReader buff=null;
String languageName= null;
try {
buff=buff = new BufferedReader(new FileReader(path));//file opening
for (int i=0;i<3;i++) {
if(i==2){
languageName = buff.readLine();
}
else{
buff.readLine();
}
}
buff.close();
}
catch(FileNotFoundException e){
IJ.log(tr("**Error** Language file not found or invalid"));
}
catch (NullPointerException e){//end of the file
buff.close();
}
return languageName;
}
/**
* Method to read a text file
* @return return an array containing the lines of file. "\n" has been removed.
*/
public String[] readLinesFile(String path)throws IOException{
BufferedReader buff=null;
ArrayList<String> arrayLines=new ArrayList<String>();
try {
buff=buff = new BufferedReader(new FileReader(path));//file opening
for (int i=0;;i++) {
String line = buff.readLine();
arrayLines.add(line);
if (line.equals(null) | line.equals("\n")){//end of the file can produced a NullPointerException
arrayLines.remove(arrayLines.size()-1);
buff.close();
break;
}
}
}
catch(FileNotFoundException e){
IJ.log(tr("**Error** File not found."));
}
catch (NullPointerException e){//end of the file
arrayLines.remove(arrayLines.size()-1);
buff.close();
}
String[] tabLines = new String[arrayLines.size()];//convert arrayList to String[]
for (int i=0;i<arrayLines.size();i++){
tabLines[i]= ((String)arrayLines.get(i));
}
return tabLines;
}
/**
* Method to select one and only one file
* @return the absolute path of the file
*/
private String selectFile(){
File selectedFile = null;
PrefsManager prefs=new PrefsManager();
//prefs.setPreference();
try{
JFileChooser jF = new JFileChooser();
File myDir=new File(prefs.ijGetLastUsedDirectory());
jF.setCurrentDirectory(myDir);
jF.setApproveButtonText(tr("OK"));
jF.setMultiSelectionEnabled(false);
FileFilter filter = new FileNameExtensionFilter("PIXE AIFIRA file", "pixe2");
jF.setFileFilter(filter);
jF.showOpenDialog(null);
selectedFile = jF.getSelectedFile();
prefs.ijPrefsSaveDirectory(selectedFile.getAbsolutePath());
}
catch (HeadlessException e){
IJ.log(tr("**Error** Can not open file"));
}
if (selectedFile!=null)
return selectedFile.getAbsolutePath();
return null;
}
/**
* Method to select one or several files
* @return array containing the absolute path of the files
*/
private String[] selectFiles(){
PrefsManager prefs=new PrefsManager();
//prefs.setPreference();
File[] selectedFiles = null;
try{
JFileChooser jF = new JFileChooser();
File myDir=new File(prefs.ijGetLastUsedDirectory());
jF.setApproveButtonText(tr("OK"));
jF.setMultiSelectionEnabled(true);
jF.showOpenDialog(null);
selectedFiles = jF.getSelectedFiles();
prefs.ijPrefsSaveDirectory(jF.getName());
}
catch (HeadlessException e){
IJ.log(tr("**Error** Can not open files"));
}
String[] pathsToReturn = null;
if (selectedFiles!=null){
pathsToReturn = new String[selectedFiles.length];
for(int i=0;i<selectedFiles.length;i++){
pathsToReturn[i]=selectedFiles[i].getAbsolutePath();
}
}
return pathsToReturn;
}
/**
* Method to select one and only one directory
* Files are showed to show context to the user but can not be selected
* @return the absolute path of the directory
*/
private String selectDirectory(){
File selectedFile = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setMultiSelectionEnabled(false);
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int option = fileChooser.showDialog(null,tr("Choose a directory"));
if (option == JFileChooser.APPROVE_OPTION) {
selectedFile = fileChooser.getSelectedFile();
// if the user accidently click a file, then select the parent directory.
if (!selectedFile.isDirectory()) {
selectedFile = selectedFile.getParentFile();
}
}
if (selectedFile!=null)
return selectedFile.getAbsolutePath()+"/";
return null;
}
/**
* Add a Spectra : useful for saving all the Spectras when saving a session
* @param spectra
*/
public void addSpectra(Spectra spectra){
spectrasProduced.add(spectra);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButtonLanguage;
private javax.swing.JButton jButtonOpenLst;
private javax.swing.JButton jButtonOpenXYEList;
private javax.swing.JButton jButtonParamLst;
private javax.swing.JButton jButtonParamPIXE;
// End of variables declaration//GEN-END:variables
}