package senseiTests.domainsTest; import sensei.middleware.domains.CoordinatorElectorBaseImpl; import sensei.middleware.domains.CoordinatorInformation; import sensei.middleware.domains.DomainGroupHandler; import sensei.middleware.domains.MemberProperties; import sensei.middleware.domains.Property; //import sensei.util.Debug; class TestCoordinatorElector extends CoordinatorElectorBaseImpl { public TestCoordinatorElector(boolean useWeights, DomainGroupHandler domainGroup, UIFrame display) throws Exception { this.useWeights=useWeights; this.domainGroup=domainGroup; this.display=display; } public void changeToUseWeights(boolean set) { useWeights=set; } public int getCoordinator(int loc, CoordinatorInformation[] info) { int ret = useWeights? getCoordinatorByWeights(loc, info) : getCoordinatorByUser(loc, info); display.showCoordinatorElector(loc, ret); return ret; } int getCoordinatorByUser(int loc, CoordinatorInformation[] info) { try { MemberProperties[] properties=null; if (domainGroup.arePropertiesEnabled()) properties = domainGroup.getPropertyForAllMembers(NAME); int length = info.length; Property []props = new Property[length]; for (int i=0; i < length; i++) props[i]=new Property(getMemberId(info[i].statusMember, properties), String.valueOf(info[i].currentCoordinations.length)); Property input = new PropertySelector(props, display, "Select coordinator", "Member", "Coordinations", false, false).getInput(); return extractMember(input.nam); } catch(Exception ex) { display.showError(ex); } return 0; } String getMemberId(int member, MemberProperties[] props) { StringBuffer buf = new StringBuffer(String.valueOf(member)); if (props!=null) { String name = getName(member, props); if (name!=null) buf.append(" (").append(name).append(")"); } return buf.toString(); } int extractMember(String memberId) { int name=memberId.indexOf(' '); if (name==-1) return Integer.valueOf(memberId).intValue(); else return Integer.valueOf(memberId.substring(0, name)).intValue(); } int getCoordinatorByWeights(int loc, CoordinatorInformation[] info) { try { MemberProperties[] props = domainGroup.getPropertyForAllMembers(WEIGHT); int statusMember=info[0].statusMember; double value=Double.MIN_VALUE; int length = info.length; for(int i=0; i < length; i++) { double itsValue=getWeight(info[i].statusMember, props)/(info.length+1); if (itsValue>value) { value=itsValue; statusMember=info[i].statusMember; } } return statusMember; } catch(Exception ex) { display.showError(ex); } return 0; } double getWeight(int member, MemberProperties []props) { try { String property=getProperty(member, props); if (property!=null) return Double.valueOf(property).doubleValue(); } catch(Exception ex) { } return 0; } String getName(int member, MemberProperties []props) { return getProperty(member, props); } String getProperty(int member, MemberProperties []props) { int i = props.length; while(i-->0) { MemberProperties prop = props[i]; if (prop.member==member) { //Debug.assert(prop.props.length==1, Consts.AREA, "TestCoordinatorElector::GetProperty::1"); return prop.props[0].val; } } return null; } final static String WEIGHT="weight"; final static String NAME="name"; boolean useWeights; DomainGroupHandler domainGroup; UIFrame display; }