/**
* 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.Vigenere.Explanation;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JTextField;
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.KeyboardView;
public class SecondExplanationController extends AbstractVisualizationController {
/**
* Localization instance
*/
private static I18n i18n = Configuration.getInstance().getI18n(SecondExplanationController.class);
/**
* current state
*/
private int state;
/**
* Constructor of the controller
* @param visualizationInfo
*/
public SecondExplanationController(AbstractVisualizationInfo visualizationInfo) {
super(visualizationInfo);
}
/**
* returns the view
* @return view of current step
*/
@Override
public SecondExplanationView getView() {
return (SecondExplanationView)this.view;
}
/**
* loads the view and registers action listeners
*/
@Override
public void loadView() {
this.state = 0;
this.view = new SecondExplanationView();
final JTextField userOutput = getView().getAnswerField();
userOutput.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
getView().answerRight();
if (getView().getKeyboard() != null) {
getView().remove(getView().getKeyboard());
getView().setKeyboard(null);
getView().validate();
getView().repaint();
}
if (userOutput.isEditable()) {
getView().createKeyboard(userOutput, KeyboardView.CHAR_MODE);
}
}
@Override
public void focusLost(FocusEvent e) {
}
});
userOutput
.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (getView().getKeyboard() != null) {
getView().remove(getView().getKeyboard());
getView().setKeyboard(null);
getView().validate();
getView().repaint();
}
state++;
switch (state) {
case 1:
if ((!getView().getAnswer().isEmpty()) && (getView().getAnswer().charAt(0) == 'J')) {
getView().setExplanation("<html><div width=\"1200\">"
+ i18n.tr("Very nice! We found the key 'NJ', now we can decrypt "
+ "the message:")
+ "<br><br>"
+ FirstExplanationView.vigenereText
+ "</div></html>");
getView().visibleFirstState(false);
getView().answerRight();
} else {
getView().answerFalse();
state--;
}
break;
}
}
});
this.getView().getBackButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
state--;
switch (state) {
case -1:
VisualizationContainerController containerController = (VisualizationContainerController)getParentController();
containerController.presentPreviousVisualizationController();
break;
case 0:
getView().setExplanation("<html><div width=\"1200\">"
+ i18n.tr("Now it's your turn! You have to find the second character "
+ "of the key. I was kind enough to give you a diagram of every "
+ "second character encrypted with the second part of the key."
+ "You know what to do:")
+ "</div></html>");
getView().visibleFirstState(true);
break;
}
}
});
this.getView().getNextButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (getView().getKeyboard() != null) {
getView().remove(getView().getKeyboard());
getView().setKeyboard(null);
getView().validate();
getView().repaint();
}
state++;
switch (state) {
case 1:
if ((!getView().getAnswer().isEmpty()) && (getView().getAnswer().charAt(0) == 'J')) {
getView().setExplanation("<html><div width=\"1200\">"
+ i18n.tr("Very nice! We found the key 'NJ', now we can decrypt "
+ "the message:")
+ "<br><br>"
+ FirstExplanationView.vigenereText
+ "</div></html>");
getView().visibleFirstState(false);
getView().answerRight();
} else {
getView().answerFalse();
state--;
}
break;
case 2:
VisualizationContainerController containerController = (VisualizationContainerController)getParentController();
containerController.presentNextVisualizationController();
break;
}
}
});
this.getView().getSkipButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
VisualizationContainerController containerController = (VisualizationContainerController)getParentController();
containerController.presentNextVisualizationController();
}
});
this.getView().getReturnButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
VisualizationContainerController containerController = (VisualizationContainerController)getParentController();
containerController.presentPreviousVisualizationController();
}
});
}
/**
* unloads the view
*/
@Override
public void unloadView() {
this.view = null;
}
/**
* returns the help string
* @return help string
*/
@Override
public String getHelp() {
return i18n.tr("Check the peaks in the histogram and compare them to the other histogram, do you see any similarities?");
}
}