Project

General

Profile

Download (8.12 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * 
3
 */
4
package eu.etaxonomy.taxeditor.propertysheet;
5

    
6
import java.util.ArrayList;
7
import java.util.HashSet;
8
import java.util.List;
9
import java.util.Set;
10

    
11
import org.eclipse.jface.dialogs.IDialogConstants;
12
import org.eclipse.jface.dialogs.TitleAreaDialog;
13
import org.eclipse.jface.viewers.ISelectionChangedListener;
14
import org.eclipse.jface.viewers.IStructuredContentProvider;
15
import org.eclipse.jface.viewers.IStructuredSelection;
16
import org.eclipse.jface.viewers.ITableLabelProvider;
17
import org.eclipse.jface.viewers.LabelProvider;
18
import org.eclipse.jface.viewers.SelectionChangedEvent;
19
import org.eclipse.jface.viewers.TableViewer;
20
import org.eclipse.jface.viewers.TableViewerColumn;
21
import org.eclipse.jface.viewers.Viewer;
22
import org.eclipse.jface.window.Window;
23
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.events.MouseAdapter;
25
import org.eclipse.swt.events.MouseEvent;
26
import org.eclipse.swt.graphics.Image;
27
import org.eclipse.swt.layout.GridData;
28
import org.eclipse.swt.layout.GridLayout;
29
import org.eclipse.swt.widgets.Button;
30
import org.eclipse.swt.widgets.Composite;
31
import org.eclipse.swt.widgets.Control;
32
import org.eclipse.swt.widgets.Shell;
33
import org.eclipse.swt.widgets.Table;
34

    
35
import eu.etaxonomy.cdm.model.common.Extension;
36
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
37
import eu.etaxonomy.taxeditor.store.VocabularyStore;
38

    
39
/**
40
 * @author p.ciardelli
41
 *
42
 */
43
public class ExtensionsDialog extends TitleAreaDialog {
44

    
45
	private IdentifiableEntity entity;
46
	private Button addButton;
47
	private TableViewer tableViewer;
48
	private Button removeButton;
49
	private Set<Extension> extensions = new HashSet<Extension>();
50
	private Button okButton;
51

    
52
	/**
53
	 * @param parentShell
54
	 * @param entity 
55
	 */
56
	public ExtensionsDialog(Shell parentShell, IdentifiableEntity entity) {
57
		super(parentShell);
58

    
59
		this.entity = entity;
60
		this.extensions.addAll(entity.getExtensions());		
61
	}
62
	
63
	/* (non-Javadoc)
64
	 * @see org.eclipse.jface.window.Window#open()
65
	 */
66
	@Override
67
	public int open() {
68
		return super.open();
69
	}
70
	
71
	/* (non-Javadoc)
72
	 * @see org.eclipse.jface.dialogs.TitleAreaDialog#createContents(org.eclipse.swt.widgets.Composite)
73
	 */
74
	@Override
75
	protected Control createContents(Composite parent) {
76
	    Control contents = super.createContents(parent);
77
				
78
		setTitle("Edit extensions");
79
		setMessage("Add or remove extensions");
80

    
81
		this.getShell().setText("Extensions");
82
		
83
		return contents;
84
	}
85

    
86
	/* (non-Javadoc)
87
	 * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
88
	 */
89
	@Override
90
	protected Control createDialogArea(Composite parent) {
91
		Composite container = (Composite) super.createDialogArea(parent);
92
		
93
        // create composite
94
        Composite composite = new Composite(container, SWT.NULL);
95
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
96
		
97
		final GridLayout gridLayout = new GridLayout();
98
		gridLayout.numColumns = 2;
99
		composite.setLayout(gridLayout);
100
	
101
		tableViewer = new TableViewer(composite, SWT.NULL);
102
		GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, false);
103
		tableLayoutData.heightHint = 300;
104
		tableViewer.getTable().setLayoutData(tableLayoutData);
105
		createColumns(tableViewer);
106
		
107
		tableViewer.setContentProvider(new ExtensionsContentProvider());
108
		tableViewer.setLabelProvider(new ExtensionsLabelProvider());
109
		
110
		tableViewer.addSelectionChangedListener(new ISelectionChangedListener () {
111
			public void selectionChanged(SelectionChangedEvent event) {
112
				setRemovedEnabled(true);
113
			}
114
		});
115
				
116
		Composite buttonContainer = new Composite(composite, SWT.NULL);
117
		GridData buttonContainerLayoutData = new GridData();
118
		buttonContainerLayoutData.verticalAlignment = SWT.TOP;
119
		buttonContainer.setLayoutData(buttonContainerLayoutData);
120
		buttonContainer.setLayout(new GridLayout());
121
		
122
		addButton = new Button(buttonContainer, SWT.PUSH);
123
		addButton.setText("Add ...");
124
		addButton.addMouseListener(new MouseAdapter(){
125
			/* (non-Javadoc)
126
			 * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)
127
			 */
128
			@Override
129
			public void mouseUp(MouseEvent e) {
130
				createExtensions();
131
			}			
132
		});
133

    
134
		removeButton = new Button(buttonContainer, SWT.PUSH);
135
		removeButton.setText("Remove");
136
		removeButton.addMouseListener(new MouseAdapter() {
137
			/* (non-Javadoc)
138
			 * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)
139
			 */
140
			@Override
141
			public void mouseUp(MouseEvent e) {
142
				removeSelectedExtension();
143
			}
144
		});
145
		setRemovedEnabled(false);
146
			
147
		populateExtensions();
148
		
149
		return container;
150
	}
151
	
152
	private void createColumns(TableViewer viewer) {
153
		Table table = viewer.getTable();
154
		String[] titles = {"Type", "Value"};
155
		int[] bounds = { 100, 200 };
156

    
157
		for (int i = 0; i < titles.length; i++) {
158
			TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
159
			column.getColumn().setText(titles[i]);
160
			column.getColumn().setWidth(bounds[i]);
161
			column.getColumn().setResizable(true);
162
			column.getColumn().setMoveable(true);
163
		}
164
		table.setHeaderVisible(true);
165
		table.setLinesVisible(true);
166
	}
167
	
168
	/**
169
	 * 
170
	 */
171
	protected void createExtensions() {
172
		
173
        CreateExtensionDialog dialog = new CreateExtensionDialog(getShell());
174
		if (dialog.open() == Window.OK) {
175
			Extension extension = dialog.getNewExtension();
176
			if (extension != null) {
177
				extensions.add(extension);
178
				tableViewer.refresh();
179
			}
180
		}
181
	}
182

    
183
	/**
184
	 * 
185
	 */
186
	protected void removeSelectedExtension() {
187
		Extension extension = getSelectedExtension();
188
		if (extension != null) {
189
			extensions.remove(extension);
190
			tableViewer.refresh();
191
		}
192
	}
193

    
194
	/**
195
	 * @return 
196
	 * 
197
	 */
198
	private Extension getSelectedExtension() {
199
		return (Extension) ((IStructuredSelection) tableViewer.getSelection()).getFirstElement();
200
	}
201

    
202
	/**
203
	 * 
204
	 */
205
	protected void setRemovedEnabled(boolean enabled) {
206
		removeButton.setEnabled(enabled);		
207
	}
208

    
209
	/**
210
	 * 
211
	 */
212
	protected void toggleSelection() {
213
		// TODO Auto-generated method stub
214
		
215
	}
216

    
217
	/**
218
	 * 
219
	 */
220
	private void populateExtensions() {
221
		tableViewer.setInput(extensions);
222
	}
223

    
224

    
225
	private class ExtensionsContentProvider implements IStructuredContentProvider{
226

    
227
		public Object[] getElements(Object inputElement) {			
228
			return ((Set<?>) inputElement).toArray();
229
		}
230

    
231
		public void dispose() {}
232

    
233
		public void inputChanged(Viewer viewer, Object oldInput,
234
				Object newInput) {}
235
		
236
	};
237
	
238
	class ExtensionsLabelProvider extends LabelProvider implements ITableLabelProvider{
239

    
240
		/* (non-Javadoc)
241
		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
242
		 */
243
		public Image getColumnImage(Object element, int columnIndex) {
244
			return null;
245
		}
246

    
247
		/* (non-Javadoc)
248
		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
249
		 */
250
		public String getColumnText(Object element, int columnIndex) {
251
			if (columnIndex == 0) {
252
				return ((Extension) element).getType().getLabel();
253
			}
254
			if (columnIndex == 1) {
255
				return ((Extension) element).getValue();
256
			}
257
			return null;
258
		}
259
	}
260
	
261
    protected void createButtonsForButtonBar(Composite parent) {
262
        okButton = createButton(parent, IDialogConstants.OK_ID,
263
                IDialogConstants.OK_LABEL, true);
264
        createButton(parent, IDialogConstants.CANCEL_ID,
265
                IDialogConstants.CANCEL_LABEL, false);
266
    }
267
    
268
    /* (non-Javadoc)
269
     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
270
     */
271
    @Override
272
    protected void okPressed() {
273
		Set<Extension> savedExtensions = entity.getExtensions();
274
		for (Extension extension : extensions) {
275
			if (!savedExtensions.contains(extension)) {
276
				entity.addExtension(extension);
277
			}
278
		}
279
		Set<Extension> removeExtensions = new HashSet<Extension>();
280
		for (Extension extension : savedExtensions) {
281
			if (!extensions.contains(extension)) {
282
				removeExtensions.add(extension);
283
			}
284
		}
285
		for (Extension extension : removeExtensions) {
286
			entity.removeExtension(extension);
287
		}
288
    	super.okPressed();
289
    }
290
}
(13-13/24)