Example usage for org.apache.commons.lang.math FloatRange FloatRange

List of usage examples for org.apache.commons.lang.math FloatRange FloatRange

Introduction

In this page you can find the example usage for org.apache.commons.lang.math FloatRange FloatRange.

Prototype

public FloatRange(Number number1, Number number2) 

Source Link

Document

Constructs a new FloatRange with the specified minimum and maximum numbers (both inclusive).

The arguments may be passed in the order (min,max) or (max,min).

Usage

From source file:com.aionemu.gameserver.skillengine.properties.TargetRangeProperty.java

/**
 * @param skill/* w ww  .  jav  a  2 s .com*/
 * @param properties
 * @return
 */
public static final boolean set(final Skill skill, Properties properties) {

    TargetRangeAttribute value = properties.getTargetType();
    int distanceToTarget = properties.getTargetDistance();
    int maxcount = properties.getTargetMaxCount();
    int effectiveRange = properties.getEffectiveRange();
    int altitude = properties.getEffectiveAltitude() != 0 ? properties.getEffectiveAltitude() : 1;

    final List<Creature> effectedList = skill.getEffectedList();
    skill.setTargetRangeAttribute(value);
    switch (value) {
    case ONLYONE:
        break;
    case AREA:
        final Creature firstTarget = skill.getFirstTarget();

        if (firstTarget == null) {
            log.warn("CHECKPOINT: first target is null for skillid " + skill.getSkillTemplate().getSkillId());
            return false;
        }

        // Create a sorted map of the objects in knownlist
        // and filter them properly
        for (VisibleObject nextCreature : firstTarget.getKnownList().getKnownObjects().values()) {
            if (!(nextCreature instanceof Creature)) {
                continue;
            }
            if (((Creature) nextCreature).getLifeStats() == null) {
                continue;
            }
            if (((Creature) nextCreature).getLifeStats().isAlreadyDead()) {
                continue;
            }

            //if (nextCreature instanceof Kisk && isInsideDisablePvpZone((Creature) nextCreature))
            //   continue;
            if (Math.abs(firstTarget.getZ() - nextCreature.getZ()) > altitude
                    || ((nextCreature instanceof Player)
                            && ((Player) nextCreature).isInPlayerMode(PlayerMode.WINDSTREAM))) {
                continue;
            }

            // TODO this is a temporary hack for traps
            if (skill.getEffector() instanceof Trap
                    && ((Trap) skill.getEffector()).getCreator() == nextCreature) {
                continue;
            }

            // Players in blinking state must not be counted
            if ((nextCreature instanceof Player) && (((Player) nextCreature).isProtectionActive())) {
                continue;
            }

            if (skill.isPointSkill()) {
                if (MathUtil.isIn3dRange(skill.getX(), skill.getY(), skill.getZ(), nextCreature.getX(),
                        nextCreature.getY(), nextCreature.getZ(), distanceToTarget + 1)) {
                    skill.getEffectedList().add((Creature) nextCreature);
                }
            }
            if (properties.getEffectiveAngle() > 0) {
                // Fire Storm; only positive angles
                float angle = properties.getEffectiveAngle() / 2f;
                FloatRange range = new FloatRange(angle - 180, -angle);
                if (range.containsFloat(PositionUtil.getAngleToTarget(skill.getEffector(), nextCreature))) {
                    continue;
                }
                if (!MathUtil.isIn3dRange(skill.getEffector(), nextCreature, effectiveRange)) {
                    continue;
                }
                if (!skill.shouldAffectTarget(nextCreature)) {
                    continue;
                }
                skill.getEffectedList().add((Creature) nextCreature);
            } else if (properties.getEffectiveDist() > 0) {
                // Lightning bolt
                if (MathUtil.isInsideAttackCylinder(skill.getEffector(), nextCreature, distanceToTarget,
                        properties.getEffectiveDist(), properties.getDirection())
                        || MathUtil.isIn3dRange(firstTarget, nextCreature, effectiveRange
                                + firstTarget.getObjectTemplate().getBoundRadius().getCollision())) {
                    if (!skill.shouldAffectTarget(nextCreature)) {
                        continue;
                    }
                    skill.getEffectedList().add((Creature) nextCreature);
                }
            } else if (MathUtil.isIn3dRange(firstTarget, nextCreature,
                    effectiveRange + firstTarget.getObjectTemplate().getBoundRadius().getCollision())) {
                if (!skill.shouldAffectTarget(nextCreature)) {
                    continue;
                }
                skill.getEffectedList().add((Creature) nextCreature);
            }
        }

        break;
    case PARTY:
        // fix for Bodyguard(417)
        if (maxcount == 1) {
            break;
        }
        int partyCount = 0;
        if (skill.getEffector() instanceof Player) {
            Player effector = (Player) skill.getEffector();
            // TODO merge groups ?
            if (effector.isInAlliance2()) {
                effectedList.clear();
                for (Player player : effector.getPlayerAllianceGroup2().getMembers()) {
                    if (partyCount >= 6 || partyCount >= maxcount) {
                        break;
                    }
                    if (!player.isOnline()) {
                        continue;
                    }
                    if (MathUtil.isIn3dRange(effector, player, effectiveRange + 1)) {
                        effectedList.add(player);
                        partyCount++;
                    }
                }
            } else if (effector.isInGroup2()) {
                effectedList.clear();
                for (Player member : effector.getPlayerGroup2().getMembers()) {
                    if (partyCount >= maxcount) {
                        break;
                    }
                    // TODO: here value +4 till better move controller developed
                    if (member != null && MathUtil.isIn3dRange(effector, member, effectiveRange + 1)) {
                        effectedList.add(member);
                        partyCount++;
                    }
                }
            }
        }
        break;
    case PARTY_WITHPET:
        if (skill.getEffector() instanceof Player) {
            final Player effector = (Player) skill.getEffector();
            if (effector.isInAlliance2()) {
                effectedList.clear();
                // TODO may be alliance group ?
                for (Player player : effector.getPlayerAlliance2().getMembers()) {
                    if (!player.isOnline()) {
                        continue;
                    }
                    if (player.getLifeStats().isAlreadyDead()) {
                        continue;
                    }
                    if (MathUtil.isIn3dRange(effector, player, distanceToTarget + 1)) {
                        effectedList.add(player);
                        Summon aMemberSummon = player.getSummon();
                        if (aMemberSummon != null) {
                            effectedList.add(aMemberSummon);
                        }
                    }
                }
            } else if (effector.isInGroup2()) {
                effectedList.clear();
                for (Player member : effector.getPlayerGroup2().getMembers()) {
                    if (!member.isOnline()) {
                        continue;
                    }
                    if (member.getLifeStats().isAlreadyDead()) {
                        continue;
                    }
                    if (MathUtil.isIn3dRange(effector, member, distanceToTarget + 1)) {
                        effectedList.add(member);
                        Summon aMemberSummon = member.getSummon();
                        if (aMemberSummon != null) {
                            effectedList.add(aMemberSummon);
                        }
                    }
                }
            }
        }
        break;
    case POINT:
        for (VisibleObject nextCreature : skill.getEffector().getKnownList().getKnownObjects().values()) {
            if (!(nextCreature instanceof Creature)) {
                continue;
            }
            if (((Creature) nextCreature).getLifeStats().isAlreadyDead()) {
                continue;
            }

            //if (nextCreature instanceof Kisk && isInsideDisablePvpZone((Creature) nextCreature))
            //   continue;
            // Players in blinking state must not be counted
            if ((nextCreature instanceof Player) && (((Player) nextCreature).isProtectionActive())) {
                continue;
            }

            if (MathUtil.getDistance(skill.getX(), skill.getY(), skill.getZ(), nextCreature.getX(),
                    nextCreature.getY(), nextCreature.getZ()) <= distanceToTarget + 1) {
                effectedList.add((Creature) nextCreature);
            }
        }
    case NONE:
        break;

    // TODO other enum values
    }
    return true;
}

From source file:au.org.ala.delta.intkey.directives.ParsingUtils.java

public static FloatRange parseFloatRange(String text) {
    try {//  www. j av  a2 s  .co  m
        Matcher m = FLOAT_RANGE_PATTERN.matcher(text);
        if (m.matches()) {
            float lhs = Float.parseFloat(m.group(1));
            float rhs = Float.parseFloat(m.group(3));
            return new FloatRange(lhs, rhs);
        } else {
            return new FloatRange(Float.parseFloat(text));
        }
    } catch (NumberFormatException ex) {
        return null;
    }
}

From source file:au.org.ala.delta.intkey.model.UseDirectiveTest.java

/**
 * Test setting a value for a real character
 * /*w w  w  .j a v a  2  s.c om*/
 * @throws Exception
 */
@Test
public void testSetReal() throws Exception {
    IntkeyContext context = loadDataset("/dataset/sample/intkey.ink");

    RealCharacter charCulmsMaxHeight = (RealCharacter) context.getDataset().getCharacter(3);

    // Set single value
    new UseDirective().parseAndProcess(context, "3,10");

    RealAttribute val1 = (RealAttribute) context.getSpecimen().getAttributeForCharacter(charCulmsMaxHeight);
    assertEquals(new FloatRange(10, 10), val1.getPresentRange());

    // Set range
    new UseDirective().parseAndProcess(context, "/M 3,15-20");

    RealAttribute val2 = (RealAttribute) context.getSpecimen().getAttributeForCharacter(charCulmsMaxHeight);
    assertEquals(new FloatRange(15, 20), val2.getPresentRange());

    // Set range using "/" character - for a real character, this should be
    // treated
    // the same as the "-" character.
    new UseDirective().parseAndProcess(context, "/M 3,50/100");

    RealAttribute val3 = (RealAttribute) context.getSpecimen().getAttributeForCharacter(charCulmsMaxHeight);
    assertEquals(new FloatRange(50, 100), val3.getPresentRange());

    // Attempt to set real character using incorrect format
    boolean exceptionThrown = false;
    try {
        new UseDirective().parseAndProcess(context, "/M 3,50-foo");
    } catch (IntkeyDirectiveParseException ex) {
        exceptionThrown = true;
    }
    assertTrue("Expected exception when setting real value with incorrect format", exceptionThrown);

}

From source file:au.org.ala.delta.intkey.model.DataSetLoadTest.java

/**
 * Test reading attributes (character-taxon data). These are loaded
 * on-demand from disk by the IntkeyDataset, as they are too large to hold
 * in memory.// w  w w. j a  v a  2s .c  o  m
 * 
 * @throws Exception
 */
@Test
public void testReadAttributes() throws Exception {
    IntkeyContext context = loadDataset("/dataset/controlling_characters_simple/intkey.ink");

    IntkeyDataset ds = context.getDataset();

    RealCharacter charAvgWeight = (RealCharacter) ds.getCharacter(1);
    UnorderedMultiStateCharacter charSeedPresence = (UnorderedMultiStateCharacter) ds.getCharacter(2);
    UnorderedMultiStateCharacter charSeedInShell = (UnorderedMultiStateCharacter) ds.getCharacter(3);
    RealCharacter charAvgThickness = (RealCharacter) ds.getCharacter(4);
    IntegerCharacter charAvgNumberOfSeeds = (IntegerCharacter) ds.getCharacter(5);
    OrderedMultiStateCharacter charColor = (OrderedMultiStateCharacter) ds.getCharacter(6);
    RealCharacter charAvgLength = (RealCharacter) ds.getCharacter(7);
    TextCharacter charMoreComments = (TextCharacter) ds.getCharacter(8);

    Item itemCarrot = ds.getItem(1);
    Item itemApricot = ds.getItem(2);
    Item itemStrawberry = ds.getItem(3);
    Item itemPlum = ds.getItem(4);
    Item itemPotato = ds.getItem(5);

    List<Attribute> averageWeightAttrs = ds.getAllAttributesForCharacter(1);
    assertEquals(5, averageWeightAttrs.size());

    for (Attribute attr : averageWeightAttrs) {
        assertTrue(attr instanceof RealAttribute);
    }

    assertEquals(itemCarrot, averageWeightAttrs.get(0).getItem());
    assertEquals(itemApricot, averageWeightAttrs.get(1).getItem());
    assertEquals(itemStrawberry, averageWeightAttrs.get(2).getItem());
    assertEquals(itemPlum, averageWeightAttrs.get(3).getItem());
    assertEquals(itemPotato, averageWeightAttrs.get(4).getItem());

    assertEquals(charAvgWeight, averageWeightAttrs.get(0).getCharacter());
    assertEquals(charAvgWeight, averageWeightAttrs.get(1).getCharacter());
    assertEquals(charAvgWeight, averageWeightAttrs.get(2).getCharacter());
    assertEquals(charAvgWeight, averageWeightAttrs.get(3).getCharacter());
    assertEquals(charAvgWeight, averageWeightAttrs.get(4).getCharacter());

    assertEquals(new FloatRange(50.0, 50.0), ((RealAttribute) averageWeightAttrs.get(0)).getPresentRange());
    assertEquals(new FloatRange(10.0, 20.0), ((RealAttribute) averageWeightAttrs.get(1)).getPresentRange());
    assertEquals(new FloatRange(5.0, 10.0), ((RealAttribute) averageWeightAttrs.get(2)).getPresentRange());
    assertEquals(new FloatRange(8.5, 15.0), ((RealAttribute) averageWeightAttrs.get(3)).getPresentRange());
    assertEquals(new FloatRange(100.0, 200.0), ((RealAttribute) averageWeightAttrs.get(4)).getPresentRange());

    List<Attribute> seedPresenceAttrs = ds.getAllAttributesForCharacter(2);
    assertEquals(5, seedPresenceAttrs.size());

    for (Attribute attr : seedPresenceAttrs) {
        assertTrue(attr instanceof MultiStateAttribute);
    }

    assertEquals(itemCarrot, seedPresenceAttrs.get(0).getItem());
    assertEquals(itemApricot, seedPresenceAttrs.get(1).getItem());
    assertEquals(itemStrawberry, seedPresenceAttrs.get(2).getItem());
    assertEquals(itemPlum, seedPresenceAttrs.get(3).getItem());
    assertEquals(itemPotato, seedPresenceAttrs.get(4).getItem());

    assertEquals(charSeedPresence, seedPresenceAttrs.get(0).getCharacter());
    assertEquals(charSeedPresence, seedPresenceAttrs.get(1).getCharacter());
    assertEquals(charSeedPresence, seedPresenceAttrs.get(2).getCharacter());
    assertEquals(charSeedPresence, seedPresenceAttrs.get(3).getCharacter());
    assertEquals(charSeedPresence, seedPresenceAttrs.get(4).getCharacter());

    assertEquals(new HashSet<Integer>(Arrays.asList(2)),
            ((MultiStateAttribute) seedPresenceAttrs.get(0)).getPresentStates());
    assertEquals(new HashSet<Integer>(Arrays.asList(1)),
            ((MultiStateAttribute) seedPresenceAttrs.get(1)).getPresentStates());
    assertEquals(new HashSet<Integer>(Arrays.asList(1)),
            ((MultiStateAttribute) seedPresenceAttrs.get(2)).getPresentStates());
    assertEquals(new HashSet<Integer>(Arrays.asList(1)),
            ((MultiStateAttribute) seedPresenceAttrs.get(3)).getPresentStates());
    assertEquals(new HashSet<Integer>(Arrays.asList(2)),
            ((MultiStateAttribute) seedPresenceAttrs.get(4)).getPresentStates());

    List<Attribute> seedInShellAttrs = ds.getAllAttributesForCharacter(3);
    assertEquals(5, seedInShellAttrs.size());

    for (Attribute attr : seedInShellAttrs) {
        assertTrue(attr instanceof MultiStateAttribute);
    }

    assertEquals(itemCarrot, seedInShellAttrs.get(0).getItem());
    assertEquals(itemApricot, seedInShellAttrs.get(1).getItem());
    assertEquals(itemStrawberry, seedInShellAttrs.get(2).getItem());
    assertEquals(itemPlum, seedInShellAttrs.get(3).getItem());
    assertEquals(itemPotato, seedInShellAttrs.get(4).getItem());

    assertEquals(charSeedInShell, seedInShellAttrs.get(0).getCharacter());
    assertEquals(charSeedInShell, seedInShellAttrs.get(1).getCharacter());
    assertEquals(charSeedInShell, seedInShellAttrs.get(2).getCharacter());
    assertEquals(charSeedInShell, seedInShellAttrs.get(3).getCharacter());
    assertEquals(charSeedInShell, seedInShellAttrs.get(4).getCharacter());

    assertTrue(seedInShellAttrs.get(0).isInapplicable());
    assertEquals(new HashSet<Integer>(Arrays.asList(1)),
            ((MultiStateAttribute) seedInShellAttrs.get(1)).getPresentStates());
    assertEquals(new HashSet<Integer>(Arrays.asList(2)),
            ((MultiStateAttribute) seedInShellAttrs.get(2)).getPresentStates());
    assertEquals(new HashSet<Integer>(Arrays.asList(1)),
            ((MultiStateAttribute) seedInShellAttrs.get(3)).getPresentStates());
    assertTrue(seedInShellAttrs.get(4).isInapplicable());

    List<Attribute> avgThicknessAttrs = ds.getAllAttributesForCharacter(4);
    assertEquals(5, avgThicknessAttrs.size());

    for (Attribute attr : avgThicknessAttrs) {
        assertTrue(attr instanceof RealAttribute);
    }

    assertEquals(itemCarrot, avgThicknessAttrs.get(0).getItem());
    assertEquals(itemApricot, avgThicknessAttrs.get(1).getItem());
    assertEquals(itemStrawberry, avgThicknessAttrs.get(2).getItem());
    assertEquals(itemPlum, avgThicknessAttrs.get(3).getItem());
    assertEquals(itemPotato, avgThicknessAttrs.get(4).getItem());

    assertEquals(charAvgThickness, avgThicknessAttrs.get(0).getCharacter());
    assertEquals(charAvgThickness, avgThicknessAttrs.get(1).getCharacter());
    assertEquals(charAvgThickness, avgThicknessAttrs.get(2).getCharacter());
    assertEquals(charAvgThickness, avgThicknessAttrs.get(3).getCharacter());
    assertEquals(charAvgThickness, avgThicknessAttrs.get(4).getCharacter());

    assertTrue(avgThicknessAttrs.get(0).isInapplicable());
    assertEquals(new FloatRange(3, 3), ((RealAttribute) avgThicknessAttrs.get(1)).getPresentRange());
    assertTrue(avgThicknessAttrs.get(2).isInapplicable());
    assertEquals(new FloatRange(5, 5), ((RealAttribute) avgThicknessAttrs.get(3)).getPresentRange());
    assertTrue(avgThicknessAttrs.get(4).isInapplicable());

    List<Attribute> avgNumSeedsAttrs = ds.getAllAttributesForCharacter(5);
    assertEquals(5, avgNumSeedsAttrs.size());

    for (Attribute attr : avgNumSeedsAttrs) {
        assertTrue(attr instanceof IntegerAttribute);
    }

    assertEquals(itemCarrot, avgNumSeedsAttrs.get(0).getItem());
    assertEquals(itemApricot, avgNumSeedsAttrs.get(1).getItem());
    assertEquals(itemStrawberry, avgNumSeedsAttrs.get(2).getItem());
    assertEquals(itemPlum, avgNumSeedsAttrs.get(3).getItem());
    assertEquals(itemPotato, avgNumSeedsAttrs.get(4).getItem());

    assertEquals(charAvgNumberOfSeeds, avgNumSeedsAttrs.get(0).getCharacter());
    assertEquals(charAvgNumberOfSeeds, avgNumSeedsAttrs.get(1).getCharacter());
    assertEquals(charAvgNumberOfSeeds, avgNumSeedsAttrs.get(2).getCharacter());
    assertEquals(charAvgNumberOfSeeds, avgNumSeedsAttrs.get(3).getCharacter());
    assertEquals(charAvgNumberOfSeeds, avgNumSeedsAttrs.get(4).getCharacter());

    assertTrue(avgNumSeedsAttrs.get(0).isInapplicable());
    assertEquals(new HashSet(Arrays.asList(1)),
            ((IntegerAttribute) avgNumSeedsAttrs.get(1)).getPresentValues());
    assertEquals(new HashSet(Arrays.asList(50)),
            ((IntegerAttribute) avgNumSeedsAttrs.get(2)).getPresentValues());
    assertEquals(new HashSet(Arrays.asList(1)),
            ((IntegerAttribute) avgNumSeedsAttrs.get(3)).getPresentValues());
    assertTrue(avgNumSeedsAttrs.get(4).isInapplicable());

    List<Attribute> colorAttrs = ds.getAllAttributesForCharacter(6);
    assertEquals(5, colorAttrs.size());

    for (Attribute attr : colorAttrs) {
        assertTrue(attr instanceof MultiStateAttribute);
        assertEquals(charColor, attr.getCharacter());
    }

    assertEquals(itemCarrot, colorAttrs.get(0).getItem());
    assertEquals(itemApricot, colorAttrs.get(1).getItem());
    assertEquals(itemStrawberry, colorAttrs.get(2).getItem());
    assertEquals(itemPlum, colorAttrs.get(3).getItem());
    assertEquals(itemPotato, colorAttrs.get(4).getItem());

    assertEquals(new HashSet(Arrays.asList(3)), ((MultiStateAttribute) colorAttrs.get(0)).getPresentStates());
    assertEquals(new HashSet(Arrays.asList(3)), ((MultiStateAttribute) colorAttrs.get(1)).getPresentStates());
    assertEquals(new HashSet(Arrays.asList(2)), ((MultiStateAttribute) colorAttrs.get(2)).getPresentStates());
    assertEquals(new HashSet(Arrays.asList(1)), ((MultiStateAttribute) colorAttrs.get(3)).getPresentStates());
    assertEquals(new HashSet(Arrays.asList(4)), ((MultiStateAttribute) colorAttrs.get(4)).getPresentStates());

    List<Attribute> averageLengthAttrs = ds.getAllAttributesForCharacter(7);
    assertEquals(5, averageLengthAttrs.size());

    for (Attribute attr : averageLengthAttrs) {
        assertTrue(attr instanceof RealAttribute);
        assertEquals(charAvgLength, attr.getCharacter());
    }

    assertEquals(itemCarrot, averageLengthAttrs.get(0).getItem());
    assertEquals(itemApricot, averageLengthAttrs.get(1).getItem());
    assertEquals(itemStrawberry, averageLengthAttrs.get(2).getItem());
    assertEquals(itemPlum, averageLengthAttrs.get(3).getItem());
    assertEquals(itemPotato, averageLengthAttrs.get(4).getItem());

    assertEquals(new FloatRange(20.0, 20.0), ((RealAttribute) averageLengthAttrs.get(0)).getPresentRange());
    assertEquals(new FloatRange(5.0, 10.0), ((RealAttribute) averageLengthAttrs.get(1)).getPresentRange());
    assertEquals(new FloatRange(3.0, 6.0), ((RealAttribute) averageLengthAttrs.get(2)).getPresentRange());
    assertEquals(new FloatRange(6.0, 10.0), ((RealAttribute) averageLengthAttrs.get(3)).getPresentRange());
    assertEquals(new FloatRange(10.0, 20.0), ((RealAttribute) averageLengthAttrs.get(4)).getPresentRange());

    List<Attribute> moreCommentsAttrs = ds.getAllAttributesForCharacter(8);
    assertEquals(5, moreCommentsAttrs.size());

    for (Attribute attr : moreCommentsAttrs) {
        assertTrue(attr instanceof TextAttribute);
        assertEquals(charMoreComments, attr.getCharacter());
    }

    assertEquals(itemCarrot, moreCommentsAttrs.get(0).getItem());
    assertEquals(itemApricot, moreCommentsAttrs.get(1).getItem());
    assertEquals(itemStrawberry, moreCommentsAttrs.get(2).getItem());
    assertEquals(itemPlum, moreCommentsAttrs.get(3).getItem());
    assertEquals(itemPotato, moreCommentsAttrs.get(4).getItem());

    assertEquals("<carrot>", ((TextAttribute) moreCommentsAttrs.get(0)).getText());
    assertEquals("<apricot>", ((TextAttribute) moreCommentsAttrs.get(1)).getText());
    assertEquals("<strawberry>", ((TextAttribute) moreCommentsAttrs.get(2)).getText());
    assertEquals("<plum>", ((TextAttribute) moreCommentsAttrs.get(3)).getText());
    assertEquals("<potato>", ((TextAttribute) moreCommentsAttrs.get(4)).getText());
}

From source file:au.org.ala.delta.intkey.ui.CharacterImageDialog.java

public FloatRange getInputRealValues() {
    FloatRange retRange = null;// www.  jav  a2  s.  com

    String inputText = _multipleImageViewer.getVisibleViewer().getInputText();

    if (!StringUtils.isEmpty(inputText)) {
        // Use value supplied in input field
        retRange = ParsingUtils.parseRealCharacterValue(inputText);
    } else {
        // Use values for selected value fields
        if (!_selectedValues.isEmpty()) {
            Set<Float> boundsSet = new HashSet<Float>();
            for (Pair<String, String> selectedValue : _selectedValues) {
                float minVal = Float.parseFloat(selectedValue.getFirst());
                boundsSet.add(minVal);

                // Second value in the pair will be null if the value field
                // represents a
                // single real value rather than a range.
                if (selectedValue.getSecond() != null) {
                    float maxVal = Float.parseFloat(selectedValue.getSecond());
                    boundsSet.add(maxVal);
                }
            }

            float overallMin = Collections.min(boundsSet);
            float overallMax = Collections.max(boundsSet);
            retRange = new FloatRange(overallMin, overallMax);
        }
    }

    // if the range is still null, return a float range with negative
    // infinity. This represents "no values selected".
    if (retRange == null) {
        retRange = new FloatRange(Float.NEGATIVE_INFINITY);
    }

    return retRange;
}

From source file:au.org.ala.delta.intkey.model.UseDirectiveTest.java

/**
 * Test the use of the USE directive using a character keyword in place of
 * character numbers/*from w w  w  .  ja v a 2  s . c o m*/
 * 
 * @throws Exception
 */
@Test
public void testKeyword() throws Exception {
    IntkeyContext context = loadDataset("/dataset/sample/intkey.ink");
    IntkeyDataset ds = context.getDataset();

    UnorderedMultiStateCharacter charLongevity = (UnorderedMultiStateCharacter) ds.getCharacter(2);
    RealCharacter charCulmsMaxHeight = (RealCharacter) ds.getCharacter(3);
    UnorderedMultiStateCharacter charCulmsWoodyHerbacious = (UnorderedMultiStateCharacter) ds.getCharacter(4);
    UnorderedMultiStateCharacter charCulmsBranchedAbove = (UnorderedMultiStateCharacter) ds.getCharacter(5);
    UnorderedMultiStateCharacter charInfloresence = (UnorderedMultiStateCharacter) ds.getCharacter(13);

    new UseDirective().parseAndProcess(context, "habit,1");
    Specimen specimen = context.getSpecimen();

    MultiStateAttribute valLongevity = (MultiStateAttribute) specimen.getAttributeForCharacter(charLongevity);
    RealAttribute valCulmsMaxHeight = (RealAttribute) specimen.getAttributeForCharacter(charCulmsMaxHeight);
    MultiStateAttribute valCulmsWoodyHerbacious = (MultiStateAttribute) specimen
            .getAttributeForCharacter(charCulmsWoodyHerbacious);
    MultiStateAttribute valCulmsBranchedAbove = (MultiStateAttribute) specimen
            .getAttributeForCharacter(charCulmsBranchedAbove);
    MultiStateAttribute valInfloresence = (MultiStateAttribute) specimen
            .getAttributeForCharacter(charInfloresence);

    assertEquals(Arrays.asList(1), new ArrayList<Integer>(valLongevity.getPresentStates()));
    assertEquals(new FloatRange(1.0, 1.0), valCulmsMaxHeight.getPresentRange());
    assertEquals(Arrays.asList(1), new ArrayList<Integer>(valCulmsWoodyHerbacious.getPresentStates()));
    assertEquals(Arrays.asList(1), new ArrayList<Integer>(valCulmsBranchedAbove.getPresentStates()));
    assertEquals(Arrays.asList(1), new ArrayList<Integer>(valInfloresence.getPresentStates()));

}

From source file:au.org.ala.delta.intkey.model.UseDirectiveTest.java

/**
 * Test that when a character is used, values are set for its controlling
 * characters (when the NONAUTOMATIC CONTROLLING CHARACTERS and USE
 * CONTROLLING CHARACTERS FIRST directives are not used)
 * /* ww  w .  j  a  va  2  s  .  com*/
 * @throws Exception
 */
@Test
public void testControllingCharactersSet() throws Exception {
    IntkeyContext context = loadDataset("/dataset/controlling_characters_simple/intkey.ink");
    IntkeyDataset ds = context.getDataset();

    UnorderedMultiStateCharacter charSeedPresence = (UnorderedMultiStateCharacter) ds.getCharacter(2);
    UnorderedMultiStateCharacter charSeedInShell = (UnorderedMultiStateCharacter) ds.getCharacter(3);
    RealCharacter charAvgThickness = (RealCharacter) ds.getCharacter(4);

    new UseDirective().parseAndProcess(context, "4,1");

    Specimen specimen = context.getSpecimen();

    MultiStateAttribute charSeedPresenceValue = (MultiStateAttribute) specimen
            .getAttributeForCharacter(charSeedPresence);
    assertEquals(1, charSeedPresenceValue.getPresentStates().size());
    assertEquals(1, charSeedPresenceValue.getPresentStates().toArray()[0]);

    MultiStateAttribute charSeedInShellValue = (MultiStateAttribute) specimen
            .getAttributeForCharacter(charSeedInShell);
    assertEquals(1, charSeedInShellValue.getPresentStates().size());
    assertEquals(1, charSeedInShellValue.getPresentStates().toArray()[0]);

    RealAttribute charAvgThicknessValue = (RealAttribute) specimen.getAttributeForCharacter(charAvgThickness);
    assertEquals(new FloatRange(1.0, 1.0), charAvgThicknessValue.getPresentRange());
}

From source file:au.org.ala.delta.intkey.model.DataSetLoadTest.java

/**
 * Test reading attributes (character-taxon data). These are loaded
 * on-demand from disk by the IntkeyDataset, as they are too large to hold
 * in memory./*from www.  j  a  v  a  2 s .  co m*/
 * 
 * @throws Exception
 */
@Test
public void testReadSingleAttribute() throws Exception {
    IntkeyContext context = loadDataset("/dataset/controlling_characters_simple/intkey.ink");

    IntkeyDataset ds = context.getDataset();

    RealCharacter charAvgWeight = (RealCharacter) ds.getCharacter(1);
    UnorderedMultiStateCharacter charSeedPresence = (UnorderedMultiStateCharacter) ds.getCharacter(2);
    UnorderedMultiStateCharacter charSeedInShell = (UnorderedMultiStateCharacter) ds.getCharacter(3);
    RealCharacter charAvgThickness = (RealCharacter) ds.getCharacter(4);
    IntegerCharacter charAvgNumberOfSeeds = (IntegerCharacter) ds.getCharacter(5);
    OrderedMultiStateCharacter charColor = (OrderedMultiStateCharacter) ds.getCharacter(6);
    RealCharacter charAvgLength = (RealCharacter) ds.getCharacter(7);
    TextCharacter charMoreComments = (TextCharacter) ds.getCharacter(8);

    Item itemApricot = ds.getItem(2);

    Attribute apricotAverageWeight = ds.getAttribute(2, 1);
    assertTrue(apricotAverageWeight instanceof RealAttribute);
    assertEquals(itemApricot, apricotAverageWeight.getItem());
    assertEquals(new FloatRange(10.0, 20.0), ((RealAttribute) apricotAverageWeight).getPresentRange());

    Attribute apricotSeedPresence = ds.getAttribute(2, 2);
    assertTrue(apricotSeedPresence instanceof MultiStateAttribute);
    assertEquals(itemApricot, apricotSeedPresence.getItem());
    assertEquals(charSeedPresence, apricotSeedPresence.getCharacter());
    assertEquals(new HashSet<Integer>(Arrays.asList(1)),
            ((MultiStateAttribute) apricotSeedPresence).getPresentStates());

    Attribute apricotSeedInShell = ds.getAttribute(2, 3);
    assertTrue(apricotSeedInShell instanceof MultiStateAttribute);
    assertEquals(itemApricot, apricotSeedInShell.getItem());
    assertEquals(charSeedInShell, apricotSeedInShell.getCharacter());
    assertEquals(new HashSet<Integer>(Arrays.asList(1)),
            ((MultiStateAttribute) apricotSeedInShell).getPresentStates());

    Attribute apricotAvgThickness = ds.getAttribute(2, 4);

    assertTrue(apricotAvgThickness instanceof RealAttribute);
    assertEquals(itemApricot, apricotAvgThickness.getItem());
    assertEquals(charAvgThickness, apricotAvgThickness.getCharacter());
    assertEquals(new FloatRange(3, 3), ((RealAttribute) apricotAvgThickness).getPresentRange());

    Attribute apricotAvgNumSeeds = ds.getAttribute(2, 5);
    assertTrue(apricotAvgNumSeeds instanceof IntegerAttribute);
    assertEquals(itemApricot, apricotAvgNumSeeds.getItem());
    assertEquals(charAvgNumberOfSeeds, apricotAvgNumSeeds.getCharacter());
    assertEquals(new HashSet(Arrays.asList(1)), ((IntegerAttribute) apricotAvgNumSeeds).getPresentValues());

    Attribute apricotColor = ds.getAttribute(2, 6);
    assertTrue(apricotColor instanceof MultiStateAttribute);
    assertEquals(charColor, apricotColor.getCharacter());
    assertEquals(itemApricot, apricotColor.getItem());
    assertEquals(new HashSet(Arrays.asList(3)), ((MultiStateAttribute) apricotColor).getPresentStates());

    Attribute apricotAverageLength = ds.getAttribute(2, 7);
    assertTrue(apricotAverageLength instanceof RealAttribute);
    assertEquals(charAvgLength, apricotAverageLength.getCharacter());
    assertEquals(itemApricot, apricotAverageLength.getItem());
    assertEquals(new FloatRange(5.0, 10.0), ((RealAttribute) apricotAverageLength).getPresentRange());

    Attribute apricotMoreComments = ds.getAttribute(2, 8);

    assertTrue(apricotMoreComments instanceof TextAttribute);
    assertEquals(charMoreComments, apricotMoreComments.getCharacter());

    assertEquals(itemApricot, apricotMoreComments.getItem());

    assertEquals("<apricot>", ((TextAttribute) apricotMoreComments).getText());
}

From source file:au.org.ala.delta.intkey.model.IntkeyDatasetFileReader.java

/**
 * Read attributes from the items file/*from   w  w  w .  ja  v  a 2 s.  c o m*/
 * 
 * @param itemFileHeader
 *            item file header
 * @param itemBinFile
 *            item file data
 * @param c
 *            character that we want attributes for
 * @param taxa
 *            taxa that we want attributes for
 * @return a list of attributes for the supplied character and taxa.
 */
private static List<Attribute> readAttributes(ItemsFileHeader itemFileHeader, BinFile itemBinFile, Character c,
        List<Item> taxa) {
    List<Attribute> retList = new ArrayList<Attribute>();

    int totalNumChars = itemFileHeader.getNChar();
    int totalNumTaxa = itemFileHeader.getNItem();

    seekToRecord(itemBinFile, itemFileHeader.getRpCdat());
    List<Integer> charAttributeDataRecordIndicies = readIntegerList(itemBinFile, totalNumChars);

    // Subtract 1 from the charNo because characters are zero indexed in
    // intkey API
    int charNo = c.getCharacterId();
    int charTaxonDataRecordIndex = charAttributeDataRecordIndicies.get(charNo - 1);

    seekToRecord(itemBinFile, charTaxonDataRecordIndex);

    if (c instanceof MultiStateCharacter) {

        MultiStateCharacter multiStateChar = (MultiStateCharacter) c;

        int bitsPerTaxon = multiStateChar.getStates().length + 1;
        int totalBitsNeeded = bitsPerTaxon * totalNumTaxa;
        int bytesToRead = Double.valueOf(Math.ceil(Double.valueOf(totalBitsNeeded) / Double.valueOf(Byte.SIZE)))
                .intValue();

        byte[] bytes = new byte[bytesToRead];
        itemBinFile.readBytes(bytes);
        boolean[] taxaData = Utils.byteArrayToBooleanArray(bytes);

        for (Item t : taxa) {
            int startIndex = (t.getItemNumber() - 1) * bitsPerTaxon; // Taxa
                                                                     // numbers
                                                                     // are
                                                                     // 1
                                                                     // indexed
                                                                     // instead
                                                                     // of 0
                                                                     // indexed
            int endIndex = startIndex + bitsPerTaxon;

            boolean[] taxonData = Arrays.copyOfRange(taxaData, startIndex, endIndex);

            // Taxon data consists of a bit for each state, indicating
            // the states presence, followed by
            // a final bit signifying whether or not the character is
            // inapplicable for the taxon.
            boolean inapplicable = taxonData[taxonData.length - 1];

            HashSet<Integer> presentStates = new HashSet<Integer>();
            for (int k = 0; k < taxonData.length - 1; k++) {
                boolean statePresent = taxonData[k];
                if (statePresent) {
                    presentStates.add(k + 1);
                }
            }

            SimpleAttributeData attrData = new SimpleAttributeData(presentStates.isEmpty(), inapplicable);
            MultiStateAttribute msAttr = new MultiStateAttribute(multiStateChar, attrData);
            msAttr.setItem(t);

            msAttr.setPresentStates(presentStates);

            retList.add(msAttr);
        }

    } else if (c instanceof IntegerCharacter) {
        IntegerCharacter intChar = (IntegerCharacter) c;
        int charMinValue = intChar.getMinimumValue();
        int charMaxValue = intChar.getMaximumValue();

        // 1 bit for all values below minimum, 1 bit for each value between
        // minimum and maximum (inclusive),
        // 1 bit for all values above maximum, 1 inapplicability bit.
        int bitsPerTaxon = charMaxValue - charMinValue + 4;
        int totalBitsNeeded = bitsPerTaxon * totalNumTaxa;

        int bytesToRead = Double.valueOf(Math.ceil(Double.valueOf(totalBitsNeeded) / Double.valueOf(Byte.SIZE)))
                .intValue();

        byte[] bytes = new byte[bytesToRead];
        itemBinFile.readBytes(bytes);
        boolean[] taxaData = Utils.byteArrayToBooleanArray(bytes);

        for (Item t : taxa) {
            int startIndex = (t.getItemNumber() - 1) * bitsPerTaxon; // Taxa
                                                                     // numbers
                                                                     // are
                                                                     // 1
                                                                     // indexed
                                                                     // instead
                                                                     // of 0
                                                                     // indexed
            int endIndex = startIndex + bitsPerTaxon;

            boolean[] taxonData = Arrays.copyOfRange(taxaData, startIndex, endIndex);

            boolean inapplicable = taxonData[taxonData.length - 1];

            Set<Integer> presentValues = new HashSet<Integer>();
            for (int k = 0; k < taxonData.length - 1; k++) {
                boolean present = taxonData[k];
                if (present) {
                    presentValues.add(k + charMinValue - 1);
                }
            }

            IntegerAttribute intAttr = new IntegerAttribute(intChar,
                    new SimpleAttributeData(presentValues.isEmpty(), inapplicable));
            intAttr.setItem(t);
            intAttr.setPresentValues(presentValues);

            retList.add(intAttr);
        }

    } else if (c instanceof RealCharacter) {
        // Read NI inapplicability bits
        int bytesToRead = Double.valueOf(Math.ceil(Double.valueOf(totalNumTaxa) / Double.valueOf(Byte.SIZE)))
                .intValue();
        byte[] bytes = new byte[bytesToRead];
        itemBinFile.readBytes(bytes);
        boolean[] taxaInapplicabilityData = Utils.byteArrayToBooleanArray(bytes);

        int recordsSpannedByInapplicabilityData = recordsSpannedByBytes(bytesToRead);

        seekToRecord(itemBinFile, charTaxonDataRecordIndex + recordsSpannedByInapplicabilityData);

        // Read two float values per taxon
        List<Float> taxonData = readFloatList(itemBinFile, totalNumTaxa * 2);

        for (Item t : taxa) {
            int taxonNumber = t.getItemNumber();

            float lowerFloat = taxonData.get((taxonNumber - 1) * 2);
            float upperFloat = taxonData.get(((taxonNumber - 1) * 2) + 1);

            boolean inapplicable = taxaInapplicabilityData[taxonNumber - 1];

            // Character is unknown for the corresponding taxon if
            // lowerfloat > upperfloat
            boolean unknown = lowerFloat > upperFloat;

            RealAttribute realAttr = new RealAttribute((RealCharacter) c,
                    new SimpleAttributeData(unknown, inapplicable));

            if (!unknown) {
                FloatRange range = new FloatRange(lowerFloat, upperFloat);
                realAttr.setPresentRange(range);
            }
            realAttr.setItem(t);

            retList.add(realAttr);
        }

    } else if (c instanceof TextCharacter) {
        TextCharacter textChar = (TextCharacter) c;

        // Read NI inapplicability bits
        int bytesToRead = Double.valueOf(Math.ceil(Double.valueOf(totalNumTaxa) / Double.valueOf(Byte.SIZE)))
                .intValue();
        byte[] bytes = new byte[bytesToRead];
        itemBinFile.readBytes(bytes);
        boolean[] taxaInapplicabilityData = Utils.byteArrayToBooleanArray(bytes);

        int recordsSpannedByInapplicabilityData = recordsSpannedByBytes(bytesToRead);

        seekToRecord(itemBinFile, charTaxonDataRecordIndex + recordsSpannedByInapplicabilityData);

        List<Integer> taxonTextDataOffsets = readIntegerList(itemBinFile, totalNumTaxa + 1);

        int recordsSpannedByOffsets = recordsSpannedByBytes((totalNumTaxa + 1) * Constants.SIZE_INT_IN_BYTES);

        seekToRecord(itemBinFile,
                charTaxonDataRecordIndex + recordsSpannedByInapplicabilityData + recordsSpannedByOffsets);

        ByteBuffer taxonTextData = itemBinFile.readByteBuffer(
                taxonTextDataOffsets.get(taxonTextDataOffsets.size() - taxonTextDataOffsets.get(0)));

        for (Item t : taxa) {
            int taxonNumber = t.getItemNumber();

            int lowerOffset = taxonTextDataOffsets.get(taxonNumber - 1);
            int upperOffset = taxonTextDataOffsets.get((taxonNumber - 1) + 1);
            int textLength = upperOffset - lowerOffset;

            String txt = "";
            if (textLength > 0) {
                byte[] textBytes = new byte[textLength];
                taxonTextData.position(lowerOffset - 1);
                taxonTextData.get(textBytes);

                txt = BinFileEncoding.decode(textBytes);
            }

            boolean inapplicable = taxaInapplicabilityData[taxonNumber - 1];
            boolean unknown = StringUtils.isEmpty(txt);

            TextAttribute txtAttr = new TextAttribute(textChar, new SimpleAttributeData(unknown, inapplicable));
            try {
                txtAttr.setText(txt);
            } catch (DirectiveException e) {
                // The SimpleAttributeData implementation won't throw this
                // Exception.
            }
            txtAttr.setItem(t);

            retList.add(txtAttr);

        }
    }

    return retList;
}

From source file:org.commonjava.indy.stats.IndyDeprecatedApis.java

public IndyDeprecatedApis(Properties props) {
    this.props = props;

    Float minVersion = 0f;/* www . ja  v a2s  .c o m*/

    Set<String> keys = props.stringPropertyNames();
    for (String key : keys) {
        DeprecatedApiEntry et;
        String value = props.getProperty(key);

        Float startVersion;
        Float endVersion;

        if (key.indexOf(",") >= 0) // range
        {
            key = key.replaceAll("[\\[|\\]]", ""); // strip off square brackets if present
            String[] kv = key.split(",");
            startVersion = Float.parseFloat(kv[0].trim());
            endVersion = Float.parseFloat(kv[1].trim());
            et = new DeprecatedApiEntry(new FloatRange(startVersion, endVersion), value);
        } else {
            endVersion = Float.parseFloat(key.trim());
            et = new DeprecatedApiEntry(endVersion, value);
        }

        // Calculate minApiVersion
        if (et.isOff()) {
            minVersion = endVersion + 0.1f;
        }
        deprecatedApis.add(et);
    }

    minApiVersion = minVersion.toString();

    logger.debug("Parsed deprecatedApis:{}, minApiVersion:{}", deprecatedApis, minApiVersion);
}