edu.kit.iks.Cryptographics.Caesar.Demonstration.IntroductionController.java Source code

Java tutorial

Introduction

Here is the source code for edu.kit.iks.Cryptographics.Caesar.Demonstration.IntroductionController.java

Source

/**
 * Copyright (c) 2014 Matthias Jaenicke <matthias.jaenicke@student.kit.edu>,
 * Matthias Plappert <undkc@student.kit.edu>,
 * Julien Duman <uncyc@student.kit.edu>, 
 * Christian Dreher <uaeef@student.kit.edu>,
 * Wasilij Beskorovajnov <uajkm@student.kit.edu> and 
 * Aydin Tekin <aydin.tekin@student.kit.edu>
 * 
 * Released under the MIT license (refer to LICENSE.md)
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package edu.kit.iks.Cryptographics.Caesar.Demonstration;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.io.InputStream;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.xnap.commons.i18n.I18n;

import edu.kit.iks.Cryptographics.VisualizationContainerController;
import edu.kit.iks.CryptographicsLib.AbstractVisualizationController;
import edu.kit.iks.CryptographicsLib.AbstractVisualizationInfo;
import edu.kit.iks.CryptographicsLib.Configuration;
import edu.kit.iks.CryptographicsLib.ImageView;
import edu.kit.iks.CryptographicsLib.Logger;
import edu.kit.iks.CryptographicsLib.MouseClickListener;

/**
 * This class is the controller of the view CFirstView.
 * 
 * @author Wasilij Beskorovajnov.
 * 
 */
public class IntroductionController extends AbstractVisualizationController {

    /**
     * Localization instance
     */
    private static I18n i18n = Configuration.getInstance().getI18n(IntroductionController.class);

    /**
     * Variable holding track of the current step user has proceeded in the animation. if it is 0,
     * then it is the last step.
     */
    private int introductionStep;

    /**
     * Caesar root element from the xml file.
     */
    private Element caesarResources;

    /**
     * Constructor.
     * 
     * @param visualizationInfo
     */
    public IntroductionController(AbstractVisualizationInfo visualizationInfo) {
        super(visualizationInfo);

        SAXBuilder saxBuilder = new SAXBuilder();

        // obtain file object
        InputStream is = this.getClass().getResourceAsStream("/caesar/CaesarResources.xml");

        try {
            // converted file to document object
            Document document = saxBuilder.build(is);

            // get root node from xml
            this.caesarResources = document.getRootElement();
        } catch (JDOMException | IOException e) {
            Logger.error(e);
        }
    }

    /**
     * Gets the view
     * 
     * @return The view of this controller
     */
    @Override
    public IntroductionView getView() {
        return (IntroductionView) this.view;
    }

    @Override
    public void loadView() {
        this.introductionStep = 1;
        this.view = new IntroductionView();

        this.setResourceImage("CaesarIdea");

        this.getView().getNextButton().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                VisualizationContainerController containerController = (VisualizationContainerController) IntroductionController.this
                        .getParentController();
                containerController.presentNextVisualizationController();
            }
        });

        this.getView().getProceed().addMouseListener(new MouseClickListener() {
            @Override
            public void clicked(MouseEvent e) {
                IntroductionController.this.proceedIntroduction(IntroductionController.this.getAnimationStep());
            }
        });

    }

    // ----------------------------------------------------------//
    // --------------------private methods-----------------------//

    private void proceedIntroduction(int step) {
        switch (step) {
        case 1:
            this.step1();
            break;
        case 2:
            this.step2();
            break;
        case 3:
            this.step3();
            break;
        case 4:
            this.step4();
            break;
        default:
            Logger.debug("IntroductionController", "proceedIntroduction", "Invalid introduction step!");
        }
    }

    private void setResourceImage(String resourceID) {
        String path = "";
        try {
            path = IntroductionController.this.getCaesarResources().getChild("Introduction").getChild(resourceID)
                    .getAttributeValue("path");
        } catch (NullPointerException nullException) {
            //Element not found.
            System.out.println("[NullPointerException] Ressource not found.");
            nullException.printStackTrace();
        }

        GridBagConstraints imgConstraint = new GridBagConstraints();
        imgConstraint.gridx = 1;
        imgConstraint.gridy = 0;
        ImageView imageToSet = new ImageView(path);
        this.getView().getAnimationContainer().add(imageToSet, imgConstraint);
    }

    private void step1() {
        this.introductionStep++;
        this.getView().getAnimationContainer().removeAll();
        this.getView().getExplanation()
                .setText("<html><div style=\"width:600px;\">" + IntroductionController.i18n
                        .tr("Unfortunately his courier took the way through the forest, where Kryptolix chased "
                                + "some wild boars.")
                        + "</div></html>");

        this.setResourceImage("Courier");

        this.getView().validate();
        this.getView().getAnimationContainer().repaint();

    }

    private void step2() {
        this.introductionStep++;
        this.getView().getAnimationContainer().removeAll();
        this.getView().getExplanation().setText("<html><div style=\"width:600px;\">" + IntroductionController.i18n
                .tr("When Kryptolix noticed the unsuspecting and whistling roman courier, he punched him back to Rome as the crow flies. "
                        + "But the courier had lost his invaluable scroll!")
                + "</div></html>");
        this.setResourceImage("FlyingCourier");

    }

    private void step3() {
        this.introductionStep++;
        this.getView().getAnimationContainer().removeAll();
        this.getView().getExplanation().setText("<html><div style=\"width:700px;\">" + IntroductionController.i18n
                .tr("When reading the scroll the courier lost, Kryptolix identified it as Caesar's plan to "
                        + "conquer Gallia. Because of this, Kryptolix and his friends were able to defeat Caesar once more!")
                + "</div></html>");

        this.setResourceImage("Kryptolix");

        this.getView().validate();
        this.getView().repaint();
    }

    private void step4() {
        this.getView().getAnimationContainer().removeAll();
        this.getView().getExplanation().setText("<html><div style=\"width:700px;\">" + IntroductionController.i18n
                .tr("Caesar was raging! While he was torturing some Gauls, suddenly an hellacious and foolproof idea "
                        + "crossed his mind. In his next message he would encrypt his name! Hue Hue Hue. Help him!"));
        GridBagLayout introLayout = (GridBagLayout) this.getView().getLayout();
        this.getView().getNextButton().setText(IntroductionController.i18n.tr("To Caesar's idea"));
        GridBagConstraints finishConstraints = new GridBagConstraints();
        finishConstraints.gridx = 1;
        finishConstraints.gridy = 2;
        finishConstraints.insets = new Insets(0, 250, 0, 0);
        introLayout.setConstraints(this.getView().getNextButton(), finishConstraints);

        this.setResourceImage("CaesarAngry");
        this.getView().remove(this.getView().getProceed());
        this.getView().setProceed(null);

        this.getView().repaint();
        this.getView().validate();

    }

    // ----------------------------------------------------------//
    // ---------------------Getter/Setter-------------------------//
    /**
     * @return the animationStep
     */
    public int getAnimationStep() {
        return this.introductionStep;
    }

    @Override
    public String getHelp() {
        String help = IntroductionController.i18n.tr("If you want to hear the awesome legend about Caesar "
                + "and Kryptolix press the button below the text. Otherwise you can skip this with the button in the top right corner!");

        return help;
    }

    @Override
    public void unloadView() {
        this.view = null;
    }

    /**
     * @return the caesarResources
     */
    public Element getCaesarResources() {
        return caesarResources;
    }

    /**
     * @param caesarResources
     *            the caesarResources to set
     */
    public void setCaesarResources(Element caesarResources) {
        this.caesarResources = caesarResources;
    }

}