| /** |
| * Copyright (c) 2018 CEA. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * CEA - initial API and implementation and/or initial documentation |
| */ |
| package org.eclipse.sensinact.studio.navigator.device.ui.dialogs.resourceInvoker; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.sensinact.studio.http.client.GatewayHttpClient.RequestParameter; |
| import org.eclipse.sensinact.studio.navigator.device.ui.dialogs.resourceInvoker.parameterfield.ParameterField; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Label; |
| |
| import org.eclipse.sensinact.studio.resource.AccessMethod; |
| import org.eclipse.sensinact.studio.resource.Parameter; |
| |
| /** |
| * @author Etienne Gandrille |
| */ |
| public class ParametersComposite { |
| |
| private Composite globalComposite; |
| private Label header; |
| private Composite parameterListComposite; |
| private List<ParameterField> fields = new ArrayList<>(); |
| |
| ParametersComposite(Composite area) { |
| globalComposite = new Composite(area, SWT.NONE); |
| globalComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1)); |
| globalComposite.setLayout(new GridLayout(1, false)); |
| globalComposite.setVisible(false); |
| |
| initHeader(); |
| initparameterListComposite(false); |
| } |
| |
| private void initHeader() { |
| header = new Label(globalComposite, SWT.NONE); |
| header.setText("Parameters:"); |
| } |
| |
| private void initparameterListComposite(boolean visible) { |
| parameterListComposite = new Composite(globalComposite, SWT.BORDER); |
| parameterListComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1)); |
| parameterListComposite.setLayout(new GridLayout(3, false)); |
| parameterListComposite.setVisible(visible); |
| } |
| |
| private void init() { |
| initHeader(); |
| initparameterListComposite(true); |
| } |
| |
| /** |
| * This method is in charge of clearing the parameter composite by disposing |
| * all its children (the label as well as the parameter list) When the |
| * parameter composite is cleared, it is layouted |
| */ |
| void clearContent() { |
| for (Control children : globalComposite.getChildren()) |
| if (children != null && !children.isDisposed()) |
| children.dispose(); |
| globalComposite.layout(true); |
| fields.clear(); |
| } |
| |
| /** |
| * This method create the parameter list according to the access method |
| * (type and signature) selected. It begins to clear the parameter parameter |
| * composite if it already contains children (i.e. is an other access method |
| * has been selected before) |
| * |
| * @param AccessMethod |
| * accessMethod : the current access method |
| */ |
| void createParameterList(AccessMethod accessMethod) { |
| clearContent(); |
| |
| if (accessMethod.getParameter().size() == 0) |
| return; |
| |
| init(); |
| |
| // For each parameter |
| for (int i = 0; i < accessMethod.getParameter().size(); i++) { |
| final Parameter parameter = accessMethod.getParameter().get(i); |
| String name = parameter.getName(); |
| String type = parameter.getType(); |
| ParameterField field = ParameterField.create(parameterListComposite, name, type); |
| fields.add(field); |
| } |
| |
| globalComposite.setVisible(true); |
| globalComposite.layout(true); |
| } |
| |
| public RequestParameter[] getParametersValues(AccessMethod accessMethod) { |
| List<RequestParameter> params = new ArrayList<>(); |
| if (accessMethod != null) { |
| for (int i = 0; i < accessMethod.getParameter().size(); i++) { |
| Parameter parameter = accessMethod.getParameter().get(i); |
| String name = parameter.getName(); |
| String type = parameter.getType(); |
| String value = getParameterValue(name); |
| params.add(new RequestParameter(name, type, value)); |
| } |
| } |
| return params.toArray(new RequestParameter[0]); |
| } |
| |
| private String getParameterValue(String name) { |
| for (ParameterField field : fields) |
| if (field.getName().equals(name)) |
| return field.getValue(); |
| throw new RuntimeException("No available field with name " + name); |
| } |
| } |
| |