View Javadoc

1   /**
2    * This file Copyright (c) 2008-2011 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
32   *
33   */
34  package info.magnolia.voting.voters;
35  
36  import info.magnolia.voting.Voter;
37  import info.magnolia.voting.Voting;
38  
39  import org.apache.commons.lang.ArrayUtils;
40  
41  /**
42   * Can take a set of voters. The voting can be set as well as the returned
43   * level. If the level is not set (0) the votings result is returned.
44   *
45   * @author pbracher
46   *
47   */
48  public class VoterSet extends BaseVoterImpl {
49  
50      /**
51       * AND/OR or null for the default voting. See {@link #getVoting()}.
52       */
53      String op;
54  
55      /**
56       * If 0 the outcome of the voting is used.
57       */
58      int level;
59  
60      /**
61       * Outcome will be inverse if true.
62       */
63      boolean not = false;
64  
65      private Voter[] voters = new Voter[0];
66  
67      private Voting voting;
68  
69      public Voter[] getVoters() {
70          return voters;
71      }
72  
73      public void setVoters(Voter[] voters) {
74          this.voters = (Voter[]) ArrayUtils.addAll(this.voters, voters);
75      }
76  
77      public void addVoter(Voter voter){
78          if(voter.isEnabled()){
79              voters = (Voter[]) ArrayUtils.add(voters, voter);
80          }
81      }
82  
83      @Override
84      public int vote(Object value) {
85          int outcome = getVoting().vote(voters, value);
86          if(level != 0){
87              if(outcome < 0){
88                  outcome = -level;
89              }
90              if(outcome > 0){
91                  outcome = level;
92              }
93          }
94          if(not){
95              outcome = -outcome;
96          }
97          return outcome;
98      }
99  
100     public Voting getVoting() {
101         if(voting == null){
102             if("AND".equalsIgnoreCase(op)){
103                 voting = Voting.AND;
104             }
105             else if("OR".equalsIgnoreCase(op)){
106                 voting = Voting.OR;
107             }
108             else{
109                 voting = Voting.HIGHEST_LEVEL;
110             }
111         }
112         return voting;
113     }
114 
115     public void setVoting(Voting voting) {
116         this.voting = voting;
117     }
118 
119     public boolean isNot() {
120         return not;
121     }
122 
123     public void setNot(boolean not) {
124         this.not = not;
125     }
126 
127     public int getLevel() {
128         return level;
129     }
130 
131     public void setLevel(int level) {
132         this.level = level;
133     }
134 
135     @Override
136     public String toString() {
137         return super.toString() + " set: " + (not ? "not " : "") + ArrayUtils.toString(voters);
138     }
139 
140     public String getOp() {
141         return op;
142     }
143 
144     public void setOp(String op) {
145         this.op = op;
146     }
147 }