+ private class ConfigurationDialog extends Dialog {\r
+\r
+ protected ConfigurationDialog(Shell parentShell) {\r
+ super(parentShell);\r
+ }\r
+ \r
+ @Override\r
+ protected void createButtonsForButtonBar(Composite parent) {\r
+ createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);\r
+ createButton(parent, IDialogConstants.CLIENT_ID+1, "Load", false);\r
+ createButton(parent, IDialogConstants.CLIENT_ID+2, "Save", false);\r
+ }\r
+ \r
+ @Override\r
+ protected void buttonPressed(int buttonId) {\r
+ super.buttonPressed(buttonId);\r
+ if (buttonId == IDialogConstants.CLIENT_ID+1) {\r
+ //load\r
+ FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(),SWT.OPEN);\r
+ dialog.setFilterExtensions(new String[]{"*.xml"});\r
+ String filename = dialog.open();\r
+ if (filename == null)\r
+ return;\r
+ try {\r
+ load(filename);\r
+ traversedViewer.refresh();\r
+ testedViewer.refresh();\r
+ strongViewer.refresh();\r
+ nonTestedViewer.refresh();\r
+ nonTraversedViewer.refresh();\r
+ } catch (Exception e1) {\r
+ MessageDialog.openError(Display.getCurrent().getActiveShell(), "Cannot load file" , e1.getMessage());\r
+ }\r
+ } else if (buttonId == IDialogConstants.CLIENT_ID+2) {\r
+ //save\r
+ FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(),SWT.SAVE);\r
+ dialog.setFilterExtensions(new String[]{"*.xml"});\r
+ String filename = dialog.open();\r
+ if (filename == null)\r
+ return;\r
+ try {\r
+ saveConf(filename);\r
+ if (!filename.endsWith("xml")) \r
+ filename += ".xml";\r
+ } catch (FileNotFoundException e1) {\r
+ MessageDialog.openError(Display.getCurrent().getActiveShell(), "Cannot save file" , e1.getMessage());\r
+ } catch (IOException e1) {\r
+ MessageDialog.openError(Display.getCurrent().getActiveShell(), "Cannot save file" , e1.getMessage());\r
+ } catch (DatabaseException e1) {\r
+ MessageDialog.openError(Display.getCurrent().getActiveShell(), "Cannot save file" , e1.getMessage());\r
+ }\r
+ }\r
+ }\r
+ \r
+ private ListViewer traversedViewer;\r
+ private ListViewer testedViewer;\r
+ private ListViewer strongViewer;\r
+ private ListViewer nonTraversedViewer;\r
+ private ListViewer nonTestedViewer;\r
+ \r
+ @Override\r
+ protected Control createDialogArea(Composite parent) {\r
+ Composite composite = (Composite) super.createDialogArea(parent);\r
+ composite.setLayout(new FillLayout(SWT.VERTICAL));\r
+ \r
+ Group group = new Group(composite, SWT.NONE);\r
+ group.setText("Traversed");\r
+ group.setLayout(new FillLayout());\r
+ traversedViewer = new ListViewer(group);\r
+ \r
+ group = new Group(composite, SWT.NONE);\r
+ group.setText("Tested");\r
+ group.setLayout(new FillLayout());\r
+ testedViewer = new ListViewer(group);\r
+ \r
+ group = new Group(composite, SWT.NONE);\r
+ group.setText("Strong");\r
+ group.setLayout(new FillLayout());\r
+ strongViewer = new ListViewer(group);\r
+ \r
+ group = new Group(composite, SWT.NONE);\r
+ group.setText("NonTraversed");\r
+ group.setLayout(new FillLayout());\r
+ nonTraversedViewer = new ListViewer(group);\r
+ \r
+ group = new Group(composite, SWT.NONE);\r
+ group.setText("NonTested");\r
+ group.setLayout(new FillLayout());\r
+ nonTestedViewer = new ListViewer(group);\r
+ \r
+ traversedViewer.setContentProvider(new ResourceListContentProvider());\r
+ traversedViewer.setLabelProvider(new ResourceLabelProvider());\r
+ \r
+ testedViewer.setContentProvider(new ResourceListContentProvider());\r
+ testedViewer.setLabelProvider(new ResourceLabelProvider());\r
+ \r
+ strongViewer.setContentProvider(new ResourceListContentProvider());\r
+ strongViewer.setLabelProvider(new ResourceLabelProvider());\r
+ \r
+ nonTraversedViewer.setContentProvider(new ResourceListContentProvider());\r
+ nonTraversedViewer.setLabelProvider(new ResourceLabelProvider());\r
+ \r
+ nonTestedViewer.setContentProvider(new ResourceListContentProvider());\r
+ nonTestedViewer.setLabelProvider(new ResourceLabelProvider());\r
+ \r
+ MenuManager strongManager = new MenuManager();\r
+ strongManager.setRemoveAllWhenShown(true);\r
+ strongManager.addMenuListener(new ListPopupListener(strongViewer));\r
+ strongViewer.getControl().setMenu(strongManager.createContextMenu(strongViewer.getControl()));\r
+ \r
+ MenuManager nonTestedManager = new MenuManager();\r
+ nonTestedManager.setRemoveAllWhenShown(true);\r
+ nonTestedManager.addMenuListener(new ListPopupListener(nonTestedViewer));\r
+ nonTestedViewer.getControl().setMenu(nonTestedManager.createContextMenu(nonTestedViewer.getControl()));\r
+ \r
+ MenuManager nonTraversedManager = new MenuManager();\r
+ nonTraversedManager.setRemoveAllWhenShown(true);\r
+ nonTraversedManager.addMenuListener(new ListPopupListener(nonTraversedViewer));\r
+ nonTraversedViewer.getControl().setMenu(nonTraversedManager.createContextMenu(nonTraversedViewer.getControl()));\r
+ \r
+ MenuManager testedManager = new MenuManager();\r
+ testedManager.setRemoveAllWhenShown(true);\r
+ testedManager.addMenuListener(new ListPopupListener(testedViewer));\r
+ testedViewer.getControl().setMenu(testedManager.createContextMenu(testedViewer.getControl()));\r
+ \r
+ MenuManager traversedManager = new MenuManager();\r
+ traversedManager.setRemoveAllWhenShown(true);\r
+ traversedManager.addMenuListener(new ListPopupListener(traversedViewer));\r
+ traversedViewer.getControl().setMenu(traversedManager.createContextMenu(traversedViewer.getControl()));\r
+ \r
+ traversedViewer.setInput(traversed);\r
+ testedViewer.setInput(tested);\r
+ strongViewer.setInput(strong);\r
+ nonTestedViewer.setInput(nonTested);\r
+ nonTraversedViewer.setInput(nonTraversed);\r
+ \r
+ return composite;\r
+ }\r
+ \r
+ }\r
+ \r
+ private class ListPopupListener implements IMenuListener {\r
+ private ListViewer viewer;\r
+ \r
+ public ListPopupListener(ListViewer viewer) {\r
+ this.viewer = viewer;\r
+ }\r
+ \r
+ @Override\r
+ public void menuAboutToShow(IMenuManager manager) {\r
+ IStructuredSelection s = (IStructuredSelection)viewer.getSelection();\r
+ List<Object> list = (List<Object>)viewer.getInput();\r
+ manager.add(new AddAction(viewer, list));\r
+ if (!s.isEmpty()) {\r
+ Object element = s.getFirstElement();\r
+ manager.add(new DeleteAction(viewer, list, element));\r
+ }\r
+ \r
+ }\r
+ }\r
+ \r
+ private class DeleteAction extends Action {\r
+ private Viewer viewer;\r
+ private List<?> list;\r
+ private Object obj;\r
+ public DeleteAction(Viewer viewer, List<?> list, Object obj) {\r
+ super("Delete");\r
+ this.list = list;\r
+ this.obj = obj;\r
+ this.viewer = viewer;\r
+ }\r
+ \r
+ @Override\r
+ public void run() {\r
+ list.remove(obj);\r
+ viewer.refresh();\r
+ }\r
+ }\r
+ \r
+ private class AddAction extends Action {\r
+ private Viewer viewer;\r
+ private List<Object> list;\r
+ public AddAction(Viewer viewer, List<Object> list) {\r
+ super("Add");\r
+ this.list = list;\r
+ this.viewer = viewer;\r
+ }\r
+ \r
+ @Override\r
+ public void run() {\r
+ RelationChooseDialog dialog = new RelationChooseDialog(getSite().getShell());\r
+ if (dialog.open() == RelationChooseDialog.OK) {\r
+ final String uri = dialog.getUri();\r
+ try {\r
+ Resource res = session.syncRequest(new Read<Resource>() {\r
+ @Override\r
+ public Resource perform(ReadGraph graph)\r
+ throws DatabaseException {\r
+ try {\r
+ return graph.getResource(uri);\r
+ } catch (Exception e) {\r
+ return null;\r
+ }\r
+ }\r
+ });\r
+ if (res != null) {\r
+ list.add(res);\r
+ viewer.refresh();\r
+ } else {\r
+ MessageDialog.openError(getSite().getShell(), "Error", "Relation '" + uri + "' not found.");\r
+ }\r
+ } catch (Exception e) {\r
+ \r
+ }\r
+ \r
+ \r
+ }\r
+ \r
+ }\r
+ }\r
+ \r
+ private class RelationChooseDialog extends Dialog {\r
+\r
+ private String uri = null;\r
+ private Text text;\r
+ public RelationChooseDialog(IShellProvider parentShell) {\r
+ super(parentShell);\r
+ }\r
+\r
+ public RelationChooseDialog(Shell parentShell) {\r
+ super(parentShell);\r
+ }\r
+ \r
+ @Override\r
+ protected Control createDialogArea(Composite parent) {\r
+ Composite composite = (Composite) super.createDialogArea(parent);\r
+ composite.setLayout(new GridLayout(2, false));\r
+ Label label = new Label(composite, SWT.NONE);\r
+ label.setText("URI:");\r
+ \r
+ text = new Text(composite, SWT.SINGLE | SWT.BORDER);\r
+ text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+ \r
+ return composite;\r
+ }\r
+ \r
+ @Override\r
+ protected void okPressed() {\r
+ uri = text.getText();\r
+ super.okPressed();\r
+ }\r
+ \r
+ public String getUri() {\r
+ return uri;\r
+ }\r
+ \r
+ }\r
+ \r
+ private class ResourceListContentProvider implements IStructuredContentProvider {\r
+ \r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ public Object[] getElements(Object inputElement) {\r
+ List<Resource> list = (List<Resource>)inputElement;\r
+ return list.toArray();\r
+ }\r
+ \r
+ @Override\r
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public void dispose() {\r
+ \r
+ }\r
+ }\r
+ \r
+ private class ResourceLabelProvider extends LabelProvider {\r
+ \r
+ @Override\r
+ public String getText(Object element) {\r
+ final Resource res = (Resource) element; \r
+ try {\r
+ return session.syncRequest(new Read<String>() {\r
+ @Override\r
+ public String perform(ReadGraph graph) throws DatabaseException {\r
+ return NameUtils.getSafeName(graph, res);\r
+ }\r
+ });\r
+ } catch (DatabaseException e) {\r
+ return "Error: " + e.getMessage();\r
+ }\r
+ }\r
+ \r
+ }\r
+ \r
+ private boolean saveConf(String filename) throws IOException, DatabaseException {\r
+ File file = new File(filename);\r
+ if (file.exists()) {\r
+ if(!MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Saving compare configuration", "Do you want to overwrite file'" + filename + "'?"))\r
+ return false; \r
+ } else {\r
+ if(!file.createNewFile())\r
+ return false;\r
+ }\r
+ final PrintStream ps = new PrintStream(file);\r
+ ps.println("<?xml version=\"1.0\"?>");\r
+ ps.println("<compare>");\r
+ session.syncRequest(new ReadRequest() {\r
+ \r
+ @Override\r
+ public void run(ReadGraph graph) throws DatabaseException {\r
+ for (Resource r : traversed) {\r
+ ps.println("<traversed uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ for (Resource r : tested) {\r
+ ps.println("<tested uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ for (Resource r : strong) {\r
+ ps.println("<strong uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ for (Resource r : nonTraversed) {\r
+ ps.println("<nontraversed uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ for (Resource r : nonTested) {\r
+ ps.println("<nontested uri=\"" + graph.getURI(r) + "\"/>");\r
+ }\r
+ }\r
+ });\r
+ \r
+ ps.println("</compare>");\r
+ ps.flush();\r
+ ps.close();\r
+ return true;\r
+ }\r
+ \r
+ private void load(String filename) throws Exception {\r
+ final ImportListener listener = new ImportListener();\r
+ XMLParser parser = new XMLParser(listener);\r
+ parser.parse(filename);\r
+ \r
+ if (listener.getNonTested().size() +\r
+ listener.getNonTraversed().size() +\r
+ listener.getStrong().size() +\r
+ listener.getTested().size() +\r
+ listener.getTraversed().size() == 0)\r
+ return;\r
+ session.syncRequest(new ReadRequest() {\r
+ \r
+ @Override\r
+ public void run(ReadGraph graph) throws DatabaseException {\r
+ tested.clear();\r
+ traversed.clear();\r
+ strong.clear();\r
+ nonTested.clear();\r
+ nonTraversed.clear();\r
+ for (String uri : listener.getTested()) {\r
+ tested.add(graph.getResource(uri));\r
+ }\r
+ for (String uri : listener.getTraversed()) {\r
+ traversed.add(graph.getResource(uri));\r
+ }\r
+ for (String uri : listener.getStrong()) {\r
+ strong.add(graph.getResource(uri));\r
+ }\r
+ \r
+ for (String uri : listener.getNonTested()) {\r
+ nonTested.add(graph.getResource(uri));\r
+ }\r
+ for (String uri : listener.getNonTraversed()) {\r
+ nonTraversed.add(graph.getResource(uri));\r
+ }\r
+ \r
+ }\r
+ });\r
+ \r
+ \r
+ \r
+ }\r
+ \r
+ public static class ImportListener {\r
+ \r
+ \r
+ private Collection<String> traversed = new ArrayList<String>();\r
+ private Collection<String> tested = new ArrayList<String>();\r
+ private Collection<String> strong = new ArrayList<String>();\r
+ private Collection<String> nonTraversed = new ArrayList<String>();\r
+ private Collection<String> nonTested = new ArrayList<String>();\r
+ \r
+\r
+ public void done() {\r
+\r
+ }\r
+ \r
+ \r
+ public void addTraversed(String uri) {\r
+ traversed.add(uri);\r
+ }\r
+ \r
+ public void addTested(String uri) {\r
+ tested.add(uri);\r
+ }\r
+ \r
+ public void addStrong(String uri) {\r
+ strong.add(uri);\r
+ }\r
+ \r
+ public void addNonTraversed(String uri) {\r
+ nonTraversed.add(uri);\r
+ }\r
+ \r
+ public void addNonTested(String uri) {\r
+ nonTested.add(uri);\r
+ }\r
+ \r
+ public Collection<String> getTraversed() {\r
+ return traversed;\r
+ }\r
+ \r
+ public Collection<String> getNonTested() {\r
+ return nonTested;\r
+ }\r
+ \r
+ public Collection<String> getNonTraversed() {\r
+ return nonTraversed;\r
+ }\r
+ \r
+ public Collection<String> getStrong() {\r
+ return strong;\r
+ }\r
+ \r
+ public Collection<String> getTested() {\r
+ return tested;\r
+ }\r
+ \r
+ }\r