import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.lang.*;
class LastMess extends JFrame implements ActionListener{
LastMess(String title){
super( title );
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); // Extraktion Auflösung Display
GraphicsDevice gd = env.getDefaultScreenDevice();
DisplayMode dm = gd.getDisplayMode();
final int height = dm.getHeight()/4;
final int width = dm.getWidth()/4;
Font okButton = new Font("Arial", Font.BOLD, 10);
Font MeLabel = new Font("Arial", Font.BOLD, 15);
Font leeHo1 = new Font("Arial", Font.BOLD, 16);
Font leeHo2 = new Font("Arial", Font.BOLD, 45);
JButton ok = new JButton("OK");
ok.setFont(okButton);
ok.setSize(width/6, height/2);
ok.setVisible( true );
ok.setActionCommand("OK");
ok.addActionListener( this );
JLabel top = new JLabel("The operation completed successfully");
top.setFont(MeLabel);
top.setSize(width/4, height/2);
top.setVisible( true );
JLabel leer1 = new JLabel("");
top.setSize(width/4, height/2);
top.setVisible( true );
JLabel leer2 = new JLabel("");
top.setSize(width/4, height/2);
top.setVisible( true );
JLabel leerH1 = new JLabel(" ");
leerH1.setFont(leeHo1);
leerH1.setSize(width/4, height/2);
leerH1.setVisible( true );
JLabel leerH2 = new JLabel(" ");
leerH2.setFont(leeHo2);
leerH2.setSize(width/4, height/2);
leerH2.setVisible( true );
JPanel mess = new JPanel();
mess.add(leer1);
mess.add(top);
mess.add(leer2);
JPanel BOX = new JPanel();
JPanel butReg = new JPanel();
butReg.add(leer1);
butReg.add(ok);
butReg.add(leer2);
BOX.setLayout( new BoxLayout( BOX, BoxLayout.Y_AXIS ) );
BOX.add( leerH1 );
BOX.add( mess );
BOX.add( leerH2);
BOX.add( butReg );
add( BOX );
setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );
}
public void actionPerformed( ActionEvent evt ){
if( evt.getActionCommand().equals("OK")){
System.exit( 0 );
}
}
}
class QuestFrame extends JFrame implements ActionListener{
static String Answer = new String("");
String XXXsource, XXXdest, XXXtype, XXXNEGsource;
public QuestFrame(String title, String Name, String Xsource, String Xdest, String Xtype, String XNEGsource){
super( title );
XXXsource = Xsource;
XXXdest = Xdest;
XXXtype = Xtype;
XXXNEGsource = XNEGsource;
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); // Extraktion Auflösung Display
GraphicsDevice gd = env.getDefaultScreenDevice();
DisplayMode dm = gd.getDisplayMode();
final int height = dm.getHeight()/4;
final int width = dm.getWidth()/4;
JButton Yes, Cancel;
JLabel Found, FileName, Que;
JPanel L1 = new JPanel();
JPanel L2 = new JPanel();
JPanel L3 = new JPanel();
JPanel L4 = new JPanel();
JPanel BoxPanel = new JPanel();
Font FL1 = new Font("Arial", Font.BOLD, 10);
Font FL2 = new Font("Arial", Font.BOLD, 14);
Yes = new JButton("Yes");
Yes.setFont(FL1);
Yes.setSize(width/8, height/8);
Cancel = new JButton("Cancel");
Cancel.setFont(FL1);
Cancel.setSize(width/8, height/8);
Found = new JLabel("The following File has been found");
Found.setFont(FL1);
Found.setSize(width/2, height/8);
FileName = new JLabel(Name);
FileName.setFont(FL2);
FileName.setSize(width/2, height/8);
Que = new JLabel("Do you want to process the file?");
Que.setFont(FL1);
Que.setSize(width/2, height/8);
Yes.setActionCommand("Yes");
Cancel.setActionCommand("Cancel");
Yes.addActionListener( this );
Cancel.addActionListener( this );
L1.add(Found);
L2.add(FileName);
L3.add(Que);
L4.add(Yes);
L4.add(Cancel);
BoxPanel.setLayout( new BoxLayout( BoxPanel, BoxLayout.Y_AXIS) );
BoxPanel.add(L1);
BoxPanel.add(L2);
BoxPanel.add(L3);
BoxPanel.add(L4);
add(BoxPanel);
}
public void actionPerformed( ActionEvent evt ){
if( evt.getActionCommand().equals("Yes")){
FREAD XXXbackup = new FREAD();
FREAD XXXfile = new FREAD();
FREAD XXXNEGfile = new FREAD();
FREAD Output = new FREAD();
String XXXcontent = new String("");
String XXXNEGcontent = new String("");
String negativeString = new String("");
String resultNew = new String("");
try{ // kopieren der Datei
XXXbackup.copyFile(XXXsource, XXXdest);
XXXcontent = XXXfile.readFile(XXXsource);
XXXNEGcontent = XXXNEGfile.readFile(XXXNEGsource);
}
catch(IOException e){
e.printStackTrace();
}
FREAD negativeStringPRE = new FREAD();
FREAD resultNewPRE = new FREAD();
try{
negativeString = negativeStringPRE.getNegativeControl(XXXNEGcontent);
resultNew = resultNewPRE.parseContNeg(XXXcontent,negativeString,XXXtype);
Output.writeFile(resultNew,XXXsource);
}
catch(IOException e){
e.printStackTrace();
}
LastMess end = new LastMess("Note!");
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); // Extraktion Auflösung Display
GraphicsDevice gd = env.getDefaultScreenDevice();
DisplayMode dm = gd.getDisplayMode();
final int height = dm.getHeight()/4;
final int width = dm.getWidth()/4;
end.setSize(width, height);
end.setLocationRelativeTo( null );
end.setVisible( true );
end.setResizable( false );
}
if( evt.getActionCommand().equals("Cancel")){
System.exit( 0 );
}
}
}
class FREAD{
FREAD(){ // Konstruktor
}
public static void writeFile(String Content, String Path) throws IOException{
File old = new File(Path);
File newOne = new File(Path);
old.delete();
try{
FileWriter inFile = new FileWriter(newOne, true);
inFile.write(Content);
inFile.flush();
inFile.close();
}
catch(IOException e){
e.printStackTrace();
}
}
public static String parseContNeg(String Content,String Negative, String Type) throws IOException{
Integer insertPoint[] = new Integer[10];
Integer insertPointAlternative[] = new Integer[10];
Integer startPart1 = new Integer(0);
Integer startPart2 = new Integer(0);
Integer startPart3 = new Integer(0);
Integer endPart1 = new Integer(0);
Integer endPart2 = new Integer(0);
Integer endPart3 = new Integer(0);
Integer szSA[] = new Integer[1000];
Integer szSL = new Integer(0);
Integer szSO = new Integer(0);
Integer szSP = new Integer(0);
Integer szA4 = new Integer(0);
Integer number1 = new Integer(0);
Integer number2 = new Integer(0);
Integer a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x;
Integer front1 = new Integer(0);
Integer front2 = new Integer(0);
String part[] = new String[7];
part[0] = "";
String part4pre1 = new String("");
String part4pre2 = new String("");
String NegativeNew[] = new String[20];
String alternativeNumber = new String("");
String letterPRE = new String("");
String letter1 = new String("");
String letter2 = new String("");
String numberPRE = new String("");
String parsedElement = new String("");
String parsedElementPre[] = new String[7];
parsedElementPre[6] = Content;
parsedElementPre[0] = "";
String letterChar[][] = new String[12][12];
letterChar[1][0] = "A"; letterChar[0][1] = "1";
letterChar[2][0] = "B"; letterChar[0][2] = "2";
letterChar[3][0] = "C"; letterChar[0][3] = "3";
letterChar[4][0] = "D"; letterChar[0][4] = "4";
letterChar[5][0] = "E"; letterChar[0][5] = "5";
letterChar[6][0] = "F"; letterChar[0][6] = "6";
letterChar[7][0] = "G"; letterChar[0][7] = "7";
letterChar[8][0] = "H"; letterChar[0][8] = "8";
szSA[1] = 0;
for( a = 1; a <= 5; a++){
for( b = szSA[a]; b <= Content.length() - 28; b++){
if( Content.substring(b, b+21).equals("\"DataType:\",\"Net MFI\"")){
for( c = b; c > 1; c--){
if( Content.substring(c-1,c).equals("\"")){
for(h = c; h >= 7; h--){
if( Content.substring(h-4, h).equals(")\",\"")){
if( Content.substring(h-7,h-6).equals(",")){
letterPRE = Content.substring(h-6,h-5);
numberPRE = Content.substring(h-5,h-4);
}
else{
letterPRE = Content.substring(h-7,h-6);
numberPRE = Content.substring(h-6,h-4);
}
break;
}
}
insertPoint[a] = c+1;
szSA[a+1] = b+21;
break;
}
}
break;
}
if( Content.substring(b, b+19).equals("\"DataType:\",\"Count\"")){
for( d = b; d > 1; d--){
if( Content.substring(d-1,d).equals("\"")){
insertPoint[a] = d+1;
szSA[a+1] = b+19;
break;
}
}
break;
}
if( Content.substring(b, b+25).equals("\"DataType:\",\"Avg Net MFI\"")){
for( e = b; e > 1; e--){
if( Content.substring(e-1,e).equals("\"")){
insertPoint[a] = e+1;
szSA[a+1] = b+25;
break;
}
}
break;
}
if( Content.substring(b, b+19).equals("\"DataType:\",\"Units\"")){
for( f = b; f > 1; f--){
if( Content.substring(f-1,f).equals("\"")){
insertPoint[a] = f+1;
szSA[a+1] = b+19;
break;
}
}
break;
}
if( Content.substring(b, b+28).equals("\"DataType:\",\"Analysis Types\"")){
for( g = b; g > 1; g--){
if( Content.substring(g-1,g).equals("\"")){
insertPoint[a] = g+1;
szA4 = 0;
szSL = 4;
for(l = insertPoint[a]; l > 24; l--){
if(Content.substring(l-24, l).equals("Sample\",\"Dilution Factor")){
insertPointAlternative[5] = l+2;
}
if(Content.substring(l-4,l).equals("M 78")){
szA4++;
if(szA4 == 3){
insertPointAlternative[4] = l+2;
}
}
if(Content.substring(l-12, l).equals("Total Events")){
szSL--;
insertPointAlternative[szSL] = l+2;
if(szSL == 1){
break;
}
}
}
break;
}
}
break;
}
}
}
if( Type.equals("RVP")){
if((letterPRE.equals("G") || letterPRE.equals("H")) && (numberPRE.equals("12"))){
for(j = insertPoint[1]; j >= 12; j--){
if(Content.substring(j-12, j).equals("Total Events")){
for(k = j+1; k <=Content.length(); k++){
if(Content.substring(k, k+1).equals("(")){
alternativeNumber = Content.substring(j+3, k);
Integer altNum = Integer.parseInt(alternativeNumber)/8;
Integer Rest = Integer.parseInt(alternativeNumber)-(altNum*8);
if(Rest > 2){
number1 = altNum + 1; number2 = altNum + 1;
letter1 = letterChar[Rest-2][0]; letter2 = letterChar[Rest-1][0];
}
if(Rest == 1){
number1 = altNum; number2 = altNum;
letter1 = "G";
letter2 = "H";
}
if(Rest == 2){
number1 = altNum; number2 = altNum + 1;
letter1 = "H"; letter2 = "A";
}
if(Rest == 0){
number1 = altNum; number2 = altNum;
letter1 = "F"; letter2 = "G";
}
break;
}
}
break;
}
}
}
else{
for(i = 1; i <= 8; i++){
if(letterPRE.equals(letterChar[i][0])){
if(letterPRE.equals("H") || letterPRE.equals("G")){
if(letterPRE.equals("H")){
letter1 = "A";
letter2 = "B";
number1 = Integer.parseInt(numberPRE) + 1;
number2 = number1;
}
if(letterPRE.equals("G")){
letter1 = "H";
number1 = Integer.parseInt(numberPRE);
letter2 = "A";
number2 = number1 + 1;
}
break;
}
else{
letter1 = letterChar[i+1][0];
letter2 = letterChar[i+2][0];
number1 = Integer.parseInt(numberPRE);
number2 = Integer.parseInt(numberPRE);
break;
}
}
}
}
}
else{
if(letterPRE.equals("H") && (numberPRE.equals("12"))){
for(v = insertPoint[1]; v >= 12; v--){
if(Content.substring(v-12, v).equals("Total Events")){
for(w = v+1; w <=Content.length(); w++){
if(Content.substring(w, w+1).equals("(")){
alternativeNumber = Content.substring(v+3, w);
Integer altNum = Integer.parseInt(alternativeNumber)/8;
Integer Rest = Integer.parseInt(alternativeNumber)-(altNum*8);
if(Rest > 1){
number1 = altNum + 1;
letter1 = letterChar[Rest-1][0];
}
if(Rest == 1){
number1 = altNum;
letter1 = "H";
}
if(Rest == 0){
number1 = altNum;
letter1 = "G";
}
break;
}
}
break;
}
}
}
else{
for(i = 1; i <= 8; i++){
if(letterPRE.equals(letterChar[i][0])){
if(letterPRE.equals("H")){
letter1 = "A";
number1 = Integer.parseInt(numberPRE) + 1;
break;
}
else{
letter1 = letterChar[i+1][0];
number1 = Integer.parseInt(numberPRE);
break;
}
}
}
}
}
if( Type.equals("RVP")){
for(m = 1; m <= 8; m++){
if(letter1.equals(letterChar[m][0])){
front1 = (number1-1)*8 + Integer.parseInt(letterChar[0][m]);
front2 = front1 + 1;
if(front1 > 10){
NegativeNew[1] = Negative.replace("WW", Integer.toString(front1));
}
else{
NegativeNew[1] = Negative.replace("WW", ("" + Integer.toString(front1)));
}
if(front2 > 10){
NegativeNew[2] = NegativeNew[1].replace("XX", Integer.toString(front2));
}
else{
NegativeNew[2] = NegativeNew[1].replace("XX", ("" + Integer.toString(front2)));
}
if(number1 > 10){
NegativeNew[3] = NegativeNew[2].replace("ZZZ", (letter1 + Integer.toString(number1)));
}
else{
NegativeNew[3] = NegativeNew[2].replace("ZZZ", (letter1 + "" + Integer.toString(number1)));
}
if(number2 > 10){
NegativeNew[4] = NegativeNew[3].replace("YYY", (letter2 + Integer.toString(number2)));
}
else{
NegativeNew[4] = NegativeNew[3].replace("YYY", (letter2 + "" + Integer.toString(number2)));
}
break;
}
}
for(o = 0; o <= (NegativeNew[4].length())-2; o++){ //an der letzten Zeile in der Neg. Control muss UNBEDINGT ein "//END" stehen, sonst wird "\n" nicht geunden!!
if(NegativeNew[4].substring(o, o+1).equals("\n")){
szSO++;
if(szSO == 1){
startPart1 = o+1;
}
if(szSO == 3){
endPart1 = o;
startPart2 = o+2;
}
if(szSO == 6){
endPart2 = o;
startPart3 = o+2;
}
if(szSO == 9){
endPart3 = o;
break;
}
}
}
part[1] = NegativeNew[4].substring(startPart1, endPart1) + "\n";
part[2] = NegativeNew[4].substring(startPart1, endPart1) + "\n";
part[3] = NegativeNew[4].substring(startPart2, endPart2) + "\n";
part[5] = NegativeNew[4].substring(startPart3, endPart3) + "\n";
for(q = 0; q <= part[1].length()-11; q++){
if(part[1].substring(q, q+11).equals("Run control")){
for(r = q; r <= part[1].length(); r++){
if(part[1].substring(r, r+1).equals("\n")){
part4pre1 = part[1].substring(q-1,r+1);
break;
}
}
}
if(part[1].substring(q, q+8).equals("Negative")){
part4pre2 = part[1].substring(q-1);
part[4] = part4pre1 + part4pre2;
break;
}
}
}
else{
for(n = 1; n <= 8; n++){
if(letter1.equals(letterChar[n][0])){
front1 = (number1-1)*8 + Integer.parseInt(letterChar[0][n]);
if(front1 > 10){
NegativeNew[1] = Negative.replace("XX", Integer.toString(front1));
}
else{
NegativeNew[1] = Negative.replace("XX", ("" + Integer.toString(front1)));
}
if(number1 > 10){
NegativeNew[2] = NegativeNew[1].replace("YYY", (letter1 + Integer.toString(number1)));
}
else{
NegativeNew[2] = NegativeNew[1].replace("YYY", (letter1 + "" + Integer.toString(number1)));
}
}
}
for(p = 0; p <= (NegativeNew[2].length())-2; p++){ //an der letzten Zeile in der Neg. Control muss UNBEDINGT ein "//END" stehen, sonst wird "\n" nicht geunden!!
if(NegativeNew[2].substring(p, p+1).equals("\n")){
szSP++;
if(szSP == 1){
startPart1 = p+1;
}
if(szSP == 2){
endPart1 = p;
startPart2 = p+2;
}
if(szSP == 4){
endPart2 = p;
startPart3 = p+2;
}
if(szSP == 6){
endPart3 = p;
break;
}
}
}
part[1] = NegativeNew[2].substring(startPart1, endPart1) + "\n";
part[2] = NegativeNew[2].substring(startPart1, endPart1) + "\n";
part[3] = NegativeNew[2].substring(startPart2, endPart2) + "\n";
part[5] = NegativeNew[2].substring(startPart3, endPart3) + "\n";
for(s = 0; s <= part[1].length()-8; s++){
if(part[1].substring(s, s+8).equals("Negative")){
part[4] = part[1].substring(s-1,part[1].length());
break;
}
}
}
if( Integer.parseInt(numberPRE) > number1){
for( t = 5; t >= 1; t--){
parsedElementPre[t] = parsedElementPre[t+1].substring(0,insertPointAlternative[t]) + part[t] + parsedElementPre[t+1].substring(insertPointAlternative[t]);
}
}
else{
if( Integer.parseInt(numberPRE) < number1 ){
for( t = 5; t >= 1; t--){
parsedElementPre[t] = parsedElementPre[t+1].substring(0,insertPoint[t]) + part[t] + parsedElementPre[t+1].substring(insertPoint[t]);
}
}
else{
Integer pre = new Integer(0);
Integer let = new Integer(0);
for( u = 1; u <= 8; u++){
if( letterChar[u][0].equals(letterPRE)){
pre = u;
}
if( letterChar[u][0].equals(letter1)){
let = u;
}
}
if( pre < let){
for( t = 5; t >= 1; t--){
parsedElementPre[t] = parsedElementPre[t+1].substring(0,insertPoint[t]) + part[t] + parsedElementPre[t+1].substring(insertPoint[t]);
}
}
else{
for( t = 5; t >= 1; t--){
parsedElementPre[t] = parsedElementPre[t+1].substring(0,insertPointAlternative[t]) + part[t] + parsedElementPre[t+1].substring(insertPointAlternative[t]);
}
}
}
}
parsedElement = parsedElementPre[1].substring(1);
return parsedElement;
}
public static String getNegativeControl(String NEGcontent) throws IOException{
String lastStr = new String("");
Integer startBlock[] = new Integer[1000];
Integer endBlock[] = new Integer[1000];
Integer szSA[] = new Integer[1000];
Integer negChoice = new Integer(0);
Boolean stopSA = new Boolean( false );
Integer a,b,c;
szSA[1] = 0;
for( a = 1; a < NEGcontent.length()-1; a++){
if( stopSA == true){
break;
}
for( b = szSA[a]; b <= NEGcontent.length()-3; b++){
if( NEGcontent.substring(b, b+3).equals(a + ")" + "\n")){
startBlock[a] = b;
for( c = startBlock[a]; c <= NEGcontent.length()-3; c++){
if( NEGcontent.substring(c,c+3).equals("\n" + "\n" + "\n")){
endBlock[a] = c+3;
szSA[a+1] = c+1;
break;
}
if( !NEGcontent.substring(c,c+3).equals("\n" + "\n" + "\n") && c == (NEGcontent.length()-3)){
endBlock[a] = c-2;
lastStr = NEGcontent.substring(startBlock[a], startBlock[a]+1);
stopSA = true;
break;
}
}
break;
}
}
}
int lastInt = Integer.parseInt(lastStr);
Random rand = new Random();
negChoice = rand.nextInt(lastInt) +1;
return NEGcontent.substring(startBlock[negChoice], endBlock[negChoice]);
}
// ENDE TEIL 1