All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jscsi.parser.datasegment.ResultFunctionFactory Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (c) 2012, University of Konstanz, Distributed Systems Group All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
 * following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of
 * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation and/or other materials provided with the
 * distribution. * Neither the name of the University of Konstanz nor the names of its contributors may be used to
 * endorse or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.jscsi.parser.datasegment;


import java.util.NoSuchElementException;


/**
 * 

ResultFunctionFactory

*

* This factory creates a specific IResultFunction instance for a given parameter. * * @author Volker Wildi */ public final class ResultFunctionFactory { // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** * The value of a result function to choose the and-value of the two parameters. */ private static final String RESULT_AND = "And"; /** The value of a result function to choose the first two common values. */ private static final String RESULT_CHOOSE = "Choose"; /** * The value of a result function to choose the maximum value of the two parameter values. */ private static final String RESULT_MAX = "Max"; /** * The value of a result function to choose the minimum value of the two parameter values. */ private static final String RESULT_MIN = "Min"; /** * The value of a result function to choose none of the two parameter values. */ private static final String RESULT_NONE = "None"; /** * The value of a result function to choose the or-value of the two parameter values. */ private static final String RESULT_OR = "Or"; // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** This string represents the iSCSI boolean true. */ private static final String BOOLEAN_YES = "Yes"; /** This string represents the iSCSI boolean false. */ private static final String BOOLEAN_NO = "No"; // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** * Creates an IResultFunction instance depending on the given parameter. * * @param result The type of the IResultFunction. * @return The IResultFunction instance. */ public final IResultFunction create (final String result) { if (result.compareTo(RESULT_AND) == 0) { return new AndResultFunction(); } else if (result.compareTo(RESULT_OR) == 0) { return new OrResultFunction(); } else if (result.compareTo(RESULT_MIN) == 0) { return new MinResultFunction(); } else if (result.compareTo(RESULT_MAX) == 0) { return new MaxResultFunction(); } else if (result.compareTo(RESULT_CHOOSE) == 0) { return new ChooseResultFunction(); } else if (result.compareTo(RESULT_NONE) == 0) { return new NoneResultFunction(); } else { throw new UnsupportedOperationException(); } } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** *

NoneResultFunction

*

* The result of this class is nothing. * * @author Volker Wildi */ class NoneResultFunction implements IResultFunction { /** {@inheritDoc} */ public final String result (final String a, final String b) { return ""; } } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** *

MinResultFunction

*

* The result of this class is the minimum of the input values. * * @author Volker Wildi */ class MinResultFunction implements IResultFunction { /** {@inheritDoc} */ public final String result (final String a, final String b) { try { final Integer ai = Integer.parseInt(a); final Integer bi = Integer.parseInt(b); if (ai <= bi) { return a; } else { return b; } } catch (NumberFormatException e) { return a; } } } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** *

MaxResultFunction

*

* The result of this class is the maximum of the input values. * * @author Volker Wildi */ class MaxResultFunction implements IResultFunction { /** {@inheritDoc} */ public final String result (final String a, final String b) { if (a.compareTo(b) >= 0) { return a; } else { return b; } } } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** *

OrResultFunction

*

* The result of this class is the OR-function of the input values. * * @author Volker Wildi */ class OrResultFunction implements IResultFunction { /** {@inheritDoc} */ public final String result (final String a, final String b) { if (a.compareTo(BOOLEAN_YES) == 0) { return BOOLEAN_YES; } else { if (b.compareTo(BOOLEAN_YES) == 0) { return BOOLEAN_YES; } else { return BOOLEAN_NO; } } } } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** *

AndResultFunction

*

* The result of this class is the AND-function of the input values. * * @author Volker Wildi */ class AndResultFunction implements IResultFunction { /** {@inheritDoc} */ public final String result (final String a, final String b) { if ((a.compareTo(BOOLEAN_YES) == 0) && (b.compareTo(BOOLEAN_YES) == 0)) { return BOOLEAN_YES; } else { return BOOLEAN_NO; } } } /** *

ChooseResultFunction

*

* The result of this class is the first common values of the list of the input values. * * @author Volker Wildi */ class ChooseResultFunction implements IResultFunction { /** {@inheritDoc} */ public final String result (final String a, final String b) { final String[] aItems = a.split(","); final String[] bItems = b.split(","); for (String aItem : aItems) { for (String bItem : bItems) { if (aItem.compareTo(bItem) == 0) { return aItem; } } } throw new NoSuchElementException(); } } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy