/*
* Copyright (C) 2002 Erik Swenson - erik@oreports.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have reserved a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package org.efs.openreports.objects;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.TimeZone;
import java.util.TreeSet;
import org.efs.openreports.ORStatics;
public class ReportUser implements Serializable
{
private static final long serialVersionUID = 7715901858866413034L;
private Integer id;
private String name;
private String password;
private String externalId;
private String email;
private Locale locale = Locale.getDefault();
private TimeZone timeZone = TimeZone.getDefault();
private Set<String> roles;
private List<ReportGroup> groups;
private List<ReportUserAlert> alerts;
private Report defaultReport;
//TODO remove pdfExportType, update DB schema
private int pdfExportType;
public ReportUser()
{
roles = new TreeSet<String>();
groups = new ArrayList<ReportGroup>();
alerts = new ArrayList<ReportUserAlert>();
}
public void setId(Integer id)
{
this.id = id;
}
public String getPassword()
{
return password;
}
public String getName()
{
return name;
}
public void setPassword(String password)
{
this.password = password;
}
public void setName(String name)
{
this.name = name;
}
public Integer getId()
{
return id;
}
public List<ReportGroup> getGroups()
{
return groups;
}
public void setGroups(List<ReportGroup> groups)
{
this.groups = groups;
}
public Set<Report> getReports()
{
TreeSet<Report> set = new TreeSet<Report>();
Iterator iterator = groups.iterator();
while(iterator.hasNext())
{
ReportGroup group = (ReportGroup) iterator.next();
set.addAll(group.getReports());
}
return set;
}
public boolean isValidReport(Report report)
{
Iterator iterator = groups.iterator();
while(iterator.hasNext())
{
ReportGroup group = (ReportGroup) iterator.next();
if (group.isValidReport(report)) return true;
}
return false;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
public String getExternalId()
{
return externalId;
}
public void setExternalId(String externalId)
{
this.externalId = externalId;
}
public boolean isValidGroup(ReportGroup reportGroup)
{
if (groups != null && groups.size() > 0)
{
Iterator iterator = groups.iterator();
while (iterator.hasNext())
{
ReportGroup group = (ReportGroup) iterator.next();
if (group.getId().equals(reportGroup.getId()))
return true;
}
}
return false;
}
public int getPdfExportType()
{
return pdfExportType;
}
public void setPdfExportType(int pdfExportType)
{
this.pdfExportType = pdfExportType;
}
public List<ReportUserAlert> getAlerts()
{
if (alerts != null) Collections.sort(alerts);
return alerts;
}
public void setAlerts(List<ReportUserAlert> alerts)
{
this.alerts = alerts;
}
public ReportUserAlert getUserAlert(Integer alertId)
{
Iterator iterator = alerts.iterator();
while (iterator.hasNext())
{
ReportUserAlert map = (ReportUserAlert) iterator.next();
if (map.getAlert().getId().equals(alertId))
{
return map;
}
}
return null;
}
public Report getDefaultReport()
{
return defaultReport;
}
public void setDefaultReport(Report defaultReport)
{
this.defaultReport = defaultReport;
}
public Set getRoles()
{
return roles;
}
public void setRoles(Set<String> roles)
{
this.roles = roles;
}
public boolean isAdminUser()
{
for (int i=0; i < ORStatics.ADMIN_ROLES.length; i++)
{
if (roles.contains(ORStatics.ADMIN_ROLES[i])) return true;
}
return false;
}
public boolean isRootAdmin()
{
return roles.contains(ORStatics.ROOT_ADMIN_ROLE);
}
public void setRootAdmin(boolean hasRole)
{
roles.remove(ORStatics.ROOT_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.ROOT_ADMIN_ROLE);
}
public boolean isScheduler()
{
return roles.contains(ORStatics.SCHEDULER_ROLE) || isRootAdmin();
}
public void setScheduler(boolean hasRole)
{
roles.remove(ORStatics.SCHEDULER_ROLE);
if (hasRole) roles.add(ORStatics.SCHEDULER_ROLE);
}
public boolean isAdvancedScheduler()
{
return roles.contains(ORStatics.ADVANCED_SCHEDULER_ROLE) || isRootAdmin();
}
public void setAdvancedScheduler(boolean hasRole)
{
roles.remove(ORStatics.ADVANCED_SCHEDULER_ROLE);
if (hasRole) roles.add(ORStatics.ADVANCED_SCHEDULER_ROLE);
}
public boolean isDashboardUser()
{
return false;
}
public void setDashboardUser(boolean hasRole)
{
roles.remove(ORStatics.DASHBOARD_ROLE);
if (hasRole) roles.add(ORStatics.DASHBOARD_ROLE);
}
public boolean isDataSourceAdmin()
{
return roles.contains(ORStatics.DATASOURCE_ADMIN_ROLE) || isRootAdmin();
}
public void setDataSourceAdmin(boolean hasRole)
{
roles.remove(ORStatics.DATASOURCE_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.DATASOURCE_ADMIN_ROLE);
}
public boolean isReportAdmin()
{
return roles.contains(ORStatics.REPORT_ADMIN_ROLE) || isRootAdmin();
}
public void setReportAdmin(boolean hasRole)
{
roles.remove(ORStatics.REPORT_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.REPORT_ADMIN_ROLE);
}
public boolean isParameterAdmin()
{
return roles.contains(ORStatics.PARAMETER_ADMIN_ROLE) || isRootAdmin();
}
public void setParameterAdmin(boolean hasRole)
{
roles.remove(ORStatics.PARAMETER_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.PARAMETER_ADMIN_ROLE);
}
public boolean isUserAdmin()
{
return roles.contains(ORStatics.USER_ADMIN_ROLE) || isRootAdmin();
}
public void setUserAdmin(boolean hasRole)
{
roles.remove(ORStatics.USER_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.USER_ADMIN_ROLE);
}
public boolean isGroupAdmin()
{
return roles.contains(ORStatics.GROUP_ADMIN_ROLE) || isRootAdmin();
}
public void setGroupAdmin(boolean hasRole)
{
roles.remove(ORStatics.GROUP_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.GROUP_ADMIN_ROLE);
}
public boolean isChartAdmin()
{
return roles.contains(ORStatics.CHART_ADMIN_ROLE) || isRootAdmin();
}
public void setChartAdmin(boolean hasRole)
{
roles.remove(ORStatics.CHART_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.CHART_ADMIN_ROLE);
}
public boolean isAlertAdmin()
{
return false;
}
public void setAlertAdmin(boolean hasRole)
{
roles.remove(ORStatics.ALERT_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.ALERT_ADMIN_ROLE);
}
public boolean isAlertUser()
{
return false;
}
public void setAlertUser(boolean hasRole)
{
roles.remove(ORStatics.ALERT_USER_ROLE);
if (hasRole) roles.add(ORStatics.ALERT_USER_ROLE);
}
public boolean isLogViewer()
{
return roles.contains(ORStatics.LOG_VIEWER_ROLE) || isRootAdmin();
}
public void setLogViewer(boolean hasRole)
{
roles.remove(ORStatics.LOG_VIEWER_ROLE);
if (hasRole) roles.add(ORStatics.LOG_VIEWER_ROLE);
}
public boolean isUploader()
{
return roles.contains(ORStatics.UPLOAD_ROLE) || isRootAdmin();
}
public void setUploader(boolean hasRole)
{
roles.remove(ORStatics.UPLOAD_ROLE);
if (hasRole) roles.add(ORStatics.UPLOAD_ROLE);
}
public boolean isSchedulerAdmin()
{
return false;
}
public void setSchedulerAdmin(boolean hasRole)
{
roles.remove(ORStatics.SCHEDULER_ADMIN_ROLE);
if (hasRole) roles.add(ORStatics.SCHEDULER_ADMIN_ROLE);
}
public Locale getLocale()
{
return locale;
}
public void setLocale(Locale locale)
{
this.locale = locale;
}
public TimeZone getTimeZone()
{
return timeZone;
}
public void setTimeZone(TimeZone timeZone)
{
this.timeZone = timeZone;
}
}