sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/SystemDefinitionFilesWidget.java
changeset 0 522a326673b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/SystemDefinitionFilesWidget.java	Thu Mar 11 19:08:43 2010 +0200
@@ -0,0 +1,306 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+package com.symbian.smt.gui.smtwidgets;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowData;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.Bundle;
+
+import com.symbian.smt.gui.Helper;
+import com.symbian.smt.gui.Logger;
+import com.symbian.smt.gui.smtwidgets.ValidModelEvent.Type;
+
+public class SystemDefinitionFilesWidget extends Composite implements
+		ValidModelObservable {
+	private List systemDefinitionFilesList = null;
+	private ArrayList<ValidModelDefinedListener> listeners = new ArrayList<ValidModelDefinedListener>();
+
+	/**
+	 * Creates a SystemDefinitionFilesWidget composite object
+	 * 
+	 * @return void
+	 */
+	public SystemDefinitionFilesWidget(final Composite parent, int style) {
+		super(parent, style);
+
+		this.setLayout(new FillLayout());
+		this.setRedraw(true);
+
+		final Composite compositeMainGridLayout = new Composite(this, SWT.NONE);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 2;
+		compositeMainGridLayout.setLayout(gridLayout);
+
+		systemDefinitionFilesList = new List(compositeMainGridLayout,
+				SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
+		systemDefinitionFilesList.setBackground(Display.getCurrent()
+				.getSystemColor(SWT.COLOR_WHITE));
+		final GridData gd_list = new GridData(SWT.FILL, SWT.FILL, true, true);
+		gd_list.widthHint = 271;
+		systemDefinitionFilesList.setLayoutData(gd_list);
+
+		systemDefinitionFilesList.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				CheckRequiredInformationPresent();
+			}
+		});
+
+		final Composite compositeUpDownButtons = new Composite(
+				compositeMainGridLayout, SWT.NONE);
+		final GridData gd_compositeUpDownButtons = new GridData();
+		compositeUpDownButtons.setLayoutData(gd_compositeUpDownButtons);
+		compositeUpDownButtons.setLayout(new RowLayout(SWT.VERTICAL));
+
+		final Button upButton = new Button(compositeUpDownButtons, SWT.FLAT);
+		final RowData rd_upButton = new RowData();
+		rd_upButton.height = 26;
+		rd_upButton.width = 26;
+		upButton.setLayoutData(rd_upButton);
+		upButton.setImage(getUpArrowImage());
+		upButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(final SelectionEvent e) {
+				// Reorder the system definition files in the list by swapping
+				// the item
+				// selected with the item above
+				int index = systemDefinitionFilesList.getSelectionIndex();
+
+				if (index != -1 && index - 1 >= 0) {
+					String item = systemDefinitionFilesList.getItem(index);
+					String itemAbove = systemDefinitionFilesList
+							.getItem(index - 1);
+
+					systemDefinitionFilesList.setItem(index - 1, item);
+					systemDefinitionFilesList.setItem(index, itemAbove);
+
+					systemDefinitionFilesList.setSelection(index - 1);
+
+				}
+				systemDefinitionFilesList.setFocus();
+			}
+		});
+
+		final Button downButton = new Button(compositeUpDownButtons, SWT.FLAT);
+		final RowData rd_downButton = new RowData();
+		rd_downButton.height = 26;
+		rd_downButton.width = 26;
+		downButton.setLayoutData(rd_downButton);
+		downButton.setImage(getDownArrowImage());
+		downButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(final SelectionEvent e) {
+				// Reorder the system definition files in the list by swapping
+				// the item
+				// selected with the item below
+				int index = systemDefinitionFilesList.getSelectionIndex();
+
+				if (index != -1
+						&& index + 1 < systemDefinitionFilesList.getItemCount()) { // index
+																					// is
+																					// 0
+																					// relative,
+																					// getItemCount
+																					// is
+																					// not
+					String item = systemDefinitionFilesList.getItem(index);
+					String itemBelow = systemDefinitionFilesList
+							.getItem(index + 1);
+
+					systemDefinitionFilesList.setItem(index + 1, item);
+					systemDefinitionFilesList.setItem(index, itemBelow);
+
+					systemDefinitionFilesList.setSelection(index + 1);
+				}
+				systemDefinitionFilesList.setFocus();
+			}
+		});
+
+		final Composite compositeAddRemoveButtons = new Composite(
+				compositeMainGridLayout, SWT.NONE);
+		final GridData gd_compositeAddRemoveButtons = new GridData(SWT.CENTER,
+				SWT.CENTER, false, false, 2, 1);
+		compositeAddRemoveButtons.setLayoutData(gd_compositeAddRemoveButtons);
+		final RowLayout rowLayout = new RowLayout();
+		rowLayout.spacing = 30;
+		compositeAddRemoveButtons.setLayout(rowLayout);
+
+		final Button addSystemDefinitionButton = new Button(
+				compositeAddRemoveButtons, SWT.NONE);
+
+		addSystemDefinitionButton.setText("Add System Definition File");
+		addSystemDefinitionButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				java.util.List<String> currentItems = Helper
+						.toListOfStrings(systemDefinitionFilesList.getItems());
+				SystemDefinitionFileSelectionValidator validator = new SystemDefinitionFileSelectionValidator(
+						currentItems);
+				Shell shell = PlatformUI.getWorkbench()
+						.getActiveWorkbenchWindow().getShell();
+				String dialogTitle = "New System Definition File";
+				String dialogMessage = "Enter the path or URL to the system definition file";
+				String initialPath = "";
+				String[] filterNames = { "*.xml" };
+				XmlFileSelectionDialog dialog = new XmlFileSelectionDialog(
+						shell, dialogTitle, dialogMessage, initialPath,
+						filterNames, validator);
+
+				dialog.open();
+
+				if (dialog.getReturnCode() == Dialog.CANCEL) {
+					return;
+				}
+
+				String filename = dialog.getValue();
+
+				if (filename != null && (filename.length() != 0)) {
+					systemDefinitionFilesList.add(filename);
+				}
+
+				systemDefinitionFilesList.setFocus();
+			}
+		});
+
+		final Button removeSystemDefinitionButton = new Button(
+				compositeAddRemoveButtons, SWT.NONE);
+		removeSystemDefinitionButton.setText("Remove System Definition File");
+		removeSystemDefinitionButton
+				.addSelectionListener(new SelectionAdapter() {
+					public void widgetSelected(SelectionEvent e) {
+						int listIndex = systemDefinitionFilesList
+								.getSelectionIndex();
+
+						if (listIndex != -1) {
+							// Remove the system definition file from the list
+							systemDefinitionFilesList.remove(listIndex);
+						}
+						systemDefinitionFilesList.setFocus();
+					}
+				});
+	}
+
+	/**
+	 * Registers a listener object, which will be notified if the conditions for
+	 * proceeding have been met.
+	 * 
+	 * @param listener
+	 *            A ValidModelDefinedListener object
+	 * @return void
+	 * @see com.symbian.smt.gui.smtwidgets.ValidModelObservable#addModelListener(ValidModelDefinedListener)
+	 */
+	public void addModelListener(ValidModelDefinedListener listener) {
+		listeners.add(listener);
+	}
+
+	// Check that at least one system definition file has been specified. Any
+	// registered
+	// model listeners are notified with a ValidModelEvent.
+	private void CheckRequiredInformationPresent() {
+		if (listeners.size() > 0) {
+			Boolean modelDefined = true;
+			String message = "";
+			Type type = Type.SUCCESS;
+
+			if (systemDefinitionFilesList.getItems().length == 0) {
+				modelDefined = false;
+				message = "You must specify at least 1 system definition xml file to proceed.";
+				type = Type.ERROR;
+			}
+
+			ValidModelEvent event = new ValidModelEvent(modelDefined, message,
+					type);
+
+			for (ValidModelDefinedListener listener : listeners) {
+				listener.validModelDefined(event);
+			}
+		}
+	}
+
+	private Image getDownArrowImage() {
+		return new Image(getDisplay(),
+				getImageAsStream("icons/Arrow_down_icons_24px.png"));
+	}
+
+	private InputStream getImageAsStream(String imageLocation) {
+		Bundle bundle = Platform.getBundle("com.symbian.smt.gui");
+		Path path = new Path(imageLocation);
+		URL imageURL = FileLocator.find(bundle, path, null);
+
+		try {
+			return imageURL.openStream();
+		} catch (IOException e) {
+			Logger.log(e.getMessage(), e);
+		}
+
+		return null;
+	}
+
+	/**
+	 * Returns a list of the system definition files
+	 * 
+	 * @return String[]
+	 */
+	public String[] getSystemDefinitions() {
+		String[] sysDefs = systemDefinitionFilesList.getItems();
+		return sysDefs;
+	}
+
+	private Image getUpArrowImage() {
+		return new Image(getDisplay(),
+				getImageAsStream("icons/Arrow_Up_icons_24px.png"));
+	}
+
+	/**
+	 * @see com.symbian.smt.gui.smtwidgets.ValidModelObservable#removeModelListener(ValidModelDefinedListener)
+	 */
+	public void removeModelListener(ValidModelDefinedListener listener) {
+		synchronized (listeners) {
+			listeners.remove(listener);
+		}
+	}
+
+	/**
+	 * Sets the system definition files
+	 * 
+	 * @param sysDefs
+	 *            A list containing system definition files
+	 * @return void
+	 */
+	public void setSystemDefinitions(String[] sysDefs) {
+		systemDefinitionFilesList.setItems(sysDefs);
+	}
+}