/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package feuille.xtrn;
import feuille.xtrn.XtrnLib.EffectType;
import feuille.xtrn.XtrnLib.ModeType;
import feuille.xtrn.XtrnLib.TreatmentType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
/**
*
* @author Yves
*/
public class XKCFrame extends javax.swing.JFrame {
XKCStep0 xkc0 = new XKCStep0();
XKCStep1 xkc1 = new XKCStep1();
XKCStep2A xkc2A = new XKCStep2A();
XKCStep2B xkc2B = new XKCStep2B();
XKCStep2C xkc2C = new XKCStep2C();
XKCStep2D xkc2D = new XKCStep2D();
XKCStep3 xkc3 = new XKCStep3();
XKCStep4 xkc4 = new XKCStep4();
XKCStep5 xkc5 = new XKCStep5();
ChooseFX cfx = new ChooseFX();
EffectType selectedEF = EffectType.Normal;
String commands = "";
ModeType selectedMode = ModeType.Normal;
TreatmentType selectedTreatmant = TreatmentType.Line;
String name = "", authors = "", description = "";
List<String> outList = new ArrayList<>();
String folder = "";
/**
* Creates new form XKCFrame
*/
public XKCFrame() {
initComponents();
init();
}
private void init(){
try {
javax.swing.UIManager.setLookAndFeel(new NimbusLookAndFeel());
javax.swing.SwingUtilities.updateComponentTreeUI(this);
} catch (UnsupportedLookAndFeelException exc) {
System.out.println("Nimbus LookAndFeel not loaded : "+exc);
}
JOptionPane.showMessageDialog(null, "1a");
getContentPane().add(xkc0);
pack();
setLocationRelativeTo(null);
xkc0.getNextButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextFromZero();
}
});
xkc1.getCreateFXButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextCreateFX();
}
});
xkc1.getSelectFXButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextSelectFX();
}
});
xkc2A.getNextButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextFrom2A();
}
});
xkc2B.getNextButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextFrom2B();
}
});
xkc2C.getNextButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextFrom2C();
}
});
xkc2D.getNextButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextFrom2D();
}
});
xkc3.getNextButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextFrom3();
}
});
xkc4.getNextButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextFrom4();
}
});
cfx.getNextButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextFromCFX();
}
});
}
private void nextFromZero(){
selectedEF = xkc0.getSelectedEffectType();
if(selectedEF == EffectType.Normal | selectedEF == EffectType.Periodic
| selectedEF == EffectType.Random | selectedEF == EffectType.Symmetric){
getContentPane().removeAll();
getContentPane().add(xkc3);
pack();
setLocationRelativeTo(null);
}
}
private void nextCreateFX(){
getContentPane().removeAll();
if(selectedTreatmant == TreatmentType.Line){
if(selectedEF == EffectType.Normal){
getContentPane().add(xkc2B);
}else{
getContentPane().add(xkc2A);
}
}else{
if(selectedMode == ModeType.Character){
if(selectedEF == EffectType.Normal){
getContentPane().add(xkc2B);
}else{
getContentPane().add(xkc2A);
}
}else{
if(selectedEF == EffectType.Normal){
getContentPane().add(xkc2D);
}else{
getContentPane().add(xkc2C);
}
}
}
pack();
setLocationRelativeTo(null);
}
private void nextSelectFX(){
List<AegiObject> aegilist = new ArrayList<>();
try{
XmlAegiHandler hd = new XmlAegiHandler(folder+File.separator+"saveDataBase.xml");
aegilist = hd.getAegiObjectList();
}catch(IOException | ParserConfigurationException | SAXException e){
JOptionPane.showMessageDialog(this, e.getMessage());
}
List<AegiObject> sublist = new ArrayList<>();
for(AegiObject ao : aegilist){
if(ao.getEffectType() == selectedEF
&& ao.getModeType() == selectedMode
&& ao.getTreatmentType() == selectedTreatmant){
sublist.add(ao);
}
}
if(sublist.isEmpty()){
JOptionPane.showMessageDialog(this, "There is no effects.");
}else{
getContentPane().removeAll();
getContentPane().add(cfx);
cfx.setData(sublist);
pack();
setLocationRelativeTo(null);
}
}
private void nextFrom2A(){
commands = xkc2A.getCommands();
getContentPane().removeAll();
getContentPane().add(xkc4);
pack();
setLocationRelativeTo(null);
}
private void nextFrom2B(){
commands = xkc2B.getCommands();
getContentPane().removeAll();
getContentPane().add(xkc4);
pack();
setLocationRelativeTo(null);
}
private void nextFrom2C(){
commands = xkc2C.getCommands();
getContentPane().removeAll();
getContentPane().add(xkc4);
pack();
setLocationRelativeTo(null);
}
private void nextFrom2D(){
commands = xkc2D.getCommands();
getContentPane().removeAll();
getContentPane().add(xkc4);
pack();
setLocationRelativeTo(null);
}
private void nextFrom3(){
selectedMode = xkc3.getSelectedModeType();
selectedTreatmant = xkc3.getSelectedTreatmentType();
getContentPane().removeAll();
getContentPane().add(xkc1);
pack();
setLocationRelativeTo(null);
}
private void nextFrom4(){
name = xkc4.getEffectName();
authors = xkc4.getEffectAuthors();
description = xkc4.getEffectDescription();
if(name.isEmpty()==false
&& authors.isEmpty()==false
&& description.isEmpty()==false){
List<AegiObject> aegilist = new ArrayList<>();
try {
XmlAegiHandler hd = new XmlAegiHandler(folder+File.separator+"saveDataBase.xml");
aegilist = hd.getAegiObjectList();
} catch (ParserConfigurationException | SAXException | IOException ex) {
Logger.getLogger(XKCFrame.class.getName()).log(Level.SEVERE, null, ex);
}
AegiObject ao = new AegiObject();
ao.setAuthors(authors);
ao.setCommands(commands);
ao.setDescription(description);
ao.setEffectType(selectedEF);
ao.setModeType(selectedMode);
ao.setName(name);
ao.setTreatmentType(selectedTreatmant);
aegilist.add(ao);
XmlAegiWriter wr = new XmlAegiWriter();
wr.setAegiObjectList(aegilist);
wr.createAegiBase(folder+File.separator+"saveDataBase.xml");
doFx();
}else{
JOptionPane.showMessageDialog(this, "Please fill the form.");
}
}
private void nextFromCFX(){
commands = cfx.getCommmands();
if(commands.isEmpty()){
JOptionPane.showMessageDialog(this, "Please choose an effect.");
}else{
cfx.rewriteXmlDataBase(folder);
doFx();
}
}
private void doFx(){
getContentPane().removeAll();
getContentPane().add(xkc5);
pack();
setLocationRelativeTo(null);
outList.clear();
try {
List<String> inList = readFile(folder+File.separator+"in.txt");
List<String> keyzList = readFile(folder+File.separator+"line_keywords.txt");
List<String> skWholeList = readFile(folder+File.separator+"syllable_keywords.txt");
List<String> ckWholeList = readFile(folder+File.separator+"char_keywords.txt");
int count = 0;
for(String s : inList){
String keyzOfLine = keyzList.get(count);
List<String> keyzOfSyllables = getSylKeywords(skWholeList, count);
List<String> keyzOfChars = getCharKeywords(ckWholeList, count);
count += 1;
List<String> newlineList = new ArrayList<>();
xkc5.setNumber(count);
if(selectedEF == EffectType.Normal && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Line){
newlineList = XtrnOps.getForNormalNormalLine(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Periodic && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Line){
newlineList = XtrnOps.getForPeriodicNormalLine(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Random && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Line){
newlineList = XtrnOps.getForRandomNormalLine(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Symmetric && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Line){
newlineList = XtrnOps.getForSymmetricNormalLine(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Normal && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Line){
newlineList = XtrnOps.getForNormalCharacterLine(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Periodic && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Line){
newlineList = XtrnOps.getForPeriodicCharacterLine(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Random && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Line){
newlineList = XtrnOps.getForRandomCharacterLine(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Symmetric && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Line){
newlineList = XtrnOps.getForSymmetricCharacterLine(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Normal && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Syllable){
newlineList = XtrnOps.getForNormalNormalSyllable(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Periodic && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Syllable){
newlineList = XtrnOps.getForPeriodicNormalSyllable(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Random && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Syllable){
newlineList = XtrnOps.getForRandomNormalSyllable(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Symmetric && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Syllable){
newlineList = XtrnOps.getForSymmetricNormalSyllable(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Normal && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Syllable){
newlineList = XtrnOps.getForNormalCharacterSyllable(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Periodic && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Syllable){
newlineList = XtrnOps.getForPeriodicCharacterSyllable(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Random && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Syllable){
newlineList = XtrnOps.getForRandomCharacterSyllable(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Symmetric && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Syllable){
newlineList = XtrnOps.getForSymmetricCharacterSyllable(s, commands, keyzOfLine, keyzOfSyllables);
}else if(selectedEF == EffectType.Normal && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Character){
newlineList = XtrnOps.getForNormalNormalCharacter(s, commands, keyzOfLine, keyzOfSyllables, keyzOfChars);
}else if(selectedEF == EffectType.Periodic && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Character){
newlineList = XtrnOps.getForPeriodicNormalCharacter(s, commands, keyzOfLine, keyzOfSyllables, keyzOfChars);
}else if(selectedEF == EffectType.Random && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Character){
newlineList = XtrnOps.getForRandomNormalCharacter(s, commands, keyzOfLine, keyzOfSyllables, keyzOfChars);
}else if(selectedEF == EffectType.Symmetric && selectedMode == ModeType.Normal && selectedTreatmant == TreatmentType.Character){
newlineList = XtrnOps.getForSymmetricNormalCharacter(s, commands, keyzOfLine, keyzOfSyllables, keyzOfChars);
}else if(selectedEF == EffectType.Normal && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Character){
newlineList = XtrnOps.getForNormalNormalCharacter(s, commands, keyzOfLine, keyzOfSyllables, keyzOfChars);
}else if(selectedEF == EffectType.Periodic && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Character){
newlineList = XtrnOps.getForPeriodicNormalCharacter(s, commands, keyzOfLine, keyzOfSyllables, keyzOfChars);
}else if(selectedEF == EffectType.Random && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Character){
newlineList = XtrnOps.getForRandomNormalCharacter(s, commands, keyzOfLine, keyzOfSyllables, keyzOfChars);
}else if(selectedEF == EffectType.Symmetric && selectedMode == ModeType.Character && selectedTreatmant == TreatmentType.Character){
newlineList = XtrnOps.getForSymmetricNormalCharacter(s, commands, keyzOfLine, keyzOfSyllables, keyzOfChars);
}
for(String output : newlineList){
addOutputLine(output);
}
}
writeFile(folder+File.separator+"out.txt", outList);
xkc5.setNumber(6000);
System.exit(0);
} catch (IOException ex) {
Logger.getLogger(XKCFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void addOutputLine(String outputLine){
outList.add(outputLine);
}
private void writeFile(String outFile, List<String> list) throws IOException{
try (FileWriter fw = new FileWriter(outFile); PrintWriter pw = new PrintWriter(fw)) {
for(String s : list){
pw.println(s);
}
}
}
private List<String> readFile(String inFile) throws FileNotFoundException, IOException{
List<String> inList = new ArrayList<>();
FileReader fr = new FileReader(inFile);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
inList.add(line);
}
return inList;
}
public void setFolder(String folder){
this.folder = folder;
}
private List<String> getSylKeywords(List<String> lineKeywordsForSyl, int index){
List<String> sk = new ArrayList<>();
String inline = lineKeywordsForSyl.get(index);
String[] table = inline.split("_");
sk.addAll(Arrays.asList(table));
return sk;
}
private List<String> getCharKeywords(List<String> lineKeywordsForChar, int index){
List<String> sk = new ArrayList<>();
String inline = lineKeywordsForChar.get(index);
inline = inline.replaceAll("¤SPACE_CHAR", "");
String[] table = inline.split("¤");
sk.addAll(Arrays.asList(table));
return sk;
}
/**
* 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() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
pack();
}// </editor-fold>//GEN-END:initComponents
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(XKCFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new XKCFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
}