1 package com.indexdata.mkjsf.pazpar2.state;
\r
3 import java.util.HashMap;
\r
4 import java.util.Map;
\r
6 import com.indexdata.mkjsf.pazpar2.commands.BytargetCommand;
\r
7 import com.indexdata.mkjsf.pazpar2.commands.InitCommand;
\r
8 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Command;
\r
9 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Commands;
\r
10 import com.indexdata.mkjsf.pazpar2.commands.PingCommand;
\r
11 import com.indexdata.mkjsf.pazpar2.commands.RecordCommand;
\r
12 import com.indexdata.mkjsf.pazpar2.commands.SearchCommand;
\r
13 import com.indexdata.mkjsf.pazpar2.commands.SettingsCommand;
\r
14 import com.indexdata.mkjsf.pazpar2.commands.ShowCommand;
\r
15 import com.indexdata.mkjsf.pazpar2.commands.StatCommand;
\r
16 import com.indexdata.mkjsf.pazpar2.commands.TermlistCommand;
\r
17 import com.indexdata.mkjsf.pazpar2.commands.sp.AuthCommand;
\r
18 import com.indexdata.mkjsf.pazpar2.commands.sp.CategoriesCommand;
\r
19 import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommands;
\r
22 * Holds a 'pazpar2 state', understood as a full set of pazpar2 commands and
\r
23 * all their parameter settings at a given point in time.
\r
25 * @author Niels Erik
\r
28 public class Pazpar2State {
\r
31 Map<String,Pazpar2Command> commands = new HashMap<String,Pazpar2Command>();;
\r
33 public Pazpar2State (StateManager stateManager) {
\r
34 commands.put(Pazpar2Commands.INIT, new InitCommand(stateManager));
\r
35 commands.put(Pazpar2Commands.PING, new PingCommand(stateManager));
\r
36 commands.put(Pazpar2Commands.SETTINGS, new SettingsCommand(stateManager));
\r
37 commands.put(Pazpar2Commands.SEARCH, new SearchCommand(stateManager));
\r
38 commands.put(Pazpar2Commands.STAT, new StatCommand(stateManager));
\r
39 commands.put(Pazpar2Commands.SHOW, new ShowCommand(stateManager));
\r
40 commands.put(Pazpar2Commands.RECORD, new RecordCommand(stateManager));
\r
41 commands.put(Pazpar2Commands.TERMLIST, new TermlistCommand(stateManager));
\r
42 commands.put(Pazpar2Commands.BYTARGET, new BytargetCommand(stateManager));
\r
44 commands.put(ServiceProxyCommands.AUTH, new AuthCommand(stateManager));
\r
45 commands.put(ServiceProxyCommands.CATEGORIES, new CategoriesCommand(stateManager));
\r
50 * Creates new state by cloning all commands of the provided state and
\r
51 * then overriding one of them with the provided state changing command.
\r
53 * @param previousState
\r
56 public Pazpar2State (Pazpar2State previousState, Pazpar2Command newCommand) {
\r
57 for (String commandName : previousState.commands.keySet()) {
\r
58 this.commands.put(commandName, previousState.commands.get(commandName).copy());
\r
60 this.commands.put(newCommand.getCommandName(),newCommand);
\r
61 this.key = getKey();
\r
65 * Generates a state key that can be used by the browser to pick
\r
66 * up this state again at a later point in time.
\r
68 * @see {@link com.indexdata.mkjsf.pazpar2.state.StateManager#setCurrentStateKey}
\r
71 public String getKey() {
\r
73 StringBuilder querystatebuilder = new StringBuilder("");
\r
74 for (Pazpar2Command command : commands.values()) {
\r
75 if (! (command instanceof AuthCommand )) {
\r
76 if (command.hasParameters()) {
\r
77 querystatebuilder.append("||"+command.getCommandName()+"::");
\r
78 querystatebuilder.append(command.getValueWithExpressions());
\r
82 key = "#"+querystatebuilder.toString();
\r
90 * Checks if a command represents a change of this state
\r
93 * @return true if the command causes a change of state
\r
95 public boolean stateMutating (Pazpar2Command command) {
\r
96 if (command == null) {
\r
98 } else if (commands.get(command.getCommandName()) == null) {
\r
100 } else if ((command.equals(commands.get(command.getCommandName())))) {
\r
108 * Returns a command from this state
\r
113 public Pazpar2Command getCommand(String name) {
\r
114 return commands.get(name);
\r