org.agnitas.web.TargetForm.java Source code

Java tutorial

Introduction

Here is the source code for org.agnitas.web.TargetForm.java

Source

/*********************************************************************************
 * The contents of this file are subject to the Common Public Attribution
 * License Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.openemm.org/cpal1.html. The License is based on the Mozilla
 * Public License Version 1.1 but Sections 14 and 15 have been added to cover
 * use of software over a computer network and provide for limited attribution
 * for the Original Developer. In addition, Exhibit A has been modified to be
 * consistent with Exhibit B.
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * 
 * The Original Code is OpenEMM.
 * The Original Developer is the Initial Developer.
 * The Initial Developer of the Original Code is AGNITAS AG. All portions of
 * the code written by AGNITAS AG are Copyright (c) 2007 AGNITAS AG. All Rights
 * Reserved.
 * 
 * Contributor(s): AGNITAS AG. 
 ********************************************************************************/

package org.agnitas.web;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.agnitas.target.TargetOperator;
import org.agnitas.web.forms.StrutsFormBase;
import org.agnitas.web.forms.helper.EmptyStringFactory;
import org.agnitas.web.forms.helper.ZeroIntegerFactory;
import org.apache.commons.collections.Factory;
import org.apache.commons.collections.FactoryUtils;
import org.apache.commons.collections.list.GrowthList;
import org.apache.commons.collections.list.LazyList;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.util.MessageResources;

public class TargetForm extends StrutsFormBase {

    private static final Factory emptyStringFactory;
    private static final Factory zeroIntegerFactory;
    private static final Factory nullFactory;

    public static final int COLUMN_TYPE_STRING = 0;
    public static final int COLUMN_TYPE_NUMERIC = 1;
    public static final int COLUMN_TYPE_DATE = 2;

    private static final long serialVersionUID = 45877020863407141L;
    private String shortname;
    private String description;
    private int targetID;
    private int action;
    private int numOfRecipients;

    // defined rules
    private List<String> columnAndTypeList;
    private List<Integer> chainOperatorList;
    private List<Integer> parenthesisOpenedList;
    private List<Integer> primaryOperatorList;
    private List<String> primaryValueList;
    private List<Integer> parenthesisClosedList;
    private List<String> dateFormatList;
    private List<Integer> secondaryOperatorList;
    private List<String> secondaryValueList;
    private List<TargetOperator[]> validTargetOperatorsList;
    private List<String> columnNameList;
    private List<Integer> columnTypeList;

    // new rules
    private String columnAndTypeNew;
    private int chainOperatorNew;
    private int parenthesisOpenedNew;
    private int primaryOperatorNew;
    private String primaryValueNew;
    private int parenthesisClosedNew;
    private String dateFormatNew;
    private int secondaryOperatorNew;
    private String secondaryValueNew;

    private boolean addTargetNode;
    private int targetNodeToRemove;

    static {

        emptyStringFactory = new EmptyStringFactory();

        zeroIntegerFactory = new ZeroIntegerFactory();

        nullFactory = FactoryUtils.nullFactory();

    }

    /**
     * Last action we came from.
     */
    private int previousAction;

    /**
     * The list size a user prefers while viewing a table 
     */
    private int preferredListSize = 20;

    /**
     * The list size has been loaded from the admin's properties 
     */
    private boolean preferredListSizeLoaded = true;

    public TargetForm() {
        columnAndTypeList = (List<String>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<String>(), emptyStringFactory));
        chainOperatorList = (List<Integer>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<Integer>(), zeroIntegerFactory));
        parenthesisOpenedList = (List<Integer>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<Integer>(), zeroIntegerFactory));
        primaryOperatorList = (List<Integer>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<Integer>(), zeroIntegerFactory));
        primaryValueList = (List<String>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<String>(), emptyStringFactory));
        parenthesisClosedList = (List<Integer>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<Integer>(), zeroIntegerFactory));
        dateFormatList = (List<String>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<String>(), emptyStringFactory));
        secondaryOperatorList = (List<Integer>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<Integer>(), zeroIntegerFactory));
        secondaryValueList = (List<String>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<String>(), emptyStringFactory));
        validTargetOperatorsList = (List<TargetOperator[]>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<TargetOperator[]>(), nullFactory));
        columnNameList = (List<String>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<String>(), emptyStringFactory));
        columnTypeList = (List<Integer>) GrowthList
                .decorate(LazyList.decorate(new ArrayList<Integer>(), zeroIntegerFactory));
    }

    /**
     * Reset all properties to their default values.
     *
     * @param mapping The mapping used to select this instance
     * @param request The servlet request we are processing
     */
    @Override
    public void reset(ActionMapping mapping, HttpServletRequest request) {

        this.targetID = 0;
        Locale aLoc = (Locale) request.getSession().getAttribute(org.apache.struts.Globals.LOCALE_KEY);

        MessageResources text = (MessageResources) this.getServlet().getServletContext()
                .getAttribute(org.apache.struts.Globals.MESSAGES_KEY);
        //MessageResources text=this.getServlet().getResources();

        this.shortname = text.getMessage(aLoc, "default.shortname");
        this.description = text.getMessage(aLoc, "default.description");

        // Reset form fields for new rule
        columnAndTypeNew = null;
        chainOperatorNew = 0;
        parenthesisOpenedNew = 0;
        primaryOperatorNew = 0;
        primaryValueNew = null;
        parenthesisClosedNew = 0;
        dateFormatNew = null;
        secondaryOperatorNew = 0;
        secondaryValueNew = null;
    }

    public void clearRules() {
        columnAndTypeList.clear();
        chainOperatorList.clear();
        parenthesisOpenedList.clear();
        primaryOperatorList.clear();
        primaryValueList.clear();
        parenthesisClosedList.clear();
        dateFormatList.clear();
        secondaryOperatorList.clear();
        secondaryValueList.clear();
        columnNameList.clear();
        columnTypeList.clear();
    }

    /**
     * Validate the properties that have been set from this HTTP request,
     * and return an <code>ActionErrors</code> object that encapsulates any
     * validation errors that have been found.  If no errors are found, return
     * <code>null</code> or an <code>ActionErrors</code> object with no
     * recorded error messages.
     * 
     * @param mapping The mapping used to select this instance
     * @param request The servlet request we are processing
     * @return errors
     */
    @Override
    public ActionErrors formSpecificValidate(ActionMapping mapping, HttpServletRequest request) {

        ActionErrors errors = new ActionErrors();

        if (getAction() == TargetAction.ACTION_SAVE) {

            if (!this.checkParenthesisBalance()) {
                errors.add("brackets", new ActionMessage("error.target.bracketbalance"));
            }
            if (this.shortname != null && this.shortname.length() < 1) {
                errors.add("shortname", new ActionMessage("error.nameToShort"));
            }
            if (this.getNumTargetNodes() == 0 && !this.getAddTargetNode()) {
                errors.add("norule", new ActionMessage("error.target.norule"));
            }
        }

        return errors;
    }

    protected boolean checkParenthesisBalance() {
        int opened = 0;
        int closed = 0;

        int lastIndex = this.getNumTargetNodes();

        for (int index = 0; index < lastIndex; index++) {
            opened += this.getParenthesisOpened(index);
            closed += this.getParenthesisClosed(index);
        }

        return opened == closed;
    }

    /**
     * Getter for property shortname.
     *
     * @return Value of property shortname.
     */
    public String getShortname() {
        return this.shortname;
    }

    /**
    * Setter for property shortname.
    *
    * @param shortname New value of property shortname.
    */
    public void setShortname(String shortname) {
        this.shortname = shortname;
    }

    /**
     * Getter for property description.
     *
     * @return Value of property description.
     */
    public String getDescription() {
        return this.description;
    }

    /**
     * Setter for property description.
     *
     * @param description New value of property description.
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * Getter for property targetID.
     *
     * @return Value of property targetID.
     */
    public int getTargetID() {
        return this.targetID;
    }

    /**
     * Setter for property targetID.
     *
     * @param targetID New value of property targetID.
     */
    public void setTargetID(int targetID) {
        this.targetID = targetID;
    }

    /**
     * Getter for property action.
     *
     * @return Value of property action.
     */
    public int getAction() {
        return this.action;
    }

    /**
     * Setter for property action.
     *
     * @param action New value of property action.
     */
    public void setAction(int action) {
        this.action = action;
    }

    /**
     * Getter for property numOfRecipients.
     *
     * @return Value of property numOfRecipients.
     */
    public int getNumOfRecipients() {
        return numOfRecipients;
    }

    /**
      * Setter for property numOfRecipients.
      *
      * @param numOfRecipients New value of property numOfRecipients.
      */
    public void setNumOfRecipients(int numOfRecipients) {
        this.numOfRecipients = numOfRecipients;
    }

    public int getPreferredListSize() {
        return preferredListSize;
    }

    public void setPreferredListSize(int preferredListSize) {
        this.preferredListSize = preferredListSize;
    }

    public boolean isPreferredListSizeLoaded() {
        return preferredListSizeLoaded;
    }

    public void setPreferredListSizeLoaded(boolean preferredListSizeLoaded) {
        this.preferredListSizeLoaded = preferredListSizeLoaded;
    }

    public int getPreviousAction() {
        return previousAction;
    }

    public void setPreviousAction(int previousAction) {
        this.previousAction = previousAction;
    }

    public void removeRule(int index) {
        safeRemove(columnAndTypeList, index);
        safeRemove(chainOperatorList, index);
        safeRemove(parenthesisOpenedList, index);
        safeRemove(primaryOperatorList, index);
        safeRemove(primaryValueList, index);
        safeRemove(parenthesisClosedList, index);
        safeRemove(dateFormatList, index);
        safeRemove(secondaryOperatorList, index);
        safeRemove(secondaryValueList, index);
        safeRemove(columnNameList, index);
        safeRemove(columnTypeList, index);
    }

    /**
     * Removes and index safely from list. If index does not exists, nothing happens.
     * 
     * @param list list to remove index from
     * @param index index to be removed
     */
    private void safeRemove(List<?> list, int index) {
        if (list.size() > index && index >= 0)
            list.remove(index);
    }

    public int getNumTargetNodes() {
        return this.columnAndTypeList.size();
    }

    public String getColumnAndType(int index) {
        return this.columnAndTypeList.get(index);
    }

    public void setColumnAndType(int index, String value) {
        this.columnAndTypeList.set(index, value);
    }

    public int getChainOperator(int index) {
        return this.chainOperatorList.get(index);
    }

    public void setChainOperator(int index, int value) {
        this.chainOperatorList.set(index, value);
    }

    public int getParenthesisOpened(int index) {
        return this.parenthesisOpenedList.get(index);
    }

    public void setParenthesisOpened(int index, int value) {
        this.parenthesisOpenedList.set(index, value);
    }

    public int getPrimaryOperator(int index) {
        return this.primaryOperatorList.get(index);
    }

    public void setPrimaryOperator(int index, int value) {
        this.primaryOperatorList.set(index, value);
    }

    public String getPrimaryValue(int index) {
        return this.primaryValueList.get(index);
    }

    public void setPrimaryValue(int index, String value) {
        this.primaryValueList.set(index, value);
    }

    public int getParenthesisClosed(int index) {
        return this.parenthesisClosedList.get(index);
    }

    public void setParenthesisClosed(int index, int value) {
        this.parenthesisClosedList.set(index, value);
    }

    public String getDateFormat(int index) {
        return this.dateFormatList.get(index);
    }

    public void setDateFormat(int index, String value) {
        this.dateFormatList.set(index, value);
    }

    public int getSecondaryOperator(int index) {
        return this.secondaryOperatorList.get(index);
    }

    public void setSecondaryOperator(int index, int value) {
        this.secondaryOperatorList.set(index, value);
    }

    public String getSecondaryValue(int index) {
        return this.secondaryValueList.get(index);
    }

    public void setSecondaryValue(int index, String value) {
        this.secondaryValueList.set(index, value);
    }

    public List<String> getAllColumnsAndTypes() {
        return this.columnAndTypeList;
    }

    public void setValidTargetOperators(int index, TargetOperator[] operators) {
        this.validTargetOperatorsList.set(index, operators);
    }

    public TargetOperator[] getValidTargetOperators(int index) {
        return this.validTargetOperatorsList.get(index);
    }

    public void setColumnName(int index, String value) {
        this.columnNameList.set(index, value);
    }

    public String getColumnName(int index) {
        return this.columnNameList.get(index);
    }

    public void setColumnType(int index, int type) {
        this.columnTypeList.set(index, type);
    }

    public int getColumnType(int index) {
        return this.columnTypeList.get(index);
    }

    public String getColumnAndTypeNew() {
        return columnAndTypeNew;
    }

    public void setColumnAndTypeNew(String columnAndTypeNew) {
        this.columnAndTypeNew = columnAndTypeNew;
    }

    public int getChainOperatorNew() {
        return chainOperatorNew;
    }

    public void setChainOperatorNew(int chainOperatorNew) {
        this.chainOperatorNew = chainOperatorNew;
    }

    public int getParenthesisOpenedNew() {
        return parenthesisOpenedNew;
    }

    public void setParenthesisOpenedNew(int parenthesisOpenedNew) {
        this.parenthesisOpenedNew = parenthesisOpenedNew;
    }

    public int getPrimaryOperatorNew() {
        return primaryOperatorNew;
    }

    public void setPrimaryOperatorNew(int primaryOperatorNew) {
        this.primaryOperatorNew = primaryOperatorNew;
    }

    public String getPrimaryValueNew() {
        return primaryValueNew;
    }

    public void setPrimaryValueNew(String primaryValueNew) {
        this.primaryValueNew = primaryValueNew;
    }

    public int getParenthesisClosedNew() {
        return parenthesisClosedNew;
    }

    public void setParenthesisClosedNew(int parenthesisClosedNew) {
        this.parenthesisClosedNew = parenthesisClosedNew;
    }

    public String getDateFormatNew() {
        return dateFormatNew;
    }

    public void setDateFormatNew(String dateFormatNew) {
        this.dateFormatNew = dateFormatNew;
    }

    public int getSecondaryOperatorNew() {
        return secondaryOperatorNew;
    }

    public void setSecondaryOperatorNew(int secondaryOperatorNew) {
        this.secondaryOperatorNew = secondaryOperatorNew;
    }

    public String getSecondaryValueNew() {
        return secondaryValueNew;
    }

    public void setSecondaryValueNew(String secondaryValueNew) {
        this.secondaryValueNew = secondaryValueNew;
    }

    public void setAddTargetNode(boolean addTargetNode) {
        this.addTargetNode = addTargetNode;
    }

    public boolean getAddTargetNode() {
        return this.addTargetNode;
    }

    public void setTargetNodeToRemove(int targetNodeToRemove) {
        this.targetNodeToRemove = targetNodeToRemove;
    }

    public int getTargetNodeToRemove() {
        return this.targetNodeToRemove;
    }
}