/**
* Copyright 2011 Intuit Inc. All Rights Reserved
*/
package com.intuit.tank;
/*
* #%L
* JSF Support Beans
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;
import javax.inject.Named;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.time.FastDateFormat;
import com.intuit.tank.admin.Deleted;
import com.intuit.tank.dao.PreferencesDao;
import com.intuit.tank.prefs.PreferencesChangedListener;
import com.intuit.tank.project.ColumnPreferences;
import com.intuit.tank.project.ColumnPreferences.Hidability;
import com.intuit.tank.project.ColumnPreferences.Visibility;
import com.intuit.tank.project.Preferences;
import com.intuit.tank.vm.common.TankConstants;
import com.intuit.tank.vm.common.util.ReportUtil;
/**
* PreferencesBean
*
* @author dangleton
*
*/
@Named
@SessionScoped
public class PreferencesBean implements Serializable, PreferencesChangedListener {
private static final long serialVersionUID = 1L;
private String preferredDateTimeFormat = TankConstants.DATE_FORMAT;
private String preferredTimeStampFormat = ReportUtil.DATE_FORMAT;
private FastDateFormat timestampFormat;
private FastDateFormat dateTimeFotmat;
private Preferences preferences;
private int screenWidth = 1200;
private int screenHeight = 600;
private TimeZone clientTimeZone = TimeZone.getTimeZone("PST");
/**
*
*/
public PreferencesBean() {
dateTimeFotmat = FastDateFormat.getInstance(TankConstants.DATE_FORMAT_WITH_TIMEZONE, clientTimeZone);
timestampFormat = FastDateFormat.getInstance(preferredTimeStampFormat);
}
/**
* @return the preferences
*/
public Preferences getPreferences() {
return preferences;
}
/**
* @return the clientTimeZone
*/
public TimeZone getClientTimeZone() {
return clientTimeZone;
}
/**
* @param clientTimeZone
* the clientTimeZone to set
*/
public void setClientTimeZone(TimeZone clientTimeZone) {
this.clientTimeZone = clientTimeZone;
dateTimeFotmat = FastDateFormat.getInstance(TankConstants.DATE_FORMAT, clientTimeZone);
}
/**
*
* @param user
*/
public void observeLogin(@Observes(notifyObserver = Reception.IF_EXISTS) @Deleted Preferences preferences) {
init(preferences.getCreator());
}
public void init(String owner) {
preferences = new PreferencesDao().getForOwner(owner);
validatePrefs(owner);
}
public void setScreenSizes(String width, String height) {
if (NumberUtils.isDigits(width)) {
this.screenWidth = NumberUtils.toInt(width) - 20;
}
if (NumberUtils.isDigits(height)) {
this.screenHeight = NumberUtils.toInt(height) - 20;
}
}
/**
* @return the screenWidth
*/
public int getScreenWidth() {
return screenWidth;
}
/**
* @param screenWidth
* the screenWidth to set
*/
public void setScreenWidth(int screenWidth) {
this.screenWidth = screenWidth;
}
/**
* @return the screenHeight
*/
public int getScreenHeight() {
return screenHeight;
}
/**
* @param screenHeight
* the screenHeight to set
*/
public void setScreenHeight(int screenHeight) {
this.screenHeight = screenHeight;
}
/**
* @param owner
* @return
*/
private void validatePrefs(String owner) {
if (preferences == null) {
preferences = new Preferences();
preferences.setCreator(owner);
}
boolean needsSave = false;
needsSave |= checkPrefs(preferences.getCreator(), preferences.getProjectTableColumns(),
DefaultTableColumnUtil.PROJECT_COL_PREFS);
needsSave |= checkPrefs(preferences.getCreator(), preferences.getDatafilesTableColumns(),
DefaultTableColumnUtil.DATA_FILES_COL_PREFS);
needsSave |= checkPrefs(preferences.getCreator(), preferences.getJobsTableColumns(),
DefaultTableColumnUtil.JOBS_COL_PREFS);
needsSave |= checkPrefs(preferences.getCreator(), preferences.getScriptsTableColumns(),
DefaultTableColumnUtil.SCRIPTS_COL_PREFS);
needsSave |= checkPrefs(preferences.getCreator(), preferences.getScriptStepTableColumns(),
DefaultTableColumnUtil.SCRIPT_STEPS_COL_PREFS);
if (needsSave) {
preferences = new PreferencesDao().saveOrUpdate(preferences);
}
}
private boolean checkPrefs(String owner, List<ColumnPreferences> existingPrefs,
List<ColumnPreferences> defaultPreferences) {
boolean ret = false;
for (int i = 0; i < defaultPreferences.size(); i++) {
ColumnPreferences p = defaultPreferences.get(i);
if (!existingPrefs.contains(p)) {
ColumnPreferences pref = new ColumnPreferences(p.getColName(), p.getDisplayName(), p.getSize(),
p.isVisible() ? Visibility.VISIBLE : Visibility.HIDDEN, p.isHideable() ? Hidability.HIDABLE
: Hidability.NON_HIDABLE);
pref.setCreator(owner);
existingPrefs.add(i, pref);
ret = true;
}
}
return ret;
}
/**
* @{inheritDoc
*/
@Override
public void prefsChanged() {
if (preferences != null) {
new PreferencesDao().saveOrUpdate(preferences);
}
}
/**
* Format the date according to the user's preferences
*
* @param date
* @return
*/
public String formatDate(Date date) {
String ret = null;
if (date != null) {
ret = dateTimeFotmat.format(date);
}
return ret;
}
public String getCollectionFilterString(Collection<? extends Object> c) {
StringBuilder sb = new StringBuilder();
if (c != null) {
for (Object o : c) {
if (sb.length() != 0) {
sb.append(", ");
}
sb.append(o.toString());
}
}
return sb.toString();
}
/**
* @return the timestampFormat
*/
public FastDateFormat getTimestampFormat() {
return timestampFormat;
}
/**
* @param timestampFormat
* the timestampFormat to set
*/
public void setTimestampFormat(FastDateFormat timestampFormat) {
this.timestampFormat = timestampFormat;
}
/**
* @return the dateTimeFotmat
*/
public FastDateFormat getDateTimeFormat() {
return dateTimeFotmat;
}
/**
* @param dateTimeFotmat
* the dateTimeFotmat to set
*/
public void setDateTimeFotmat(FastDateFormat dateTimeFotmat) {
this.dateTimeFotmat = dateTimeFotmat;
}
}