RJSKryp for JavaFX 1.01

(c) Ralph Steyer - rjs.de - www.javafx-buch.de

Der Quelltext

RJSKryp.fx
/*
 * RJSKryp.fx
 *
 * Created on 02.01.2009, 11:33:02
 */


package rjskryp;

import java.lang.System;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.ext.swing.SwingButton;
import javafx.ext.swing.SwingHorizontalAlignment;
import javafx.ext.swing.SwingLabel;
import javafx.ext.swing.SwingSlider;
import javafx.ext.swing.SwingTextField;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
import javax.swing.JFileChooser;
import rjskryp.Kodier;

/**
 * @author Ralph Steyer - RJS EDV-KnowHow - www.rjs.de
 * Kodierungsprogramm mit JavaFX Script
 *
 * Hauptprogramm - die GUI im Wesentlichen mit JavaFX Script, die Kodierung selbst Java
 *
 * Das Programm verwendet zum Kodieren und Dekodieren von Dateien einen Verschlüsselungs-
 * und Entschlüsselungalgorithmus, der auf einer Verschiebung
 * der Zeichenkodierung basiert. Der verwendete Algorithmus ist auf
 * Grundlage der Cäsar-Chiffre konzipiert. Dies ist ein einfacher
 * Verschiebungsalgorithmus. Diese Verschlüsselungsmethode lautet wie folgt:
 * für jeden im Quelltext vorkommendes Zeichen setze im Chiffretext einen um
 * einen festen Parameter versetztes Zeichen.
 */

var scale = 1.0;
var color = Color.SILVER;
Timeline {
    repeatCount: Timeline.INDEFINITE
    keyFrames: [
        KeyFrame {
            time: 10s
            canSkip: true
            values: [
                scale => -1.0 tween Interpolator.EASEBOTH
                color => Color.BLUE
            ]
        }
    ]
}.play();
var f = new JFileChooser(); // Eine Swing-Komponente aus javax.swing

var label1=SwingLabel {
    font:Font{
        name:"Tahoma" 
        size: 25
    }
    text: "RJSKryp for JavaFX - Version 1.01 - www.rjs.de"
    foreground:Color.SILVER
    horizontalAlignment:SwingHorizontalAlignment.CENTER
    width:600
    
}

var meinSlider=SwingSlider {
    minimum: 0
    maximum: 255
    value: 3
    vertical: false
}

var buttonGruppe=HBox{
    spacing: 10
    translateY:50
    translateX:100
    content:[
        SwingButton {
            text: "Kodieren"
            action: function() {
                 var returnVal = f.showOpenDialog(null);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    var quelle = f.getSelectedFile();
                    returnVal = f.showSaveDialog(null);
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                       var ziel = f.getSelectedFile();
                        if (ziel.exists()) then {
                            nachrichten1.text =
                            "Achtung! Zieldatei schon vorhanden. Vorgang wird abgebrochen";
                        }
                        else {
                            nachrichten1.text ="Verarbeitung läuft";
                            nachrichten2.text ="";
                            if (
                            new Kodier().kodiere(quelle, ziel, true,meinSlider.value) == 0) then {
                                nachrichten1.text =
                                "Verarbeitete Datei:\n {quelle}";
                                nachrichten2.text =
                                "Erstellte Datei:\n {ziel}";
                            }
                            else {
                                nachrichten1.text="Fehler bei der Verarbeitung";
                            }
                        }
                    }
                }
                else {
                       nachrichten1.text ="";
                        nachrichten2.text ="";

            }

            }
        },
        SwingButton {
            text: "Dekodieren"
            action: function() {
                nachrichten1.text ="Verarbeitung läuft";
                nachrichten2.text ="";
                var returnVal = f.showOpenDialog(null);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    var quelle = f.getSelectedFile();
                    returnVal = f.showSaveDialog(null);
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                        var ziel = f.getSelectedFile();
                        new Kodier().kodiere(quelle, ziel, false,meinSlider.value);
                    }
                }

            }
        },
        SwingButton {
            text: "Ende"
            action: function() {
                System.exit(0);
            }
        }
        ,
        meinSlider
    ]

}
var verschiebung=SwingLabel {
    text: bind  "Verschiebungsfaktor: {meinSlider.value}"
    foreground:Color.SILVER
    translateX:400
    translateY:80
    font:Font{
        name:"Tahoma" 
        size: 12
    }
    width:300
}
var nachrichten1=SwingTextField {
    columns: 10
    text: ""
    editable: false
    translateX:10
    translateY:150
    foreground:Color.RED
    font:Font{
        name:"Tahoma"
        size: 12
    }
    width:575
    height:20
    background:Color.SILVER

}
var nachrichten2=SwingTextField {
    columns: 10
    text: ""
    editable: false
    translateX:10
    translateY:170
    foreground:Color.RED
    font:Font{
        name:"Tahoma"
        size: 12
    }
    width:575
    height:20
    background:Color.SILVER

}

Stage {
    title: "RJSKryp for JavaFX - Version 1.01 - www.rjs.de"
    width: 600
    height: 400
    scene: Scene {
        fill:RadialGradient {
            centerX: 375
            centerY: 175
            radius: 390
            proportional: false
            stops: [
                Stop {
                    offset: 0.0
                color: Color.BLUE},
                Stop {
                    offset: 1.0
                color: Color.BLACK}
            ] // stops

        } // RadialGradient
        content: [VBox{
                spacing: 10
                content:[
                    label1
                ]
            },
            buttonGruppe,
            verschiebung,
            nachrichten1,
            nachrichten2,
          
            Text {
                translateX:200
                translateY:150

                font: Font {
                    size: 14
                }
                x: 110,
                y: 90
                textAlignment: TextAlignment.CENTER
                content:"RJS EDV-KnowHow\n\nCopyright: Ralph Steyer\nInternet: www.rjs.de - www.javafx-buch.de\nBlog: rjsedv.blogspot.com"
                fill: bind color
                effect: DropShadow {
                    offsetX: 10
                    offsetY:5
                    color: Color.color(0.2, 0.2, 0.1)
                };  // DropShadow
                transforms: Scale{
                    x: 1
                    y: bind scale
                    pivotX: 100,
                    pivotY: 100
                } // Scale
            }  //Text
            
        ]
    }
    visible:true
}

Kodier.java

package rjskryp;

/**
 * @author Ralph Steyer - RJS EDV-KnowHow - www.rjs.de
 * Kodierungsprogramm mit JavaFX Script
 * Java-Klasse zur Bereitstellung der Dateizugriffe und der eigentlichen Kodierung
 */
import java.io.*;

public class Kodier {

	/**
	 * Die Methode zum Kodieren und Dekodieren. Dazu wird ein Verschlüsselungs-
	 * und Entschlüsselungalgorithmus implementiert, der auf einer Verschiebung
	 * der Zeichenkodierung basiert. Der verwendete Algorithmus ist auf
	 * Grundlage der Cäsar-Chiffre konzipiert. Dies ist ein einfacher
	 * Verschiebungsalgorithmus. Diese Verschlüsselungsmethode lautet wie folgt:
	 * für jeden im Quelltext vorkommendes Zeichen setze im Chiffretext einen um
	 * einen festen Parameter versetztes Zeichen.
	 *
	 * Als Übergabeargumente werden die Quelldatei und Zieldatei sowie ein Flag
	 * zur Steuerung, ob Kodieren oder Dekodieren, und die Verschiebung
	 * angegeben
	 *
	 * @param quelle2
	 *            zu kodierende oder dekodierende Datei
	 * @param ziel2
	 *            die Zieldatei mit dem veränderten Inhalt
	 * @param kodieren
	 *            Angabe ob kodieren (true) oder dekodiern (false)
	 * @param verschiebung
	 *            Faktor der Verschiebung
	 */
	public int kodiere(File quelle2, File ziel2, boolean kodieren,
			int verschiebung) {
		// Erstellen eines Eingabe- und eines
		// Ausgabestroms.

		// Quelle nur zum Lesen öffnen
		RandomAccessFile quelle=null, ziel=null;
		try {
			quelle = new RandomAccessFile(quelle2, "r");
			ziel = new RandomAccessFile(ziel2, "rw");
			while (true) {
				// Einlesen eines Bytes aus der Quelle
				byte b = (byte) quelle.readByte();
				/*
				 * Hier findet die Verschiebung statt. Wir kümmern uns selbst um
				 * den Wertebereich von dem Datentyp byte, indem wir den
				 * Modulo-Operator verwenden.
				 */
				if (kodieren)
					b = (byte) ((b + verschiebung));
				else
					b = (byte) ((b - verschiebung));
				// Schreiben eines Bytes in die Zieldatei
				ziel.writeByte(b);
			}
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			return 1;
		}

		// Dateiende der Quelldatei erreicht.
		catch (EOFException e) {
			try {
				quelle.close();
				ziel.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

			return 0;
		} catch (IOException e) {
			return 2;
		}

	}

}
Dipl. Math. Ralph Steyer - Fon 0171/5489948 - Fax 06198/577653 - E-Mail: ralph.steyer@rjs.de - www.rjs.de