package module.projects.presentationTier.vaadin.reportType; import java.util.Map; import module.projects.domain.AccessControl; import module.projects.presentationTier.vaadin.IllegalAccessException; import module.projects.presentationTier.vaadin.reportType.components.ProjectHeaderComponent; import pt.ist.bennu.core.applicationTier.Authenticate.UserView; import pt.ist.bennu.core.domain.RoleType; import pt.ist.bennu.core.domain.User; import pt.ist.expenditureTrackingSystem.domain.organization.Person; import pt.ist.expenditureTrackingSystem.domain.organization.Project; import pt.ist.expenditureTrackingSystem.domain.organization.SubProject; import pt.ist.expenditureTrackingSystem.domain.organization.Unit; import pt.ist.fenixframework.FenixFramework; public abstract class ProjectReportType extends ReportType { private String projectCode; private final String projectID; private Project project; protected Project getProject() { return project; } protected String getProjectCode() { return projectCode; } protected String getProjectID() { return projectID; } protected ProjectReportType(Map<String, String> args) { super(args); setHeaderVisibility(true); projectID = args.get("unit"); Project project = getProjectFromID(projectID); if (project != null && checkAccessControl(projectID)) { this.project = project; projectCode = project.getProjectCode(); ProjectHeaderComponent header = new ProjectHeaderComponent(getLabel(), project); setHeader(header); addComponent(header); } else { throw new IllegalAccessException(); } } private boolean checkAccessControl(String unit) { final Unit project = FenixFramework.getDomainObject(unit); final User user = UserView.getCurrentUser(); return AccessControl.isUserAllowedToViewDetailedProjectInfo(project, user); } private Project getProjectFromID(String projectID) { Unit project = FenixFramework.getDomainObject(projectID); if (project instanceof Project) { return (Project) project; } else if (project instanceof SubProject) { return (Project) ((SubProject) project).getParentUnit(); } return null; } }