67c944fa8de47491efbb9f71f4cc1c430a217045
[jalview.git] / src / jalview / structure / StructureCommand.java
1 package jalview.structure;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 public class StructureCommand implements StructureCommandI
7 {
8   private String command;
9
10   private List<String> parameters;
11
12   public StructureCommand(String cmd, String... params)
13   {
14     command = cmd;
15     if (params != null)
16     {
17       for (String p : params)
18       {
19         addParameter(p);
20       }
21     }
22   }
23
24   @Override
25   public void addParameter(String param)
26   {
27     if (parameters == null)
28     {
29       parameters = new ArrayList<>();
30     }
31     parameters.add(param);
32   }
33
34   @Override
35   public String getCommand()
36   {
37     return command;
38   }
39
40   @Override
41   public List<String> getParameters()
42   {
43     return parameters;
44   }
45
46   @Override
47   public boolean hasParameters()
48   {
49     return parameters != null && !parameters.isEmpty();
50   }
51
52   @Override
53   public String toString()
54   {
55     if (!hasParameters())
56     {
57       return command;
58     }
59     StringBuilder sb = new StringBuilder(32);
60     sb.append(command).append("(");
61     boolean first = true;
62     for (String p : parameters)
63     {
64       if (!first)
65       {
66         sb.append(",");
67       }
68       first = false;
69       sb.append(p);
70     }
71     sb.append(")");
72     return sb.toString();
73   }
74
75   @Override
76   public int hashCode()
77   {
78     int h = command.hashCode();
79     if (parameters != null)
80     {
81       for (String p : parameters)
82       {
83         h = h * 37 + p.hashCode();
84       }
85     }
86     return h;
87   }
88
89   /**
90    * Answers true if {@code obj} is a {@code StructureCommand} with the same
91    * command and parameters as this one, else false
92    */
93   @Override
94   public boolean equals(Object obj)
95   {
96     if (obj == null || !(obj instanceof StructureCommand))
97     {
98       return false;
99     }
100     StructureCommand sc = (StructureCommand) obj;
101
102     if (!command.equals(sc.command))
103     {
104       return false;
105     }
106     if (parameters == null || sc.parameters == null)
107     {
108       return (parameters == null) && (sc.parameters == null);
109     }
110
111     int j = parameters.size();
112     if (j != sc.parameters.size())
113     {
114       return false;
115     }
116     for (int i = 0; i < j; i++)
117     {
118       if (!parameters.get(i).equals(sc.parameters.get(i)))
119       {
120         return false;
121       }
122     }
123     return true;
124   }
125
126 }