--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/resources/ResourcesWidget.java Thu Mar 11 19:08:43 2010 +0200
@@ -0,0 +1,974 @@
+// 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.resources;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+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.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Table;
+
+import com.symbian.smt.gui.Helper;
+import com.symbian.smt.gui.ResourcesEnums;
+
+public class ResourcesWidget extends Composite {
+
+ /**
+ * This is the content provider for the list of resource types.
+ *
+ * @author barbararosi-schwartz
+ */
+ private class ResourceFilesContentProvider implements
+ IStructuredContentProvider {
+
+ public void dispose() {
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object[] getElements(Object inputElement) {
+ return ResourcesWidgetHelper
+ .toArrayOfCheckableResourceFilenames((java.util.List<CheckableResourceFilename>) inputElement);
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ }
+
+ /**
+ * This is the label provider for the list of of resource types.
+ *
+ * @author barbararosi-schwartz
+ */
+ private class ResourceFilesLabelProvider implements ITableLabelProvider {
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ CheckableResourceFilename crf = (CheckableResourceFilename) element;
+
+ return (columnIndex == 0) ? crf.getFilename() : null;
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ }
+
+ /**
+ * This is the content provider for the list of resource types.
+ *
+ * @author barbararosi-schwartz
+ */
+ private class ResourceTypesContentProvider implements
+ IStructuredContentProvider {
+
+ public void dispose() {
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return (ResourcesEnums[]) inputElement;
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ }
+
+ /**
+ * This is the label provider for the list of of resource types.
+ *
+ * @author barbararosi-schwartz
+ */
+ private class ResourceTypesLabelProvider implements ILabelProvider {
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public Image getImage(Object element) {
+ return null;
+ }
+
+ public String getText(Object element) {
+ return ((ResourcesEnums) element).arg();
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ }
+
+ /**
+ * The Map that caches all defined resource files, keyed by the
+ * ResourcesEnums enums.
+ */
+ private final HashMap<ResourcesEnums, java.util.List<CheckableResourceFilename>> resourceFilesMap = new HashMap<ResourcesEnums, java.util.List<CheckableResourceFilename>>();
+
+ /**
+ * The viewer associated with the Resource Files List widget.
+ */
+ private CheckboxTableViewer resourceFilesViewer;
+
+ /**
+ * The viewer associated with the Resource Types List widget.
+ */
+ private ListViewer resourceTypesViewer;
+
+ /**
+ * Creates a ResourcesWidget composite object
+ *
+ * @return void
+ */
+ public ResourcesWidget(final Composite parent, int style) {
+ super(parent, style);
+
+ initialiseMaps();
+ this.setLayout(new FillLayout());
+
+ // The Composite that contains all widgets
+ final Composite gridLayoutComposite = new Composite(this, SWT.NONE);
+ final GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 1;
+
+ gridLayoutComposite.setLayout(gridLayout);
+
+ // The SashForm that contains the resource types and resource files
+ // widgets
+ // side by side
+ SashForm sash = new SashForm(gridLayoutComposite, SWT.HORIZONTAL);
+ GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+
+ sash.setLayoutData(gd);
+ createResourceTypesComposite(sash);
+ createResourceFilesComposite(sash);
+ sash.setWeights(new int[] { 30, 70 });
+ createButtonsComposite(gridLayoutComposite);
+ }
+
+ private void addAddResourceButton(Composite parent) {
+ // The "Add" button
+ final Button addResourceFileButton = new Button(parent, SWT.NONE);
+ RowData rd = new RowData();
+ rd.width = 75;
+
+ addResourceFileButton.setLayoutData(rd);
+
+ // The action that backs the "Add" button
+ final AddResourceFileAction addResourceFileAction = new AddResourceFileAction(
+ addResourceFileButton, resourceFilesViewer, resourceFilesMap,
+ resourceTypesViewer);
+
+ // When button is pressed, listener invokes the action's run() method,
+ // then ensures that the newly added file is checked, guaranteeing that
+ // all rules around multiple checked files are respected.
+ // Finally refreshes the List of assigned options and set the selection
+ // appropriately.
+ // If the newly added file failed validation during the action's run()
+ // method,
+ // none of the operations above is taken and all is left as it was prior
+ // to
+ // the request to add a new file.
+ addResourceFileButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(final SelectionEvent e) {
+ addResourceFileAction.run();
+ resourceFilesViewer.refresh();
+
+ String newFileLocation = addResourceFileAction
+ .getNewFileLocation();
+
+ // newFile could be null if an error was detected in the
+ // validations
+ // performed in the action's run() method.
+ if (newFileLocation != null) {
+ ResourcesEnums type = ResourcesWidgetHelper
+ .getSelectedResourceType(resourceTypesViewer);
+ CheckableResourceFilename crf = ResourcesWidgetHelper
+ .filename2checkableFilename(newFileLocation, type,
+ resourceFilesMap);
+
+ handleMultipleCheckRules(crf);
+
+ StructuredSelection oldSel = (StructuredSelection) resourceFilesViewer
+ .getSelection();
+
+ StructuredSelection newSel = (newFileLocation == null) ? oldSel
+ : new StructuredSelection(newFileLocation);
+
+ resourceFilesViewer.setSelection(newSel);
+ }
+ }
+ });
+ }
+
+ private void addMoveDownResourceButton(Composite parent) {
+ // The "Move Down" button
+ final Button moveResourceFileDownButton = new Button(parent, SWT.NONE);
+ RowData rd = new RowData();
+ rd.width = 75;
+
+ moveResourceFileDownButton.setLayoutData(rd);
+
+ // The action that backs the "Move Down" button
+ final MoveResourceFileDownAction moveResourceFileDownAction = new MoveResourceFileDownAction(
+ moveResourceFileDownButton, resourceFilesViewer,
+ resourceFilesMap, resourceTypesViewer);
+
+ // When button is pressed, listener invokes the action's run() method,
+ // then refreshes the List of assigned options and set the selection
+ // appropriately
+ moveResourceFileDownButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(final SelectionEvent e) {
+ moveResourceFileDownAction.run();
+ resourceFilesViewer.refresh();
+
+ StructuredSelection newSel = new StructuredSelection(
+ moveResourceFileDownAction.getMovedCheckableFilename());
+
+ resourceFilesViewer.setSelection(newSel);
+ }
+ });
+ }
+
+ private void addMoveUpResourceButton(Composite parent) {
+ // The "Move Up" button
+ final Button moveResourceFileUpButton = new Button(parent, SWT.NONE);
+ RowData rd = new RowData();
+ rd.width = 75;
+
+ moveResourceFileUpButton.setLayoutData(rd);
+
+ // The action that backs the "Move Up" button
+ final MoveResourceFileUpAction moveResourceFileUpAction = new MoveResourceFileUpAction(
+ moveResourceFileUpButton, resourceFilesViewer,
+ resourceFilesMap, resourceTypesViewer);
+
+ // When button is pressed, listener invokes the action's run() method,
+ // then refreshes the List of assigned options and set the selection
+ // appropriately
+ moveResourceFileUpButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(final SelectionEvent e) {
+ moveResourceFileUpAction.run();
+ resourceFilesViewer.refresh();
+
+ StructuredSelection newSel = new StructuredSelection(
+ moveResourceFileUpAction.getMovedCheckableFilename());
+
+ resourceFilesViewer.setSelection(newSel);
+ }
+ });
+
+ }
+
+ private void addRemoveResourceButton(Composite parent) {
+ // The "Remove" button
+ final Button removeResourceFileButton = new Button(parent, SWT.NONE);
+ RowData rd = new RowData();
+ rd.width = 75;
+
+ removeResourceFileButton.setLayoutData(rd);
+
+ // The action that backs the "Remove" button
+ final RemoveResourceFileAction removeResourceFileAction = new RemoveResourceFileAction(
+ removeResourceFileButton, resourceFilesViewer,
+ resourceFilesMap, resourceTypesViewer);
+
+ // When button is pressed, listener invokes the action's run() method,
+ // then refreshes the List of assigned options and set the selection
+ // appropriately
+ removeResourceFileButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ removeResourceFileAction.run();
+ resourceFilesViewer.refresh();
+
+ Object firstElement = resourceFilesViewer.getElementAt(0);
+ StructuredSelection ssel = (firstElement == null) ? new StructuredSelection(
+ StructuredSelection.EMPTY)
+ : new StructuredSelection(firstElement);
+
+ resourceFilesViewer.setSelection(ssel);
+ }
+ });
+ }
+
+ private void checkFilesInResourceFilesTable(String[] filenames,
+ ResourcesEnums resourceType) {
+ if (filenames == null) {
+ throw new IllegalArgumentException(
+ "Argument filenames cannot be null.");
+ }
+
+ java.util.List<String> listOfFilenames = Helper
+ .toListOfStrings(filenames);
+ java.util.List<CheckableResourceFilename> checkableFilenames = resourceFilesMap
+ .get(resourceType);
+
+ if (checkableFilenames == null) {
+ throw new IllegalArgumentException(
+ "Could not find any elements of type [" + resourceType
+ + "] in resourceFilesMap.");
+ }
+
+ CheckableResourceFilename[] viewerElementsToBeChecked = new CheckableResourceFilename[filenames.length];
+ int i = 0;
+
+ for (String filename : listOfFilenames) {
+
+ CheckableResourceFilename checkableFilename = ResourcesWidgetHelper
+ .filename2checkableFilename(filename, resourceType,
+ resourceFilesMap);
+
+ checkableFilename.setChecked(true);
+
+ viewerElementsToBeChecked[i] = checkableFilename;
+ i++;
+ }
+
+ IStructuredSelection ssel = (IStructuredSelection) resourceTypesViewer.getSelection();
+ if (!ssel.isEmpty()) {
+ ResourcesEnums selectedType = (ResourcesEnums) ssel.getFirstElement();
+ if (selectedType.equals(resourceType)) {
+ resourceFilesViewer.setCheckedElements(viewerElementsToBeChecked);
+ }
+ }
+
+
+ }
+
+ private void createButtonsComposite(Composite parent) {
+ // The Composite that contains all buttons in a horizontal stack
+ final Composite buttonsComposite = new Composite(parent, SWT.NONE);
+ final RowLayout rowLayout = new RowLayout(SWT.HORIZONTAL);
+ rowLayout.spacing = 5;
+ rowLayout.wrap = false;
+ rowLayout.fill = true;
+
+ buttonsComposite.setLayout(rowLayout);
+
+ GridData gd = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false,
+ 1, 1);
+
+ buttonsComposite.setLayoutData(gd);
+ addAddResourceButton(buttonsComposite);
+ addRemoveResourceButton(buttonsComposite);
+ addMoveUpResourceButton(buttonsComposite);
+ addMoveDownResourceButton(buttonsComposite);
+ }
+
+ private void createResourceFilesComposite(SashForm sash) {
+ // The Composite that contains the resource files table, along with a
+ // label
+ Composite resourceFilesComposite = new Composite(sash, SWT.NONE);
+ GridData gd = new GridData(SWT.BEGINNING, SWT.FILL, false, true, 1, 1);
+
+ resourceFilesComposite.setLayoutData(gd);
+ resourceFilesComposite.setLayout(new GridLayout());
+
+ Label label = new Label(resourceFilesComposite, SWT.NONE);
+ gd = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 1, 1);
+
+ label.setLayoutData(gd);
+ label.setText("Resource Files");
+
+ // The Table that contains all assigned resource files for the selected
+ // resource type
+ final Table table = new Table(resourceFilesComposite, SWT.BORDER
+ | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.CHECK
+ | SWT.FULL_SELECTION);
+ gd = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+
+ table.setLayoutData(gd);
+
+ // The resource type viewer associated with the list
+ resourceFilesViewer = new CheckboxTableViewer(table);
+
+ resourceFilesViewer
+ .setContentProvider(new ResourceFilesContentProvider());
+ resourceFilesViewer.setLabelProvider(new ResourceFilesLabelProvider());
+
+ resourceFilesViewer.addCheckStateListener(new ICheckStateListener() {
+
+ // When the user changed the checked state of the checkbox in the
+ // table, set
+ // or unset the isChecked attribute in the corresponding
+ // CheckableResourceFilename object
+ public void checkStateChanged(CheckStateChangedEvent event) {
+ CheckableResourceFilename checkableFilename = (CheckableResourceFilename) event
+ .getElement();
+ boolean isSelected = event.getChecked();
+
+ if (isSelected) {
+ handleMultipleCheckRules(checkableFilename);
+ } else {
+ handleNoCheckRules(checkableFilename);
+ }
+ }
+
+ });
+ }
+
+ private void createResourceTypesComposite(SashForm sash) {
+ // The Composite that contains the resource types list, along with a
+ // label
+ Composite resourceTypesComposite = new Composite(sash, SWT.NONE);
+ GridData gd = new GridData(SWT.BEGINNING, SWT.FILL, false, true, 1, 1);
+
+ resourceTypesComposite.setLayoutData(gd);
+ resourceTypesComposite.setLayout(new GridLayout());
+
+ Label l = new Label(resourceTypesComposite, SWT.NONE);
+ gd = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 1, 1);
+
+ l.setLayoutData(gd);
+ l.setText("Resource Types");
+
+ // The List that contains all possible resource types
+ final List list = new List(resourceTypesComposite, SWT.BORDER
+ | SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE);
+ gd = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+
+ list.setLayoutData(gd);
+
+ // The resource type viewer associated with the list
+ resourceTypesViewer = new ListViewer(list);
+
+ resourceTypesViewer
+ .setContentProvider(new ResourceTypesContentProvider());
+ resourceTypesViewer.setLabelProvider(new ResourceTypesLabelProvider());
+ resourceTypesViewer.setInput(ResourcesEnums.values());
+
+ resourceTypesViewer
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ IStructuredSelection ssel = (IStructuredSelection) event
+ .getSelection();
+ if (ssel.isEmpty()) {
+ return;
+ }
+ ResourcesEnums selectedType = (ResourcesEnums) ssel.getFirstElement();
+
+ resourceFilesViewer.setInput(ResourcesWidgetHelper
+ .getCheckableResourceFilenames(selectedType,
+ resourceFilesMap));
+
+ resourceFilesViewer
+ .setCheckedElements(ResourcesWidgetHelper
+ .getCheckedResourceFilenames(
+ selectedType, resourceFilesMap));
+ }
+ });
+ }
+
+ @Override
+ public void dispose() {
+ resourceFilesMap.clear();
+ super.dispose();
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getBorderShapesFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.BORDER_SHAPES,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getBorderStylesFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.BORDER_STYLES,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getColoursFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.COLOURS,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getDependenciesFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.DEPENDENCIES,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getLevelsFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.LEVELS,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getLocalisationFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.LOCALISATION,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getPatternsFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.PATTERNS,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getS12XmlFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.S12_XML,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the border shapes file or an empty string if no border shapes
+ * file has been specified
+ *
+ * @return String
+ */
+ public String[] getSelectedBorderShapesFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(
+ ResourcesEnums.BORDER_SHAPES, resourceFilesMap);
+ }
+
+ /**
+ * Returns the border styles file or an empty string if no border styles
+ * file has been specified
+ *
+ * @return String
+ */
+ public String[] getSelectedBorderStylesFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(
+ ResourcesEnums.BORDER_STYLES, resourceFilesMap);
+ }
+
+ /**
+ * Returns the colours file or an empty string if no colours file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getSelectedColoursFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(
+ ResourcesEnums.COLOURS, resourceFilesMap);
+ }
+
+ /**
+ * Returns the dependencies file or an empty string if no dependencies file
+ * has been specified
+ *
+ * @return String
+ */
+ public String[] getSelectedDependenciesFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(
+ ResourcesEnums.DEPENDENCIES, resourceFilesMap);
+ }
+
+ /**
+ * Returns the levels file or an empty string if no levels file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getSelectedLevelsFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(ResourcesEnums.LEVELS,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the localisation file or an empty string if no localisation file
+ * has been specified
+ *
+ * @return String
+ */
+ public String[] getSelectedLocalisationFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(
+ ResourcesEnums.LOCALISATION, resourceFilesMap);
+ }
+
+ /**
+ * Returns the patterns file or an empty string if no patterns file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getSelectedPatternsFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(
+ ResourcesEnums.PATTERNS, resourceFilesMap);
+ }
+
+ /**
+ * Returns the patterns file or an empty string if no patterns file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getSelectedS12XmlFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(
+ ResourcesEnums.S12_XML, resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getSelectedShapesFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(ResourcesEnums.SHAPES,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the system info file or an empty string if no system info file
+ * has been specified
+ *
+ * @return String
+ */
+ public String[] getSelectedSystemInfoFiles() {
+ return ResourcesWidgetHelper.getCheckedFilenames(
+ ResourcesEnums.SYSTEM_INFO, resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getShapesFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.SHAPES,
+ resourceFilesMap);
+ }
+
+ /**
+ * Returns the shapes file or an empty string if no shapes file has been
+ * specified
+ *
+ * @return String
+ */
+ public String[] getSystemInfoFiles() {
+ return ResourcesWidgetHelper.getFilenames(ResourcesEnums.SYSTEM_INFO,
+ resourceFilesMap);
+ }
+
+ /**
+ * Checks the designated resource file and sets its <code>isChecked</code>
+ * attribute to true. Handles business rules around the acceptability of
+ * having multiple checked files.
+ * <p>
+ * The rules are as follows:
+ * <ul>
+ * <li>If resource type is DEPENDENCIES or SHAPES, only allow one check at a
+ * time: uncheck all other files and remove them from
+ * <code>selectedResourceFilesMap</code></li>
+ * <li>In all other cases, allow multiple checks</li>
+ * </ul>
+ * </p>
+ *
+ * @param resourceFile
+ * the CheckableResourceFilename object that has been checked by
+ * the user
+ */
+ private void handleMultipleCheckRules(
+ CheckableResourceFilename checkedCheckableFilename) {
+ ResourcesEnums selectedResourceType = ResourcesWidgetHelper
+ .getSelectedResourceType(resourceTypesViewer);
+ java.util.List<CheckableResourceFilename> checkableFilenames = ResourcesWidgetHelper
+ .getCheckableResourceFilenames(selectedResourceType,
+ resourceFilesMap);
+
+ checkedCheckableFilename.setChecked(true);
+
+ switch (selectedResourceType) {
+ // Only one file can be checked at a time, therefore uncheck all others
+ case DEPENDENCIES:
+ case SHAPES:
+ for (CheckableResourceFilename checkableFilename : checkableFilenames) {
+ if (!checkableFilename.equals(checkedCheckableFilename)) {
+ checkableFilename.setChecked(false);
+ }
+ }
+
+ resourceFilesViewer
+ .setCheckedElements(new CheckableResourceFilename[] { checkedCheckableFilename });
+ break;
+
+ // If multiple files are checked and they contain the same elements,
+ // prevent checking from happening as it will generate an error in
+ // the build. Produce an explanatory error dialog.
+ case BORDER_SHAPES:
+ case PATTERNS:
+ // TODO:BRS:This piece of code is unfinished. If it is required to check
+ // that there are no duplicate items across
+ // the defined XML files, check similar behaviour in ResourceFileValidator.
+ // If ok
+ // resourceFilesViewer.setChecked(resourceFile, true);
+ // selectedResourceFiles.add(resourceFile);
+ // else
+ // MessageDialog.openError("Checked files contain the same element and the process will fail.\n"
+ // +
+ // "Please remove duplicate elements or uncheck one or more of the other files.");
+ // resourceFilesViewer.setChecked(resourceFile, false);
+
+ resourceFilesViewer.setChecked(checkedCheckableFilename, true);
+ break;
+
+ // If "Auto" is checked, uncheck everything else. If another option is
+ // checked, uncheck "Auto".
+ case LEVELS:
+ if (checkedCheckableFilename.getFilename().equals("Auto")) {
+ for (CheckableResourceFilename checkableFilename : checkableFilenames) {
+ if (!checkableFilename.equals(checkedCheckableFilename)) {
+ checkableFilename.setChecked(false);
+ }
+ }
+
+ resourceFilesViewer
+ .setCheckedElements(new CheckableResourceFilename[] { checkedCheckableFilename });
+ } else {
+ resourceFilesViewer.setChecked(checkedCheckableFilename, true);
+
+ CheckableResourceFilename autocfn = ResourcesWidgetHelper
+ .filename2checkableFilename("Auto",
+ ResourcesEnums.LEVELS, resourceFilesMap);
+
+ if (autocfn.isChecked()) {
+ autocfn.setChecked(false);
+ resourceFilesViewer.setChecked(autocfn, false);
+ }
+ }
+
+ break;
+
+ // No special rules, proceed with the operation.
+ case BORDER_STYLES:
+ case COLOURS:
+ case LOCALISATION:
+ case S12_XML:
+ case SYSTEM_INFO:
+ resourceFilesViewer.setChecked(checkedCheckableFilename, true);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Unknown resource type ["
+ + selectedResourceType + "]");
+ }
+ }
+
+ /**
+ * Unchecks the designated CheckableResourceFilename object. Handles
+ * business rules around the acceptability of having no checked files.
+ * <p>
+ * The rules are as follows:
+ * <ul>
+ * <li></li>
+ * </ul>
+ * </p>
+ *
+ * @param selectedCheckableFilename
+ * the file that has been unchecked by the user
+ */
+ private void handleNoCheckRules(
+ CheckableResourceFilename uncheckedCheckableFilename) {
+ uncheckedCheckableFilename.setChecked(false);
+ resourceFilesViewer.setChecked(uncheckedCheckableFilename, false);
+ }
+
+ private void initialiseMaps() {
+ for (ResourcesEnums type : ResourcesEnums.values()) {
+ resourceFilesMap.put(type, null);
+ }
+ }
+
+ private void populateResourceFilesTable(String[] filenames,
+ ResourcesEnums resourceType) {
+ java.util.List<String> listOfFilenames = Helper
+ .toListOfStrings(filenames);
+ java.util.List<CheckableResourceFilename> checkableFilenames = new ArrayList<CheckableResourceFilename>();
+
+ for (String filename : listOfFilenames) {
+ CheckableResourceFilename crf = new CheckableResourceFilename(
+ filename);
+ checkableFilenames.add(crf);
+ }
+
+ IStructuredSelection ssel = (IStructuredSelection) resourceTypesViewer.getSelection();
+ if (!ssel.isEmpty()) {
+ ResourcesEnums selectedType = (ResourcesEnums) ssel.getFirstElement();
+ if (selectedType.equals(resourceType)) {
+ resourceFilesViewer.setInput(checkableFilenames);
+ }
+ }
+ resourceFilesMap.put(resourceType, checkableFilenames);
+ }
+
+ public void setBorderShapesFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.BORDER_SHAPES);
+ }
+
+ public void setBorderStylesFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.BORDER_STYLES);
+ }
+
+ public void setColoursFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.COLOURS);
+ }
+
+ public void setDependenciesFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.DEPENDENCIES);
+ }
+
+ public void setLevelsFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.LEVELS);
+ }
+
+ public void setLocalisationFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.LOCALISATION);
+ }
+
+ public void setPatternsFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.PATTERNS);
+ }
+
+ public void setS12XmlFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.S12_XML);
+ }
+
+ public void setSelectedBorderShapesFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.BORDER_SHAPES);
+ }
+
+ public void setSelectedBorderStylesFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.BORDER_STYLES);
+ }
+
+ public void setSelectedColoursFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.COLOURS);
+ }
+
+ public void setSelectedDependenciesFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.DEPENDENCIES);
+ }
+
+ public void setSelectedLevelsFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.LEVELS);
+ }
+
+ public void setSelectedLocalisationFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.LOCALISATION);
+ }
+
+ public void setSelectedPatternsFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.PATTERNS);
+ }
+
+ public void setSelectedS12XmlFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.S12_XML);
+ }
+
+ public void setSelectedShapesFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.SHAPES);
+ }
+
+ public void setSelectedSystemInfoFiles(String[] filenames) {
+ checkFilesInResourceFilesTable(filenames, ResourcesEnums.SYSTEM_INFO);
+ }
+
+ public void setShapesFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.SHAPES);
+ }
+
+ public void setSystemInfoFiles(String[] filenames) {
+ populateResourceFilesTable(filenames, ResourcesEnums.SYSTEM_INFO);
+ }
+
+}
\ No newline at end of file