adresses #2257
[taxeditor.git] / taxeditor-store / src / main / java / eu / etaxonomy / taxeditor / ui / forms / AbstractCdmEntityWizardPage.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.taxeditor.ui.forms;
12
13 import org.eclipse.jface.wizard.WizardPage;
14 import org.eclipse.swt.SWT;
15 import org.eclipse.swt.graphics.Color;
16 import org.eclipse.swt.layout.GridData;
17 import org.eclipse.swt.layout.GridLayout;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.ui.forms.widgets.ScrolledForm;
20
21 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
22 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
23 import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
24 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
25 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
26
27 /**
28 * <p>Abstract AbstractCdmEntityWizardPage class.</p>
29 *
30 * @author n.hoffmann
31 * @created Jun 1, 2010
32 * @version 1.0
33 */
34 public abstract class AbstractCdmEntityWizardPage<T> extends WizardPage implements IConversationEnabled {
35
36 protected CdmFormFactory formFactory;
37 protected T entity;
38
39 AbstractCdmDetailElement<T> detailElement;
40 private ConversationHolder conversation;
41
42 /**
43 * <p>Constructor for AbstractCdmEntityWizardPage.</p>
44 *
45 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object.
46 * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
47 * @param entity a T object.
48 * @param <T> a T object.
49 */
50 protected AbstractCdmEntityWizardPage(CdmFormFactory formFactory, ConversationHolder conversation, T entity) {
51 super("page");
52 this.formFactory = formFactory;
53 this.entity = entity;
54 this.conversation = conversation;
55 setDescription(getEntityTitle());
56 }
57
58 /**
59 * @return
60 */
61 private String getEntityTitle() {
62 if(entity instanceof IIdentifiableEntity){
63 ((IIdentifiableEntity) entity).getTitleCache();
64 }
65 return "";
66 }
67
68 /*
69 * (non-Javadoc)
70 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
71 */
72 /** {@inheritDoc} */
73 public void createControl(Composite parent) {
74 ScrolledForm scrolledForm = formFactory.createScrolledForm(parent);
75 scrolledForm.getBody().setLayout(CdmFormFactory.LAYOUT());
76
77 Composite control = formFactory.createComposite(scrolledForm.getBody());
78 control.setLayoutData(CdmFormFactory.FILL());
79
80 control.setLayout(CdmFormFactory.LAYOUT(2, false));
81 WizardPageRootElement rootElement = new WizardPageRootElement(formFactory, control, getConversationHolder());
82
83 Color bgColor = getShell().getBackground();
84
85 detailElement = createElement(rootElement);
86
87 rootElement.setBackground(bgColor);
88 control.setBackground(bgColor);
89 scrolledForm.setBackground(bgColor);
90
91 setControl(scrolledForm);
92 }
93
94 /**
95 * <p>Getter for the field <code>entity</code>.</p>
96 *
97 * @return a T object.
98 */
99 public T getEntity() {
100 return entity;
101 }
102
103 /**
104 * Creates the detail element for this wizard page
105 *
106 * @param rootElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
107 * @return a {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement} object.
108 */
109 public abstract AbstractCdmDetailElement<T> createElement(ICdmFormElement rootElement);
110
111 private class WizardPageRootElement extends RootElement implements IConversationEnabled{
112
113 private ConversationHolder conversation;
114
115 public WizardPageRootElement(CdmFormFactory formFactory,
116 Composite layoutComposite, ConversationHolder conversation) {
117 super(formFactory, layoutComposite);
118 this.conversation = conversation;
119 }
120
121 @Override
122 public void refresh() {
123 super.refresh();
124 this.removeElements();
125 detailElement = createElement(this);
126 ((Composite) getControl()).layout();
127 }
128
129 public ConversationHolder getConversationHolder() {
130 return conversation;
131 }
132
133 public void update(CdmDataChangeMap changeEvents) {}
134 }
135
136 /**
137 * <p>getConversationHolder</p>
138 *
139 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
140 */
141 public ConversationHolder getConversationHolder() {
142 return conversation;
143 }
144
145 /** {@inheritDoc} */
146 @Override
147 public void dispose() {
148 super.dispose();
149 detailElement.removeElements();
150 }
151
152 /**
153 * <p>Getter for the field <code>detailElement</code>.</p>
154 *
155 * @return a {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement} object.
156 */
157 public AbstractCdmDetailElement<T> getDetailElement() {
158 return detailElement;
159 }
160
161 /** {@inheritDoc} */
162 public void update(CdmDataChangeMap changeEvents) {}
163 }