All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.valkyriercp.sample.simple.ui.ContactPropertiesDialog Maven / Gradle / Ivy

/*
 * Copyright 2002-2006 the original author or authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.valkyriercp.sample.simple.ui;

import org.springframework.util.Assert;
import org.valkyriercp.application.event.LifecycleApplicationEvent;
import org.valkyriercp.dialog.CloseAction;
import org.valkyriercp.dialog.ConfirmationDialog;
import org.valkyriercp.dialog.FormBackedDialogPage;
import org.valkyriercp.dialog.TitledPageApplicationDialog;
import org.valkyriercp.form.Form;
import org.valkyriercp.sample.simple.domain.Contact;
import org.valkyriercp.sample.simple.domain.ContactDataStore;

import javax.annotation.PostConstruct;

/**
 * This is a dialog for editing the properties of a Contact object. It is a simple "form backed" dialog, meaning that
 * the body of the dialog is provided from a "form backed" dialog page. The Ok (finish) button will be wired into the
 * "page complete" state of the dialog page, which in turn gets its state from the automatic validation of the
 * properties on the form.
 * @author Larry Streepy
 * @see FormBackedDialogPage
 * @see ContactForm
 */
public class ContactPropertiesDialog extends TitledPageApplicationDialog {

	/** The form that allows for editing the contact. */
	private Form form;

	/** Are we creating a new Contact or editing an existing one? */
	private boolean creatingNew = false;

	/** The data store holding all our contacts, used to add a new contact. */
	private ContactDataStore dataStore;

	public ContactPropertiesDialog(ContactDataStore dataStore) {
		this(null, dataStore);
	}

	public ContactPropertiesDialog(Contact contact, ContactDataStore dataStore) {
		Assert.notNull(dataStore, "The data store is required to edit a contact");
		if (contact == null) {
			creatingNew = true;
			contact = new Contact();
		}
		setCloseAction(CloseAction.DISPOSE);
		form = new ContactForm(contact);
		setDialogPage(new FormBackedDialogPage(form));
		this.dataStore = dataStore;

	}

//    @PostConstruct
//    private void postConstruct() {
//       getApplicationConfig().applicationObjectConfigurer().configure(this, "contact");
//    }

	private Contact getEditingContact() {
		return (Contact) form.getFormModel().getFormObject();
	}

	protected void onAboutToShow() {
		if (creatingNew) {
			setTitle(getApplicationConfig().messageResolver().getMessage("contactProperties.new.title"));
		}
		else {
			Contact contact = getEditingContact();
			String title = getApplicationConfig().messageResolver().getMessage("contactProperties.edit.title", new Object[] { contact.getFirstName(),
					contact.getLastName() });
			setTitle(title);
		}
	}

	protected boolean onFinish() {
		// commit any buffered edits to the model
		form.getFormModel().commit();
		// Update the persistent store with the new/modified object.
		String eventType;
		if (creatingNew) {
			eventType = LifecycleApplicationEvent.CREATED;
			dataStore.add(getEditingContact());
		}
		else {
			eventType = LifecycleApplicationEvent.MODIFIED;
		}
		// And notify the rest of the application of the change
		getApplicationConfig().applicationContext().publishEvent(new LifecycleApplicationEvent(eventType, getEditingContact()));
		return true;
	}

	protected void onCancel() {
		// Warn the user if they are about to discard their changes
		if (form.getFormModel().isDirty()) {
			String msg = getApplicationConfig().messageResolver().getMessage("contactProperties.dirtyCancelMessage");
			String title = getApplicationConfig().messageResolver().getMessage("contactProperties.dirtyCancelTitle");
			ConfirmationDialog dlg = new ConfirmationDialog(title, msg) {
				protected void onConfirm() {
					ContactPropertiesDialog.super.onCancel();
				}
			};
			dlg.showDialog();
		}
		else {
			super.onCancel();
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy