feature[TW18823]: Create generic read-only XList to show related items
Change-Id: I8263b345440d0b4562b82302f604bdeddf2efcf8
Signed-off-by: bhawana.mishra <bhawana.mishra@boeing.com>
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IAtsWidgetDefinition.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IAtsWidgetDefinition.java
index cf4026d..5a6b2ca 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IAtsWidgetDefinition.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IAtsWidgetDefinition.java
@@ -15,6 +15,7 @@
import java.util.Map;
import org.eclipse.osee.framework.core.data.AttributeTypeToken;
+import org.eclipse.osee.framework.core.data.RelationTypeSide;
/**
* @author Donald G. Dunne
@@ -61,4 +62,6 @@
Map<String, Object> getParameters();
+ RelationTypeSide getRelationTypeSide();
+
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/model/WidgetDefinition.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/model/WidgetDefinition.java
index 10465e1..eedb20f 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/model/WidgetDefinition.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/model/WidgetDefinition.java
@@ -20,6 +20,7 @@
import org.eclipse.osee.ats.api.workdef.WidgetOption;
import org.eclipse.osee.ats.api.workdef.WidgetOptionHandler;
import org.eclipse.osee.framework.core.data.AttributeTypeToken;
+import org.eclipse.osee.framework.core.data.RelationTypeSide;
import org.eclipse.osee.framework.jdk.core.util.Conditions;
/**
@@ -27,31 +28,40 @@
*/
public class WidgetDefinition extends LayoutItem implements IAtsWidgetDefinition {
- private AttributeTypeToken attributeType;
+ private final AttributeTypeToken attributeType;
+ private final Map<String, Object> parameters = new HashMap<String, Object>();
+ private final RelationTypeSide relationTypeSide;
+ private final WidgetOptionHandler options = new WidgetOptionHandler();
+
private String toolTip;
private String description;
private int height;
private String xWidgetName;
private String defaultValue;
- private final WidgetOptionHandler options = new WidgetOptionHandler();
private Double min;
private Double max;
- private final Map<String, Object> parameters = new HashMap<String, Object>();
public WidgetDefinition(String name) {
- super(name);
+ this(name, "");
+ }
+
+ public WidgetDefinition(String name, AttributeTypeToken attributeType, String xWidgetName, WidgetOption... widgetOptions) {
+ this(name, RelationTypeSide.SENTINEL, attributeType, xWidgetName, widgetOptions);
}
public WidgetDefinition(String name, String xWidgetName, WidgetOption... widgetOptions) {
- this(name, AttributeTypeToken.SENTINEL, xWidgetName, widgetOptions);
+ this(name, RelationTypeSide.SENTINEL, AttributeTypeToken.SENTINEL, xWidgetName, widgetOptions);
}
- public WidgetDefinition(String name, AttributeTypeToken attrType, String xWidgetName, WidgetOption... widgetOptions) {
- this(name);
- Conditions.assertNotNull(attrType, "attribute type can not be null for WidgetDefinition [%s]", name);
- if (attrType.isValid()) {
- setAttributeType(attrType);
- }
+ public WidgetDefinition(String name, RelationTypeSide relationTypeSide, String xWidgetName, WidgetOption... widgetOptions) {
+ this(name, relationTypeSide, AttributeTypeToken.SENTINEL, xWidgetName, widgetOptions);
+ }
+
+ public WidgetDefinition(String name, RelationTypeSide relationTypeSide, AttributeTypeToken attributeType, String xWidgetName, WidgetOption... widgetOptions) {
+ super(name);
+ this.relationTypeSide = relationTypeSide;
+ Conditions.assertNotNull(attributeType, "attribute type can not be null for WidgetDefinition [%s]", name);
+ this.attributeType = attributeType;
this.xWidgetName = xWidgetName;
for (WidgetOption opt : widgetOptions) {
options.add(opt);
@@ -59,7 +69,7 @@
}
public WidgetDefinition(AttributeTypeToken attrType, String xWidgetName, WidgetOption... widgetOptions) {
- this(attrType.getUnqualifiedName(), attrType, xWidgetName, widgetOptions);
+ this(attrType.getUnqualifiedName(), RelationTypeSide.SENTINEL, attrType, xWidgetName, widgetOptions);
}
@Override
@@ -123,7 +133,7 @@
@Override
public String toString() {
return String.format("[%s][%s]", getName(),
- getAttributeType() == null ? "" : getAttributeType().toStringWithId());
+ getAttributeType().isValid() ? getAttributeType().toStringWithId() : "");
}
@Override
@@ -147,16 +157,17 @@
return max;
}
- public void setAttributeType(AttributeTypeToken attributeTypeTok) {
- this.attributeType = attributeTypeTok;
- }
-
@Override
public AttributeTypeToken getAttributeType() {
return attributeType;
}
@Override
+ public RelationTypeSide getRelationTypeSide() {
+ return relationTypeSide;
+ }
+
+ @Override
public void addParameter(String key, Object obj) {
parameters.put(key, obj);
}
diff --git a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/WidgetDefinitionTest.java b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/WidgetDefinitionTest.java
index db1febb..990c1ca 100644
--- a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/WidgetDefinitionTest.java
+++ b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/WidgetDefinitionTest.java
@@ -15,7 +15,6 @@
import org.eclipse.osee.ats.api.workdef.WidgetOption;
import org.eclipse.osee.ats.api.workdef.model.WidgetDefinition;
-import org.eclipse.osee.framework.core.data.AttributeTypeToken;
import org.junit.Assert;
import org.junit.Test;
@@ -41,14 +40,6 @@
}
@Test
- public void testGetSetAttribute() {
- WidgetDefinition item = new WidgetDefinition("review");
- Assert.assertEquals(null, item.getAttributeType());
- item.setAttributeType(AttributeTypeToken.valueOf(123L, "desc"));
- Assert.assertEquals("desc", item.getAttributeType().getName());
- }
-
- @Test
public void testGetSetTooltip() {
WidgetDefinition item = new WidgetDefinition("review");
Assert.assertEquals(null, item.getToolTip());
@@ -59,7 +50,7 @@
@Test
public void testGetSetWidgetname() {
WidgetDefinition item = new WidgetDefinition("review");
- Assert.assertEquals(null, item.getXWidgetName());
+ Assert.assertEquals("", item.getXWidgetName());
item.setXWidgetName("desc");
Assert.assertEquals("desc", item.getXWidgetName());
}
diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/internal/workdefs/WorkDefTeamDemoTest.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/internal/workdefs/WorkDefTeamDemoTest.java
index dc7fd3d..462d093 100644
--- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/internal/workdefs/WorkDefTeamDemoTest.java
+++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/internal/workdefs/WorkDefTeamDemoTest.java
@@ -14,8 +14,10 @@
package org.eclipse.osee.ats.core.workdef.internal.workdefs;
import static org.eclipse.osee.ats.api.workdef.WidgetOption.FILL_VERTICALLY;
+import static org.eclipse.osee.ats.api.workdef.WidgetOption.NO_SELECT;
import static org.eclipse.osee.ats.api.workdef.WidgetOption.REQUIRED_FOR_TRANSITION;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
+import org.eclipse.osee.ats.api.data.AtsRelationTypes;
import org.eclipse.osee.ats.api.demo.DemoWorkDefinitions;
import org.eclipse.osee.ats.api.workdef.StateColor;
import org.eclipse.osee.ats.api.workdef.StateToken;
@@ -65,6 +67,7 @@
new WidgetDefinition(AtsAttributeTypes.Priority, "XComboDam(1,2,3,4,5)"), //
new WidgetDefinition(AtsAttributeTypes.NeedBy, "XDateDam") //
), //
+ new WidgetDefinition("Related Tasks", AtsRelationTypes.TeamWfToTask_Task, "XListRelationWidget", NO_SELECT), //
new WidgetDefinition(AtsAttributeTypes.ValidationRequired, "XComboBooleanDam"), //
new WidgetDefinition(AtsAttributeTypes.WorkPackage, "XTextDam"));
diff --git a/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/editor/tab/workflow/section/WfeWorkflowSection.java b/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/editor/tab/workflow/section/WfeWorkflowSection.java
index 9b2c429..a8768c9 100644
--- a/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/editor/tab/workflow/section/WfeWorkflowSection.java
+++ b/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/editor/tab/workflow/section/WfeWorkflowSection.java
@@ -47,7 +47,6 @@
import org.eclipse.osee.framework.ui.skynet.XFormToolkit;
import org.eclipse.osee.framework.ui.skynet.artifact.editor.parts.AttributeFormPart;
import org.eclipse.osee.framework.ui.skynet.widgets.ArtifactStoredWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.AttributeWidget;
import org.eclipse.osee.framework.ui.skynet.widgets.XLabelValue;
import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
import org.eclipse.osee.framework.ui.skynet.widgets.XText;
@@ -469,9 +468,9 @@
super.refresh();
try {
for (XWidget xWidget : allXWidgets) {
- if (xWidget instanceof AttributeWidget) {
- // Reload with with current artifact/attribute value
- ((AttributeWidget) xWidget).reSet();
+ if (xWidget instanceof ArtifactStoredWidget) {
+ // Reload with with current artifact/attribute/relation
+ ((ArtifactStoredWidget) xWidget).reSet();
} else {
xWidget.refresh();
}
diff --git a/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/workdef/WidgetPageUtil.java b/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/workdef/WidgetPageUtil.java
index 18bc80f..98a150b 100644
--- a/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/workdef/WidgetPageUtil.java
+++ b/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/workdef/WidgetPageUtil.java
@@ -157,6 +157,7 @@
data.setStoreName(widgetDef.getAttributeType().getName());
data.setStoreId(widgetDef.getAttributeType().getId());
}
+ data.setRelationTypeSide(widgetDef.getRelationTypeSide());
data.setToolTip(widgetDef.getToolTip());
data.setId(widgetDef.getName());
data.setXWidgetName(widgetDef.getXWidgetName());
diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/RelationTypeSide.java b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/RelationTypeSide.java
index 3dd3816..0ec4f5e 100644
--- a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/RelationTypeSide.java
+++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/RelationTypeSide.java
@@ -23,6 +23,9 @@
*/
public class RelationTypeSide extends NamedIdBase implements RelationTypeToken {
+ public static final RelationTypeSide SENTINEL =
+ new RelationTypeSide(RelationTypeToken.SENTINEL, RelationSide.SIDE_A);
+
private final RelationTypeToken type;
private final RelationSide side;
private RelationTypeSide opposite;
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/ArtifactStoredWidget.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/ArtifactStoredWidget.java
index 52f3ba1..3c72abe 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/ArtifactStoredWidget.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/ArtifactStoredWidget.java
@@ -17,8 +17,8 @@
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
/**
- * Used by XWidgets that perform external data storage
- *
+ * Used by XWidgets that perform data binding using OSEE artifacts
+ *
* @author Roberto E. Escobar
*/
public interface ArtifactStoredWidget {
@@ -31,16 +31,22 @@
/**
* Save data changes to artifact
*/
- public void saveToArtifact();
+ void saveToArtifact();
/**
* Revert changes to widget data back to what was in artifact
*/
- public void revert();
+ void revert();
/**
* Return true if storage data different than widget data
*/
- public Result isDirty();
+ Result isDirty();
-}
+ /**
+ * Reload widget from current attribute value
+ */
+ default void reSet() {
+ // if necessary reload the bound data
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/AttributeWidget.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/AttributeWidget.java
index 6decc47..78dcd18 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/AttributeWidget.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/AttributeWidget.java
@@ -17,7 +17,7 @@
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
/**
- * Used by XWidgets that perform external data storage
+ * Used by XWidgets that perform data binding using OSEE attributes
*
* @author Roberto E. Escobar
*/
@@ -26,16 +26,10 @@
/**
* Set attributeType used as storage for this widget
*/
- public void setAttributeType(Artifact artifact, AttributeTypeToken attributeTypeToken);
+ void setAttributeType(Artifact artifact, AttributeTypeToken attributeTypeToken);
/**
- * Get attributeType used as storage for this widget
+ * Get attributeType used for data binding for this widget
*/
- public AttributeTypeToken getAttributeType();
-
- /**
- * Reload widget from current attr value
- */
- public void reSet();
-
-}
+ AttributeTypeToken getAttributeType();
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/RelationWidget.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/RelationWidget.java
new file mode 100644
index 0000000..e776fe4
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/RelationWidget.java
@@ -0,0 +1,30 @@
+/*********************************************************************
+ * Copyright (c) 2021 Boeing
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ **********************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets;
+
+import org.eclipse.osee.framework.core.data.RelationTypeSide;
+
+/**
+ * Used by XWidgets that perform data binding using OSEE relations
+ *
+ * @author Ryan D. Brooks
+ */
+public interface RelationWidget extends ArtifactStoredWidget {
+
+ /**
+ * Get relationTypeSide used for data binding for this widget
+ */
+ RelationTypeSide getRelationTypeSide();
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XList.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XList.java
index 7c5394a..02dcf38 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XList.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XList.java
@@ -179,7 +179,7 @@
if (grabHorizontal) {
gridData5.grabExcessHorizontalSpace = true;
}
- int listHeight = listList.getItemHeight() * 6;
+ int listHeight = listList.getItemHeight() * 3;
Rectangle trim = listList.computeTrim(0, 0, 0, listHeight);
gridData5.heightHint = trim.height;
gridData5.grabExcessVerticalSpace = true;
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListRelationWidget.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListRelationWidget.java
new file mode 100644
index 0000000..d1dea35
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XListRelationWidget.java
@@ -0,0 +1,82 @@
+package org.eclipse.osee.framework.ui.skynet.widgets;
+/*********************************************************************
+ * Copyright (c) 2021 Boeing
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ **********************************************************************/
+
+import java.util.Collection;
+import org.eclipse.osee.framework.core.data.ArtifactToken;
+import org.eclipse.osee.framework.core.data.RelationTypeSide;
+import org.eclipse.osee.framework.core.util.Result;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Currently supports read-only usage of relations, but is designed to support editing also
+ *
+ * @author Bhawana Mishra
+ */
+public class XListRelationWidget extends XList implements RelationWidget {
+
+ public static final String WIDGET_ID = XListRelationWidget.class.getSimpleName();
+
+ private final RelationTypeSide relationTypeSide;
+ private final Artifact artifact;
+
+ public XListRelationWidget(Artifact artifact, String displayLabel, RelationTypeSide relationTypeSide) {
+ super(displayLabel);
+ this.relationTypeSide = relationTypeSide;
+ this.artifact = artifact;
+ }
+
+ @Override
+ protected void createControls(Composite parent, int horizontalSpan) {
+ super.createControls(parent, horizontalSpan);
+ reSet();
+ }
+
+ private Collection<String> getRelateditems() {
+ return Collections.transform(artifact.getRelatedArtifacts(relationTypeSide), ArtifactToken::getName);
+ }
+
+ @Override
+ public Artifact getArtifact() {
+ return artifact;
+ }
+
+ @Override
+ public void saveToArtifact() {
+ // TODO: implement if relation editing is added to this widget
+ }
+
+ @Override
+ public void revert() {
+ // TODO: implement if relation editing is added to this widget
+ }
+
+ @Override
+ public Result isDirty() {
+ return Result.FalseResult;
+ }
+
+ @Override
+ public RelationTypeSide getRelationTypeSide() {
+ return relationTypeSide;
+ // This will not be called automatically since RelationWidget is new. Need to handle this case in org.eclipse.osee.ats.ide.editor.tab.workflow.section.WfeWorkflowSection.refresh(). Please test that if relation is deleted/added in ArtifactEditor, the WorkflowEditor refreshes correctly.
+ }
+
+ @Override
+ public void reSet() {
+ add(getRelateditems());
+ updateListWidget();
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/util/FrameworkXWidgetProvider.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/util/FrameworkXWidgetProvider.java
index 01d632e..b85e9e8 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/util/FrameworkXWidgetProvider.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/util/FrameworkXWidgetProvider.java
@@ -75,11 +75,13 @@
import org.eclipse.osee.framework.ui.skynet.widgets.XListDam;
import org.eclipse.osee.framework.ui.skynet.widgets.XListDropViewWithSave;
import org.eclipse.osee.framework.ui.skynet.widgets.XListDropViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.XListRelationWidget;
import org.eclipse.osee.framework.ui.skynet.widgets.XLong;
import org.eclipse.osee.framework.ui.skynet.widgets.XLongDam;
import org.eclipse.osee.framework.ui.skynet.widgets.XMembersCombo;
import org.eclipse.osee.framework.ui.skynet.widgets.XMembersList;
import org.eclipse.osee.framework.ui.skynet.widgets.XOption;
+import org.eclipse.osee.framework.ui.skynet.widgets.XOptionHandler;
import org.eclipse.osee.framework.ui.skynet.widgets.XRadioButton;
import org.eclipse.osee.framework.ui.skynet.widgets.XRadioButtons;
import org.eclipse.osee.framework.ui.skynet.widgets.XSelectFromMultiChoiceBranch;
@@ -150,8 +152,10 @@
}
}
+ XOptionHandler options = xWidgetLayoutData.getXOptionHandler();
if (xWidget == null) {
// Otherwise, use default widget creation
+
if (xWidgetName.equals("XText")) {
xWidget = new XText(name);
if (Strings.isValid(xWidgetLayoutData.getDefaultValue())) {
@@ -159,10 +163,6 @@
}
} else if (xWidgetName.equals("XSelectFromMultiChoiceBranch")) {
XSelectFromMultiChoiceBranch multiBranchSelect = new XSelectFromMultiChoiceBranch(name);
- int maxSelectionRequired = 1;
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.MULTI_SELECT)) {
- maxSelectionRequired = Integer.MAX_VALUE;
- }
try {
List<? extends IOseeBranch> branches =
BranchManager.getBranches(BranchArchivedState.ALL, BranchType.WORKING, BranchType.BASELINE);
@@ -190,7 +190,7 @@
if (values.length > 0) {
XRadioButtons radio = new XRadioButtons(name, "");
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.SORTED)) {
+ if (options.contains(XOption.SORTED)) {
Arrays.sort(values);
}
@@ -253,22 +253,22 @@
}
} else if (xWidgetName.equals("XCheckBox")) {
XCheckBox checkBox = new XCheckBox(name);
- checkBox.setLabelAfter(xWidgetLayoutData.getXOptionHandler().contains(XOption.LABEL_AFTER));
+ checkBox.setLabelAfter(options.contains(XOption.LABEL_AFTER));
if (Strings.isValid(xWidgetLayoutData.getDefaultValue())) {
checkBox.set(Boolean.valueOf(xWidgetLayoutData.getDefaultValue()));
}
xWidget = checkBox;
} else if (xWidgetName.equals("XCheckBoxDam")) {
XCheckBoxDam checkBox = new XCheckBoxDam(name);
- checkBox.setLabelAfter(xWidgetLayoutData.getXOptionHandler().contains(XOption.LABEL_AFTER));
+ checkBox.setLabelAfter(options.contains(XOption.LABEL_AFTER));
xWidget = checkBox;
} else if (xWidgetName.equals("XCheckBoxThreeState")) {
XCheckBoxThreeState checkBox = new XCheckBoxThreeState(name);
- checkBox.setLabelAfter(xWidgetLayoutData.getXOptionHandler().contains(XOption.LABEL_AFTER));
+ checkBox.setLabelAfter(options.contains(XOption.LABEL_AFTER));
xWidget = checkBox;
} else if (xWidgetName.equals("XCheckBoxThreeStateDam")) {
XCheckBoxThreeStateDam checkBox = new XCheckBoxThreeStateDam(name);
- checkBox.setLabelAfter(xWidgetLayoutData.getXOptionHandler().contains(XOption.LABEL_AFTER));
+ checkBox.setLabelAfter(options.contains(XOption.LABEL_AFTER));
xWidget = checkBox;
} else if (xWidgetName.startsWith("XComboDam")) {
if (xWidgetLayoutData.getDynamicXWidgetLayout() != null) {
@@ -278,10 +278,10 @@
xWidget = new XComboDam(name);
XComboDam combo = new XComboDam(name);
combo.setDataStrings(values);
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.NO_DEFAULT_VALUE)) {
+ if (options.contains(XOption.NO_DEFAULT_VALUE)) {
combo.setDefaultSelectionAllowed(false);
}
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.ADD_DEFAULT_VALUE)) {
+ if (options.contains(XOption.ADD_DEFAULT_VALUE)) {
combo.setDefaultSelectionAllowed(true);
}
xWidget = combo;
@@ -322,10 +322,10 @@
combo.set("");
}
}
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.NO_DEFAULT_VALUE)) {
+ if (options.contains(XOption.NO_DEFAULT_VALUE)) {
combo.setDefaultSelectionAllowed(false);
}
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.ADD_DEFAULT_VALUE)) {
+ if (options.contains(XOption.ADD_DEFAULT_VALUE)) {
combo.setDefaultSelectionAllowed(true);
}
} else if (xWidgetName.startsWith("XComboViewer")) {
@@ -336,15 +336,15 @@
if (values.length > 0) {
XCombo combo = new XCombo(name);
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.SORTED)) {
+ if (options.contains(XOption.SORTED)) {
Arrays.sort(values);
}
combo.setDataStrings(values);
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.NO_DEFAULT_VALUE)) {
+ if (options.contains(XOption.NO_DEFAULT_VALUE)) {
combo.setDefaultSelectionAllowed(false);
}
- if (xWidgetLayoutData.getXOptionHandler().contains(XOption.ADD_DEFAULT_VALUE)) {
+ if (options.contains(XOption.ADD_DEFAULT_VALUE)) {
combo.setDefaultSelectionAllowed(true);
}
xWidget = combo;
@@ -375,6 +375,8 @@
} else {
xWidget = new XListDropViewer(name);
}
+ } else if (xWidgetName.equals(XListRelationWidget.WIDGET_ID)) {
+ return new XListRelationWidget(artifact, xWidgetName, xWidgetLayoutData.getRelationTypeSide());
} else if (xWidgetName.startsWith("XList")) {
String values[] =
xWidgetLayoutData.getDynamicXWidgetLayout().getOptionResolver().getWidgetOptions(xWidgetLayoutData);
@@ -391,7 +393,7 @@
}
} else if (xWidgetName.startsWith("XArtifactList")) {
XArtifactList artifactList = new XArtifactList(name);
- artifactList.setMultiSelect(xWidgetLayoutData.getXOptionHandler().contains(XOption.MULTI_SELECT));
+ artifactList.setMultiSelect(options.contains(XOption.MULTI_SELECT));
xWidget = artifactList;
} else if (xWidgetName.equals(XBranchSelectWidgetDam.WIDGET_ID)) {
xWidget = new XBranchSelectWidgetDam();
@@ -467,7 +469,7 @@
((XText) xWidget).addXTextSpellModifyDictionary(new SkynetSpellModifyDictionary());
}
- if (xWidget != null && xWidgetLayoutData.getXOptionHandler().contains(XOption.NO_LABEL)) {
+ if (xWidget != null && options.contains(XOption.NO_LABEL)) {
xWidget.setDisplayLabel(false);
}
if (artifact != null) {
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/util/XWidgetRendererItem.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/util/XWidgetRendererItem.java
index 971fd78..2c10c71 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/util/XWidgetRendererItem.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/util/XWidgetRendererItem.java
@@ -16,6 +16,7 @@
import java.util.HashMap;
import java.util.Map;
import org.eclipse.osee.framework.core.data.ArtifactTypeId;
+import org.eclipse.osee.framework.core.data.RelationTypeSide;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.ui.skynet.widgets.XOption;
import org.eclipse.osee.framework.ui.skynet.widgets.XOptionHandler;
@@ -29,13 +30,14 @@
private static final FrameworkXWidgetProvider xWidgetFactory = FrameworkXWidgetProvider.getInstance();
private static final String UNKNOWN = "Unknown";
private static final int DEFAULT_HEIGHT = 9999;
+ private final Map<String, Object> parameters = new HashMap<String, Object>();
+ private final XOptionHandler xOptionHandler = new XOptionHandler();
private String name = "Unknown";
private String id = "";
private String storeName = "";
private Long storeId = -1L;
private String xWidgetName = UNKNOWN;
-
private XWidget xWidget;
private int beginComposite = 0; // If >0, indicates new child composite with columns == value
private int beginGroupComposite = 0; // If >0, indicates new child composite with columns == value
@@ -46,12 +48,11 @@
private SwtXWidgetRenderer dynamicXWidgetLayout;
private String defaultValue;
private String keyedBranchName;
- private final XOptionHandler xOptionHandler = new XOptionHandler();
private Artifact artifact;
private Object object;
private String doubleClickText;
private ArtifactTypeId artifactType;
- private final Map<String, Object> parameters = new HashMap<String, Object>();
+ private RelationTypeSide relationTypeSide;
public XWidgetRendererItem(SwtXWidgetRenderer dynamicXWidgetLayout, XOption... xOption) {
this.dynamicXWidgetLayout = dynamicXWidgetLayout;
@@ -275,6 +276,14 @@
return doubleClickText;
}
+ public RelationTypeSide getRelationTypeSide() {
+ return relationTypeSide;
+ }
+
+ public void setRelationTypeSide(RelationTypeSide relationTypeSide) {
+ this.relationTypeSide = relationTypeSide;
+ }
+
/**
* @return artifactType that may or may not be the storage artifact type. Can be used by any widget and only the
* widget knows what to do with this value.