/*
* ARX: Powerful Data Anonymization
* Copyright 2012 - 2017 Fabian Prasser, Florian Kohlmayer and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.deidentifier.arx.gui.view.impl;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.commons.math3.util.Pair;
import org.deidentifier.arx.Data;
import org.deidentifier.arx.DataHandle;
import org.deidentifier.arx.DataType;
import org.deidentifier.arx.DataType.DataTypeDescription;
import org.deidentifier.arx.gui.Controller;
import org.deidentifier.arx.gui.model.Model;
import org.deidentifier.arx.gui.model.Model.Perspective;
import org.deidentifier.arx.gui.model.ModelAuditTrailEntry;
import org.deidentifier.arx.gui.model.ModelCriterion;
import org.deidentifier.arx.gui.model.ModelEvent;
import org.deidentifier.arx.gui.model.ModelEvent.ModelPart;
import org.deidentifier.arx.gui.model.ModelExplicitCriterion;
import org.deidentifier.arx.gui.resources.Charsets;
import org.deidentifier.arx.gui.resources.Resources;
import org.deidentifier.arx.gui.view.SWTUtil;
import org.deidentifier.arx.gui.view.def.IView;
import org.deidentifier.arx.gui.view.impl.common.ComponentTitledFolder;
import org.deidentifier.arx.gui.view.impl.define.LayoutDefinition;
import org.deidentifier.arx.gui.view.impl.explore.LayoutExplore;
import org.deidentifier.arx.gui.view.impl.menu.DialogAbout;
import org.deidentifier.arx.gui.view.impl.menu.DialogAuditTrail;
import org.deidentifier.arx.gui.view.impl.menu.DialogComboSelection;
import org.deidentifier.arx.gui.view.impl.menu.DialogCriterionSelection;
import org.deidentifier.arx.gui.view.impl.menu.DialogCriterionUpdate;
import org.deidentifier.arx.gui.view.impl.menu.DialogDebug;
import org.deidentifier.arx.gui.view.impl.menu.DialogError;
import org.deidentifier.arx.gui.view.impl.menu.DialogFindReplace;
import org.deidentifier.arx.gui.view.impl.menu.DialogHelp;
import org.deidentifier.arx.gui.view.impl.menu.DialogMultiSelection;
import org.deidentifier.arx.gui.view.impl.menu.DialogOrderSelection;
import org.deidentifier.arx.gui.view.impl.menu.DialogQuery;
import org.deidentifier.arx.gui.view.impl.menu.DialogQueryResult;
import org.deidentifier.arx.gui.view.impl.menu.DialogTopBottomCoding;
import org.deidentifier.arx.gui.view.impl.risk.LayoutRisks;
import org.deidentifier.arx.gui.view.impl.utility.LayoutUtility;
import org.deidentifier.arx.gui.worker.Worker;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.window.Window;
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.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
/**
* This class implements the global application window.
*
* @author Fabian Prasser
*/
public class MainWindow implements IView {
/** Controller */
private final Controller controller;
/** View */
private final Display display;
/** View */
private final Shell shell;
/** View */
private final AbstractMenu menu;
/** View */
private final ComponentTitledFolder root;
/** View */
private final LayoutExplore layoutExplore;
/**
* Creates a new instance.
*
* @param display
* @param monitor
*/
public MainWindow(Display display, Monitor monitor) {
// Init
this.display = display;
this.shell = new Shell(display);
// Build controller
controller = new Controller(this);
controller.addListener(ModelPart.MODEL, this);
// Style
shell.setImages(Resources.getIconSet(display));
shell.setText(Resources.getMessage("MainWindow.0")); //$NON-NLS-1$
shell.setMinimumSize(800, 600);
// Center
SWTUtil.center(shell, monitor);
// Maximize
shell.setMaximized(true);
// Close listener
shell.addListener(SWT.Close, new Listener() {
@Override
public void handleEvent(final Event event) {
controller.actionMenuFileExit();
event.doit = false;
}
});
// Build menu
List<MainMenuItem> items = getMenu();
menu = new MainMenu(shell, controller, items);
new MainToolBar(shell, controller, items);
// Create shell
shell.setLayout(SWTUtil.createGridLayout(1));
// Create the tab folder
Map<Composite, String> helpids = new HashMap<Composite, String>();
root = new ComponentTitledFolder(shell, controller, null, "id-70", helpids); //$NON-NLS-1$
root.setLayoutData(SWTUtil.createFillGridData());
// Create the subviews
Composite item1 = root.createItem(Resources.getMessage("MainWindow.2"), controller.getResources().getManagedImage("perspective_define.png")); //$NON-NLS-1$ //$NON-NLS-2$
helpids.put(item1, "id-3"); //$NON-NLS-1$
new LayoutDefinition(item1, controller);
Composite item2 = root.createItem(Resources.getMessage("MainWindow.3"), controller.getResources().getManagedImage("perspective_explore.png")); //$NON-NLS-1$ //$NON-NLS-2$
helpids.put(item2, "id-4"); //$NON-NLS-1$
this.layoutExplore = new LayoutExplore(item2, controller);
Composite item3 = root.createItem(Resources.getMessage("MainWindow.1"), controller.getResources().getManagedImage("perspective_analyze.png")); //$NON-NLS-1$ //$NON-NLS-2$
helpids.put(item3, "help.utility.overview"); //$NON-NLS-1$
new LayoutUtility(item3, controller);
Composite item4 = root.createItem(Resources.getMessage("MainWindow.4"), controller.getResources().getManagedImage("perspective_risk.png")); //$NON-NLS-1$ //$NON-NLS-2$
helpids.put(item4, "help.risk.overview"); //$NON-NLS-1$
new LayoutRisks(item4, controller);
// Hack to update visualizations
root.addSelectionListener(new SelectionAdapter(){
@Override
public void widgetSelected(SelectionEvent arg0) {
switch (root.getSelectionIndex()) {
case 0:
controller.getModel().setPerspective(Perspective.CONFIGURATION);
break;
case 1:
controller.getModel().setPerspective(Perspective.EXPLORATION);
break;
case 2:
controller.getModel().setPerspective(Perspective.ANALYSIS);
break;
case 3:
controller.getModel().setPerspective(Perspective.RISK);
break;
}
controller.update(new ModelEvent(this, ModelPart.SELECTED_UTILITY_VISUALIZATION, null));
controller.update(new ModelEvent(this, ModelPart.SELECTED_PERSPECTIVE, controller.getModel().getPerspective()));
}
});
// Now reset and disable
controller.reset();
}
@Override
public void dispose() {
controller.removeListener(this);
}
/**
* Returns the controller.
*
* @return
*/
public Controller getController() {
return this.controller;
}
/**
* Returns the shell.
*
* @return
*/
public Shell getShell() {
return shell;
}
/**
* Is this shell disposed.
*
* @return
*/
public boolean isDisposed() {
return this.shell.isDisposed();
}
/**
* Executes the given runnable on show.
*
* @param runnable
*/
public void onShow(final Runnable runnable){
// Using a paint listener is a hack to reliably determine when the shell is visible
shell.addPaintListener(new PaintListener(){
@Override
public void paintControl(PaintEvent arg0) {
shell.removePaintListener(this);
display.timerExec(200, runnable);
}
});
}
/**
* Resets the GUI.
*/
public void reset() {
root.setSelection(0);
root.setEnabled(false);
}
/**
* Main SWT event loop.
*/
public void show() {
shell.open();
}
/**
* Shows an about dialog.
*/
public void showAboutDialog() {
final DialogAbout dialog = new DialogAbout(shell, controller);
dialog.create();
dialog.open();
}
/**
* Shows a dialog for selecting privacy criteria.
*
* @param criteria
* @return
*/
public ModelCriterion showAddCriterionDialog(Model model,
List<ModelCriterion> criteria) {
// Dialog
final DialogCriterionUpdate dialog = new DialogCriterionUpdate(controller, shell, criteria, model, true);
dialog.create();
if (dialog.open() != Window.OK) {
return null;
} else {
return dialog.getCriterion();
}
}
/**
* Shows the audit trail
*/
public void showAuditTrail(List<ModelAuditTrailEntry> auditTrail) {
DialogAuditTrail dialog = new DialogAuditTrail(shell, auditTrail);
dialog.create();
dialog.open();
}
/**
* Shows an input dialog for selecting a charset.
*
* @param shell
* @return
*/
public Charset showCharsetInputDialog(final Shell shell) {
// Validator
final IInputValidator validator = new IInputValidator() {
@Override
public String isValid(final String arg0) {
return null;
}
};
// Extract list of formats
List<String> charsets = new ArrayList<String>();
for (String charset : Charsets.getNamesOfAvailableCharsets()) {
charsets.add(charset);
}
// Open dialog
final DialogComboSelection dlg = new DialogComboSelection(shell, Resources.getMessage("MainWindow.19"), //$NON-NLS-1$
Resources.getMessage("MainWindow.20"), //$NON-NLS-1$
charsets.toArray(new String[] {}),
Charsets.getNameOfDefaultCharset(),
validator);
// Return value
if (dlg.open() == Window.OK) {
return Charsets.getCharsetForName(dlg.getValue());
} else {
return null;
}
}
/**
* Shows a dialog for configuring privacy criteria.
*
* @param criteria
* @param criterion
* @return
*/
public void showConfigureCriterionDialog(Model model, List<ModelCriterion> criteria, ModelCriterion criterion) {
DialogCriterionUpdate dialog = new DialogCriterionUpdate(controller, shell, criteria, model, false, criterion);
dialog.create();
dialog.open();
}
/**
* Shows a debug dialog.
*/
public void showDebugDialog() {
final DialogDebug dialog = new DialogDebug(shell, controller);
dialog.create();
dialog.open();
}
/**
* Shows an error dialog.
*
* @param shell
* @param message
* @param text
*/
public void showErrorDialog(final Shell shell, final String message, final String text) {
DialogError dialog = new DialogError(shell, controller, message, text);
dialog.create();
dialog.open();
}
/**
* Shows an error dialog.
*
* @param shell
* @param message
* @param throwable
*/
public void showErrorDialog(final Shell shell, final String message, final Throwable throwable) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
if (throwable != null) throwable.printStackTrace(pw);
final String trace = sw.toString();
showErrorDialog(shell, message, trace);
}
/**
* Shows an error dialog.
*
* @param message
* @param text
*/
public void showErrorDialog(final String message, final String text) {
showErrorDialog(this.shell, message, text);
}
/**
* Shows an error dialog.
*
* @param message
* @param throwable
*/
public void showErrorDialog(final String message, final Throwable throwable) {
showErrorDialog(this.shell, message, throwable);
}
/**
* Shows a find & replace dialog
* @param handle
* @param column
* @return A pair containing the string to be found and the string with which it is to be replaced,
* <code>null</code> if cancel was pressed.
*/
public Pair<String, String> showFindReplaceDialog(Model model, DataHandle handle, int column) {
DialogFindReplace dialog = new DialogFindReplace(shell, model, handle, column);
dialog.create();
dialog.open();
return dialog.getValue();
}
/**
* Shows an input dialog for selecting formats string for data types.
*
* @param shell
* @param header
* @param text
* @param preselected Preselected format string, can be null
* @param locale The current locale
* @param description
* @param values
* @return
*/
public String showFormatInputDialog(final Shell shell, final String header, final String text, final String preselected, final Locale locale, final DataTypeDescription<?> description, final Collection<String> values) {
// Check
if (!description.hasFormat()) {
throw new RuntimeException(Resources.getMessage("MainWindow.6")); //$NON-NLS-1$
}
// Init
final String DEFAULT = Resources.getMessage("MainWindow.7"); //$NON-NLS-1$
// Validator
final IInputValidator validator = new IInputValidator() {
@Override
public String isValid(final String arg0) {
DataType<?> type;
try {
if (arg0.equals(DEFAULT)) {
type = description.newInstance();
} else {
type = description.newInstance(arg0, locale);
}
} catch (final Exception e) {
return Resources.getMessage("MainWindow.11"); //$NON-NLS-1$
}
for (final String value : values) {
if (!type.isValid(value)) {
return Resources.getMessage("MainWindow.13"); //$NON-NLS-1$
}
}
return null;
}
};
// Try to find a valid formatter
String initial = ""; //$NON-NLS-1$
if (preselected != null && validator.isValid(preselected) == null) {
initial = preselected;
} else if (validator.isValid(DEFAULT) == null) {
initial = DEFAULT;
} else {
for (final String format : description.getExampleFormats()) {
if (validator.isValid(format) == null) {
initial = format;
break;
}
}
}
// Extract list of formats
List<String> formats = new ArrayList<String>();
formats.add(DEFAULT);
formats.addAll(description.getExampleFormats());
// Open dialog
final DialogComboSelection dlg = new DialogComboSelection(shell, header, text, formats.toArray(new String[] {}), initial, validator);
// Return value
if (dlg.open() == Window.OK) {
return dlg.getValue();
} else {
return null;
}
}
/**
* Shows a help dialog.
*
* @param id
*/
public void showHelpDialog(String id) {
try {
DialogHelp dialog = new DialogHelp(shell, controller, id);
dialog.open();
} catch (Exception e) {
this.showErrorDialog(Resources.getMessage("MainWindow.12"), e); //$NON-NLS-1$
}
}
/**
* Shows an info dialog.
*
* @param shell
* @param header
* @param text
*/
public void showInfoDialog(final Shell shell, final String header, final String text) {
MessageDialog.openInformation(getShell(), header, text);
}
/**
* Shows an input dialog.
*
* @param shell
* @param header
* @param text
* @param initial
* @return
*/
public String showInputDialog(final Shell shell, final String header, final String text, final String initial) {
return showInputDialog(shell, header, text, initial, null);
}
/**
* Shows an input dialog.
*
* @param shell
* @param header
* @param text
* @param initial
* @param validator
* @return
*/
public String showInputDialog(final Shell shell, final String header, final String text, final String initial, final IInputValidator validator) {
final InputDialog dlg = new InputDialog(shell, header, text, initial, validator);
if (dlg.open() == Window.OK) {
return dlg.getValue();
} else {
return null;
}
}
/**
* Shows a dialog that allows selecting multiple elements
* @param shell
* @param title
* @param text
* @param elements
* @param selected
* @return
*/
public List<String> showMultiSelectionDialog(Shell shell,
String title,
String text,
List<String> elements,
List<String> selected) {
// Open dialog
DialogMultiSelection dlg = new DialogMultiSelection(shell, title, text, elements, selected);
if (dlg.open() == Window.OK) {
return dlg.getSelectedItems();
} else {
return null;
}
}
/**
* Shows a file open dialog.
*
* @param shell
* @param filter
* @return
*/
public String showOpenFileDialog(final Shell shell, String filter) {
final FileDialog dialog = new FileDialog(shell, SWT.OPEN);
dialog.setFilterExtensions(new String[] { filter });
dialog.setFilterIndex(0);
String file = dialog.open();
if (file == null) {
return null;
} else if (!new File(file).exists()) {
showInfoDialog(shell, Resources.getMessage("MainWindow.5"), Resources.getMessage("MainWindow.14")); //$NON-NLS-1$ //$NON-NLS-2$
return null;
} else {
return file;
}
}
/**
* Shows an input dialog for ordering data items.
*
* @param shell
* @param header
* @param text
* @param type
* @param locale
* @param values
* @return
*/
public String[] showOrderValuesDialog(final Shell shell, final String header, final String text, final DataType<?> type, final Locale locale, final String[] values) {
// Open dialog
DialogOrderSelection dlg = new DialogOrderSelection(shell, values, type, locale, controller);
if (dlg.open() == Window.OK) {
return dlg.getResult();
} else {
return null;
}
}
/**
* Shows a progress dialog.
*
* @param text
* @param worker
*/
public void showProgressDialog(final String text, final Worker<?> worker) {
try {
new ProgressMonitorDialog(shell).run(true, true, worker);
} catch (final Exception e) {
worker.setError(e);
}
}
/**
* Shows a query dialog for selecting a research subset.
*
* @param query
* @param data
* @return
*/
public DialogQueryResult showQueryDialog(String query, Data data) {
// Dialog
final DialogQuery dialog = new DialogQuery(data, shell, query);
dialog.create();
if (dialog.open() != Window.OK) {
return null;
} else {
return dialog.getResult();
}
}
/**
* Shows a question dialog.
*
* @param shell
* @param header
* @param text
* @return
*/
public boolean showQuestionDialog(final Shell shell, final String header, final String text) {
return MessageDialog.openQuestion(getShell(), header, text);
}
/**
* Shows a file save dialog.
*
* @param shell
* @param filter
* @return
*/
public String showSaveFileDialog(final Shell shell, String filter) {
final FileDialog dialog = new FileDialog(shell, SWT.SAVE);
dialog.setFilterExtensions(new String[] { filter });
dialog.setFilterIndex(0);
return dialog.open();
}
/**
* Shows a dialog for selecting privacy criteria.
*
* @param criteria
* @return
*/
public ModelExplicitCriterion showSelectCriterionDialog(List<ModelExplicitCriterion> criteria) {
// Dialog
final DialogCriterionSelection dialog = new DialogCriterionSelection(controller, shell, criteria);
dialog.create();
if (dialog.open() != Window.OK) {
return null;
} else {
return dialog.getCriterion();
}
}
/**
* Shows a top/bottom coding dialog
* @param type
* @return A pair containing the bottom value + inclusive and the top value + inclusive.
* Either bottom or top may be <code>null</code> if they have not been defined. The overall pair may be
* <code>null</code> if cancel was pressed.
*/
public Pair<Pair<String, Boolean>, Pair<String, Boolean>> showTopBottomCodingDialog(DataType<?> type) {
DialogTopBottomCoding dialog = new DialogTopBottomCoding(shell, type);
dialog.create();
dialog.open();
return dialog.getValue();
}
@Override
public void update(final ModelEvent event) {
// Careful! In the main window, this is also called after editing the project properties
if (event.part == ModelPart.MODEL) {
final Model model = (Model) event.data;
shell.setText(Resources.getMessage("MainWindow.0") + " - " + model.getName()); //$NON-NLS-1$ //$NON-NLS-2$
root.setEnabled(true);
menu.update(event);
}
}
/**
* Creates the global menu
* @return
*/
private List<MainMenuItem> getMenu() {
List<MainMenuItem> menu = new ArrayList<MainMenuItem>();
menu.add(getMenuFile());
menu.add(getMenuEdit());
menu.add(getMenuView());
menu.add(getMenuHelp());
return menu;
}
/**
* Creates the edit menu
* @return
*/
private MainMenuItem getMenuEdit() {
List<MainMenuItem> items = new ArrayList<MainMenuItem>();
items.add(new MainMenuItem(Resources.getMessage("MainMenu.21"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit_anonymize.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuEditAnonymize(false); }
public boolean isEnabled(Model model) {
return model != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.40"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit_anonymize_heuristic.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuEditAnonymize(true); }
public boolean isEnabled(Model model) {
return model != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.39"), //$NON-NLS-1$
controller.getResources().getManagedImage("cross.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuEditReset(); }
public boolean isEnabled(Model model) {
return model != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.41"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit_create_hierarchy.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionMenuEditInitializeHierarchy(); }
public boolean isEnabled(Model model) {
return model != null && model.getSelectedAttribute() != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.42"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit_create_hierarchy.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionMenuEditCreateTopBottomCodingHierarchy(); }
public boolean isEnabled(Model model) {
return model != null && model.getSelectedAttribute() != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.23"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit_create_hierarchy.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuEditCreateHierarchy(); }
public boolean isEnabled(Model model) {
return model != null && model.getSelectedAttribute() != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.30"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit_find_replace.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionMenuEditFindReplace(); }
public boolean isEnabled(Model model) {
return model != null && model.getSelectedAttribute() != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.31"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit_audit_trail.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionShowAuditTrail(); }
public boolean isEnabled(Model model) {
return model != null;
}
});
items.add(new MainMenuSeparator());
List<MainMenuItem> subset = new ArrayList<MainMenuItem>();
subset.add(new MainMenuItem(Resources.getMessage("SubsetDefinitionView.1"), //$NON-NLS-1$
controller.getResources().getManagedImage("page_white.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionSubsetNone(); }
public boolean isEnabled(Model model) {
return model != null && model.getInputConfig() != null && model.getInputConfig().getInput() != null;
}
});
subset.add(new MainMenuItem(Resources.getMessage("SubsetDefinitionView.2"), //$NON-NLS-1$
controller.getResources().getManagedImage("page_white_text.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionSubsetAll(); }
public boolean isEnabled(Model model) {
return model != null && model.getInputConfig() != null && model.getInputConfig().getInput() != null;
}
});
subset.add(new MainMenuItem(Resources.getMessage("SubsetDefinitionView.3"), //$NON-NLS-1$
controller.getResources().getManagedImage("disk.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionSubsetFile(); }
public boolean isEnabled(Model model) {
return model != null && model.getInputConfig() != null && model.getInputConfig().getInput() != null;
}
});
subset.add(new MainMenuItem(Resources.getMessage("SubsetDefinitionView.4"), //$NON-NLS-1$
controller.getResources().getManagedImage("find.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionSubsetQuery(); }
public boolean isEnabled(Model model) {
return model != null && model.getInputConfig() != null && model.getInputConfig().getInput() != null;
}
});
items.add(new MainMenuGroup(Resources.getMessage("MainMenu.35"), subset) { //$NON-NLS-1$
public boolean isEnabled(Model model) {
return model != null && model.getInputConfig() != null && model.getInputConfig().getInput() != null;
}
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.37"), //$NON-NLS-1$
controller.getResources().getManagedImage("apply.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionApplySelectedTransformation(); }
public boolean isEnabled(Model model) {
return model != null && model.getResult() != null && model.getSelectedNode() != null;
}
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.25"), //$NON-NLS-1$
controller.getResources().getManagedImage("edit_settings.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuEditSettings(); }
public boolean isEnabled(Model model) {
return model != null;
}
});
return new MainMenuGroup(Resources.getMessage("MainMenu.1"), items) { //$NON-NLS-1$
public boolean isEnabled(Model model) {
return true;
}
};
}
/**
* Creates the file menu
* @return
*/
private MainMenuItem getMenuFile() {
List<MainMenuItem> items = new ArrayList<MainMenuItem>();
items.add(new MainMenuItem(Resources.getMessage("MainMenu.3"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_new.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileNew(); }
public boolean isEnabled(Model model) { return true; }
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.5"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_load.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileOpen(); }
public boolean isEnabled(Model model) { return true; }
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.4"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_save.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileSave(); }
public boolean isEnabled(Model model) { return model != null; }
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.9"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_save_as.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileSaveAs(); }
public boolean isEnabled(Model model) { return model != null; }
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.11"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_import_data.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileImportData(); }
public boolean isEnabled(Model model) { return model != null && model.getPerspective() == Perspective.CONFIGURATION; }
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.13"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_export_data.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileExportData(); }
public boolean isEnabled(Model model) {
return model != null && model.getOutput() != null && model.getPerspective() == Perspective.ANALYSIS;
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.43"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_create_certificate.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileCreateCertificate(); }
public boolean isEnabled(Model model) {
return model != null && model.getOutput() != null && model.getPerspective() == Perspective.ANALYSIS;
}
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.15"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_import_hierarchy.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileImportHierarchy(); }
public boolean isEnabled(Model model) {
return model != null && model.getSelectedAttribute() != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.17"), //$NON-NLS-1$
controller.getResources().getManagedImage("file_export_hierarchy.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuFileExportHierarchy(); }
public boolean isEnabled(Model model) {
return model != null && model.getSelectedAttribute() != null && model.getPerspective() == Perspective.CONFIGURATION;
}
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.19"), //$NON-NLS-1$
controller.getResources().getManagedImage("exit.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionMenuFileExit(); }
public boolean isEnabled(Model model) {
return true;
}
});
return new MainMenuGroup(Resources.getMessage("MainMenu.0"), items) { //$NON-NLS-1$
public boolean isEnabled(Model model) {
return true;
}
};
}
/**
* Creates the help menu
* @return
*/
private MainMenuItem getMenuHelp() {
List<MainMenuItem> items = new ArrayList<MainMenuItem>();
items.add(new MainMenuItem(Resources.getMessage("MainMenu.27"), //$NON-NLS-1$
controller.getResources().getManagedImage("help.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) { controller.actionMenuHelpHelp(); }
public boolean isEnabled(Model model) { return true; }
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.29"), //$NON-NLS-1$
controller.getResources().getManagedImage("information.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionMenuHelpAbout(); }
public boolean isEnabled(Model model) { return true; }
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.32"), //$NON-NLS-1$
controller.getResources().getManagedImage("information.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) { controller.actionMenuHelpDebug(); }
public boolean isEnabled(Model model) {
return model != null && model.isDebugEnabled();
}
});
return new MainMenuGroup(Resources.getMessage("MainMenu.2"), items) { //$NON-NLS-1$
public boolean isEnabled(Model model) {
return true;
}
};
}
/**
* Creates the help menu
* @return
*/
private MainMenuItem getMenuView() {
List<MainMenuItem> items = new ArrayList<MainMenuItem>();
items.add(new MainMenuItem(Resources.getMessage("MainWindow.2"), //$NON-NLS-1$
controller.getResources().getManagedImage("perspective_define.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) {
root.setSelection(0);
controller.getModel().setPerspective(Perspective.CONFIGURATION);
controller.update(new ModelEvent(controller, ModelPart.SELECTED_PERSPECTIVE, controller.getModel().getPerspective()));
}
public boolean isEnabled(Model model) { return model != null && model.getPerspective() != Perspective.CONFIGURATION; }
});
items.add(new MainMenuItem(Resources.getMessage("MainWindow.3"), //$NON-NLS-1$
controller.getResources().getManagedImage("perspective_explore.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) {
root.setSelection(1);
controller.getModel().setPerspective(Perspective.EXPLORATION);
controller.update(new ModelEvent(controller, ModelPart.SELECTED_PERSPECTIVE, controller.getModel().getPerspective()));
}
public boolean isEnabled(Model model) { return model != null && model.getPerspective() != Perspective.EXPLORATION; }
});
items.add(new MainMenuItem(Resources.getMessage("MainWindow.1"), //$NON-NLS-1$
controller.getResources().getManagedImage("perspective_analyze.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) {
root.setSelection(2);
controller.getModel().setPerspective(Perspective.ANALYSIS);
controller.update(new ModelEvent(controller, ModelPart.SELECTED_PERSPECTIVE, controller.getModel().getPerspective()));
}
public boolean isEnabled(Model model) { return model != null && model.getPerspective() != Perspective.ANALYSIS; }
});
items.add(new MainMenuItem(Resources.getMessage("MainWindow.4"), //$NON-NLS-1$
controller.getResources().getManagedImage("perspective_risk.png"), //$NON-NLS-1$
false) {
public void action(Controller controller) {
root.setSelection(3);
controller.getModel().setPerspective(Perspective.RISK);
controller.update(new ModelEvent(controller, ModelPart.SELECTED_PERSPECTIVE, controller.getModel().getPerspective()));
}
public boolean isEnabled(Model model) { return model != null && model.getPerspective() != Perspective.RISK; }
});
items.add(new MainMenuSeparator());
items.add(new MainMenuItem(Resources.getMessage("MainMenu.34") + " " + Resources.getMessage("ExploreView.0"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
controller.getResources().getManagedImage("explore_lattice.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) {
layoutExplore.showLattice();
controller.update(new ModelEvent(controller, ModelPart.SELECTED_PERSPECTIVE, controller.getModel().getPerspective()));
}
public boolean isEnabled(Model model) {
return model != null &&
model.getPerspective() == Perspective.EXPLORATION &&
model.getResult() != null &&
!layoutExplore.isShowLattice();
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.34") + " " + Resources.getMessage("ExploreView.2"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
controller.getResources().getManagedImage("explore_list.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) {
layoutExplore.showList();
controller.update(new ModelEvent(controller, ModelPart.SELECTED_PERSPECTIVE, controller.getModel().getPerspective()));
}
public boolean isEnabled(Model model) {
return model != null &&
model.getPerspective() == Perspective.EXPLORATION &&
model.getResult() != null &&
!layoutExplore.isShowList();
}
});
items.add(new MainMenuItem(Resources.getMessage("MainMenu.34") + " " + Resources.getMessage("ExploreView.3"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
controller.getResources().getManagedImage("explore_tiles.png"), //$NON-NLS-1$
true) {
public void action(Controller controller) {
layoutExplore.showTiles();
controller.update(new ModelEvent(controller, ModelPart.SELECTED_PERSPECTIVE, controller.getModel().getPerspective()));
}
public boolean isEnabled(Model model) {
return model != null &&
model.getPerspective() == Perspective.EXPLORATION &&
model.getResult() != null &&
!layoutExplore.isShowTiles();
}
});
return new MainMenuGroup(Resources.getMessage("MainMenu.33"), items) { //$NON-NLS-1$
public boolean isEnabled(Model model) {
return true;
}
};
}
}