package busobj; import ariba.ui.validation.ChoiceSourceRegistry; import ariba.ui.meta.annotations.*; import ariba.ui.meta.annotations.Trait.*; import ariba.ui.meta.annotations.Property.*; import ariba.util.core.Date; import java.math.BigDecimal; import java.util.List; import java.util.Arrays; import java.util.Map; import java.util.ArrayList; import java.io.File; @Localized public class User extends Person { public enum AccountStatus { PendingReview, Active, Suspended } @Secret String password; BigDecimal accountBalance; @Properties("trait:enumeration; choices: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];") int rating = 50; @RichText String bio; AccountStatus _accountStatus = AccountStatus.Active; List <Permission> _permissions; public File fullProfile; @Traits("ownedToMany") List<Project>_projects; public User () {} public User (String firstName, String lastName, int rating) { super(firstName, lastName); this.rating = rating; } public int getRating() { return rating; } public void setRating(int rating) { this.rating = rating; } public BigDecimal getAccountBalance() { return accountBalance; } public void setAccountBalance(BigDecimal acoountBalance) { this.accountBalance = acoountBalance; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBio() { return bio; } public void setBio(String bio) { this.bio = bio; } public AccountStatus getAccountStatus() { return _accountStatus; } public void setAccountStatus(AccountStatus accountStatus) { _accountStatus = accountStatus; } public List<Permission> getPermissions() { return _permissions; } public void setPermissions(List<Permission> permissions) { _permissions = permissions; } public List<Project> getProjects() { return _projects; } public void setProjects(List<Project> projects) { _projects = projects; } public boolean isSuspended () { return _accountStatus == AccountStatus.Suspended; } @Action(message="Account Suspended") @Visible("${!object.isSuspended}") public void suspendAccount () { _accountStatus = AccountStatus.Suspended; } @Action(message="Account Re-activated") @Visible("${object.isSuspended}") public void reinstateAccount () { _accountStatus = AccountStatus.Active; } @Action public void doIt () {} public boolean hasPermissions (List<String> permissions) { // N^2 for (String p : permissions) { for (Permission hasPerm : _permissions) { if (hasPerm.name().equals(p)) return true; } } return false; } /* Bogus test example of a chooser source */ static List<User> _AllUsers = Arrays.asList( new User("Fred", "Flintstone", 98), new User("Barney", "Rubble", 58), new User("Betty", "Rubble", 88), new User("Wilma", "Flintstone", 78), new User("Bam Bam", "Rubble", 32), new User("Dino", "Flintstone", 13) ); static { ChoiceSourceRegistry.registerProvider(User.class.getName(), new ChoiceSourceRegistry.Provider() { public Object choiceSourceForParams (String className, Map context) { return _AllUsers; } }); } public enum Permission { UserAdmin, SourcingCreate, SourcingSearch } // Would normally be thread local... static User _EffectiveUser; static { // prefab a user with some interesting data _EffectiveUser = new User("Test", "User", 60); _EffectiveUser.setPermissions(Arrays.asList(Permission.UserAdmin, Permission.SourcingSearch)); List<Project> projects = new ArrayList(); projects.add(new Project("Project X", "A mysterious project", new Date(2008, 4, 12), new BigDecimal(1234))); projects.add(new Project("Magnum", "A BIG project", new Date(2006, 7, 23), new BigDecimal(1234567))); _EffectiveUser.setProjects(projects); } public static User getEffectiveUser() { return _EffectiveUser; } }