package net.sourceforge.pain.logic.fn; import net.sourceforge.pain.*; import net.sourceforge.pain.logic.fn.util.*; import net.sourceforge.pain.data.*; import net.sourceforge.pain.data.type.*; import net.sourceforge.pain.db.*; import java.util.*; public final class GlobalFindFn { private GlobalFindFn() { } /** looking for player by exact name */ public static Player findPlayerByName(String name) { if (name == null || name.length() < 3) { return null; } name = name.toLowerCase(); DbClass dbClass = Core.getDB().getDbClass(Player.class); for (Iterator it = dbClass.extentIterator(); it.hasNext();) { Player p = (Player) it.next(); if (name.equals(p.getLogin())) { return p; } } return null; } public static Player findActivePlayerByName(String name) { if (name == null) { return null; } name = name.toLowerCase(); for (Player p = Core.getWorld().getFirstActivePlayer(); p != null; p = p.getNextActivePlayer()) { if (name.equals(p.getLogin())) { return p; } } return null; } public static Interactive findInteractiveByPrefix(LogicalObject actor, String prefix) { if (prefix == null || prefix.length() == 0) { return null; } prefix = prefix.toLowerCase(); if (prefix.equals("self")) { Interactive i = (Interactive) actor.getRole(Interactive.class); if (i != null) { return i; } } String mostSimilarName = null; Interactive result = null; for (Iterator it = Core.getAllObjects(Interactive.class); it.hasNext();) { Interactive i = (Interactive) it.next(); String inames[] = i.getTargetList(); for (int j = 0; j < inames.length; j++) { String iname = inames[j]; if (iname.startsWith(prefix)) { if (iname.length() == prefix.length()) { return i; // found exact } if (mostSimilarName == null) { mostSimilarName = iname; result = i; continue; } else { if (SpaceFindFn.isCloserTo(prefix, iname, mostSimilarName)) { if (result.is(Player.class) && !i.is(Player.class)) { // nothing to do, players has priority in global search } else { mostSimilarName = iname; result = i; } } } } } } return result; } }