001/* 002 * This library is part of OpenCms - 003 * the Open Source Content Management System 004 * 005 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com) 006 * 007 * This library is free software; you can redistribute it and/or 008 * modify it under the terms of the GNU Lesser General Public 009 * License as published by the Free Software Foundation; either 010 * version 2.1 of the License, or (at your option) any later version. 011 * 012 * This library is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * For further information about Alkacon Software, please see the 018 * company website: http://www.alkacon.com 019 * 020 * For further information about OpenCms, please see the 021 * project website: http://www.opencms.org 022 * 023 * You should have received a copy of the GNU Lesser General Public 024 * License along with this library; if not, write to the Free Software 025 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 026 */ 027 028package org.opencms.ui.apps.sessions; 029 030import org.opencms.configuration.CmsVariablesConfiguration; 031import org.opencms.db.CmsLoginMessage; 032import org.opencms.main.CmsLog; 033import org.opencms.main.OpenCms; 034import org.opencms.ui.A_CmsUI; 035import org.opencms.ui.CmsVaadinUtils; 036import org.opencms.ui.apps.Messages; 037import org.opencms.ui.components.CmsBasicDialog; 038import org.opencms.ui.components.CmsDateField; 039import org.opencms.ui.components.CmsRichTextArea; 040 041import java.util.Date; 042 043import org.apache.commons.logging.Log; 044 045import com.vaadin.data.Binder; 046import com.vaadin.ui.Button; 047import com.vaadin.ui.Button.ClickEvent; 048import com.vaadin.ui.Button.ClickListener; 049import com.vaadin.ui.CheckBox; 050import com.vaadin.ui.TabSheet; 051import com.vaadin.ui.TabSheet.SelectedTabChangeEvent; 052import com.vaadin.ui.TabSheet.SelectedTabChangeListener; 053import com.vaadin.ui.Window; 054 055/** 056 * Class for the Edit Login View.<p> 057 */ 058public class CmsEditLoginView extends CmsBasicDialog { 059 060 /** The logger for this class. */ 061 static Log LOG = CmsLog.getLog(CmsEditLoginView.class.getName()); 062 063 /**vaadin serial ok.*/ 064 private static final long serialVersionUID = -1053691437033852491L; 065 066 /**vaadin component.*/ 067 private Button m_cancel; 068 069 /**vaadin component.*/ 070 private CheckBox m_enabledAfter; 071 072 /**vaadin component.*/ 073 private CheckBox m_enabledBefore; 074 075 /**date field.*/ 076 private CmsDateField m_endTimeAfter; 077 078 /** The form field binder. */ 079 private Binder<CmsLoginMessage> m_formBinderAfter; 080 081 /** The form field binder. */ 082 private Binder<CmsLoginMessage> m_formBinderBefore; 083 084 /**Vaadin component. */ 085 private TabSheet m_tab; 086 087 /**vaadin component.*/ 088 private CheckBox m_logoutAfter; 089 090 /**vaadin component.*/ 091 protected CmsRichTextArea m_messageAfter; 092 093 /**vaadin component.*/ 094 protected CmsRichTextArea m_messageBefore; 095 096 /**vaadin component.*/ 097 private Button m_ok; 098 099 /**date field.*/ 100 private CmsDateField m_startTimeAfter; 101 102 /** 103 * Public constructor.<p> 104 * 105 * @param window to be closed 106 */ 107 public CmsEditLoginView(final Window window) { 108 109 CmsVaadinUtils.readAndLocalizeDesign(this, CmsVaadinUtils.getWpMessagesForCurrentLocale(), null); 110 setHeight("100%"); 111 bindFields(); 112 113 CmsLoginMessage message = OpenCms.getLoginManager().getLoginMessage(); 114 if (message == null) { 115 message = new CmsLoginMessage(); 116 } 117 118 m_formBinderAfter.readBean(message); 119 if (!message.isEnabled()) { 120 m_endTimeAfter.setValue(null); 121 m_startTimeAfter.setValue(null); 122 } 123 CmsLoginMessage messageBefore = OpenCms.getLoginManager().getBeforeLoginMessage(); 124 if (messageBefore == null) { 125 messageBefore = new CmsLoginMessage(); 126 } 127 m_formBinderBefore.readBean(messageBefore); 128 129 m_cancel.addClickListener(new ClickListener() { 130 131 private static final long serialVersionUID = 4425001638229366505L; 132 133 public void buttonClick(ClickEvent event) { 134 135 window.close(); 136 } 137 138 }); 139 140 m_ok.addClickListener(new Button.ClickListener() { 141 142 private static final long serialVersionUID = 5512397920545155478L; 143 144 public void buttonClick(ClickEvent event) { 145 146 if (isFormValid()) { 147 submit(); 148 window.close(); 149 } 150 151 } 152 }); 153 m_messageAfter.setFontStyle(); 154 m_messageBefore.setFontStyle(); 155 m_tab.addSelectedTabChangeListener(new SelectedTabChangeListener() { 156 157 public void selectedTabChange(SelectedTabChangeEvent event) { 158 159 m_messageAfter.setFontStyle(); 160 m_messageBefore.setFontStyle(); 161 162 } 163 164 }); 165 } 166 167 /** 168 * Gets end time from formular.<p> 169 * 170 * @return time as long 171 */ 172 protected long getEnd() { 173 174 if (m_endTimeAfter.getValue() == null) { 175 return 0; 176 } 177 return m_endTimeAfter.getDate().getTime(); 178 } 179 180 /** 181 * Gets start time from formular.<p> 182 * 183 * @return time as long 184 */ 185 protected long getStart() { 186 187 if (m_startTimeAfter.getValue() == null) { 188 return 0; 189 } 190 return m_startTimeAfter.getDate().getTime(); 191 } 192 193 /** 194 * Checks if formular is valid.<p> 195 * 196 * @return true if all fields are ok 197 */ 198 protected boolean isFormValid() { 199 200 // return m_startTimeAfter.isValid() & m_endTimeAfter.isValid() & m_messageAfter.isValid(); 201 return !m_formBinderAfter.validate().hasErrors(); 202 } 203 204 /** 205 * Saves the settings.<p> 206 */ 207 protected void submit() { 208 209 CmsLoginMessage loginMessage = new CmsLoginMessage(); 210 CmsLoginMessage beforeLoginMessage = new CmsLoginMessage(); 211 try { 212 m_formBinderAfter.writeBean(loginMessage); 213 m_formBinderBefore.writeBean(beforeLoginMessage); 214 OpenCms.getLoginManager().setLoginMessage(A_CmsUI.getCmsObject(), loginMessage); 215 OpenCms.getLoginManager().setBeforeLoginMessage(A_CmsUI.getCmsObject(), beforeLoginMessage); 216 // update the system configuration 217 OpenCms.writeConfiguration(CmsVariablesConfiguration.class); 218 } catch (Exception e) { 219 LOG.error("Unable to save Login Message", e); 220 } 221 } 222 223 /** 224 * Checks whether the entered start end end times are valid.<p> 225 * 226 * @return <code>true</code> in case the times are valid 227 */ 228 boolean hasValidTimes() { 229 230 if ((getEnd() > 0L) && (getEnd() < System.currentTimeMillis())) { 231 return false; 232 } 233 234 return ((getEnd() == 0) | (getStart() == 0)) || (getEnd() >= getStart()); 235 } 236 237 /** 238 * Binds the form fields.<p> 239 */ 240 private void bindFields() { 241 242 m_formBinderAfter = new Binder<>(); 243 m_formBinderAfter.bind(m_messageAfter, CmsLoginMessage::getMessage, CmsLoginMessage::setMessage); 244 245 m_formBinderAfter.bind( 246 m_enabledAfter, 247 loginMessage -> Boolean.valueOf(loginMessage.isEnabled()), 248 (loginMessage, enabled) -> loginMessage.setEnabled(enabled.booleanValue())); 249 250 m_formBinderAfter.bind( 251 m_logoutAfter, 252 loginMessage -> Boolean.valueOf(loginMessage.isLoginForbidden()), 253 (loginMessage, forbidden) -> loginMessage.setLoginForbidden(forbidden.booleanValue())); 254 255 m_formBinderAfter.forField(m_endTimeAfter).withValidator( 256 endTime -> hasValidTimes(), 257 CmsVaadinUtils.getMessageText(Messages.GUI_MESSAGES_LOGINMESSAGE_VAL_DATE_0)).bind( 258 loginMessage -> loginMessage.getTimeEnd() != CmsLoginMessage.DEFAULT_TIME_END 259 ? CmsDateField.dateToLocalDateTime(new Date(loginMessage.getTimeEnd())) 260 : null, 261 (loginMessage, endTime) -> loginMessage.setTimeEnd( 262 endTime != null 263 ? CmsDateField.localDateTimeToDate(endTime).getTime() 264 : CmsLoginMessage.DEFAULT_TIME_END)); 265 m_formBinderAfter.forField(m_startTimeAfter).withValidator( 266 startTime -> hasValidTimes(), 267 CmsVaadinUtils.getMessageText(Messages.GUI_MESSAGES_LOGINMESSAGE_VAL_DATE_0)).bind( 268 loginMessage -> loginMessage.getTimeStart() != CmsLoginMessage.DEFAULT_TIME_START 269 ? CmsDateField.dateToLocalDateTime(new Date(loginMessage.getTimeStart())) 270 : null, 271 (loginMessage, startTime) -> loginMessage.setTimeStart( 272 startTime != null 273 ? CmsDateField.localDateTimeToDate(startTime).getTime() 274 : CmsLoginMessage.DEFAULT_TIME_START)); 275 m_formBinderBefore = new Binder<>(); 276 m_formBinderBefore.bind(m_messageBefore, CmsLoginMessage::getMessage, CmsLoginMessage::setMessage); 277 278 m_formBinderBefore.bind( 279 m_enabledBefore, 280 loginMessage -> Boolean.valueOf(loginMessage.isEnabled()), 281 (loginMessage, enabled) -> loginMessage.setEnabled(enabled.booleanValue())); 282 } 283}