package com.indexdata.pz2utils4jsf.pazpar2.state;\r
\r
-import java.util.Arrays;\r
import java.util.HashMap;\r
import java.util.Map;\r
\r
-import com.indexdata.pz2utils4jsf.pazpar2.Pazpar2Command;\r
-\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.BytargetCommand;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.InitCommand;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Commands;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.PingCommand;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.RecordCommand;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.SearchCommand;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.SettingsCommand;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.ShowCommand;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.StatCommand;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.TermlistCommand;\r
\r
+/**\r
+ * Holds a 'pazpar2 state', understood as a full set of pazpar2 commands and \r
+ * all their parameter settings at a given point in time.\r
+ * \r
+ * @author Niels Erik\r
+ *\r
+ */\r
public class Pazpar2State {\r
\r
String key = null;\r
Map<String,Pazpar2Command> commands = new HashMap<String,Pazpar2Command>();;\r
\r
- public Pazpar2State () { \r
- for (String command : Arrays.asList("init","ping","settings","search","stat","show","record","termlist","bytarget")) {\r
- commands.put(command, new Pazpar2Command(command));\r
- }\r
- key = "#initial";\r
+ public Pazpar2State (StateManager mgr) {\r
+ commands.put(Pazpar2Commands.INIT, new InitCommand(mgr));\r
+ commands.put(Pazpar2Commands.PING, new PingCommand(mgr));\r
+ commands.put(Pazpar2Commands.SETTINGS, new SettingsCommand(mgr));\r
+ commands.put(Pazpar2Commands.SEARCH, new SearchCommand(mgr));\r
+ commands.put(Pazpar2Commands.STAT, new StatCommand(mgr));\r
+ commands.put(Pazpar2Commands.SHOW, new ShowCommand(mgr));\r
+ commands.put(Pazpar2Commands.RECORD, new RecordCommand(mgr));\r
+ commands.put(Pazpar2Commands.TERMLIST, new TermlistCommand(mgr));\r
+ commands.put(Pazpar2Commands.BYTARGET, new BytargetCommand(mgr)); \r
+ key = "#1";\r
}\r
- \r
+ \r
+ /**\r
+ * Creates new state by cloning all commands of the provided state and \r
+ * then overriding one of them with the provided state changing command.\r
+ * \r
+ * @param previousState\r
+ * @param newCommand\r
+ */\r
public Pazpar2State (Pazpar2State previousState, Pazpar2Command newCommand) {\r
for (String commandName : previousState.commands.keySet()) {\r
this.commands.put(commandName, previousState.commands.get(commandName).copy());\r
*/\r
public String getKey() {\r
if (key == null) {\r
- StringBuilder querystatebuilder = new StringBuilder("#");\r
+ StringBuilder querystatebuilder = new StringBuilder("");\r
for (Pazpar2Command command : commands.values()) {\r
if (command.hasParameters()) {\r
querystatebuilder.append("||"+command.getName()+"::");\r
querystatebuilder.append(command.getValueWithExpressions());\r
} \r
} \r
- key = querystatebuilder.toString();\r
+ key = "#"+querystatebuilder.toString().hashCode();\r
return key;\r
} else { \r
return key;\r
}\r
\r
/**\r
- * Checks if the provided command represents a state change\r
+ * Checks if a command represents a change of this state\r
* \r
* @param command\r
* @return true if the command causes a change of state\r
}\r
} \r
\r
+ /**\r
+ * Returns a command from this state\r
+ * \r
+ * @param name\r
+ * @return\r
+ */ \r
public Pazpar2Command getCommand(String name) {\r
return commands.get(name);\r
}\r