blob: 3e67714e6162e9a85f0d6f7f94273a2f12f0740d [file] [log] [blame]
/**
* Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.runtime.web.vaadin.components.dialogs;
import org.eclipse.osbp.runtime.web.vaadin.common.resource.IResourceProvider;
import com.vaadin.server.Resource;
import com.vaadin.ui.AbstractComponentContainer;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.NativeButton;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.Window.CloseEvent;
// TODO: Auto-generated Javadoc
/**
* The Class AbstractDialog.
*/
public abstract class AbstractDialog {
/** The config. */
protected final DialogConfig config;
/** The options. */
protected final Option[] options;
/** The window. */
protected Window window;
/** The main layout. */
protected VerticalLayout mainLayout;
/** The custom area. */
protected AbstractComponentContainer customArea;
/** The options area. */
protected HorizontalLayout optionsArea;
/**
* Create resource for the given iconPath.
*
* @param iconPath
* the icon path
* @param resourceProvider
* the resource provider
* @return the resource
*/
protected static Resource createResource(String iconPath,
IResourceProvider resourceProvider) {
if (resourceProvider == null) {
return null;
}
return resourceProvider.getResource(iconPath);
}
/**
* Instantiates a new abstract dialog.
*
* @param config
* the config
* @param options
* the options
*/
protected AbstractDialog(DialogConfig config, Option... options) {
this.config = config;
this.options = options;
}
/**
* Open.
*/
@SuppressWarnings("serial")
protected void open() {
prepareLayout();
configDialog();
prepareOptions();
window.addCloseListener(new Window.CloseListener() {
@Override
public void windowClose(CloseEvent e) {
close();
}
});
UI.getCurrent().addWindow(window);
}
/**
* Prepare the options.
*/
protected void prepareOptions() {
if (options != null) {
@SuppressWarnings("serial")
Button.ClickListener listener = new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
Button button = event.getButton();
execute((Option) button.getData());
}
};
for (Option option : options) {
NativeButton button = new NativeButton(option.getName());
optionsArea.addComponent(button);
button.setIcon(option.getIcon());
button.setDescription(option.getDescription());
button.setData(option);
button.addClickListener(listener);
}
}
}
/**
* Config the dialog.
*/
protected void configDialog() {
if (config != null) {
window.setCaption(config.getDialogName());
window.setDescription(config.getDescription());
// use callback
config.config(window);
}
}
/**
* Prepare the main layout.
*/
protected abstract void prepareLayout();
/**
* Close the window.
*/
protected void close() {
if (window != null) {
window.close();
window = null;
}
}
/**
* Execute the runnable.
*
* @param option
* the option
*/
protected void execute(Option option) {
if (option.canExecute()) {
if (option.getRunnable() != null) {
option.getRunnable().run();
}
close();
}
}
/**
* Information how to config the dialog. Clients may override
* {@link #config(Window)} to get access about the window before opening. So
* clients may set size, position,...
*/
public static class DialogConfig {
/** The dialog name. */
private final String dialogName;
/** The message. */
private final String message;
/** The description. */
private final String description;
/** The icon. */
private final Resource icon;
/**
* Instantiates a new dialog config.
*
* @param dialogName
* the dialog name
* @param message
* the message
* @param description
* the description
* @param icon
* the icon
*/
public DialogConfig(String dialogName, String message,
String description, Resource icon) {
super();
this.dialogName = dialogName;
this.message = message;
this.description = description;
this.icon = icon;
}
/**
* Clients may override to config the window before opening.
*
* @param window
* the window
*/
public void config(Window window) {
}
/**
* Gets the dialog name.
*
* @return the dialogName
*/
protected String getDialogName() {
return dialogName;
}
/**
* Gets the message.
*
* @return the message
*/
protected String getMessage() {
return message;
}
/**
* Gets the description.
*
* @return the description
*/
protected String getDescription() {
return description;
}
/**
* Gets the icon.
*
* @return the icon
*/
protected Resource getIcon() {
return icon;
}
}
/**
* Represents a single option.
*/
public static class Option {
/** The name. */
private String name;
/** The description. */
private String description;
/** The icon. */
private Resource icon;
/** The runnable. */
private Runnable runnable;
/**
* Instantiates a new option.
*
* @param name
* the name
* @param description
* the description
* @param icon
* the icon
* @param runnable
* the runnable
*/
public Option(String name, String description, Resource icon,
Runnable runnable) {
super();
this.name = name;
this.description = description;
this.icon = icon;
this.runnable = runnable;
}
/**
* Gets the name.
*
* @return the name
*/
protected String getName() {
return name;
}
/**
* Sets the name.
*
* @param name
* the name to set
*/
protected void setName(String name) {
this.name = name;
}
/**
* Gets the description.
*
* @return the description
*/
protected String getDescription() {
return description;
}
/**
* Sets the description.
*
* @param description
* the description to set
*/
protected void setDescription(String description) {
this.description = description;
}
/**
* Gets the icon.
*
* @return the icon
*/
protected Resource getIcon() {
return icon;
}
/**
* Sets the icon.
*
* @param icon
* the icon to set
*/
protected void setIcon(Resource icon) {
this.icon = icon;
}
/**
* Gets the runnable.
*
* @return the runnable
*/
protected Runnable getRunnable() {
return runnable;
}
/**
* Sets the runnable.
*
* @param runnable
* the runnable to set
*/
protected void setRunnable(Runnable runnable) {
this.runnable = runnable;
}
/**
* Can execute.
*
* @return true, if successful
*/
public boolean canExecute() {
return true;
}
}
}