/* * Copyright (C) 2011 Jan Pokorsky * * 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 3 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 received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package cz.cas.lib.proarc.webapp.client.ds; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JavaScriptObject; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.Record; import com.smartgwt.client.data.RestDataSource; import com.smartgwt.client.data.fields.DataSourceDateTimeField; import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.data.fields.DataSourcePasswordField; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.types.DSDataFormat; import com.smartgwt.client.types.DSOperationType; import com.smartgwt.client.types.DateDisplayFormat; import com.smartgwt.client.widgets.form.fields.StaticTextItem; import cz.cas.lib.proarc.webapp.client.ClientMessages; import cz.cas.lib.proarc.webapp.client.ClientUtils; import cz.cas.lib.proarc.webapp.shared.rest.UserResourceApi; /** * Manages application users. * * @author Jan Pokorsky */ public final class UserDataSource extends RestDataSource { public static final String ID = "UserDataSource"; public static final String FIELD_ID = UserResourceApi.USER_ID; public static final String FIELD_USERNAME = UserResourceApi.USER_NAME; public static final String FIELD_PASSWORD = UserResourceApi.USER_PASSWORD; public static final String FIELD_WHOAMI = UserResourceApi.USER_WHOAMI_PARAM; private static UserDataSource INSTANCE; public UserDataSource() { setID(ID); ClientMessages i18n = GWT.create(ClientMessages.class); setDataFormat(DSDataFormat.JSON); setDataURL(RestConfig.URL_USER); DataSourceIntegerField userId = new DataSourceIntegerField(FIELD_ID); userId.setPrimaryKey(true); userId.setCanEdit(false); userId.setHidden(true); userId.setTitle(i18n.UsersView_ListHeader_Id_Title()); DataSourceTextField userName = new DataSourceTextField(FIELD_USERNAME); userName.setCanEdit(false); userName.setRequired(true); userName.setReadOnlyEditorProperties(new StaticTextItem()); userName.setTitle(i18n.UsersView_ListHeader_Username_Title()); userName.setPrompt(i18n.UsersView_ListHeader_Username_Hint()); DataSourcePasswordField passwd = new DataSourcePasswordField(FIELD_PASSWORD); passwd.setHidden(true); passwd.setTitle(i18n.UsersView_ListHeader_Password_Title()); DataSourceTextField surname = new DataSourceTextField(UserResourceApi.USER_SURNAME); surname.setRequired(true); surname.setTitle(i18n.UsersView_ListHeader_Surname_Title()); DataSourceTextField forename = new DataSourceTextField(UserResourceApi.USER_FORENAME); forename.setTitle(i18n.UsersView_ListHeader_Forename_Title()); DataSourceTextField email = new DataSourceTextField(UserResourceApi.USER_EMAIL); email.setTitle(i18n.UsersView_ListHeader_Email_Title()); DataSourceTextField home = new DataSourceTextField(UserResourceApi.USER_HOME); home.setCanEdit(false); home.setReadOnlyEditorProperties(new StaticTextItem()); home.setHidden(true); home.setTitle(i18n.UsersView_ListHeader_Home_Title()); DataSourceDateTimeField created = new DataSourceDateTimeField(UserResourceApi.USER_CREATED); created.setCanEdit(false); created.setTitle(i18n.UsersView_ListHeader_Created_Title()); created.setDateFormatter(DateDisplayFormat.TOEUROPEANSHORTDATETIME); DataSourceTextField remoteName = new DataSourceTextField(UserResourceApi.USER_REMOTENAME); remoteName.setTitle(i18n.UsersView_ListHeader_RemoteName_Title()); remoteName.setCanEdit(false); remoteName.setHidden(true); DataSourceTextField remoteType = new DataSourceTextField(UserResourceApi.USER_REMOTETYPE); remoteType.setTitle(i18n.UsersView_ListHeader_RemoteType_Title()); remoteType.setCanEdit(false); remoteType.setHidden(true); setFields(userId, userName, passwd, surname, forename, email, created, remoteName, remoteType, home); setOperationBindings(RestConfig.createAddOperation(), RestConfig.createUpdateOperation()); setRequestProperties(RestConfig.createRestRequest(getDataFormat())); } @Override protected Object transformRequest(DSRequest dsRequest) { DSOperationType op = dsRequest.getOperationType(); if (op == DSOperationType.ADD || op == DSOperationType.UPDATE) { JavaScriptObject data = dsRequest.getData(); Record nonNulls = ClientUtils.removeNulls(new Record(data)); dsRequest.setData(nonNulls); } return super.transformRequest(dsRequest); } public static UserDataSource getInstance() { if (INSTANCE == null) { INSTANCE = new UserDataSource(); } return INSTANCE; } }