blob: 2fe8f8626339f5a6b33a3904ba103cace9493629 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* 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:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.ote.ui.test.manager.preferences.environment;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.osee.framework.jdk.core.type.TreeObject;
import org.eclipse.osee.framework.jdk.core.type.TreeParent;
import org.eclipse.osee.framework.jdk.core.util.Strings;
import org.eclipse.osee.framework.ui.swt.ImageManager;
import org.eclipse.osee.ote.ui.test.manager.OteTestManagerImage;
import org.eclipse.osee.ote.ui.test.manager.internal.TestManagerPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
/**
* @author Roberto E. Escobar
*/
public class EnvironmentPreferencePage {
public static final String CHECKED = "selected";
public static final String NAME = "name";
public static final String NUMBER_OF_VALUES = "numberOfValues";
public static final String PAGE_KEY = "org.eclipse.osee.ote.ui.test.manager.EnvironmentPreferencePage";
public static final String VALUE = "value";
public static Map<String, String> getSelectedItems() {
Map<String, String> environmentVariables = new HashMap<>();
ArrayList<EnvironmentPreferenceNode> envList = loadVariables();
for (EnvironmentPreferenceNode node : envList) {
if (node.isChecked()) {
String name = node.getEnvName();
String value = node.getValue();
if (Strings.isValid(name)) {
environmentVariables.put(name, value != null ? value : "");
}
}
}
return environmentVariables;
}
private static ArrayList<EnvironmentPreferenceNode> loadVariables() {
ArrayList<EnvironmentPreferenceNode> list = new ArrayList<>();
IPreferenceStore prefStore = TestManagerPlugin.getInstance().getPreferenceStore();
int numberOfValues = prefStore.getInt(PAGE_KEY + "." + NUMBER_OF_VALUES);
for (int index = 0; index < numberOfValues; index++) {
String name = prefStore.getString(PAGE_KEY + "." + NAME + "_" + index);
String value = prefStore.getString(PAGE_KEY + "." + VALUE + "_" + index);
String selectedString = prefStore.getString(PAGE_KEY + "." + CHECKED + "_" + index);
boolean selected = Boolean.parseBoolean(selectedString);
if (name != null && name != "") {
EnvironmentPreferenceNode node = new EnvironmentPreferenceNode(name);
node.setValue((value != null ? value : ""));
node.setChecked(selected);
list.add(node);
}
}
return list;
}
private Button addButton;
private Composite buttonComposite;
private EnvironmentPageEventHandler environmentPageEventHandler;
private Button removeButton;
private final ArrayList<EnvironmentPreferenceNode> treeInputList;
private CheckboxTreeViewer treeViewer;
public EnvironmentPreferencePage(Composite parent) {
this.treeInputList = loadVariables();
this.createTreeArea(parent);
}
public ISelection getSelection() {
return treeViewer.getSelection();
}
public void refresh() {
treeViewer.refresh();
}
public void storeVariables() {
IPreferenceStore prefStore = TestManagerPlugin.getInstance().getPreferenceStore();
prefStore.setValue(PAGE_KEY + "." + NUMBER_OF_VALUES, treeInputList.size());
int index = 0;
for (EnvironmentPreferenceNode node : treeInputList) {
index = treeInputList.indexOf(node);
String name = node.getEnvName();
if (name != null && name != "") {
prefStore.putValue(PAGE_KEY + "." + NAME + "_" + index, name);
String value = node.getValue();
prefStore.putValue(PAGE_KEY + "." + VALUE + "_" + index, (value != null ? value : ""));
prefStore.putValue(PAGE_KEY + "." + CHECKED + "_" + index, Boolean.toString(node.isChecked()));
}
}
}
private void attachListeners() {
treeViewer.getTree().addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
if (e.character == SWT.DEL && (e.stateMask & SWT.CTRL) == 0) {
environmentPageEventHandler.handleRemoveSelectedViewEvent();
}
}
});
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
environmentPageEventHandler.handleTreeSelectionEvent(event);
}
});
treeViewer.getTree().addMouseListener(new MouseListener() {
@Override
public void mouseDoubleClick(MouseEvent e) {
environmentPageEventHandler.handleEditVariableEvent();
}
@Override
public void mouseDown(MouseEvent e) {
}
@Override
public void mouseUp(MouseEvent e) {
}
});
treeViewer.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(CheckStateChangedEvent event) {
environmentPageEventHandler.handleCheckStateChangeEvent(event);
}
});
}
private Control createButtonArea(Composite parent) {
buttonComposite = new Composite(parent, SWT.NONE);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 1;
GridData gd = new GridData(SWT.FILL);
buttonComposite.setLayout(gridLayout);
buttonComposite.setLayoutData(gd);
addButton = new Button(buttonComposite, SWT.PUSH);
addButton.setText("Add");
addButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
@Override
public void widgetSelected(SelectionEvent e) {
environmentPageEventHandler.handleAddEnvironmentVariableEvent();
}
});
removeButton = new Button(buttonComposite, SWT.PUSH);
removeButton.setText("Remove");
removeButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
@Override
public void widgetSelected(SelectionEvent e) {
environmentPageEventHandler.handleRemoveSelectedViewEvent();
}
});
return parent;
}
private Control createTreeArea(Composite parent) {
Group defaultEnvironmentVariablesGroup = new Group(parent, SWT.NONE);
defaultEnvironmentVariablesGroup.setText("Select Default Environment Variables to Use");
GridLayout gL = new GridLayout();
gL.numColumns = 2;
GridData gd = new GridData(GridData.FILL_BOTH);
gd.grabExcessHorizontalSpace = true;
gd.grabExcessVerticalSpace = true;
defaultEnvironmentVariablesGroup.setLayout(gL);
defaultEnvironmentVariablesGroup.setLayoutData(gd);
Composite areaComposite = new Composite(defaultEnvironmentVariablesGroup, SWT.NONE);
GridLayout treeLayout = new GridLayout();
treeLayout.numColumns = 1;
GridData gd1 = new GridData();
gd1.horizontalAlignment = GridData.FILL;
gd1.verticalAlignment = GridData.FILL;
gd1.grabExcessHorizontalSpace = true;
gd1.grabExcessVerticalSpace = true;
areaComposite.setLayout(treeLayout);
areaComposite.setLayoutData(gd1);
GridData treeGridData = new GridData();
treeGridData.grabExcessHorizontalSpace = true;
treeGridData.grabExcessVerticalSpace = true;
treeGridData.horizontalAlignment = GridData.FILL;
treeGridData.verticalAlignment = GridData.FILL;
treeViewer =
new CheckboxTreeViewer(areaComposite, SWT.MULTI | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
treeViewer.getTree().setLayoutData(treeGridData);
treeViewer.setContentProvider(new ITreeContentProvider() {
@Override
public void dispose() {
}
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement != null && parentElement instanceof TreeParent) {
TreeParent parent = (TreeParent) parentElement;
if (parent.hasChildren()) {
return parent.getChildren();
}
}
return new Object[0];
}
@Override
public Object[] getElements(Object inputElement) {
if (inputElement != null && inputElement instanceof ArrayList<?>) {
ArrayList<?> elementArray = (ArrayList<?>) inputElement;
return elementArray.toArray();
}
return new Object[0];
}
@Override
public Object getParent(Object element) {
if (element != null && element instanceof TreeObject) {
TreeObject child = (TreeObject) element;
return child.getParent();
}
return new Object();
}
@Override
public boolean hasChildren(Object element) {
if (element instanceof TreeParent) {
TreeParent parent = (TreeParent) element;
return parent.hasChildren();
}
return false;
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
treeViewer.setLabelProvider(new LabelProvider() {
@Override
public Image getImage(Object obj) {
return ImageManager.getImage(OteTestManagerImage.ENVIRONMENT);
}
@Override
public String getText(Object obj) {
return obj.toString();
}
});
treeViewer.setInput(treeInputList);
treeViewer.getTree().setToolTipText("Double click on an item to edit.\nClick once to preview content.");
environmentPageEventHandler = new EnvironmentPageEventHandler(parent, treeViewer, treeInputList);
createButtonArea(defaultEnvironmentVariablesGroup);
attachListeners();
for (EnvironmentPreferenceNode parentNode : treeInputList) {
treeViewer.setChecked(parentNode, parentNode.isChecked());
}
return parent;
}
}