Skip to content

Package: AddRepositoryCompositeImpl$1

AddRepositoryCompositeImpl$1

nameinstructionbranchcomplexitylinemethod
modifyText(ModifyEvent)
M: 19 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
{...}
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2012 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Eugen Neufeld - initial API and implementation
13: *
14: *******************************************************************************/
15:
16: package org.eclipse.emf.ecp.internal.ui.composites;
17:
18: import java.util.HashMap;
19: import java.util.Map;
20:
21: import org.eclipse.emf.ecp.core.ECPProvider;
22: import org.eclipse.emf.ecp.core.util.ECPProperties;
23: import org.eclipse.emf.ecp.core.util.ECPUtil;
24: import org.eclipse.emf.ecp.internal.ui.Messages;
25: import org.eclipse.emf.ecp.internal.ui.model.ProvidersContentProvider;
26: import org.eclipse.emf.ecp.internal.ui.model.ProvidersLabelProvider;
27: import org.eclipse.emf.ecp.spi.ui.UIProvider;
28: import org.eclipse.emf.ecp.spi.ui.UIProviderRegistry;
29: import org.eclipse.emf.ecp.ui.common.AddRepositoryComposite;
30: import org.eclipse.jface.viewers.ComboViewer;
31: import org.eclipse.jface.viewers.ISelectionChangedListener;
32: import org.eclipse.jface.viewers.IStructuredSelection;
33: import org.eclipse.jface.viewers.SelectionChangedEvent;
34: import org.eclipse.jface.viewers.StructuredSelection;
35: import org.eclipse.jface.viewers.ViewerSorter;
36: import org.eclipse.swt.SWT;
37: import org.eclipse.swt.custom.StackLayout;
38: import org.eclipse.swt.events.ModifyEvent;
39: import org.eclipse.swt.events.ModifyListener;
40: import org.eclipse.swt.layout.GridData;
41: import org.eclipse.swt.layout.GridLayout;
42: import org.eclipse.swt.widgets.Combo;
43: import org.eclipse.swt.widgets.Composite;
44: import org.eclipse.swt.widgets.Control;
45: import org.eclipse.swt.widgets.Label;
46: import org.eclipse.swt.widgets.Text;
47:
48: /**
49: * This {@link AddRepositoryComposite} provides a Composite which allows to create a new Repository.
50: * This class alsa defines a Listener for name, label description and provider changes.
51: *
52: * @author Eugen Neufeld
53: */
54: public class AddRepositoryCompositeImpl implements AddRepositoryComposite {
55:
56:         /**
57:          * Constructor to use if a specific provider should be used.
58:          *
59:          * @param provider the {@link ECPProvider} to use for this repository
60:          */
61:         public AddRepositoryCompositeImpl(ECPProvider provider) {
62:                 this.provider = provider;
63:         }
64:
65:         private Composite providerStack;
66:
67:         private StackLayout providerStackLayout;
68:
69:         private Text repositoryDescriptionText;
70:
71:         private Text repositoryNameText;
72:
73:         private AddRepositoryChangeListener listener;
74:
75:         private ECPProvider provider;
76:
77:         private String repositoryName;
78:
79:         private String repositoryDescription;
80:
81:         /** {@inheritDoc} **/
82:         @Override
83:         public Composite createUI(Composite parent) {
84:                 final Composite composite = new Composite(parent, SWT.NONE);
85:                 composite.setLayoutData(new GridData(GridData.FILL_BOTH));
86:                 composite.setLayout(new GridLayout(2, false));
87:
88:                 if (provider == null) {
89:                         createProviderSelector(composite);
90:                 }
91:
92:                 final GridData gdProviderStack = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
93:                 providerStackLayout = new StackLayout();
94:                 providerStack = new Composite(composite, SWT.NONE);
95:                 providerStack.setLayout(providerStackLayout);
96:                 providerStack.setLayoutData(gdProviderStack);
97:                 {
98:                         final Label repositoryNameLabel = new Label(composite, SWT.NONE);
99:                         repositoryNameLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
100:                         repositoryNameLabel.setText(Messages.AddRepositoryComposite_RepositoryName);
101:
102:                         repositoryNameText = new Text(composite, SWT.BORDER);
103:                         // repositoryNameText.setText(repositoryName);
104:                         repositoryNameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
105:                         repositoryNameText.addModifyListener(new ModifyListener() {
106:                                 @Override
107:                                 public void modifyText(ModifyEvent e) {
108:                                         repositoryName = repositoryNameText.getText();
109:•                                        if (listener != null) {
110:                                                 listener.repositoryNameChanged(repositoryName);
111:                                         }
112:                                 }
113:                         });
114:                 }
115:                 {
116:                         final Label repositoryDescriptionLabel = new Label(composite, SWT.NONE);
117:                         repositoryDescriptionLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
118:                         repositoryDescriptionLabel.setText(Messages.AddRepositoryComposite_RepositoryDescription);
119:
120:                         repositoryDescriptionText = new Text(composite, SWT.BORDER);
121:                         // repositoryDescriptionText.setText(repositoryDescription);
122:                         final GridData gdRepositoryDescriptionText = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
123:                         gdRepositoryDescriptionText.heightHint = 36;
124:                         repositoryDescriptionText.setLayoutData(gdRepositoryDescriptionText);
125:                         repositoryDescriptionText.addModifyListener(new ModifyListener() {
126:                                 @Override
127:                                 public void modifyText(ModifyEvent e) {
128:                                         repositoryDescription = repositoryDescriptionText.getText();
129:                                         if (listener != null) {
130:                                                 listener.repositoryDescriptionChanged(repositoryDescription);
131:                                         }
132:                                 }
133:                         });
134:                 }
135:
136:                 if (provider != null) {
137:                         showProviderUI(provider);
138:                 }
139:
140:                 return composite;
141:         }
142:
143:         /**
144:          * @param composite
145:          */
146:         private void createProviderSelector(Composite composite) {
147:                 final Label label = new Label(composite, SWT.NONE);
148:                 label.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
149:                 label.setText(Messages.AddRepositoryComposite_RepositoryProvider);
150:
151:                 final ComboViewer providersViewer = new ComboViewer(composite, SWT.NONE);
152:                 final Combo combo = providersViewer.getCombo();
153:                 final GridData gdCombo = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
154:                 gdCombo.widthHint = 150;
155:                 combo.setLayoutData(gdCombo);
156:                 providersViewer.setContentProvider(new ProvidersContentProvider(true));
157:                 providersViewer.setLabelProvider(new ProvidersLabelProvider());
158:                 providersViewer.setSorter(new ViewerSorter());
159:                 providersViewer.setInput(ECPUtil.getECPProviderRegistry());
160:                 providersViewer.addSelectionChangedListener(new ISelectionChangedListener() {
161:                         @Override
162:                         public void selectionChanged(SelectionChangedEvent event) {
163:                                 final IStructuredSelection selection = (IStructuredSelection) event.getSelection();
164:                                 provider = (ECPProvider) selection.getFirstElement();
165:                                 if (provider != null) {
166:                                         showProviderUI(provider);
167:                                         if (listener != null) {
168:                                                 listener.repositoryProviderChanged(provider);
169:                                         }
170:                                 }
171:                         }
172:                 });
173:
174:                 for (final ECPProvider provider : ECPUtil.getECPProviderRegistry().getProviders()) {
175:                         if (provider.hasCreateRepositorySupport()) {
176:                                 providersViewer.setSelection(new StructuredSelection(provider));
177:                                 break;
178:                         }
179:                 }
180:         }
181:
182:         private final Map<String, Control> providerControls = new HashMap<String, Control>();
183:
184:         private final Map<String, ECPProperties> providerProperties = new HashMap<String, ECPProperties>();
185:
186:         private void showProviderUI(ECPProvider provider) {
187:                 if (providerStack == null) {
188:                         return;
189:                 }
190:                 final String name = provider.getName();
191:                 Control control = providerControls.get(name);
192:                 if (control == null) {
193:                         final ECPProperties properties = ECPUtil.createProperties();
194:
195:                         final UIProvider uiProvider = UIProviderRegistry.INSTANCE.getUIProvider(name);
196:                         // since we don't have a dedicated Label-Text but use the Name-Text, we use repositoryNameText twice
197:                         control = uiProvider.createAddRepositoryUI(providerStack, properties, repositoryNameText,
198:                                 repositoryNameText, repositoryDescriptionText);
199:                         providerControls.put(name, control);
200:                         providerProperties.put(name, properties);
201:                 }
202:
203:                 providerStackLayout.topControl = control;
204:                 providerStack.layout();
205:         }
206:
207:         /** {@inheritDoc} **/
208:         @Override
209:         public ECPProvider getProvider() {
210:                 return provider;
211:         }
212:
213:         /** {@inheritDoc} **/
214:         @Override
215:         public String getRepositoryName() {
216:                 return repositoryName;
217:         }
218:
219:         /** {@inheritDoc} **/
220:         @Override
221:         public String getRepositoryDescription() {
222:                 return repositoryDescription;
223:         }
224:
225:         /** {@inheritDoc} **/
226:         @Override
227:         public ECPProperties getProperties() {
228:                 if (provider == null) {
229:                         return null;
230:                 }
231:
232:                 return providerProperties.get(provider.getName());
233:         }
234:
235:         /** {@inheritDoc} **/
236:         @Override
237:         public String getRepositoryLabel() {
238:                 // since we don't have a dedicated label-textfield we use the repository name
239:                 return repositoryName;
240:         }
241:
242:         /** {@inheritDoc} **/
243:         @Override
244:         public void setListener(AddRepositoryChangeListener listener) {
245:                 this.listener = listener;
246:         }
247:
248:         /** {@inheritDoc} **/
249:         @Override
250:         public void dispose() {
251:
252:         }
253: }