info.magnolia.voting.voters.VoterSet.java Source code

Java tutorial

Introduction

Here is the source code for info.magnolia.voting.voters.VoterSet.java

Source

/**
 * 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;
    }
}