1 package com.indexdata.pz2utils4jsf.pazpar2.state;
\r
3 import java.util.Arrays;
\r
4 import java.util.HashMap;
\r
5 import java.util.Map;
\r
7 import com.indexdata.pz2utils4jsf.pazpar2.Pazpar2Command;
\r
10 public class Pazpar2State {
\r
13 Map<String,Pazpar2Command> commands = new HashMap<String,Pazpar2Command>();;
\r
15 public Pazpar2State () {
\r
16 for (String command : Arrays.asList("init","ping","settings","search","stat","show","record","termlist","bytarget")) {
\r
17 commands.put(command, new Pazpar2Command(command));
\r
23 * Creates new state by cloning all commands of the provided state and
\r
24 * then overriding one of them with the provided state changing command.
\r
26 * @param previousState
\r
29 public Pazpar2State (Pazpar2State previousState, Pazpar2Command newCommand) {
\r
30 for (String commandName : previousState.commands.keySet()) {
\r
31 this.commands.put(commandName, previousState.commands.get(commandName).copy());
\r
33 this.commands.put(newCommand.getName(),newCommand);
\r
34 this.key = getKey();
\r
38 * Generates a state key that can be used by the browser to pick
\r
39 * up this state again at a later point in time.
\r
43 public String getKey() {
\r
45 StringBuilder querystatebuilder = new StringBuilder("#");
\r
46 for (Pazpar2Command command : commands.values()) {
\r
47 if (command.hasParameters()) {
\r
48 querystatebuilder.append("||"+command.getName()+"::");
\r
49 querystatebuilder.append(command.getValueWithExpressions());
\r
52 key = querystatebuilder.toString();
\r
60 * Checks if a command represents a change of this state
\r
63 * @return true if the command causes a change of state
\r
65 public boolean stateMutating (Pazpar2Command command) {
\r
66 if (command == null) {
\r
68 } else if (commands.get(command.getName()) == null) {
\r
70 } else if ((command.equals(commands.get(command.getName())))) {
\r
78 * Returns a command from this state
\r
83 public Pazpar2Command getCommand(String name) {
\r
84 return commands.get(name);
\r