Skip to content
Snippets Groups Projects
Commit 6eab4c13 authored by Johannes Eder's avatar Johannes Eder
Browse files

General set up for fx marker view

parent dae68801
No related branches found
No related tags found
1 merge request!1244018 error view java fx
Showing
with 153 additions and 1199 deletions
......@@ -32,13 +32,6 @@
name="Model Navigator"
restorable="true">
</view>
<view
class="org.fortiss.tooling.kernel.ui.internal.views.MarkerViewPart"
icon="icons/marker_view.gif"
id="org.fortiss.tooling.kernel.model.marker"
name="Model Markers"
restorable="true">
</view>
<view
class="org.fortiss.tooling.kernel.ui.internal.views.ModelElementsViewFX"
icon="icons/library.png"
......@@ -54,19 +47,20 @@
name="Kernel Introspection System Service (KISS)"
restorable="true">
</view>
<view
class="org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX.ErrorViewFXViewPart"
id="org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFXViewPart"
name="Error FXView"
restorable="true">
</view>
<view
class="org.fortiss.tooling.kernel.ui.internal.views.MarkerViewEditorFX.ErrorViewEditorTableFXViewPart"
id="org.fortiss.tooling.kernel.ui.internal.views.MarkerViewEditorFX"
name="Marker View FXV"
restorable="true">
</view>
<view
class="org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX.ErrorViewFXViewPart"
icon="icons/marker_view.gif"
id="org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX.ErrorViewFXViewPart"
name="Marker View FX"
restorable="true">
</view>
<view
class="org.fortiss.tooling.kernel.ui.internal.views.MarkerViewPart"
id="org.fortiss.tooling.kernel.ui.internal.views.MarkerViewPart"
name="Marker View OLD"
restorable="true">
</view>
......
......@@ -43,7 +43,7 @@ import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.IConstraintCheckerService;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.service.listener.IPersistencyServiceListener;
import org.fortiss.tooling.kernel.ui.internal.views.MarkerViewPart;
import org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX.ErrorViewFXViewPart;
import org.fortiss.tooling.kernel.ui.service.IMarkerService;
/**
......@@ -91,7 +91,7 @@ public class MarkerService implements IMarkerService, IPersistencyServiceListene
private final List<ITopLevelElement> invalidElements = new LinkedList<ITopLevelElement>();
/** Stores the marker view. */
private MarkerViewPart markerView;
private ErrorViewFXViewPart markerView;
/** Stores the constraint checking job. */
private final Job constraintCheckerJob = new Job("Model Constraint Checker Job") {
......@@ -139,7 +139,7 @@ public class MarkerService implements IMarkerService, IPersistencyServiceListene
}
/** Sets the current marker view. */
public void setMarkerViewPart(MarkerViewPart view) {
public void setMarkerViewPart(ErrorViewFXViewPart view) {
this.markerView = view;
}
......
/*-------------------------------------------------------------------------+
| Copyright 2020 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import org.fortiss.tooling.kernel.ui.service.IMarkerService;
/**
* Content provider for FX-based Error View editor.
*
* @author abid
*/
public class ErrorViewFXEditorContentProvider extends DynamicTreeContentProviderBase<EObject>
implements ITreeContentProvider {
private ErrorViewFXViewPart errorViewFXViewPart;
/**
* @param errorViewFXViewPart
*/
public ErrorViewFXEditorContentProvider(ErrorViewFXViewPart errorViewFXViewPart) {
this.errorViewFXViewPart = errorViewFXViewPart;
}
/**
*
*/
public ErrorViewFXEditorContentProvider() {
// TODO Auto-generated constructor stub
}
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
protected Collection<? extends EObject> getChildren(EObject parent) {
ArrayList<EObject> result = new ArrayList<EObject>();
if(parent instanceof IConstraintViolation) {
IConstraintViolation violation = (IConstraintViolation)parent;
result.addAll((Collection<? extends EObject>)violation);
}
System.out.println(result);
return result;
}
/** {@inheritDoc} */
@Override
public Object[] getElements(Object inputElement) {
List<ESeverity> result = new ArrayList<ESeverity>();
for(ESeverity sev : ESeverity.values()) {
if(sev != ESeverity.lowest() && errorViewFXViewPart.getToggleState(sev)) {
result.add(sev);
}
}
return result.toArray();
}
/** {@inheritDoc} */
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof ESeverity) {
return IMarkerService.getInstance()
.getAllViolationsWithSeverity((ESeverity)parentElement).toArray();
}
return null;
}
/** {@inheritDoc} */
@Override
public Object getParent(Object element) {
if(element instanceof IConstraintViolation<?>) {
return ((IConstraintViolation<?>)element).getSeverity();
}
return null;
}
/** {@inheritDoc} */
@Override
public boolean hasChildren(Object element) {
Object[] objs = getChildren(element);
return objs != null && objs.length > 0;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TreeTableColumn?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane prefHeight="360.0" prefWidth="614.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Pane layoutX="-81.0" layoutY="-160.0" prefHeight="367.0" prefWidth="622.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="-8.0" AnchorPane.topAnchor="0.0">
<ScrollPane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<content>
<VBox>
<children>
<Label fx:id="displayLabel" layoutX="106.0" layoutY="155.0">
<font>
<Font size="24.0" />
</font></Label>
<TreeTableView layoutX="6.0" layoutY="30.0" prefHeight="327.0" prefWidth="595.0">
<columns>
<TreeTableColumn fx:id="El" prefWidth="146.39999103546143" text="Element" />
<TreeTableColumn fx:id="Ex" prefWidth="221.59999084472656" text="Explanation" />
<TreeTableColumn fx:id="Pr" prefWidth="224.0001220703125" text="Project" />
</columns>
</TreeTableView>
<Label layoutX="6.0" layoutY="7.0" prefHeight="17.0" prefWidth="87.0" text="Error View" wrapText="true">
<font>
<Font name="Arial Bold Italic" size="15.0" />
</font>
</Label>
<HBox>
<children>
<CheckBox fx:id="errorBtn" mnemonicParsing="false" onAction="#onErrorBtn" text="Error" />
<CheckBox fx:id="infoBtn" mnemonicParsing="false" onAction="#onInfoBtn" text="Info" />
<CheckBox fx:id="debugBtn" mnemonicParsing="false" onAction="#onDebugBtn" text="Debug" />
<CheckBox fx:id="warningBtn" mnemonicParsing="false" onAction="#onWarningBtn" text="Warning" />
<CheckBox fx:id="fatalBtn" mnemonicParsing="false" onAction="#onFatalBtn" prefHeight="18.0" prefWidth="93.0" text="Fatal" />
</children>
</HBox>
<BorderPane fx:id="pane" prefHeight="200.0" prefWidth="200.0" />
</children>
</Pane>
</children>
</AnchorPane>
</VBox>
</content>
</ScrollPane>
......@@ -15,10 +15,18 @@
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX;
import java.util.Map;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableUIProviderBase;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableViewer;
import org.fortiss.tooling.common.ui.javafx.layout.CompositeFXControllerBase;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.BorderPane;
/**
*
......@@ -38,23 +46,80 @@ import javafx.scene.control.TreeTableView;
public class ErrorViewFXLayoutController extends CompositeFXControllerBase<Node, Node> {
/** {@inheritDoc} */
/** Debug Button */
@FXML
private CheckBox debugBtn;
/** Info Button */
@FXML
private CheckBox infoBtn;
/** Warning Button */
@FXML
private CheckBox warningBtn;
/** Error Button */
@FXML
private CheckBox errorBtn;
/** Fatal Button */
@FXML
private CheckBox fatalBtn;
/** Border Pane for the tree table */
@FXML
private BorderPane pane;
/** Toggle State */
private Map<ESeverity, Boolean> toggleState;
/**
* {@link TreeTableView} displaying the ECU's name and safety level.
* @param toggleState
*/
public ErrorViewFXLayoutController(Map<ESeverity, Boolean> toggleState) {
this.toggleState = toggleState;
}
@Override
/** Called when debug checkbox is pushed. */
public void onDebugBtn() {
public String getFXMLLocation() {
}
/** Called when info checkbox is pushed. */
public void onInfoBtn() {
}
/** Called when warning checkbox is pushed. */
public void onWarningBtn() {
}
/** Called when error checkbox is pushed. */
public void onErrorBtn() {
}
/** Called when fatal checkbox is pushed. */
public void onFatalBtn() {
}
@Override
public String getFXMLLocation() {
return "ErrorViewFXLayout.fxml";
}
/** {@inheritDoc} */
@Override
public void initialize() {
// TODO Auto-generated method stub
DynamicTreeContentProviderBase<Object> contentProvider = new MarkerViewFXContentProvider();
DynamicTreeTableUIProviderBase<Object> uiProvider = new MarkerViewFXUIProvider();
DynamicTreeTableViewer<Object> treeTable = new DynamicTreeTableViewer<Object>(new Object(),
false, 2, contentProvider, uiProvider);
treeTable.addColumn("Severity", 80);
treeTable.addColumn("Element", 80);
treeTable.addColumn("Explanation", 80);
treeTable.addColumn("Project", 80);
pane.setCenter(treeTable.getControl());
pane.layout();
}
}
......@@ -24,26 +24,12 @@ import static org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESe
import java.util.HashMap;
import java.util.Map;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.fortiss.tooling.common.ui.javafx.AF3FXViewPart;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableViewer;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.internal.MarkerService;
import org.fortiss.tooling.kernel.ui.internal.views.MarkerViewerGUI;
import org.fortiss.tooling.kernel.ui.service.IMarkerService;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
/**
*
......@@ -61,14 +47,13 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
*
*/
public class ErrorViewFXViewPart extends AF3FXViewPart /** implements ISelectionProvider */
{
public class ErrorViewFXViewPart extends AF3FXViewPart {
/** The tree-table viewer. */
private DynamicTreeTableViewer<EObject> treeTableViewer;
/** The classes ID. */
public static final String ID = ErrorViewFXViewPart.class.getName();
/** Stores the toggle state of for each severity level. */
private Map<ESeverity, Boolean> toggleState = new HashMap<ESeverity, Boolean>();
private static Map<ESeverity, Boolean> toggleState = new HashMap<ESeverity, Boolean>();
/** GUI builder viewer instance. */
private MarkerViewerGUI gui;
......@@ -79,8 +64,8 @@ public class ErrorViewFXViewPart extends AF3FXViewPart /** implements ISelection
/** Constructor. */
public ErrorViewFXViewPart() throws Exception {
super(new ErrorViewFXLayoutController(), null);
super(new ErrorViewFXLayoutController(toggleState), null);
((MarkerService)IMarkerService.getInstance()).setMarkerViewPart(this);
toggleState.put(DEBUG, false);
toggleState.put(INFO, false);
toggleState.put(WARNING, true);
......@@ -88,149 +73,13 @@ public class ErrorViewFXViewPart extends AF3FXViewPart /** implements ISelection
toggleState.put(FATAL, false);
}
/** {@inheritDoc} */
@Override
public void createPartControl(Composite parent) {
parent.setLayout(new FillLayout());
gui = new MarkerViewerGUI(parent, SWT.NONE);
gui.getTreeViewer().setContentProvider(new ErrorViewFXEditorContentProvider(this));
gui.getSeverityColumn().setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell) {
if(cell.getElement() instanceof ESeverity) {
final ESeverity severity = (ESeverity)cell.getElement();
cell.setText(severity.toString());
cell.setImage(IMarkerService.getInstance().getSharedImageFor(severity, false));
} else {
cell.setText("");
}
}
});
gui.getElementColumn().setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell) {
if(cell.getElement() instanceof IConstraintViolation) {
IConstraintViolation<? extends EObject> violation =
(IConstraintViolation<? extends EObject>)cell.getElement();
IModelElementHandlerService hs = IModelElementHandlerService.getInstance();
IModelElementHandler<EObject> handler =
hs.getModelElementHandler(violation.getSource());
cell.setText(handler != null ? handler.getName(violation.getSource()) : "");
} else {
cell.setText("");
}
}
});
gui.getExplanationColumn().setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell) {
if(cell.getElement() instanceof IConstraintViolation) {
IConstraintViolation<? extends EObject> violation =
(IConstraintViolation<? extends EObject>)cell.getElement();
cell.setText(violation.getExplanation());
} else {
cell.setText("");
}
}
});
gui.getProjectColumn().setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell) {
if(cell.getElement() instanceof IConstraintViolation) {
IConstraintViolation<? extends EObject> violation =
(IConstraintViolation<? extends EObject>)cell.getElement();
IPersistencyService ps = IPersistencyService.getInstance();
ITopLevelElement topElement = ps.getTopLevelElementFor(violation.getSource());
IModelElementHandler<EObject> handler = null;
EObject rootElement = null;
if(topElement != null) {
rootElement = topElement.getRootModelElement();
IModelElementHandlerService hs = IModelElementHandlerService.getInstance();
handler = hs.getModelElementHandler(rootElement);
}
cell.setText(handler != null ? handler.getName(rootElement) : "");
} else {
cell.setText("");
}
}
});
ColumnViewerToolTipSupport.enableFor(gui.getElementColumn().getViewer());
ColumnViewerToolTipSupport.enableFor(gui.getExplanationColumn().getViewer());
ColumnViewerToolTipSupport.enableFor(gui.getProjectColumn().getViewer());
gui.getTreeViewer().setInput(IMarkerService.getInstance());
createToggleActions();
}
/** {@inheritDoc} */
@Override
public void setFocus() {
gui.getTreeViewer().getControl().setFocus();
/** Called when there are error amrker updates. */
public void refresh() {
// TODO
}
/** Returns toggleState. */
/* package */Boolean getToggleState(ESeverity sev) {
return toggleState.get(sev);
}
/** Creates the toggle actions. */
private void createToggleActions() {
toggleSeverityFilterAction[0] =
new SeverityFilterAction("D", "Toggle DEBUG Messages", DEBUG);
toggleSeverityFilterAction[1] = new SeverityFilterAction("I", "Toggle INFO Messages", INFO);
toggleSeverityFilterAction[2] =
new SeverityFilterAction("W", "Toggle WARNING Messages", WARNING);
toggleSeverityFilterAction[3] =
new SeverityFilterAction("E", "Toggle ERROR Messages", ERROR);
toggleSeverityFilterAction[4] =
new SeverityFilterAction("F", "Toggle FATAL Messages", FATAL);
IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
Separator additionsSeperator = new Separator("additions");
additionsSeperator.setVisible(true);
toolBarManager.add(additionsSeperator);
for(int i = 0; i < toggleSeverityFilterAction.length; i++) {
toolBarManager.insertAfter("additions", toggleSeverityFilterAction[i]);
}
}
/** Action for severity filter toggle. */
private class SeverityFilterAction extends Action {
/** Stores the severity level this action toggles. */
private final ESeverity severity;
/** Constructor. */
public SeverityFilterAction(String name, String tooltip, ESeverity severity) {
super(name, SWT.TOGGLE);
this.severity = severity;
setToolTipText(tooltip);
setChecked(toggleState.get(severity));
setImageDescriptor(IMarkerService.getInstance().getImageFor(severity, false));
}
/** {@inheritDoc} */
@Override
public void run() {
// invert state
toggleState.put(severity, !toggleState.get(severity));
refresh();
}
/** Refreshes the view. Needs to be called on UI thread. */
public void refresh() {
if(!gui.getTreeViewer().getControl().isDisposed()) {
gui.getTreeViewer().refresh();
}
}
}
}
/*-------------------------------------------------------------------------+
| Copyright 2019 fortiss GmbH |
| Copyright 2020 fortiss GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
......@@ -13,22 +13,38 @@
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.internal.views.MarkerViewEditorFX;
package org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX;
import org.eclipse.fx.ui.workbench3.FXViewPart;
import org.fortiss.tooling.common.ui.javafx.AF3FXViewPart;
import java.util.ArrayList;
import java.util.Collection;
import javafx.scene.control.TreeTableView;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation;
/**
* {@link FXViewPart} for containing the demo controller for implementing a {@link TreeTableView}.
*
* @author munaro
* @author abid
*/
public class SimpleAnnotationTableFXViewPart extends AF3FXViewPart {
public class MarkerViewFXContentProvider extends DynamicTreeContentProviderBase<Object> {
/** Constructor. */
public SimpleAnnotationTableFXViewPart() throws Exception {
super(new SimpleAnnotationTableFXController(), null);
private MarkerViewFXContentProvider errorViewFXViewPart;
/**
*
*/
public MarkerViewFXContentProvider() {
// TODO Auto-generated constructor stub
}
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
protected Collection<? extends Object> getChildren(Object parent) {
ArrayList<IConstraintViolation> result = new ArrayList<IConstraintViolation>();
if(parent instanceof IConstraintViolation) {
IConstraintViolation violation = (IConstraintViolation)parent;
result.add(violation);
}
return result;
}
}
......@@ -13,7 +13,7 @@
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.internal.views.fx;
package org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableUIProviderBase;
......@@ -27,18 +27,11 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
*
* @author abid
*/
public class MarkerViewFXUIProvider extends DynamicTreeTableUIProviderBase<EObject> {
/**
* @param markerViewFXEditor
*/
public MarkerViewFXUIProvider(MarkerViewFXEditor markerViewFXEditor) {
// TODO Auto-generated constructor stub
}
public class MarkerViewFXUIProvider extends DynamicTreeTableUIProviderBase<Object> {
/** {@inheritDoc} */
@Override
public String getLabel(EObject element, int column) {
public String getLabel(Object element, int column) {
// column for ESevertiy Type Error, Warning etc....
if(column == 0) {
......
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>
<AnchorPane prefHeight="360.0" prefWidth="614.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Pane layoutX="-81.0" layoutY="-160.0" prefHeight="367.0" prefWidth="622.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="-8.0" AnchorPane.topAnchor="0.0">
<children>
<Label fx:id="displayLabel" layoutX="106.0" layoutY="155.0">
<font>
<Font size="24.0" />
</font></Label>
<TreeTableView layoutX="6.0" layoutY="30.0" prefHeight="327.0" prefWidth="595.0" />
<Label layoutX="6.0" layoutY="7.0" prefHeight="17.0" prefWidth="104.0" text="Marker View" wrapText="true">
<font>
<Font name="Arial Bold Italic" size="15.0" />
</font>
</Label>
</children>
</Pane>
</children>
</AnchorPane>
/*-------------------------------------------------------------------------+
| Copyright 2020 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.ui.internal.views.MarkerViewEditorFX;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableViewer;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeViewer;
import org.fortiss.tooling.common.ui.javafx.layout.CompositeFXControllerBase;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeTableView;
import javafx.scene.layout.AnchorPane;
/**
*
* @author abid
*/
public class ErrorViewEditorTableFXController extends CompositeFXControllerBase<AnchorPane, Node> {
/** Stores the toggle state of for each severity level. */
private Map<ESeverity, Boolean> toggleState = new HashMap<ESeverity, Boolean>();
/** Provided tree table view. */
@FXML
private TreeTableView<EObject> treeTableViewer;
/** References the constructed {@link DynamicTreeViewer} "controller". */
protected DynamicTreeTableViewer<EObject> dynTreeViewer;
/** The filter text field if filtering is enabled in content provider. */
private TextField filterWidget;
/** The model listener. */
// private KernelServiceBasedModelListenerBase<EO> modelListener;
/** {@inheritDoc} */
@Override
public String getFXMLLocation() {
return "ErrorViewEditorFXLayout.fxml";
}
/** {@inheritDoc} */
@Override
public void initialize() {
// DynamicTreeContentProviderBase<EObject> contentProvider =
// new ErrorViewFXEditorTableContentProvider();
// DynamicTreeTableUIProviderBase<EObject> uiProvider =
// new ErrorViewEditorTableUIProvider(this);
// BorderPane pane = new BorderPane();
//
// dynTreeViewer = new DynamicTreeTableViewer<EObject>(treeTableViewer, null, true, 0,
// contentProvider, uiProvider);
//
// // Clear columns
// dynTreeViewer.getControl().getColumns().clear();
//
// // Name and comment column.
// dynTreeViewer.addColumn("Severity", 0, false);
// dynTreeViewer.addColumn("Element", 0, false);
// dynTreeViewer.addColumn("Explanation", 0, false);
// dynTreeViewer.addColumn("Project", 0, false);
// // Set minimum width for columns
// dynTreeViewer.getControl().getColumns().forEach(column -> {
// int MIN_COL_WIDTH = 100;
// column.setMinWidth(MIN_COL_WIDTH);
// });
}
}
/*-------------------------------------------------------------------------+
| Copyright 2020 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.ui.internal.views.MarkerViewEditorFX;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.common.ui.javafx.AF3FXViewPart;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableViewer;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeViewer;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeTableView;
/**
*
* @author abid
*/
public class ErrorViewEditorTableFXViewPart extends AF3FXViewPart {
/** Stores the toggle state of for each severity level. */
private Map<ESeverity, Boolean> toggleState = new HashMap<ESeverity, Boolean>();
/** Provided tree table view. */
@FXML
private TreeTableView<EObject> treeTableViewer;
/** References the constructed {@link DynamicTreeViewer} "controller". */
protected DynamicTreeTableViewer<EObject> dynTreeViewer;
/** The filter text field if filtering is enabled in content provider. */
private TextField filterWidget;
/** Constructor. */
public ErrorViewEditorTableFXViewPart() throws Exception {
super(new ErrorViewEditorTableFXController(), null);
}
/** {@inheritDoc} */
// @Override
// public void createPartControl(Composite parent) {
// DynamicTreeContentProviderBase<EObject> contentProvider =
// new ErrorViewFXEditorTableContentProvider();
// DynamicTreeTableUIProviderBase<EObject> uiProvider =
// new ErrorViewEditorTableUIProvider(this);
// BorderPane pane = new BorderPane();
// dynTreeViewer = new DynamicTreeTableViewer<EObject>(treeTableViewer, null, true, 0,
// contentProvider, uiProvider);
// Clear columns
// dynTreeViewer.getControl().getColumns().clear();
// Name and comment column.
// dynTreeViewer.addColumn("Severity", 0, false);
// dynTreeViewer.addColumn("Element", 0, false);
// dynTreeViewer.addColumn("Explanation", 0, false);
// dynTreeViewer.addColumn("Project", 0, false);
// // Set minimum width for columns
// dynTreeViewer.getControl().getColumns().forEach(column -> {
// int MIN_COL_WIDTH = 100;
// column.setMinWidth(MIN_COL_WIDTH);
// });
// }
}
/*-------------------------------------------------------------------------+
| Copyright 2020 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.ui.internal.views.MarkerViewEditorFX;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableUIProviderBase;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
/**
*
* @author abid
*/
public class ErrorViewEditorTableUIProvider extends DynamicTreeTableUIProviderBase<EObject> {
/**
* @param errorViewEditorTableFXController
*/
public ErrorViewEditorTableUIProvider(
ErrorViewEditorTableFXController errorViewEditorTableFXController) {
// TODO Auto-generated constructor stub
}
/**
* @param errorViewEditorTableFXViewPart
*/
public ErrorViewEditorTableUIProvider(
ErrorViewEditorTableFXViewPart errorViewEditorTableFXViewPart) {
}
/** {@inheritDoc} */
@Override
public String getLabel(EObject element, int column) {
// column for ESevertiy Type Error, Warning etc....
if(column == 0) {
return "";
// return getModelElementHandlerName(element);
}
// column for source element
if(column == 1) {
if(element instanceof IConstraintViolation) {
IConstraintViolation<? extends EObject> violation =
(IConstraintViolation<? extends EObject>)element;
IModelElementHandlerService hs = IModelElementHandlerService.getInstance();
IModelElementHandler<EObject> handler =
hs.getModelElementHandler(violation.getSource());
if(handler != null) {
return handler.getName(violation.getSource());
} else {
return "";
}
}
// column for the Explanation Column
else if(column == 2) {
if(element instanceof IConstraintViolation) {
IConstraintViolation<? extends EObject> violation =
(IConstraintViolation<? extends EObject>)element;
return violation.getExplanation();
} else {
return "";
}
}
// column for the Project Column
else if(column == 3) {
if(element instanceof IConstraintViolation) {
IConstraintViolation<? extends EObject> violation =
(IConstraintViolation<? extends EObject>)element;
IPersistencyService ps = IPersistencyService.getInstance();
ITopLevelElement topElement = ps.getTopLevelElementFor(violation.getSource());
IModelElementHandler<EObject> handler = null;
EObject rootElement = null;
if(topElement != null) {
rootElement = topElement.getRootModelElement();
IModelElementHandlerService hs = IModelElementHandlerService.getInstance();
handler = hs.getModelElementHandler(rootElement);
}
if(handler != null) {
return handler.getName(rootElement);
} else {
return "";
}
} else {
return "";
}
}
}
return "";
}
/** Returns the name returned by {@link IModelElementHandlerService}. */
private String getModelElementHandlerName(EObject eo) {
return IModelElementHandlerService.getInstance().getName(eo);
}
}
/*-------------------------------------------------------------------------+
| Copyright 2020 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.ui.internal.views.MarkerViewEditorFX;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import org.fortiss.tooling.kernel.ui.service.IMarkerService;
/**
* Content provider for FX-based Error View editor.
*
* @author abid
*/
public class ErrorViewFXEditorTableContentProvider extends DynamicTreeContentProviderBase<EObject>
implements ITreeContentProvider {
private ErrorViewEditorTableFXViewPart errorViewFXViewPart;
/**
* @param errorViewFXViewPart
*/
public ErrorViewFXEditorTableContentProvider(
ErrorViewEditorTableFXViewPart errorViewFXViewPart) {
this.errorViewFXViewPart = errorViewFXViewPart;
}
/**
*
*/
public ErrorViewFXEditorTableContentProvider() {
// TODO Auto-generated constructor stub
}
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
protected Collection<? extends EObject> getChildren(EObject parent) {
ArrayList<EObject> result = new ArrayList<EObject>();
if(parent instanceof IConstraintViolation) {
IConstraintViolation violation = (IConstraintViolation)parent;
result.addAll((Collection<? extends EObject>)violation);
}
System.out.println(result);
return result;
}
/** {@inheritDoc} */
@Override
public Object[] getElements(Object inputElement) {
List<ESeverity> result = new ArrayList<ESeverity>();
for(ESeverity sev : ESeverity.values()) {
if(sev != ESeverity.lowest() /** && errorViewFXViewPart.getToggleState(sev) */
) {
result.add(sev);
}
}
return result.toArray();
}
/** {@inheritDoc} */
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof ESeverity) {
return IMarkerService.getInstance()
.getAllViolationsWithSeverity((ESeverity)parentElement).toArray();
}
return null;
}
/** {@inheritDoc} */
@Override
public Object getParent(Object element) {
if(element instanceof IConstraintViolation<?>) {
return ((IConstraintViolation<?>)element).getSeverity();
}
return null;
}
/** {@inheritDoc} */
@Override
public boolean hasChildren(Object element) {
Object[] objs = getChildren(element);
return objs != null && objs.length > 0;
}
}
/*-------------------------------------------------------------------------+
| Copyright 2018 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.ui.internal.views.MarkerViewEditorFX;
import static javafx.collections.FXCollections.observableArrayList;
import static org.fortiss.tooling.base.utils.AnnotationUtils.getAnnotationValueProvider;
import static org.fortiss.tooling.kernel.utils.EcoreUtils.getChildrenWithType;
import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickInstanceOf;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.af3.component.model.ComponentArchitecture;
import org.fortiss.af3.project.model.FileProject;
import org.fortiss.tooling.base.annotation.AnnotationEntry;
import org.fortiss.tooling.base.annotation.AnnotationValueService;
import org.fortiss.tooling.base.annotation.valueprovider.IAnnotationValueProvider;
import org.fortiss.tooling.base.model.base.HierarchicElementBase;
import org.fortiss.tooling.base.model.element.IAnnotatedSpecification;
import org.fortiss.tooling.base.model.element.IHierarchicElement;
import org.fortiss.tooling.base.model.element.IModelElement;
import org.fortiss.tooling.base.ui.annotation.view.generic.ColumnHandle;
import org.fortiss.tooling.base.ui.javafx.control.contentprovider.ChildrenContentProvider;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableUIProviderBase;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableViewer;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeViewer;
import org.fortiss.tooling.common.ui.javafx.layout.CompositeFXControllerBase;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.model.INamedCommentedElement;
import org.fortiss.tooling.kernel.model.IProjectRootElement;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
import org.fortiss.tooling.kernel.utils.EcoreUtils;
import javafx.embed.swt.SWTFXUtils;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.TreeTableView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
/**
* Demo controller for implementing a TreeTable.
*
* @author diewald
*/
@SuppressWarnings("unchecked")
public class SimpleAnnotationTableFXController extends CompositeFXControllerBase<AnchorPane, Node> {
/** Provided tree table view. */
@FXML
private TreeTableView<HierarchicElementBase> treeTableView;
/** Provided architecture model selection ComboBox. */
@FXML
private ComboBox<IProjectRootElement> architectureComboBox;
/** References the constructed {@link DynamicTreeViewer} "controller". */
protected DynamicTreeTableViewer<HierarchicElementBase> dynTreeViewer;
/**
* Associates the handles of the annotations with their ordered column indexes. Used for the UI
* providers of cell items.
*/
Map<Integer, ColumnHandle<IAnnotatedSpecification>> colIdxAnnotationMap = new HashMap<>();
/** {@inheritDoc} */
@Override
public void initialize() {
fillArchComboBox();
architectureComboBox.valueProperty().addListener((observable, oldValue, newValue) -> {
if(oldValue != newValue && newValue != null) {
updateTable(newValue);
}
});
architectureComboBox.getSelectionModel().select(0);
}
/** Allows to select a {@link ComponentArchitecture} to display the annotation for. */
private void fillArchComboBox() {
List<ITopLevelElement> topLevelElements =
IPersistencyService.getInstance().getTopLevelElements();
if(!topLevelElements.isEmpty()) {
// Demo purposes: select only the first found FileProject.
FileProject firstProject = (FileProject)topLevelElements.get(0).getRootModelElement();
IModelElementHandler<EObject> handler =
IModelElementHandlerService.getInstance().getModelElementHandler(firstProject);
List<IProjectRootElement> children = new ArrayList<>();
if(handler != null) {
Collection<IProjectRootElement> visibleChildren = pickInstanceOf(
IProjectRootElement.class, handler.getSubnodes(firstProject));
children.addAll(visibleChildren);
}
architectureComboBox.setItems(observableArrayList(children));
}
}
/**
* Updates the {@link TreeTableView} when a different architecture model is selected whose
* annotations shall be shown.
*/
private void updateTable(IProjectRootElement root) {
// Sorted set of {@link ColumnHandle} used to instantiate this {@link
// GenericAnnotationView}'s columns in the right order.
Set<ColumnHandle<IAnnotatedSpecification>> sortedColumnHandles = new TreeSet<>();
Set<AnnotationEntry> annotationEntries = new HashSet<>();
getChildrenWithType(root, IModelElement.class).forEach(e -> annotationEntries
.add(AnnotationValueService.getInstance().getAnnotationEntry(e)));
// Aggregate required columns. Column order is defined by ColumnHandle.compareTo().
for(AnnotationEntry entry : annotationEntries) {
for(IAnnotatedSpecification spec : entry.getSpecificationsList()) {
ColumnHandle<IAnnotatedSpecification> columnHandle =
new ColumnHandle<IAnnotatedSpecification>(entry, spec);
sortedColumnHandles.add(columnHandle);
}
}
HierarchicElementBase actualRoot = null;
if(!(root instanceof HierarchicElementBase)) {
actualRoot = EcoreUtils.getFirstChildWithType(root, HierarchicElementBase.class);
}
if(actualRoot != null) {
DynamicTreeTableUIProviderBase uiProvider = createContentUIProvider();
dynTreeViewer = new DynamicTreeTableViewer<HierarchicElementBase>(treeTableView,
actualRoot, true, 0, new ChildrenContentProvider<HierarchicElementBase>(),
uiProvider);
// Clear columns
dynTreeViewer.getControl().getColumns().clear();
// Name and comment column.
dynTreeViewer.addColumn("Name", 0, false);
dynTreeViewer.addColumn("Comment", 0, false);
int columnIdx = 2;
for(ColumnHandle<IAnnotatedSpecification> handle : sortedColumnHandles) {
dynTreeViewer.addColumn(handle.getColumnName(), 0, false);
colIdxAnnotationMap.put(columnIdx++, handle);
}
// Set minimum width for columns
dynTreeViewer.getControl().getColumns().forEach(column -> {
int MIN_COL_WIDTH = 100;
column.setMinWidth(MIN_COL_WIDTH);
});
}
}
/**
* Creates a default UI provider for {@link DynamicTreeViewer}s that present
* {@link IHierarchicElement}s. It also uses the {@link IModelElementHandlerService} for a nicer
* visual appearance.
* <p>
* Externalize this method into a class when subclassing seems appropriate.
*
* @return The constructed UI Provider.
*/
protected DynamicTreeTableUIProviderBase createContentUIProvider() {
return new DynamicTreeTableUIProviderBase() {
/** {@inheritDoc} */
@Override
public String getLabel(Object element, int col) {
switch(col) {
case 0:
return ((INamedCommentedElement)element).getName();
case 1:
return ((INamedCommentedElement)element).getComment();
default:
ColumnHandle<IAnnotatedSpecification> colHandle =
colIdxAnnotationMap.get(col);
IAnnotationValueProvider<IAnnotatedSpecification> valProvider =
getAnnotationValueProvider((IModelElement)element,
colHandle.getAnnotatedSpecificationType());
try {
return valProvider
.getAnnotationValue(colHandle.getAnnotatedSpecification())
.toString();
} catch(Exception e) {
// For this demo class, it is expected that direct conversions to
// strings will fail for some annotations. Simple don't show anything in
// this case.
return "";
}
}
}
/** {@inheritDoc} */
@Override
public Node getIconNode(Object element, int col) {
if(col != 0) {
return null;
}
org.eclipse.swt.graphics.Image icon =
IModelElementHandlerService.getInstance().getIcon((EObject)element);
if(icon != null) {
Image fxImage = SWTFXUtils.toFXImage(icon.getImageData(), null);
return new ImageView(fxImage);
}
return null;
}
/** {@inheritDoc} */
@Override
public ContextMenu createContextMenu(Object element, int col) {
ContextMenu menu = new ContextMenu();
return menu;
}
};
}
/** {@inheritDoc} */
@Override
public String getFXMLLocation() {
return "SimpleAnnotationTableLayout.fxml";
}
}
......@@ -41,7 +41,6 @@ import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.internal.MarkerService;
import org.fortiss.tooling.kernel.ui.service.IMarkerService;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
......@@ -50,6 +49,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
*
* @author hoelzl
*/
@Deprecated
public class MarkerViewPart extends ViewPart {
/** Stores the toggle state of for each severity level. */
......@@ -63,7 +63,7 @@ public class MarkerViewPart extends ViewPart {
/** Constructor. */
public MarkerViewPart() {
((MarkerService)IMarkerService.getInstance()).setMarkerViewPart(this);
// ((MarkerService)IMarkerService.getInstance()).setMarkerViewPart(this);
toggleState.put(DEBUG, false);
toggleState.put(INFO, false);
toggleState.put(WARNING, true);
......
/*-------------------------------------------------------------------------+
| Copyright 2020 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.ui.internal.views.fx;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation;
import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import org.fortiss.tooling.kernel.ui.service.IMarkerService;
/**
*
* @author abid
*/
public class MarkerViewFXContentProvider extends DynamicTreeContentProviderBase<EObject>
implements ITreeContentProvider {
private MarkerViewFXContentProvider errorViewFXViewPart;
/**
* @param errorViewFXViewPart
*/
public MarkerViewFXContentProvider(MarkerViewFXContentProvider errorViewFXViewPart) {
this.errorViewFXViewPart = errorViewFXViewPart;
}
/**
*
*/
public MarkerViewFXContentProvider() {
// TODO Auto-generated constructor stub
}
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
protected Collection<? extends EObject> getChildren(EObject parent) {
ArrayList<EObject> result = new ArrayList<EObject>();
if(parent instanceof IConstraintViolation) {
IConstraintViolation violation = (IConstraintViolation)parent;
result.addAll((Collection<? extends EObject>)violation);
}
System.out.println(result);
return result;
}
/** {@inheritDoc} */
@Override
public Object[] getElements(Object inputElement) {
List<ESeverity> result = new ArrayList<ESeverity>();
for(ESeverity sev : ESeverity.values()) {
if(sev != ESeverity.lowest() /** && errorViewFXViewPart.getToggleState(sev) */
) {
result.add(sev);
}
}
return result.toArray();
}
/** {@inheritDoc} */
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof ESeverity) {
return IMarkerService.getInstance()
.getAllViolationsWithSeverity((ESeverity)parentElement).toArray();
}
return null;
}
/** {@inheritDoc} */
@Override
public Object getParent(Object element) {
if(element instanceof IConstraintViolation<?>) {
return ((IConstraintViolation<?>)element).getSeverity();
}
return null;
}
/** {@inheritDoc} */
@Override
public boolean hasChildren(Object element) {
Object[] objs = getChildren(element);
return objs != null && objs.length > 0;
}
}
/*-------------------------------------------------------------------------+
| Copyright 2020 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.ui.internal.views.fx;
import java.util.List;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.validation.internal.modeled.model.validation.Constraint;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableUIProviderBase;
import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableViewer;
import org.fortiss.tooling.kernel.ui.extension.base.FXEditorBase;
import org.fortiss.tooling.kernel.utils.KernelServiceBasedModelListenerBase;
import javafx.scene.Parent;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
/**
*
* @author abid
*/
public class MarkerViewFXEditor extends FXEditorBase<Constraint> implements ISelectionProvider {
/** The tree-table viewer. */
private DynamicTreeTableViewer<EObject> treeTableViewer;
/** The filter text field if filtering is enabled in content provider. */
private TextField filterWidget;
/** The model listener. */
private KernelServiceBasedModelListenerBase<Constraint> modelListener;
/** {@inheritDoc} */
@Override
protected Parent createSceneRoot() {
// TODO Auto-generated method stub
Constraint dd = getEditedObject();
modelListener = new KernelServiceBasedModelListenerBase<Constraint>(dd) {
/** {@inheritDoc} */
@Override
public void updateComplete(List<Notification> notifications) {
treeTableViewer.update();
}
};
modelListener.register();
DynamicTreeContentProviderBase<EObject> contentProvider = new MarkerViewFXContentProvider();
DynamicTreeTableUIProviderBase<EObject> uiProvider = new MarkerViewFXUIProvider(this);
BorderPane pane = new BorderPane();
filterWidget = new TextField();
filterWidget.textProperty().addListener((obs, oVal, nVal) -> {
contentProvider.setFilterExpression(nVal);
treeTableViewer.update();
});
treeTableViewer = new DynamicTreeTableViewer<>(dd, true, 3, contentProvider, uiProvider);
treeTableViewer.addColumn("Name", 160);
treeTableViewer.addColumn("Type", 160);
treeTableViewer.addColumn("Comment", 300);
treeTableViewer.addColumn("Comment", 300);
pane.setTop(filterWidget);
pane.setCenter(treeTableViewer.getControl());
return pane;
}
/** {@inheritDoc} */
@Override
public void dispose() {
modelListener.unregister();
super.dispose();
}
}
......@@ -25,6 +25,7 @@ import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.IConstraintCheckerService;
import org.fortiss.tooling.kernel.ui.internal.MarkerService;
import org.fortiss.tooling.kernel.ui.internal.views.ErrorViewFX.ErrorViewFXViewPart;
/**
* The marker service manages model element specific markers. It uses the
......@@ -36,7 +37,7 @@ import org.fortiss.tooling.kernel.ui.internal.MarkerService;
public interface IMarkerService {
/** Returns view id of the marker view. */
public static final String MARKER_VIEW = "org.fortiss.tooling.kernel.model.marker";
public static final String MARKER_VIEW = ErrorViewFXViewPart.ID;
/** Returns the service instance. */
public static IMarkerService getInstance() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment