/** * This file Copyright (c) 2008-2012 Magnolia International * Ltd. (http://www.magnolia-cms.com). All rights reserved. * * * This file is dual-licensed under both the Magnolia * Network Agreement and the GNU General Public License. * You may elect to use one or the other of these licenses. * * This file is distributed in the hope that it will be * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT. * Redistribution, except as permitted by whichever of the GPL * or MNA you select, is prohibited. * * 1. For the GPL license (GPL), you can redistribute and/or * modify this file under the terms of the GNU General * Public License, Version 3, as published by the Free Software * Foundation. You should have received a copy of the GNU * General Public License, Version 3 along with this program; * if not, write to the Free Software Foundation, Inc., 51 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * 2. For the Magnolia Network Agreement (MNA), this file * and the accompanying materials are made available under the * terms of the MNA which accompanies this distribution, and * is available at http://www.magnolia-cms.com/mna.html * * Any modifications to this file must keep this entire header * intact. * */ package info.magnolia.voting.voters; import info.magnolia.voting.Voter; import info.magnolia.voting.Voting; import org.apache.commons.lang.ArrayUtils; /** * Can take a set of voters. The voting can be set as well as the returned * level. If the level is not set (0) the votings result is returned. * * @author pbracher * */ public class VoterSet extends BaseVoterImpl { /** * AND/OR or null for the default voting. See {@link #getVoting()}. */ String op; /** * If 0 the outcome of the voting is used. */ int level; /** * Outcome will be inverse if true. */ boolean not = false; private Voter[] voters = new Voter[0]; private Voting voting; public Voter[] getVoters() { return voters; } public void setVoters(Voter[] voters) { this.voters = (Voter[]) ArrayUtils.addAll(this.voters, voters); } public void addVoter(Voter voter){ if(voter.isEnabled()){ voters = (Voter[]) ArrayUtils.add(voters, voter); } } @Override public int vote(Object value) { int outcome = getVoting().vote(voters, value); if(level != 0){ if(outcome < 0){ outcome = -level; } if(outcome > 0){ outcome = level; } } if(not){ outcome = -outcome; } return outcome; } public Voting getVoting() { if(voting == null){ if("AND".equalsIgnoreCase(op)){ voting = Voting.AND; } else if("OR".equalsIgnoreCase(op)){ voting = Voting.OR; } else{ voting = Voting.HIGHEST_LEVEL; } } return voting; } public void setVoting(Voting voting) { this.voting = voting; } public boolean isNot() { return not; } public void setNot(boolean not) { this.not = not; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } @Override public String toString() { return super.toString() + " set: " + (not ? "not " : "") + ArrayUtils.toString(voters); } public String getOp() { return op; } public void setOp(String op) { this.op = op; } }