1 package com.indexdata.pz2utils4jsf.pazpar2.state;
\r
3 import java.io.Serializable;
\r
4 import java.util.Arrays;
\r
5 import java.util.HashMap;
\r
6 import java.util.Map;
\r
8 import org.apache.log4j.Logger;
\r
10 import com.indexdata.pz2utils4jsf.pazpar2.CommandParameter;
\r
11 import com.indexdata.pz2utils4jsf.pazpar2.Expression;
\r
12 import com.indexdata.pz2utils4jsf.pazpar2.Pazpar2Command;
\r
13 import com.indexdata.pz2utils4jsf.pazpar2.state.QueryState;
\r
14 import com.indexdata.pz2utils4jsf.pazpar2.state.QueryStates;
\r
16 public class QueryState implements Serializable {
\r
18 private static final long serialVersionUID = -1465676392610954168L;
\r
19 private static Logger logger = Logger.getLogger(QueryState.class);
\r
20 private Map<String,Pazpar2Command> pz2commands = new HashMap<String,Pazpar2Command>();
\r
21 private String key = null;
\r
23 public QueryState () {
\r
24 for (String command : Arrays.asList("init","ping","settings","search","stat","show","record","termlist","bytarget")) {
\r
25 pz2commands.put(command, new Pazpar2Command(command));
\r
29 private QueryState copy() {
\r
30 QueryState newState = new QueryState();
\r
31 for (String commandName : pz2commands.keySet()) {
\r
32 newState.setCommand(pz2commands.get(commandName).copy());
\r
37 public void setCommandParameter(String commandName, CommandParameter parameter, QueryStates queryStates) {
\r
38 CommandParameter current = getCommand(commandName).getParameter(parameter.getName());
\r
39 if (current != null && current.equals(parameter)) {
\r
40 logger.debug("Recieved parameter but already have " + parameter.getValueWithExpressions() + " in this state. No state change.");
\r
42 logger.debug("New command parameter received: " + parameter.getValueWithExpressions() + ". Initiating new state.");
\r
43 QueryState newState = this.copy();
\r
44 newState._setCommandParameter(commandName,parameter);
\r
45 logger.debug("Old state: " + this);
\r
46 logger.debug("New state: " + newState);
\r
47 queryStates.setCurrentState(newState);
\r
51 public void removeCommandParameter(String commandName, String parameterName, QueryStates queryStates) {
\r
52 QueryState newState = this.copy();
\r
53 newState._removeCommandParameter(commandName, parameterName);
\r
54 queryStates.setCurrentState(newState);
\r
57 public void setCommandParameterExpression (String commandName, String parameterName, Expression expression, QueryStates queryStates) {
\r
58 QueryState newState = this.copy();
\r
59 newState._setCommandParameterExpression(commandName, parameterName, expression);
\r
60 queryStates.setCurrentState(newState);
\r
63 public void _setCommandParameterExpression (String commandName, String parameterName, Expression expression) {
\r
64 getCommand(commandName).getParameter(parameterName).addExpression(expression);
\r
67 public void removeCommandParameterExpression (String commandName, String parameterName, Expression expression, QueryStates queryStates) {
\r
68 QueryState newState = this.copy();
\r
69 newState._removeCommandParameterExpression(commandName, parameterName, expression);
\r
70 queryStates.setCurrentState(newState);
\r
73 public void _removeCommandParameterExpression (String commandName, String parameterName, Expression expression) {
\r
74 getCommand(commandName).getParameter(parameterName).removeExpression(expression);
\r
78 public void _setCommandParameter(String commandName, CommandParameter parameter) {
\r
79 getCommand(commandName).setParameter(parameter);
\r
82 public void _removeCommandParameter(String commandName, String parameterName) {
\r
83 getCommand(commandName).removeParameter(parameterName);
\r
86 public void _removeCommand(String commandName) {
\r
87 getCommand(commandName).removeParameters();
\r
91 public void removeCommand (String commandName, QueryStates queryStates) {
\r
92 QueryState newState = this.copy();
\r
93 newState._removeCommand(commandName);
\r
94 queryStates.setCurrentState(newState);
\r
98 public Pazpar2Command getCommand(String name) {
\r
99 return pz2commands.get(name);
\r
102 private void setCommand(Pazpar2Command command) {
\r
103 pz2commands.put(command.getName(), command);
\r
106 public String getKey() {
\r
108 StringBuilder querystatebuilder = new StringBuilder("#");
\r
109 for (Pazpar2Command command : pz2commands.values()) {
\r
110 if (command.hasParameters()) {
\r
111 querystatebuilder.append("||"+command.getName()+"::");
\r
112 querystatebuilder.append(command.getValueWithExpressions());
\r
115 key = querystatebuilder.toString();
\r
122 public void setKey(String key) {
\r
123 logger.debug("Setting key on demand to: " + key);
\r
127 public String toString () {
\r
128 return pz2commands.toString();
\r
131 public boolean searchEquals(Object otherQueryState) {
\r
132 if (otherQueryState instanceof QueryState) {
\r
133 return getCommand("search").equals(((QueryState) otherQueryState).getCommand("search"));
\r
139 public boolean equals (Object otherQueryState) {
\r
140 if (otherQueryState instanceof QueryState) {
\r
141 return this.toString().equals(otherQueryState.toString());
\r