View Javadoc
1   package org.argeo.people.e4.parts;
2   
3   import javax.jcr.Node;
4   import javax.jcr.NodeIterator;
5   import javax.jcr.PropertyType;
6   import javax.jcr.RepositoryException;
7   
8   import org.argeo.cms.ui.eclipse.forms.AbstractFormPart;
9   import org.argeo.cms.ui.eclipse.forms.FormToolkit;
10  import org.argeo.connect.ui.ConnectEditor;
11  import org.argeo.connect.ui.ConnectUiUtils;
12  import org.argeo.connect.ui.ConnectWorkbenchUtils;
13  import org.argeo.connect.ui.util.LazyCTabControl;
14  import org.argeo.connect.util.ConnectJcrUtils;
15  import org.argeo.eclipse.ui.EclipseUiUtils;
16  import org.argeo.people.PeopleException;
17  import org.argeo.people.PeopleNames;
18  import org.argeo.people.PeopleTypes;
19  import org.argeo.people.ui.PeopleMsg;
20  import org.argeo.people.ui.composites.BankAccountComposite;
21  import org.argeo.people.util.OrgJcrUtils;
22  import org.eclipse.swt.SWT;
23  import org.eclipse.swt.events.ModifyEvent;
24  import org.eclipse.swt.events.ModifyListener;
25  import org.eclipse.swt.layout.GridData;
26  import org.eclipse.swt.layout.GridLayout;
27  import org.eclipse.swt.widgets.Composite;
28  import org.eclipse.swt.widgets.Control;
29  import org.eclipse.swt.widgets.Group;
30  import org.eclipse.swt.widgets.Text;
31  //import org.eclipse.ui.forms.AbstractFormPart;
32  //import org.eclipse.ui.forms.widgets.FormToolkit;
33  
34  /**
35   * A composite to include in a form and that displays all administrative and
36   * legal information for a given organization
37   * 
38   * TODO Legacy code. Should be reviewed and enhanced.
39   */
40  public class OrgAdminInfoCTab extends LazyCTabControl {
41  	private static final long serialVersionUID = -7033074223243935324L;
42  
43  	private final ConnectEditor editor;
44  	private final FormToolkit toolkit;
45  	private final Node entity;
46  
47  	// this page UI Objects
48  	private AbstractFormPart notePart;
49  	private AbstractFormPart formPart;
50  
51  	public OrgAdminInfoCTab(Composite parent, int style, ConnectEditor editor, Node entity) {
52  		super(parent, style);
53  		this.editor = editor;
54  		this.toolkit = editor.getFormToolkit();
55  		this.entity = entity;
56  	}
57  
58  	@Override
59  	public void refreshPartControl() {
60  		notePart.refresh();
61  		formPart.refresh();
62  		layout(true, true);
63  	}
64  
65  	@Override
66  	public void createPartControl(Composite parent) {
67  		parent.setLayout(new GridLayout());
68  
69  		Composite adminInfoCmp = toolkit.createComposite(parent);
70  		adminInfoCmp.setLayoutData(EclipseUiUtils.fillWidth());
71  		populateAdminInfoCmp(adminInfoCmp);
72  
73  		Composite payAccCmp = toolkit.createComposite(parent);
74  		payAccCmp.setLayoutData(EclipseUiUtils.fillAll());
75  		populateBankAccountGroup(payAccCmp);
76  	}
77  
78  	private void populateAdminInfoCmp(Composite parent) {
79  		parent.setLayout(new GridLayout(4, false));
80  
81  		// Legal Name
82  		ConnectUiUtils.createBoldLabel(toolkit, parent, PeopleMsg.legalName.lead());
83  		final Text legalNameTxt = toolkit.createText(parent, "", SWT.BORDER);
84  		legalNameTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1));
85  
86  		// Legal form
87  		ConnectUiUtils.createBoldLabel(toolkit, parent, PeopleMsg.legalForm.lead());
88  		final Text legalFormTxt = toolkit.createText(parent, "", SWT.BORDER);
89  		legalFormTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
90  
91  		// VAT ID Number
92  		ConnectUiUtils.createBoldLabel(toolkit, parent, PeopleMsg.vatId.lead());
93  		final Text vatIDTxt = toolkit.createText(parent, "", SWT.BORDER);
94  		vatIDTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
95  
96  		notePart = new AbstractFormPart() {
97  			public void refresh() {
98  				super.refresh();
99  				ConnectWorkbenchUtils.refreshFormTextWidget(editor, legalNameTxt, entity,
100 						PeopleNames.PEOPLE_LEGAL_NAME);
101 				ConnectWorkbenchUtils.refreshFormTextWidget(editor, legalFormTxt, entity,
102 						PeopleNames.PEOPLE_LEGAL_FORM);
103 				ConnectWorkbenchUtils.refreshFormTextWidget(editor, vatIDTxt, entity, PeopleNames.PEOPLE_VAT_ID_NB);
104 			}
105 		};
106 
107 		// Listeners
108 		ConnectWorkbenchUtils.addModifyListener(legalFormTxt, entity, PeopleNames.PEOPLE_LEGAL_FORM, notePart);
109 		ConnectWorkbenchUtils.addModifyListener(vatIDTxt, entity, PeopleNames.PEOPLE_VAT_ID_NB, notePart);
110 
111 		// Specific listeners to manage correctly display name
112 		legalNameTxt.addModifyListener(new ModifyListener() {
113 			private static final long serialVersionUID = 6068716814124883599L;
114 
115 			@Override
116 			public void modifyText(ModifyEvent event) {
117 				// try {
118 				if (ConnectJcrUtils.setJcrProperty(entity, PeopleNames.PEOPLE_LEGAL_NAME, PropertyType.STRING,
119 						legalNameTxt.getText())) {
120 					// Boolean defineDistinct = ConnectJcrUtils.getBooleanValue(
121 					// entity,
122 					// PeopleNames.PEOPLE_USE_DISTINCT_DISPLAY_NAME);
123 					// if (defineDistinct == null || !defineDistinct)
124 					// entity.setProperty(Property.JCR_TITLE,
125 					// legalNameTxt.getText());
126 					notePart.markDirty();
127 				}
128 				// } catch (RepositoryException e) {
129 				// throw new PeopleException("Unable to update property", e);
130 				// }
131 			}
132 		});
133 		notePart.initialize(editor.getManagedForm());
134 		editor.getManagedForm().addPart(notePart);
135 	}
136 
137 	private void populateBankAccountGroup(final Composite parent) {
138 		parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
139 		final Group group = new Group(parent, 0);
140 		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
141 		group.setText(PeopleMsg.paymentAccount.lead());
142 		group.setLayout(EclipseUiUtils.noSpaceGridLayout());
143 
144 		formPart = new AbstractFormPart() {
145 			public void refresh() {
146 				// TODO Manage multiple bank account
147 				super.refresh();
148 				try {
149 					if (!entity.hasNode(PeopleNames.PEOPLE_PAYMENT_ACCOUNTS) && editor.isEditing()) {
150 						OrgJcrUtils.createPaymentAccount(entity, PeopleTypes.PEOPLE_BANK_ACCOUNT, "new");
151 						entity.getSession().save();
152 					}
153 				} catch (RepositoryException e) {
154 					throw new PeopleException("Unable to create bank account for " + entity, e);
155 				}
156 
157 				Control[] children = group.getChildren();
158 				for (Control child : children) {
159 					child.dispose();
160 				}
161 
162 				NodeIterator ni = OrgJcrUtils.getPaymentAccounts(entity);
163 				while (ni != null && ni.hasNext()) {
164 					Composite cmp = new BankAccountComposite(group, 0, editor, ni.nextNode());
165 					cmp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
166 				}
167 				parent.layout(true, true);
168 			}
169 		};
170 		formPart.initialize(editor.getManagedForm());
171 		editor.getManagedForm().addPart(formPart);
172 	}
173 }