private Role createRole(String namespaceCode, String name, String kimTypeId) { Role.Builder bldr = Role.Builder.create(); bldr.setNamespaceCode(namespaceCode); bldr.setName(name); bldr.setKimTypeId(kimTypeId); bldr.setActive(true); Role fromCreate = this.roleService.createRole(bldr.build()); assertEquals(namespaceCode, fromCreate.getNamespaceCode()); assertEquals(name, fromCreate.getName()); assertEquals(kimTypeId, fromCreate.getKimTypeId()); assertNotNull(fromCreate.getId()); assertNotNull(fromCreate.getVersionNumber()); assertTrue(fromCreate.isActive()); assertNull(fromCreate.getDescription()); bldr = Role.Builder.create(fromCreate); bldr.setDescription(namespaceCode + " " + name); Role fromUpdate = this.roleService.updateRole(bldr.build()); assertEquals(fromCreate.getNamespaceCode(), fromUpdate.getNamespaceCode()); assertEquals(fromCreate.getName(), fromUpdate.getName()); assertEquals(fromCreate.getId(), fromUpdate.getId()); assertNotSame(fromCreate.getVersionNumber(), fromUpdate.getVersionNumber()); assertEquals(fromCreate.isActive(), fromUpdate.isActive()); assertEquals(bldr.getDescription(), fromUpdate.getDescription()); Role fromGet = this.roleService.getRole(fromUpdate.getId()); assertEquals(fromUpdate.getNamespaceCode(), fromGet.getNamespaceCode()); assertEquals(fromUpdate.getName(), fromGet.getName()); assertEquals(fromUpdate.getKimTypeId(), fromGet.getKimTypeId()); assertEquals(fromUpdate.getId(), fromGet.getId()); assertEquals(fromUpdate.getVersionNumber(), fromGet.getVersionNumber()); assertEquals(fromUpdate.isActive(), fromGet.isActive()); assertEquals(fromUpdate.getDescription(), fromGet.getDescription()); Role fromFind = this.roleService.getRoleByNamespaceCodeAndName(namespaceCode, name); assertEquals(fromUpdate.getNamespaceCode(), fromFind.getNamespaceCode()); assertEquals(fromUpdate.getName(), fromFind.getName()); assertEquals(fromUpdate.getKimTypeId(), fromFind.getKimTypeId()); assertEquals(fromUpdate.getId(), fromFind.getId()); assertEquals(fromUpdate.getVersionNumber(), fromFind.getVersionNumber()); assertEquals(fromUpdate.isActive(), fromFind.isActive()); assertEquals(fromUpdate.getDescription(), fromFind.getDescription()); // TODO: test update return fromFind; }
protected boolean pickAndExecuteAnAction() { if (getName().equals("bankManager")) print("bigState:" + bigState); /*Emergency scheduler rules go here (v2)*/ if (emergencyState == EmergencyState.fire) { ReactToFire(); return true; } // This should be the only part of the scheduler which runs if the person has an active role boolean anyActive = false; for (Role role : roles) { if (role.isActive()) { anyActive = true; if (role.pickAndExecuteAnAction()) return true; } } // Reaching here means there is an active role, but it is "waiting" for a state to be updated // Thus, the PersonAgent's scheduler should return FALSE if (anyActive) { return false; } switch (bigState) { case atHome: { if (homeState == HomeState.sleeping) { if (!isWeekend()) { if (cityData.hour >= 0 && (job.equals("Host") || job.equals("MarketManager") || job.equals("BankManager"))) { // delete the && false when the actual rule is implemented WakeUp(); return true; } else if (cityData.hour >= 3 && isEmployee()) { // print(getJob()); WakeUp(); return true; } else if (cityData.hour >= 6) { WakeUp(); return true; } return false; // put the agent thread back to sleep } else { if (cityData.hour >= 2 && (job.equals("Host") || job.equals("MarketManager") || job.equals("BankManager"))) { // delete the && false when the actual rule is implemented WakeUp(); return true; } else if (cityData.hour >= 5 && isEmployee()) { // print(getJob()); WakeUp(); return true; } else if (cityData.hour >= 8) { WakeUp(); return true; } return false; // put the agent thread back to sleep } } if (tiredLevel >= TIRED) { goToSleep(); return false; // intentional because the thread is being out to sleep } if (home instanceof Apartment && rentDue && !home.manager.equals(this)) { payRent(0); return true; } if (hungerLevel >= HUNGRY) { int num = (int) (Math.random() * 2); if (num == 0) { makeFood(); return true; } if (num == 1) { leaveHome(); return true; } } if (goToWork && jobBuilding != null && (!home.manager.equals(this) && home instanceof Apartment)) { leaveHome(); return true; } if (home instanceof Apartment && rentDue && !home.manager.equals(this)) { // TODO if (banks.get(0).isOpen) { payRent(0); } else if (banks.get(1).isOpen) { payRent(1); } return true; } if (homeState == HomeState.onCouch) { goToCouch(); return true; } if (homeState == HomeState.none) { if (home instanceof Apartment && home.manager.equals(this) && lowInventory()) { leaveHome(); return true; } else if (home instanceof Apartment && home.manager.equals(this)) { goToCouch(); return true; } else if (cash <= LOWMONEY || cash >= HIGHMONEY) { System.err.println("money problems"); leaveHome(); return true; } } } case leaveHome: { // personGui.DoGoToEntrance(); leaveHome(); return true; } case goToRestaurant: { goToRestaurant(); return true; } case goHome: { goHome(); return true; } case goToBank: { goToBank(); return true; } case goToMarket: { goToMarket(); return true; } case doingNothing: { // Decide what the next BigState will be based on current parameters if (goToWork && jobBuilding != null) { destinationBuilding = jobBuilding; desiredRole = job; if (destinationBuilding.type == BuildingType.market) { bigState = BigState.goToMarket; return true; } else if (destinationBuilding.type == BuildingType.bank) { bigState = BigState.goToBank; return true; } else if (destinationBuilding.type == BuildingType.restaurant) { bigState = BigState.goToRestaurant; return true; } } if (hungerLevel >= STARVING) { bigState = BigState.goToRestaurant; desiredRole = "Customer"; if (!goToWork) return true; } if (cash <= LOWMONEY) { if (!job.equals("bankManager")) { bigState = BigState.goToBank; desiredRole = "Customer"; double withdrawAmount = (bankInfo.moneyInAccount < 100) ? bankInfo.moneyInAccount : 100; bankInfo.depositAmount = -withdrawAmount; } return true; } if (cash >= HIGHMONEY) { if (!job.equals("bankManager")) { bigState = BigState.goToBank; desiredRole = "Customer"; bankInfo.depositAmount = cash - HIGHMONEY; } return true; } // Inventory of food stuff if (lowInventory()) { bigState = BigState.goToMarket; desiredRole = "MarketCustomer"; if (!goToWork) return true; } if (hungerLevel >= HUNGRY) { bigState = BigState.goToRestaurant; desiredRole = "Customer"; if (!goToWork) return true; } bigState = BigState.goHome; homeState = HomeState.onCouch; if (!goToWork) return true; } } return false; }