// Copyright 2012 Georg-August-Universität Göttingen, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package de.ugoe.cs.autoquest.plugin.html; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.codec.binary.Base64; import org.xml.sax.SAXException; import de.ugoe.cs.util.StringTools; import de.ugoe.cs.util.console.Console; /** *
* TODO comment *
* * @author Patrick Harms * @version 1.0 * */ public class HTMLLogTextInputPseudomizer extends AbstractDefaultLogParser { /** ** The output writer into which the pseudomized variant of the log file is written *
*/ private PrintWriter outputWriter; /** ** The set of text input fields found in the GUI model *
*/ private Set* the events that were read *
*/ private List* called to pseudomize all text inputs in the given log file. The method reuses * {@link #pseudomizeFile(File)}. *
* * @param file the log file in which the text inputs must be pseudomized */ public void pseudomizeFile(String file) { if (file == null) { throw new IllegalArgumentException("file must not be null"); } pseudomizeFile(new File(file)); } /** ** called to pseudomize all text inputs in the given log file. The given file is read * completely. All GUI elements are written to an output file as they are. All events are * written to an output file as they are, as well, as long as they do not represent test inputs. * If they are text input events, the entered text is replaced by its hash value for * pseudomizing the text input. Finally, the original log file is deleted and replaced by * the pseudomized variant. Log files, which are already pseudomized, stay untouched. *
* * @param file the log file in which the text inputs must be pseudomized */ public void pseudomizeFile(File file) { if (file == null) { throw new IllegalArgumentException("file must not be null"); } if (!file.exists()) { throw new IllegalArgumentException("file must denote an existing file"); } if (!file.isFile()) { throw new IllegalArgumentException("file must denote a file"); } File outFile = new File(file.getParentFile(), file.getName() + "_tmp"); boolean parsingFailed = false; try { FileOutputStream fis = new FileOutputStream(outFile); outputWriter = new PrintWriter(new OutputStreamWriter(fis, "UTF-8")); outputWriter.println(""); outputWriter.println("* dumps a parameter with the given name and value to the log file. The result is a * tag named param with a name attribute and a value attribute. The value is transformed * to a String if it is no String already. Furthermore, an XML entity replacement is performed * if required. *
* * @param name the name of the parameter to be dumped * @param value the value of the parameter to be dumped */ private void dumpParam(String name, Object value) { if (value == null) { return; } String val; if (value instanceof String) { val = (String) value; } else { val = String.valueOf(value); } outputWriter.print(" "); } /** ** this class is used internally for storing events in a sorted list together with the * timestamps, being the sort criteria. *
*/ private class EventEntry { /** ** the type of the event *
*/ private String type; /** ** the parameters of the event *
*/ private Map* the timestamp of the event *
*/ private long timestamp; /** ** creates a new event entry with event type, parameters and the timestamp *
*/ private EventEntry(String type, Map* convenience method for dumping the event into the compressed log file *
*/ private void dump() { outputWriter.print("