Renames variable
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / state / Pazpar2State.java
1 package com.indexdata.mkjsf.pazpar2.state;\r
2 \r
3 import java.util.HashMap;\r
4 import java.util.Map;\r
5 \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
20 \r
21 /**\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
24  *  \r
25  * @author Niels Erik\r
26  *\r
27  */\r
28 public class Pazpar2State {\r
29 \r
30   String key = null;\r
31   Map<String,Pazpar2Command> commands = new HashMap<String,Pazpar2Command>();;\r
32 \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
43 \r
44     commands.put(ServiceProxyCommands.AUTH, new AuthCommand(stateManager));\r
45     commands.put(ServiceProxyCommands.CATEGORIES, new CategoriesCommand(stateManager));\r
46     // key = "#1";\r
47   }\r
48     \r
49   /**\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
52    * \r
53    * @param previousState\r
54    * @param newCommand\r
55    */\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
59     }\r
60     this.commands.put(newCommand.getCommandName(),newCommand);\r
61     this.key = getKey();           \r
62   }\r
63     \r
64   /**\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
67    * \r
68    * @see  {@link com.indexdata.mkjsf.pazpar2.state.StateManager#setCurrentStateKey}\r
69    * @return\r
70    */\r
71   public String getKey() {\r
72     if (key == null) {\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
79           }\r
80         }\r
81       }            \r
82       key = "#"+querystatebuilder.toString();\r
83       return key;\r
84     } else {      \r
85       return key;\r
86     }\r
87   }\r
88   \r
89   /**\r
90    * Checks if a command represents a change of this state\r
91    * \r
92    * @param command\r
93    * @return true if the command causes a change of state\r
94    */\r
95   public boolean stateMutating (Pazpar2Command command) {\r
96     if (command == null) {\r
97       return true;\r
98     } else if (commands.get(command.getCommandName()) == null) {\r
99       return true;\r
100     } else if ((command.equals(commands.get(command.getCommandName())))) {\r
101       return false;      \r
102     } else {\r
103       return true;\r
104     }\r
105   } \r
106   \r
107   /**\r
108    * Returns a command from this state\r
109    * \r
110    * @param name\r
111    * @return\r
112    */  \r
113   public Pazpar2Command getCommand(String name) {\r
114     return commands.get(name);\r
115   }\r
116 }\r