List of usage examples for org.apache.commons.lang.math FloatRange FloatRange
public FloatRange(Number number1, Number number2)
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).
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); }