blob: 93a7633822fdaf30f82253a4060d7f5b467e3554 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*/
package org.eclipse.osbp.utils.vaadin;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.regex.Pattern;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherCommand;
import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
import org.eclipse.osbp.runtime.common.util.BeanUtils;
import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
import com.vaadin.data.util.ObjectProperty;
import com.vaadin.server.ClientConnector.DetachListener;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.Window;
public class DTOInfoDialog extends Window implements DetachListener { //NOSONAR
/**
*
*/
private static final long serialVersionUID = 3461161019240158996L;
private Button close;
private String sender;
private String titleExtra;
private String topic;
private TextField createdByText;
private TextField createdAtText;
private TextField updatedByText;
private TextField updatedAtText;
private transient IEventDispatcher eventDispatcher;
private transient IDSLMetadataService dslMetadataService;
private static final String closeString = "close";
private static final String titleString = "information";
private static final String updatedByString = "updated_by";
private static final String updatedAtString = "updated_at";
private static final String createdByString = "created_by";
private static final String createdAtString = "created_at";
private static final String unknown = "unknown";
private String unknownValue;
private DateFormat dateFormat;
private ObjectProperty<String> createdByProp;
private ObjectProperty<String> createdAtProp;
private ObjectProperty<String> updatedByProp;
private ObjectProperty<String> updatedAtProp;
private MPerspective perspective;
public DTOInfoDialog(IEclipseContext eclipseContext, Locale locale, String sender, String topic) {
super();
this.dslMetadataService = eclipseContext.get(IDSLMetadataService.class);
this.eventDispatcher = eclipseContext.get(IEventDispatcher.class);
this.perspective = eclipseContext.get(MPerspective.class);
this.addDetachListener(this);
this.sender = sender;
this.topic = topic;
String[] parts = sender.split(Pattern.quote("."));
titleExtra = parts[parts.length-1];
setClosable(true);
setModal(false);
FormLayout subContent = new FormLayout();
subContent.setMargin(true);
setContent(subContent);
createdByText = new TextField();
createdByText.setReadOnly(true);
subContent.addComponent(createdByText);
createdAtText = new TextField();
createdAtText.setReadOnly(true);
subContent.addComponent(createdAtText);
updatedByText = new TextField();
updatedByText.setReadOnly(true);
subContent.addComponent(updatedByText);
updatedAtText = new TextField();
updatedAtText.setReadOnly(true);
subContent.addComponent(updatedAtText);
createdByProp = new ObjectProperty<>("");
createdAtProp = new ObjectProperty<>("");
updatedByProp = new ObjectProperty<>("");
updatedAtProp = new ObjectProperty<>("");
createdByText.setPropertyDataSource(createdByProp);
createdAtText.setPropertyDataSource(createdAtProp);
updatedByText.setPropertyDataSource(updatedByProp);
updatedAtText.setPropertyDataSource(updatedAtProp);
close = new Button();
close.addClickListener(new Button.ClickListener() {
private static final long serialVersionUID = 5512635792523351385L;
@Override
public void buttonClick(ClickEvent event) {
EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.CLOSE, topic, sender);
eventDispatcher.sendEvent(evnt);
}
});
subContent.addComponent(close);
setLocale(locale);
center();
}
@Override
public void setLocale(Locale locale) {
super.setLocale(locale);
setCaption(dslMetadataService.translate(locale.toLanguageTag(), titleString) + " " + dslMetadataService.translate(locale.toLanguageTag(), titleExtra));
createdByText.setCaption(dslMetadataService.translate(locale.toLanguageTag(), createdByString));
createdAtText.setCaption(dslMetadataService.translate(locale.toLanguageTag(), createdAtString));
updatedByText.setCaption(dslMetadataService.translate(locale.toLanguageTag(), updatedByString));
updatedAtText.setCaption(dslMetadataService.translate(locale.toLanguageTag(), updatedAtString));
unknownValue = dslMetadataService.translate(locale.toLanguageTag(), unknown);
close.setCaption(dslMetadataService.translate(locale.toLanguageTag(), closeString));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
dateFormat.setLenient(false);
}
public void setDto(Object dto) {
if(dto == null) {
return;
}
String createUser = BeanUtils.getCreateUser(dto);
if(createUser != null) {
createdByProp.setValue(createUser);
} else {
createdByProp.setValue(unknownValue);
}
Date createdAt = BeanUtils.getCreateAt(dto);
if(createdAt != null) {
createdAtProp.setValue(dateFormat.format(createdAt));
} else {
createdAtProp.setValue(unknownValue);
}
String updateUser = BeanUtils.getUpdateUser(dto);
if(updateUser != null) {
updatedByProp.setValue(updateUser);
} else {
updatedByProp.setValue(unknownValue);
}
Date updatedAt = BeanUtils.getUpdateAt(dto);
if(updatedAt != null) {
updatedAtProp.setValue(dateFormat.format(updatedAt));
} else {
updatedAtProp.setValue(unknownValue);
}
}
@Override
public void detach(DetachEvent event) {
EventDispatcherEvent evt = new EventDispatcherEvent(perspective, EventDispatcherCommand.CLOSE, topic, sender);
eventDispatcher.sendEvent(evt);
}
}