/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingtracker.operations.options;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import edu.illinois.codingtracker.operations.OperationLexer;
import edu.illinois.codingtracker.operations.OperationTextChunk;
import edu.illinois.codingtracker.operations.UserOperation;
/**
*
* @author Stas Negara
*
*/
public abstract class OptionsChangedOperation extends UserOperation {
//TreeMap is required for the deterministic behavior that is expected by the tests
protected final Map<String, String> options= new TreeMap<String, String>();
public OptionsChangedOperation() {
super();
}
public OptionsChangedOperation(Map<String, String> options) {
this.options.putAll(options);
}
@Override
protected void populateTextChunk(OperationTextChunk textChunk) {
textChunk.append(options.size());
for (Entry<String, String> optionsEntry : options.entrySet()) {
textChunk.append(optionsEntry.getKey());
textChunk.append(optionsEntry.getValue());
}
}
@Override
protected void initializeFrom(OperationLexer operationLexer) {
int optionsCount= operationLexer.readInt();
for (int i= 0; i < optionsCount; i++) {
options.put(operationLexer.readString(), operationLexer.readString());
}
}
@Override
public String toString() {
StringBuffer sb= new StringBuffer();
sb.append("Options count: " + options.size() + "\n");
for (Entry<String, String> optionsEntry : options.entrySet()) {
sb.append("Key: " + optionsEntry.getKey() + "\n");
sb.append("Value: " + optionsEntry.getValue() + "\n");
}
sb.append(super.toString());
return sb.toString();
}
}